/ Hex Artifact Content
Login

Artifact bd4d2cabbafe49bd8e04d7bf57d8e480393268d9:


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 65  orter(x) ((x)->e
1810: 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
1820: 5f 53 4f 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20  _SORTER)../*.** 
1830: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1840: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1850: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1860: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1870: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1880: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1890: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
18a0: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18b0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18c0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18d0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18e0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18f0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
1900: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1910: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1920: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1930: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1940: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1950: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1960: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1970: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1980: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1990: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
19a0: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19b0: 75 38 20 65 43 75 72 54 79 70 65 20 20 20 20 20  u8 eCurType     
19c0: 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 6f 66        /* Type of
19d0: 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
19e0: 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20  */.){.  /* Find 
19f0: 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
1a00: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
1a10: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
1a20: 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20  lob of memory.  
1a30: 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ** required for 
1a40: 74 68 69 73 20 56 64 62 65 43 75 72 73 6f 72 20  this VdbeCursor 
1a50: 73 74 72 75 63 74 75 72 65 2e 20 49 74 20 69 73  structure. It is
1a60: 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75   convenient to u
1a70: 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62 65 20  se a .  ** vdbe 
1a80: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d  memory cell to m
1a90: 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f 72 79  anage the memory
1aa0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75   allocation requ
1ab0: 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20  ired for a.  ** 
1ac0: 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63  VdbeCursor struc
1ad0: 74 75 72 65 20 66 6f 72 20 74 68 65 20 66 6f 6c  ture for the fol
1ae0: 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a  lowing reasons:.
1af0: 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f    **.  **   * So
1b00: 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72 20 6e  metimes cursor n
1b10: 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64 20  umbers are used 
1b20: 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f 66 20  for a couple of 
1b30: 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20  different.  **  
1b40: 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e 20 61     purposes in a
1b50: 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e 20 54   vdbe program. T
1b60: 68 65 20 64 69 66 66 65 72 65 6e 74 20 75 73 65  he different use
1b70: 73 20 6d 69 67 68 74 20 72 65 71 75 69 72 65 0a  s might require.
1b80: 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65 72 65    **     differe
1b90: 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74  nt sized allocat
1ba0: 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c  ions. Memory cel
1bb0: 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f 77 61  ls provide growa
1bc0: 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c  ble.  **     all
1bd0: 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20  ocations..  **. 
1be0: 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75 73 69   **   * When usi
1bf0: 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59  ng ENABLE_MEMORY
1c00: 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d  _MANAGEMENT, mem
1c10: 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65 72 73  ory cell buffers
1c20: 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65   can.  **     be
1c30: 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20 76 69   freed lazily vi
1c40: 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f 72 65  a the sqlite3_re
1c50: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41  lease_memory() A
1c60: 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20 20 20  PI. This.  **   
1c70: 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68 65 20    minimizes the 
1c80: 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63  number of malloc
1c90: 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79 20 74   calls made by t
1ca0: 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a  he system..  **.
1cb0: 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65 6c 6c    ** Memory cell
1cc0: 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 61 72  s for cursors ar
1cd0: 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74 20 74  e allocated at t
1ce0: 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20 61 64  he top of the ad
1cf0: 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61 63 65  dress.  ** space
1d00: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70  . Memory cell (p
1d10: 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73 70 6f  ->nMem) correspo
1d20: 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20 30 2e  nds to cursor 0.
1d30: 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a 2a 20   Space for.  ** 
1d40: 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61 6e 61  cursor 1 is mana
1d50: 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20 63 65  ged by memory ce
1d60: 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20  ll (p->nMem-1), 
1d70: 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20  etc..  */.  Mem 
1d80: 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d  *pMem = &p->aMem
1d90: 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a  [p->nMem-iCur];.
1da0: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
1db0: 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 20  VdbeCursor *pCx 
1dc0: 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d 20 0a  = 0;.  nByte = .
1dd0: 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73 69 7a        ROUND8(siz
1de0: 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 29 29  eof(VdbeCursor))
1df0: 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33 32 29   + 2*sizeof(u32)
1e00: 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20 20 20  *nField + .     
1e10: 20 28 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54   (eCurType==CURT
1e20: 59 50 45 5f 42 54 52 45 45 3f 73 71 6c 69 74 65  YPE_BTREE?sqlite
1e30: 33 42 74 72 65 65 43 75 72 73 6f 72 53 69 7a 65  3BtreeCursorSize
1e40: 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65 72 74  ():0);..  assert
1e50: 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72 73 6f  ( iCur<p->nCurso
1e60: 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 70  r );.  if( p->ap
1e70: 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20 20 20  Csr[iCur] ){.   
1e80: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1e90: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1ea0: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
1eb0: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
1ec0: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
1ed0: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
1ee0: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
1ef0: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
1f00: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
1f10: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
1f20: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
1f30: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
1f40: 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66 28  (pCx, 0, sizeof(
1f50: 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20 20  VdbeCursor));.  
1f60: 20 20 70 43 78 2d 3e 65 43 75 72 54 79 70 65 20    pCx->eCurType 
1f70: 3d 20 65 43 75 72 54 79 70 65 3b 0a 20 20 20 20  = eCurType;.    
1f80: 70 43 78 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a  pCx->iDb = iDb;.
1f90: 20 20 20 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20      pCx->nField 
1fa0: 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20 20 70 43  = nField;.    pC
1fb0: 78 2d 3e 61 4f 66 66 73 65 74 20 3d 20 26 70 43  x->aOffset = &pC
1fc0: 78 2d 3e 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d  x->aType[nField]
1fd0: 3b 0a 20 20 20 20 69 66 28 20 65 43 75 72 54 79  ;.    if( eCurTy
1fe0: 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
1ff0: 45 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e  E ){.      pCx->
2000: 75 63 2e 70 43 75 72 73 6f 72 20 3d 20 28 42 74  uc.pCursor = (Bt
2010: 43 75 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20  Cursor*).       
2020: 20 20 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e     &pMem->z[ROUN
2030: 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75  D8(sizeof(VdbeCu
2040: 72 73 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28  rsor))+2*sizeof(
2050: 75 33 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20  u32)*nField];.  
2060: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
2070: 43 75 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e  CursorZero(pCx->
2080: 75 63 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  uc.pCursor);.   
2090: 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20   }.  }.  return 
20a0: 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72  pCx;.}../*.** Tr
20b0: 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 61 20 76  y to convert a v
20c0: 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65  alue into a nume
20d0: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
20e0: 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20  on if we can.** 
20f0: 64 6f 20 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f  do so without lo
2100: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2110: 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  n.  In other wor
2120: 64 73 2c 20 69 66 20 74 68 65 20 73 74 72 69 6e  ds, if the strin
2130: 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20  g.** looks like 
2140: 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72  a number, conver
2150: 74 20 69 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62  t it into a numb
2160: 65 72 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20  er.  If it does 
2170: 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65  not.** look like
2180: 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65   a number, leave
2190: 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a   it alone..**.**
21a0: 20 49 66 20 74 68 65 20 62 54 72 79 46 6f 72 49   If the bTryForI
21b0: 6e 74 20 66 6c 61 67 20 69 73 20 74 72 75 65 2c  nt flag is true,
21c0: 20 74 68 65 6e 20 65 78 74 72 61 20 65 66 66 6f   then extra effo
21d0: 72 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 69  rt is made to gi
21e0: 76 65 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72  ve.** an integer
21f0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2200: 20 20 53 74 72 69 6e 67 73 20 74 68 61 74 20 6c    Strings that l
2210: 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e  ook like floatin
2220: 67 20 70 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65  g point.** value
2230: 73 20 62 75 74 20 77 68 69 63 68 20 68 61 76 65  s but which have
2240: 20 6e 6f 20 66 72 61 63 74 69 6f 6e 61 6c 20 63   no fractional c
2250: 6f 6d 70 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c  omponent (exampl
2260: 65 3a 20 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77  e: '48.00').** w
2270: 69 6c 6c 20 68 61 76 65 20 61 20 4d 45 4d 5f 49  ill have a MEM_I
2280: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2290: 6e 20 77 68 65 6e 20 62 54 72 79 46 6f 72 49 6e  n when bTryForIn
22a0: 74 20 69 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a  t is true..**.**
22b0: 20 49 66 20 62 54 72 79 46 6f 72 49 6e 74 20 69   If bTryForInt i
22c0: 73 20 66 61 6c 73 65 2c 20 74 68 65 6e 20 69 66  s false, then if
22d0: 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
22e0: 67 20 63 6f 6e 74 61 69 6e 73 20 61 20 64 65 63  g contains a dec
22f0: 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72  imal.** point or
2300: 20 65 78 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74   exponential not
2310: 61 74 69 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c  ation, the resul
2320: 74 20 69 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65  t is only MEM_Re
2330: 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74  al, even.** if t
2340: 68 65 72 65 20 69 73 20 61 6e 20 65 78 61 63 74  here is an exact
2350: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2360: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 71  ntation of the q
2370: 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74  uantity..*/.stat
2380: 69 63 20 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d  ic void applyNum
2390: 65 72 69 63 41 66 66 69 6e 69 74 79 28 4d 65 6d  ericAffinity(Mem
23a0: 20 2a 70 52 65 63 2c 20 69 6e 74 20 62 54 72 79   *pRec, int bTry
23b0: 46 6f 72 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c  ForInt){.  doubl
23c0: 65 20 72 56 61 6c 75 65 3b 0a 20 20 69 36 34 20  e rValue;.  i64 
23d0: 69 56 61 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63  iValue;.  u8 enc
23e0: 20 3d 20 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20   = pRec->enc;.  
23f0: 61 73 73 65 72 74 28 20 28 70 52 65 63 2d 3e 66  assert( (pRec->f
2400: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
2410: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
2420: 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  ))==MEM_Str );. 
2430: 20 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46   if( sqlite3AtoF
2440: 28 70 52 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75  (pRec->z, &rValu
2450: 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29  e, pRec->n, enc)
2460: 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20  ==0 ) return;.  
2470: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 41 74  if( 0==sqlite3At
2480: 6f 69 36 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69  oi64(pRec->z, &i
2490: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
24a0: 65 6e 63 29 20 29 7b 0a 20 20 20 20 70 52 65 63  enc) ){.    pRec
24b0: 2d 3e 75 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a  ->u.i = iValue;.
24c0: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
24d0: 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65  |= MEM_Int;.  }e
24e0: 6c 73 65 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  lse{.    pRec->u
24f0: 2e 72 20 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20  .r = rValue;.   
2500: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2510: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66  MEM_Real;.    if
2520: 28 20 62 54 72 79 46 6f 72 49 6e 74 20 29 20 73  ( bTryForInt ) s
2530: 71 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65  qlite3VdbeIntege
2540: 72 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b  rAffinity(pRec);
2550: 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  .  }.}../*.** Pr
2560: 6f 63 65 73 73 69 6e 67 20 69 73 20 64 65 74 65  ocessing is dete
2570: 72 6d 69 6e 65 20 62 79 20 74 68 65 20 61 66 66  rmine by the aff
2580: 69 6e 69 74 79 20 70 61 72 61 6d 65 74 65 72 3a  inity parameter:
2590: 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46  .**.** SQLITE_AF
25a0: 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51  F_INTEGER:.** SQ
25b0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a  LITE_AFF_REAL:.*
25c0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  * SQLITE_AFF_NUM
25d0: 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20  ERIC:.**    Try 
25e0: 74 6f 20 63 6f 6e 76 65 72 74 20 70 52 65 63 20  to convert pRec 
25f0: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  to an integer re
2600: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20  presentation or 
2610: 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e  a .**    floatin
2620: 67 2d 70 6f 69 6e 74 20 72 65 70 72 65 73 65 6e  g-point represen
2630: 74 61 74 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74  tation if an int
2640: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2650: 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74  ion.**    is not
2660: 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65   possible.  Note
2670: 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 67 65   that the intege
2680: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
2690: 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73   is.**    always
26a0: 20 70 72 65 66 65 72 72 65 64 2c 20 65 76 65 6e   preferred, even
26b0: 20 69 66 20 74 68 65 20 61 66 66 69 6e 69 74 79   if the affinity
26c0: 20 69 73 20 52 45 41 4c 2c 20 62 65 63 61 75 73   is REAL, becaus
26d0: 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e 74 65 67  e.**    an integ
26e0: 65 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  er representatio
26f0: 6e 20 69 73 20 6d 6f 72 65 20 73 70 61 63 65 20  n is more space 
2700: 65 66 66 69 63 69 65 6e 74 20 6f 6e 20 64 69 73  efficient on dis
2710: 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f  k..**.** SQLITE_
2720: 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20  AFF_TEXT:.**    
2730: 43 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  Convert pRec to 
2740: 61 20 74 65 78 74 20 72 65 70 72 65 73 65 6e 74  a text represent
2750: 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  ation..**.** SQL
2760: 49 54 45 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a  ITE_AFF_BLOB:.**
2770: 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63      No-op.  pRec
2780: 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
2790: 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70  /.static void ap
27a0: 70 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 4d  plyAffinity(.  M
27b0: 65 6d 20 2a 70 52 65 63 2c 20 20 20 20 20 20 20  em *pRec,       
27c0: 20 20 20 2f 2a 20 54 68 65 20 76 61 6c 75 65 20     /* The value 
27d0: 74 6f 20 61 70 70 6c 79 20 61 66 66 69 6e 69 74  to apply affinit
27e0: 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61  y to */.  char a
27f0: 66 66 69 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a  ffinity,      /*
2800: 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f   The affinity to
2810: 20 62 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20   be applied */. 
2820: 20 75 38 20 65 6e 63 20 20 20 20 20 20 20 20 20   u8 enc         
2830: 20 20 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73       /* Use this
2840: 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   text encoding *
2850: 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66 66 69 6e  /.){.  if( affin
2860: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
2870: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 61  NUMERIC ){.    a
2880: 73 73 65 72 74 28 20 61 66 66 69 6e 69 74 79 3d  ssert( affinity=
2890: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
28a0: 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d  GER || affinity=
28b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c  =SQLITE_AFF_REAL
28c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c  .             ||
28d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
28e0: 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b  E_AFF_NUMERIC );
28f0: 0a 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e  .    if( (pRec->
2900: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
2910: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
2920: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20   (pRec->flags & 
2930: 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 29 7b 0a  MEM_Real)==0 ){.
2940: 20 20 20 20 20 20 20 20 69 66 28 20 70 52 65 63          if( pRec
2950: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74  ->flags & MEM_St
2960: 72 20 29 20 61 70 70 6c 79 4e 75 6d 65 72 69 63  r ) applyNumeric
2970: 41 66 66 69 6e 69 74 79 28 70 52 65 63 2c 31 29  Affinity(pRec,1)
2980: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
2990: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
29a0: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
29b0: 79 28 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d  y(pRec);.      }
29c0: 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 20 69  .    }.  }else i
29d0: 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  f( affinity==SQL
29e0: 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b 0a  ITE_AFF_TEXT ){.
29f0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 74 74 65      /* Only atte
2a00: 6d 70 74 20 74 68 65 20 63 6f 6e 76 65 72 73 69  mpt the conversi
2a10: 6f 6e 20 74 6f 20 54 45 58 54 20 69 66 20 74 68  on to TEXT if th
2a20: 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 67 65  ere is an intege
2a30: 72 20 6f 72 20 72 65 61 6c 0a 20 20 20 20 2a 2a  r or real.    **
2a40: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2a50: 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c 4c 20 64  (blob and NULL d
2a60: 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e 76 65 72  o not get conver
2a70: 74 65 64 29 20 62 75 74 20 6e 6f 20 73 74 72 69  ted) but no stri
2a80: 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73  ng.    ** repres
2a90: 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2f  entation..    */
2aa0: 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70 52 65  .    if( 0==(pRe
2ab0: 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72  c->flags&MEM_Str
2ac0: 29 20 26 26 20 28 70 52 65 63 2d 3e 66 6c 61 67  ) && (pRec->flag
2ad0: 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f  s&(MEM_Real|MEM_
2ae0: 49 6e 74 29 29 20 29 7b 0a 20 20 20 20 20 20 73  Int)) ){.      s
2af0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72  qlite3VdbeMemStr
2b00: 69 6e 67 69 66 79 28 70 52 65 63 2c 20 65 6e 63  ingify(pRec, enc
2b10: 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 1);.    }.    
2b20: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2b30: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2b40: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2b50: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2b60: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2b70: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2b80: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2b90: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2ba0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2bb0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2bc0: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2bd0: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2be0: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2bf0: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2c00: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2c10: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2c20: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2c30: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2c40: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2c50: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2c60: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2c70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2c80: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2c90: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ca0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2cb0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2cc0: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2cd0: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2ce0: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2cf0: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2d00: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2d10: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2d20: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2d30: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2d40: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2d50: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2d60: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2d70: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2d80: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2d90: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2da0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2db0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
2dc0: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
2dd0: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2de0: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
2df0: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
2e00: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
2e10: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
2e20: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
2e30: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
2e40: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
2e50: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
2e60: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
2e70: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
2e80: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
2e90: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
2ea0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
2eb0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
2ec0: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
2ed0: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
2ee0: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
2ef0: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
2f00: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
2f10: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
2f20: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
2f30: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
2f40: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
2f50: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
2f60: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
2f70: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
2f80: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
2f90: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
2fa0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
2fb0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
2fc0: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
2fd0: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
2fe0: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
2ff0: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3000: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3010: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3020: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3030: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3040: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3050: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
3060: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
3070: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
3080: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
3090: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
30a0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
30b0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
30c0: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
30d0: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
30e0: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
30f0: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3100: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3110: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3120: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3130: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3140: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3150: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
3160: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
3170: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
3180: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
3190: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
31a0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
31b0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
31c0: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
31d0: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
31e0: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
31f0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3200: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3210: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3220: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3230: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3240: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3250: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
3260: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
3270: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
3280: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
3290: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
32a0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
32b0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
32c0: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
32d0: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
32e0: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
32f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3300: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3310: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3320: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3330: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3340: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3350: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
3360: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
3370: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
3380: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
3390: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
33a0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
33b0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
33c0: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
33d0: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
33e0: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
33f0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3400: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3410: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3420: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3430: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3440: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3450: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3460: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
3470: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
3480: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3490: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
34a0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
34b0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
34c0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
34d0: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
34e0: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
34f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3500: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3510: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3550: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3560: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
3570: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
3580: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3590: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
35a0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
35b0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
35c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
35d0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
35e0: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
35f0: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3600: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3610: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3620: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3630: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3640: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3650: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
3660: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
3670: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
3680: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
3690: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
36a0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
36b0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
36c0: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
36d0: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
36e0: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
36f0: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3700: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3710: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3720: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3730: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3740: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3750: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
3760: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
3770: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
3780: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
3790: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
37a0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
37b0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
37c0: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
37d0: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
37e0: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
37f0: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3800: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3810: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3820: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3830: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3840: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3850: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3860: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3870: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3880: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3890: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
38a0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
38b0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
38c0: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
38d0: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
38e0: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
38f0: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3900: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3910: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3920: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3930: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3940: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3950: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3960: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3970: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3980: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3990: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
39a0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
39b0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
39c0: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
39d0: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
39e0: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
39f0: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3a00: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3a10: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3a20: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3a30: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3a40: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3a50: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3a70: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3a80: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3a90: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3aa0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3ab0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3ac0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3ad0: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3ae0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3af0: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3b00: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3b10: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3b20: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3b30: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3b40: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3b50: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3b60: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3b70: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3b80: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3b90: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3ba0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3bb0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3bc0: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3bd0: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3be0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bf0: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3c00: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3c10: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3c20: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3c30: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c40: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3c50: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3c60: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3c70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3c80: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3c90: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ca0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3cb0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3cc0: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3cd0: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3ce0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3cf0: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3d00: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3d10: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3d20: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3d30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3d40: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3d50: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3d60: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3d70: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 65 53 75 62   }.  if( p->eSub
3d80: 74 79 70 65 20 29 20 70 72 69 6e 74 66 28 22 20  type ) printf(" 
3d90: 73 75 62 74 79 70 65 3d 30 78 25 30 32 78 22 2c  subtype=0x%02x",
3da0: 20 70 2d 3e 65 53 75 62 74 79 70 65 29 3b 0a 7d   p->eSubtype);.}
3db0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3dc0: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3dd0: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3de0: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3df0: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3e00: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3e10: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3e20: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3e30: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3e40: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3e50: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3e60: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3e70: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3e80: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e90: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3ea0: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3eb0: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3ec0: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3ed0: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3ee0: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3ef0: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3f00: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3f10: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3f20: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3f30: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3f40: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3f50: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3f60: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3f70: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3f80: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f90: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3fa0: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3fb0: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3fc0: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3fd0: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3fe0: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3ff0: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
4000: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
4010: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
4020: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
4030: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
4040: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
4050: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
4060: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
4070: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
4080: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4090: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
40a0: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
40b0: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
40c0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
40d0: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
40e0: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
40f0: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4100: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4110: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4120: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
4130: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
4140: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
4150: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
4160: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65  #endif../*.** Re
4170: 74 75 72 6e 20 74 68 65 20 72 65 67 69 73 74 65  turn the registe
4180: 72 20 6f 66 20 70 4f 70 2d 3e 70 32 20 61 66 74  r of pOp->p2 aft
4190: 65 72 20 66 69 72 73 74 20 70 72 65 70 61 72 69  er first prepari
41a0: 6e 67 20 69 74 20 74 6f 20 62 65 0a 2a 2a 20 6f  ng it to be.** o
41b0: 76 65 72 77 72 69 74 74 65 6e 20 77 69 74 68 20  verwritten with 
41c0: 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
41d0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 53 51 4c 49  ..*/.static SQLI
41e0: 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 4d 65 6d 20  TE_NOINLINE Mem 
41f0: 2a 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57  *out2PrereleaseW
4200: 69 74 68 43 6c 65 61 72 28 4d 65 6d 20 2a 70 4f  ithClear(Mem *pO
4210: 75 74 29 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  ut){.  sqlite3Vd
4220: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
4230: 74 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  t);.  pOut->flag
4240: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 72  s = MEM_Int;.  r
4250: 65 74 75 72 6e 20 70 4f 75 74 3b 0a 7d 0a 73 74  eturn pOut;.}.st
4260: 61 74 69 63 20 4d 65 6d 20 2a 6f 75 74 32 50 72  atic Mem *out2Pr
4270: 65 72 65 6c 65 61 73 65 28 56 64 62 65 20 2a 70  erelease(Vdbe *p
4280: 2c 20 56 64 62 65 4f 70 20 2a 70 4f 70 29 7b 0a  , VdbeOp *pOp){.
4290: 20 20 4d 65 6d 20 2a 70 4f 75 74 3b 0a 20 20 61    Mem *pOut;.  a
42a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
42b0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
42c0: 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p2<=(p->nMem-
42d0: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
42e0: 20 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d   pOut = &p->aMem
42f0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d  [pOp->p2];.  mem
4300: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
4310: 20 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64   pOut);.  if( Vd
4320: 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75  beMemDynamic(pOu
4330: 74 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  t) ){.    return
4340: 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 57   out2PrereleaseW
4350: 69 74 68 43 6c 65 61 72 28 70 4f 75 74 29 3b 0a  ithClear(pOut);.
4360: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
4370: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
4380: 6e 74 3b 0a 20 20 20 20 72 65 74 75 72 6e 20 70  nt;.    return p
4390: 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a 0a 2f 2a 0a  Out;.  }.}.../*.
43a0: 2a 2a 20 45 78 65 63 75 74 65 20 61 73 20 6d 75  ** Execute as mu
43b0: 63 68 20 6f 66 20 61 20 56 44 42 45 20 70 72 6f  ch of a VDBE pro
43c0: 67 72 61 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a  gram as we can..
43d0: 2a 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 63  ** This is the c
43e0: 6f 72 65 20 6f 66 20 73 71 6c 69 74 65 33 5f 73  ore of sqlite3_s
43f0: 74 65 70 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20  tep().  .*/.int 
4400: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
4410: 0a 20 20 56 64 62 65 20 2a 70 20 20 20 20 20 20  .  Vdbe *p      
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
4430: 20 54 68 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a   The VDBE */.){.
4440: 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70 2d 3e 61    Op *aOp = p->a
4450: 4f 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  Op;          /* 
4460: 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f 70 20 2a  Copy of p->aOp *
4470: 2f 0a 20 20 4f 70 20 2a 70 4f 70 20 3d 20 61 4f  /.  Op *pOp = aO
4480: 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  p;             /
4490: 2a 20 43 75 72 72 65 6e 74 20 6f 70 65 72 61 74  * Current operat
44a0: 69 6f 6e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ion */.#if defin
44b0: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
44c0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42 45   || defined(VDBE
44d0: 5f 50 52 4f 46 49 4c 45 29 0a 20 20 4f 70 20 2a  _PROFILE).  Op *
44e0: 70 4f 72 69 67 4f 70 3b 20 20 20 20 20 20 20 20  pOrigOp;        
44f0: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4500: 6f 66 20 70 4f 70 20 61 74 20 74 68 65 20 74 6f  of pOp at the to
4510: 70 20 6f 66 20 74 68 65 20 6c 6f 6f 70 20 2a 2f  p of the loop */
4520: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
4530: 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e  QLITE_DEBUG.  in
4540: 74 20 6e 45 78 74 72 61 44 65 6c 65 74 65 20 3d  t nExtraDelete =
4550: 20 30 3b 20 20 20 20 20 20 2f 2a 20 56 65 72 69   0;      /* Veri
4560: 66 69 65 73 20 46 4f 52 44 45 4c 45 54 45 20 61  fies FORDELETE a
4570: 6e 64 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61  nd AUXDELETE fla
4580: 67 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69  gs */.#endif.  i
4590: 6e 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  nt rc = SQLITE_O
45a0: 4b 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  K;        /* Val
45b0: 75 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a  ue to return */.
45c0: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
45d0: 70 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20  p->db;       /* 
45e0: 54 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  The database */.
45f0: 20 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61    u8 resetSchema
4600: 4f 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20  OnFault = 0; /* 
4610: 52 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74  Reset schema aft
4620: 65 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70  er an error if p
4630: 6f 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20  ositive */.  u8 
4640: 65 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64  encoding = ENC(d
4650: 62 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64  b);     /* The d
4660: 61 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67  atabase encoding
4670: 20 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61   */.  int iCompa
4680: 72 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  re = 0;         
4690: 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61   /* Result of la
46a0: 73 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  st OP_Compare op
46b0: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73  eration */.  uns
46c0: 69 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20  igned nVmStep = 
46d0: 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  0;      /* Numbe
46e0: 72 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63  r of virtual mac
46f0: 68 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69  hine steps */.#i
4700: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4710: 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42  T_PROGRESS_CALLB
4720: 41 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e  ACK.  unsigned n
4730: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20  ProgressLimit = 
4740: 30 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f  0;/* Invoke xPro
4750: 67 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d  gress() when nVm
4760: 53 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69  Step reaches thi
4770: 73 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65  s */.#endif.  Me
4780: 6d 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65  m *aMem = p->aMe
4790: 6d 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79  m;       /* Copy
47a0: 20 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20   of p->aMem */. 
47b0: 20 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20   Mem *pIn1 = 0; 
47c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
47d0: 73 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  st input operand
47e0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20   */.  Mem *pIn2 
47f0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4800: 20 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70   /* 2nd input op
4810: 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a  erand */.  Mem *
4820: 70 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20  pIn3 = 0;       
4830: 20 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70        /* 3rd inp
4840: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4850: 4d 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20  Mem *pOut = 0;  
4860: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75             /* Ou
4870: 74 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  tput operand */.
4880: 20 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20    int *aPermute 
4890: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  = 0;         /* 
48a0: 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63  Permutation of c
48b0: 6f 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f  olumns for OP_Co
48c0: 6d 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c  mpare */.  i64 l
48d0: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
48e0: 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61  astRowid;  /* Sa
48f0: 76 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ved value of the
4900: 20 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57   last insert ROW
4910: 49 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42  ID */.#ifdef VDB
4920: 45 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20  E_PROFILE.  u64 
4930: 73 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  start;          
4940: 20 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c         /* CPU cl
4950: 6f 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61  ock count at sta
4960: 72 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a  rt of opcode */.
4970: 23 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e  #endif.  /*** IN
4980: 53 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e  SERT STACK UNION
4990: 20 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73   HERE ***/..  as
49a0: 73 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d  sert( p->magic==
49b0: 56 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29  VDBE_MAGIC_RUN )
49c0: 3b 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74  ;  /* sqlite3_st
49d0: 65 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68  ep() verifies th
49e0: 69 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56  is */.  sqlite3V
49f0: 64 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69  dbeEnter(p);.  i
4a00: 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
4a10: 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a  _NOMEM ){.    /*
4a20: 20 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66   This happens if
4a30: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69   a malloc() insi
4a40: 64 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c  de a call to sql
4a50: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4a60: 28 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c  () or.    ** sql
4a70: 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
4a80: 31 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f  16() failed.  */
4a90: 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
4aa0: 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
4ab0: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  p->rc==SQLITE_OK
4ac0: 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29   || (p->rc&0xff)
4ad0: 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b  ==SQLITE_BUSY );
4ae0: 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
4af0: 73 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65  sReader || p->re
4b00: 61 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70  adOnly!=0 );.  p
4b10: 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  ->rc = SQLITE_OK
4b20: 3b 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54  ;.  p->iCurrentT
4b30: 69 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  ime = 0;.  asser
4b40: 74 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30  t( p->explain==0
4b50: 20 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74   );.  p->pResult
4b60: 53 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  Set = 0;.  db->b
4b70: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
4b80: 20 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e   = 0;.  if( db->
4b90: 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64  u1.isInterrupted
4ba0: 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
4bb0: 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a  e_to_interrupt;.
4bc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54    sqlite3VdbeIOT
4bd0: 72 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e  raceSql(p);.#ifn
4be0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4bf0: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
4c00: 4b 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  K.  if( db->xPro
4c10: 67 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32  gress ){.    u32
4c20: 20 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f   iPrior = p->aCo
4c30: 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
4c40: 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d  TSTATUS_VM_STEP]
4c50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20  ;.    assert( 0 
4c60: 3c 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  < db->nProgressO
4c70: 70 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72  ps );.    nProgr
4c80: 65 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e  essLimit = db->n
4c90: 50 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69  ProgressOps - (i
4ca0: 50 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f  Prior % db->nPro
4cb0: 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23  gressOps);.  }.#
4cc0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
4cd0: 49 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69  ITE_DEBUG.  sqli
4ce0: 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61  te3BeginBenignMa
4cf0: 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d  lloc();.  if( p-
4d00: 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d  >pc==0.   && (p-
4d10: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51  >db->flags & (SQ
4d20: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
4d30: 7c 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c  |SQLITE_VdbeEQP|
4d40: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4d50: 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69  ))!=0.  ){.    i
4d60: 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e  nt i;.    int on
4d70: 63 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69  ce = 1;.    sqli
4d80: 74 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28  te3VdbePrintSql(
4d90: 70 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64  p);.    if( p->d
4da0: 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54  b->flags & SQLIT
4db0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b  E_VdbeListing ){
4dc0: 0a 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56  .      printf("V
4dd0: 44 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74  DBE Program List
4de0: 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  ing:\n");.      
4df0: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4e00: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4e10: 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e   sqlite3VdbePrin
4e20: 74 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26  tOp(stdout, i, &
4e30: 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d  aOp[i]);.      }
4e40: 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70  .    }.    if( p
4e50: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4e60: 4c 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a  LITE_VdbeEQP ){.
4e70: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
4e80: 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20  <p->nOp; i++){. 
4e90: 20 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69         if( aOp[i
4ea0: 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70  ].opcode==OP_Exp
4eb0: 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  lain ){.        
4ec0: 20 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69    if( once ) pri
4ed0: 6e 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20  ntf("VDBE Query 
4ee0: 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20  Plan:\n");.     
4ef0: 20 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c       printf("%s\
4f00: 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29  n", aOp[i].p4.z)
4f10: 3b 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65  ;.          once
4f20: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
4f30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4f40: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4f50: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4f60: 54 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28  Trace )  printf(
4f70: 22 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29  "VDBE Trace:\n")
4f80: 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45  ;.  }.  sqlite3E
4f90: 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  ndBenignMalloc()
4fa0: 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70  ;.#endif.  for(p
4fb0: 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20  Op=&aOp[p->pc]; 
4fc0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70  rc==SQLITE_OK; p
4fd0: 4f 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72  Op++){.    asser
4fe0: 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70  t( pOp>=aOp && p
4ff0: 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29  Op<&aOp[p->nOp])
5000: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61  ;.    if( db->ma
5010: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
5020: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66  o no_mem;.#ifdef
5030: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20   VDBE_PROFILE.  
5040: 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65    start = sqlite
5050: 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69  3Hwtime();.#endi
5060: 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b  f.    nVmStep++;
5070: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
5080: 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53  NABLE_STMT_SCANS
5090: 54 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d  TATUS.    if( p-
50a0: 3e 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45  >anExec ) p->anE
50b0: 78 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f  xec[(int)(pOp-aO
50c0: 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  p)]++;.#endif.. 
50d0: 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77     /* Only allow
50e0: 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49   tracing if SQLI
50f0: 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69  TE_DEBUG is defi
5100: 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ned..    */.#ifd
5110: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5120: 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67      if( db->flag
5130: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
5140: 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71  race ){.      sq
5150: 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70  lite3VdbePrintOp
5160: 28 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70  (stdout, (int)(p
5170: 4f 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b  Op - aOp), pOp);
5180: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
5190: 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65      ..    /* Che
51a0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
51b0: 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65  need to simulate
51c0: 20 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20   an interrupt.  
51d0: 54 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e  This only happen
51e0: 73 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68  s.    ** if we h
51f0: 61 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65  ave a special te
5200: 73 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f  st build..    */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
5220: 45 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69  EST.    if( sqli
5230: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f  te3_interrupt_co
5240: 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73  unt>0 ){.      s
5250: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
5260: 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  _count--;.      
5270: 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  if( sqlite3_inte
5280: 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29  rrupt_count==0 )
5290: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
52a0: 33 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b  3_interrupt(db);
52b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
52c0: 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61  endif..    /* Sa
52d0: 6e 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e  nity checking on
52e0: 20 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20   other operands 
52f0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5300: 5f 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  _DEBUG.    asser
5310: 74 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d  t( pOp->opflags=
5320: 3d 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72  =sqlite3OpcodePr
5330: 6f 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f  operty[pOp->opco
5340: 64 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 28  de] );.    if( (
5350: 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
5360: 50 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a  PFLG_IN1)!=0 ){.
5370: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5380: 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20  p->p1>0 );.     
5390: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
53a0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
53b0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20  ursor) );.      
53c0: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
53d0: 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  id(&aMem[pOp->p1
53e0: 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ]) );.      asse
53f0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
5400: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
5410: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
5420: 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53  ) );.      REGIS
5430: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
5440: 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  1, &aMem[pOp->p1
5450: 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ]);.    }.    if
5460: 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  ( (pOp->opflags 
5470: 26 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20  & OPFLG_IN2)!=0 
5480: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
5490: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
54a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
54b0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
54c0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
54d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
54e0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
54f0: 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61  >p2]) );.      a
5500: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
5510: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
5520: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5530: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45  p2]) );.      RE
5540: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
5550: 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p2, &aMem[pOp-
5560: 3e 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  >p2]);.    }.   
5570: 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61   if( (pOp->opfla
5580: 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21  gs & OPFLG_IN3)!
5590: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
55a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
55b0: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
55c0: 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
55d0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
55e0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
55f0: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5600: 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20  Op->p3]) );.    
5610: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5620: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5630: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5640: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5650: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
5660: 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70  pOp->p3, &aMem[p
5670: 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a  Op->p3]);.    }.
5680: 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70      if( (pOp->op
5690: 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55  flags & OPFLG_OU
56a0: 54 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  T2)!=0 ){.      
56b0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
56c0: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
56d0: 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e  t( pOp->p2<=(p->
56e0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
56f0: 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f   );.      memAbo
5700: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61  utToChange(p, &a
5710: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20  Mem[pOp->p2]);. 
5720: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f     }.    if( (pO
5730: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5740: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5750: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
5760: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p3>0 );.      
5770: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
5780: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5790: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d  rsor) );.      m
57a0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
57b0: 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  p, &aMem[pOp->p3
57c0: 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
57d0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
57e0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
57f0: 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49  fined(VDBE_PROFI
5800: 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20  LE).    pOrigOp 
5810: 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20  = pOp;.#endif.  
5820: 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70  .    switch( pOp
5830: 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a  ->opcode ){../**
5840: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5850: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5860: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5870: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5880: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57  ***********.** W
5890: 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61  hat follows is a
58a0: 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20   massive switch 
58b0: 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20  statement where 
58c0: 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d  each case implem
58d0: 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61  ents a.** separa
58e0: 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  te instruction i
58f0: 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  n the virtual ma
5900: 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f  chine.  If we fo
5910: 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a  llow the usual.*
5920: 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f  * indentation co
5930: 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20  nventions, each 
5940: 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69  case should be i
5950: 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61  ndented by 6 spa
5960: 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61  ces.  But.** tha
5970: 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61  t is a lot of wa
5980: 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68  sted space on th
5990: 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20  e left margin.  
59a0: 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68  So the code with
59b0: 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68  in.** the switch
59c0: 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20   statement will 
59d0: 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65  break with conve
59e0: 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75  ntion and be flu
59f0: 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72  sh-left. Another
5a00: 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20  .** big comment 
5a10: 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73  (similar to this
5a20: 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20   one) will mark 
5a30: 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65  the point in the
5a40: 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77   code where.** w
5a50: 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63  e transition bac
5a60: 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65  k to normal inde
5a70: 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ntation..**.** T
5a80: 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66  he formatting of
5a90: 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d   each case is im
5aa0: 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61  portant.  The ma
5ab0: 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74  kefile for SQLit
5ac0: 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74  e.** generates t
5ad0: 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f  wo C files "opco
5ae0: 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f  des.h" and "opco
5af0: 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69  des.c" by scanni
5b00: 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20  ng this.** file 
5b10: 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65  looking for line
5b20: 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74  s that begin wit
5b30: 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54  h "case OP_".  T
5b40: 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c  he opcodes.h fil
5b50: 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69  es.** will be fi
5b60: 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e  lled with #defin
5b70: 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69  es that give uni
5b80: 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  que integer valu
5b90: 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70  es to each.** op
5ba0: 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63  code and the opc
5bb0: 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66  odes.c file is f
5bc0: 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72  illed with an ar
5bd0: 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77  ray of strings w
5be0: 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72  here.** each str
5bf0: 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f  ing is the symbo
5c00: 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  lic name for the
5c10: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f   corresponding o
5c20: 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a  pcode.  If the.*
5c30: 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74  * case statement
5c40: 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20   is followed by 
5c50: 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65  a comment of the
5c60: 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61   form "/# same a
5c70: 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61  s ... #/".** tha
5c80: 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65  t comment is use
5c90: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74  d to determine t
5ca0: 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61  he particular va
5cb0: 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64  lue of the opcod
5cc0: 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b  e..**.** Other k
5cd0: 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63  eywords in the c
5ce0: 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c  omment that foll
5cf0: 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72  ows each case ar
5d00: 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e  e used to.** con
5d10: 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47  struct the OPFLG
5d20: 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c  _INITIALIZER val
5d30: 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69  ue that initiali
5d40: 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72  zes opcodeProper
5d50: 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64  ty[]..** Keyword
5d60: 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20  s include: in1, 
5d70: 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20  in2, in3, out2, 
5d80: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
5d90: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
5da0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
5db0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
5dc0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
5dd0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5de0: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5df0: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5e00: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5e10: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5e20: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5e30: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5e40: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5e50: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5e60: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5e70: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
5e80: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
5e90: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
5ea0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
5eb0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
5ec0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
5ed0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5ee0: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5ef0: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5f00: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5f10: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5f20: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5f30: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5f40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
5f90: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
5fa0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
5fb0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
5fc0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
5fd0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5fe0: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
5ff0: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
6000: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
6010: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
6020: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
6030: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
6040: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
6050: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
6060: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
6070: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
6080: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
6090: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
60a0: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
60b0: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
60c0: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
60d0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
60e0: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
60f0: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
6100: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
6110: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
6120: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
6130: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
6140: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
6150: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
6160: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
6170: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6180: 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  /.jump_to_p2_and
6190: 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
61a0: 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61  rupt:.  pOp = &a
61b0: 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b  Op[pOp->p2 - 1];
61c0: 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74  ..  /* Opcodes t
61d0: 68 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20  hat are used as 
61e0: 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20  the bottom of a 
61f0: 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f  loop (OP_Next, O
6200: 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f  P_Prev,.  ** OP_
6210: 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74  VNext, OP_RowSet
6220: 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74  Next, or OP_Sort
6230: 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70  erNext) all jump
6240: 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20   here upon.  ** 
6250: 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65  completion.  Che
6260: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c  ck to see if sql
6270: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29  ite3_interrupt()
6280: 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
6290: 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20  .  ** or if the 
62a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
62b0: 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e  k needs to be in
62c0: 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a  voked. .  **.  *
62d0: 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73  * This code uses
62e0: 20 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67   unstructured "g
62f0: 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20  oto" statements 
6300: 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f  and does not loo
6310: 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75  k clean..  ** Bu
6320: 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75  t that is not du
6330: 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69  e to sloppy codi
6340: 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63  ng habits. The c
6350: 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74  ode is written t
6360: 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72  his.  ** way for
6370: 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f   performance, to
6380: 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f   avoid having to
6390: 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75   run the interru
63a0: 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a  pt and progress.
63b0: 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65    ** checks on e
63c0: 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68  very opcode.  Th
63d0: 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33  is helps sqlite3
63e0: 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61  _step() to run a
63f0: 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66  bout 1.5%.  ** f
6400: 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20  aster according 
6410: 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74  to "valgrind --t
6420: 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20  ool=cachegrind" 
6430: 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  */.check_for_int
6440: 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62  errupt:.  if( db
6450: 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74  ->u1.isInterrupt
6460: 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  ed ) goto abort_
6470: 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74  due_to_interrupt
6480: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
6490: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
64a0: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c  ALLBACK.  /* Cal
64b0: 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  l the progress c
64c0: 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73  allback if it is
64d0: 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20   configured and 
64e0: 74 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d  the required num
64f0: 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45  ber.  ** of VDBE
6500: 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65   ops have been e
6510: 78 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20  xecuted (either 
6520: 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63  since this invoc
6530: 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71  ation of.  ** sq
6540: 6c 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20  lite3VdbeExec() 
6550: 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69  or since last ti
6560: 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  me the progress 
6570: 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c  callback was cal
6580: 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68  led)..  ** If th
6590: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
65a0: 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d  ack returns non-
65b0: 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76  zero, exit the v
65c0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77  irtual machine w
65d0: 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72  ith.  ** a retur
65e0: 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42  n code SQLITE_AB
65f0: 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ORT..  */.  if( 
6600: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30  db->xProgress!=0
6610: 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72   && nVmStep>=nPr
6620: 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20  ogressLimit ){. 
6630: 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e     assert( db->n
6640: 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29  ProgressOps!=0 )
6650: 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c  ;.    nProgressL
6660: 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b  imit = nVmStep +
6670: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
6680: 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d  s - (nVmStep%db-
6690: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a  >nProgressOps);.
66a0: 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f      if( db->xPro
66b0: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
66c0: 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20  essArg) ){.     
66d0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54   rc = SQLITE_INT
66e0: 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f  ERRUPT;.      go
66f0: 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
6700: 6c 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  lt;.    }.  }.#e
6710: 6e 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b  ndif.  .  break;
6720: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6730: 47 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20  Gosub P1 P2 * * 
6740: 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68  *.**.** Write th
6750: 65 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73  e current addres
6760: 73 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20  s onto register 
6770: 50 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a  P1.** and then j
6780: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
6790: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f  2..*/.case OP_Go
67a0: 73 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20  sub: {          
67b0: 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61    /* jump */.  a
67c0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
67d0: 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
67e0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
67f0: 29 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ) );.  pIn1 = &a
6800: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6810: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
6820: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
6830: 29 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  );.  memAboutToC
6840: 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a  hange(p, pIn1);.
6850: 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20    pIn1->flags = 
6860: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d  MEM_Int;.  pIn1-
6870: 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70  >u.i = (int)(pOp
6880: 2d 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45  -aOp);.  REGISTE
6890: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
68a0: 20 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f   pIn1);..  /* Mo
68b0: 73 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f  st jump operatio
68c0: 6e 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20  ns do a goto to 
68d0: 74 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64  this spot in ord
68e0: 65 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a  er to update.  *
68f0: 2a 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65  * the pOp pointe
6900: 72 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32  r. */.jump_to_p2
6910: 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  :.  pOp = &aOp[p
6920: 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62  Op->p2 - 1];.  b
6930: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6940: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
6950: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
6960: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6970: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6980: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6990: 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74  egister P1.  Aft
69a0: 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20  er.** the jump, 
69b0: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
69c0: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
69d0: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
69e0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
69f0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
6a00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6a10: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
6a20: 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
6a30: 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  );.  pOp = &aOp[
6a40: 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49  pIn1->u.i];.  pI
6a50: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6a60: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6a70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6a80: 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20  : InitCoroutine 
6a90: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
6aa0: 2a 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74  ** Set up regist
6ab0: 65 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  er P1 so that it
6ac0: 20 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74   will Yield to t
6ad0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20  he coroutine.** 
6ae0: 6c 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65  located at addre
6af0: 73 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ss P3..**.** If 
6b00: 50 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63  P2!=0 then the c
6b10: 6f 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65  oroutine impleme
6b20: 6e 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74  ntation immediat
6b30: 65 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74  ely follows.** t
6b40: 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20  his opcode.  So 
6b50: 6a 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f  jump over the co
6b60: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6b70: 74 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64  tation to.** add
6b80: 72 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53  ress P2..**.** S
6b90: 65 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f  ee also: EndCoro
6ba0: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
6bb0: 5f 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20  _InitCoroutine: 
6bc0: 7b 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  {     /* jump */
6bd0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6be0: 70 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31  p1>0 &&  pOp->p1
6bf0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
6c00: 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65  ursor) );.  asse
6c10: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26  rt( pOp->p2>=0 &
6c20: 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
6c30: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
6c40: 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p3>=0 && pOp-
6c50: 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  >p3<p->nOp );.  
6c60: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
6c70: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6c80: 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63   !VdbeMemDynamic
6c90: 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74  (pOut) );.  pOut
6ca0: 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20  ->u.i = pOp->p3 
6cb0: 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  - 1;.  pOut->fla
6cc0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6cd0: 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f  if( pOp->p2 ) go
6ce0: 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
6cf0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
6d00: 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74  code:  EndCorout
6d10: 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  ine P1 * * * *.*
6d20: 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63  *.** The instruc
6d30: 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72  tion at the addr
6d40: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6d50: 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a  P1 is a Yield..*
6d60: 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32  * Jump to the P2
6d70: 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68   parameter of th
6d80: 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74  at Yield..** Aft
6d90: 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67  er the jump, reg
6da0: 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73  ister P1 becomes
6db0: 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a   undefined..**.*
6dc0: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6dd0: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6de0: 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e  e OP_EndCoroutin
6df0: 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
6e00: 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f  * in1 */.  VdbeO
6e10: 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49  p *pCaller;.  pI
6e20: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6e30: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
6e40: 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f  In1->flags==MEM_
6e50: 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
6e60: 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26   pIn1->u.i>=0 &&
6e70: 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f   pIn1->u.i<p->nO
6e80: 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d  p );.  pCaller =
6e90: 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d   &aOp[pIn1->u.i]
6ea0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6eb0: 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  ler->opcode==OP_
6ec0: 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72  Yield );.  asser
6ed0: 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d  t( pCaller->p2>=
6ee0: 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32  0 && pCaller->p2
6ef0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70  <p->nOp );.  pOp
6f00: 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d   = &aOp[pCaller-
6f10: 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31  >p2 - 1];.  pIn1
6f20: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
6f30: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6f40: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6f50: 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a   Yield P1 P2 * *
6f60: 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68   *.**.** Swap th
6f70: 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65  e program counte
6f80: 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65  r with the value
6f90: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
6fa0: 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68    This.** has th
6fb0: 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c  e effect of yiel
6fc0: 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74  ding to a corout
6fd0: 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ine..**.** If th
6fe0: 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74  e coroutine that
6ff0: 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20   is launched by 
7000: 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
7010: 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69   ends with.** Yi
7020: 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68  eld or Return th
7030: 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74  en continue to t
7040: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
7050: 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20  ion.  But if.** 
7060: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61  the coroutine la
7070: 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69  unched by this i
7080: 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20  nstruction ends 
7090: 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75  with.** EndCorou
70a0: 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20  tine, then jump 
70b0: 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61  to P2 rather tha
70c0: 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74  n continuing wit
70d0: 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e  h the.** next in
70e0: 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
70f0: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
7100: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
7110: 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20   OP_Yield: {    
7120: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20          /* in1, 
7130: 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63  jump */.  int pc
7140: 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26  Dest;.  pIn1 = &
7150: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
7160: 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d   assert( VdbeMem
7170: 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30  Dynamic(pIn1)==0
7180: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
7190: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70  s = MEM_Int;.  p
71a0: 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e  cDest = (int)pIn
71b0: 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e  1->u.i;.  pIn1->
71c0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  u.i = (int)(pOp 
71d0: 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54  - aOp);.  REGIST
71e0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
71f0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d  , pIn1);.  pOp =
7200: 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20   &aOp[pcDest];. 
7210: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
7220: 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c  code:  HaltIfNul
7230: 6c 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50  l  P1 P2 P3 P4 P
7240: 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  5.** Synopsis:  
7250: 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61  if r[P3]=null ha
7260: 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  lt.**.** Check t
7270: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
7280: 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20  ster P3.  If it 
7290: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c  is NULL then Hal
72a0: 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d  t using.** param
72b0: 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64  eter P1, P2, and
72c0: 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77   P4 as if this w
72d0: 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72  ere a Halt instr
72e0: 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a  uction.  If the.
72f0: 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  ** value in regi
7300: 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e  ster P3 is not N
7310: 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72  ULL, then this r
7320: 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f  outine is a no-o
7330: 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  p..** The P5 par
7340: 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65  ameter should be
7350: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48   1..*/.case OP_H
7360: 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20  altIfNull: {    
7370: 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49    /* in3 */.  pI
7380: 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
7390: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33  p3];.  if( (pIn3
73a0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
73b0: 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  ll)==0 ) break;.
73c0: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
73d0: 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a  h into OP_Halt *
73e0: 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  /.}../* Opcode: 
73f0: 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34   Halt P1 P2 * P4
7400: 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69   P5.**.** Exit i
7410: 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c  mmediately.  All
7420: 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65   open cursors, e
7430: 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a  tc are closed.**
7440: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a   automatically..
7450: 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
7460: 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75  result code retu
7470: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
7480: 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f  exec(), sqlite3_
7490: 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73  reset(),.** or s
74a0: 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28  qlite3_finalize(
74b0: 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c  ).  For a normal
74c0: 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75   halt, this shou
74d0: 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20  ld be SQLITE_OK 
74e0: 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f  (0)..** For erro
74f0: 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f  rs, it can be so
7500: 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20  me other value. 
7510: 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50   If P1!=0 then P
7520: 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65  2 will determine
7530: 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e  .** whether or n
7540: 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74  ot to rollback t
7550: 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
7560: 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20  action.  Do not 
7570: 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50  rollback.** if P
7580: 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74  2==OE_Fail. Do t
7590: 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50  he rollback if P
75a0: 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20  2==OE_Rollback. 
75b0: 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74   If P2==OE_Abort
75c0: 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f  ,.** then back o
75d0: 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74  ut all changes t
75e0: 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65  hat have occurre
75f0: 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78  d during this ex
7600: 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ecution of the.*
7610: 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e  * VDBE, but do n
7620: 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  ot rollback the 
7630: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a  transaction. .**
7640: 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74  .** If P4 is not
7650: 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73   null then it is
7660: 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
7670: 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  e string..**.** 
7680: 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65  P5 is a value be
7690: 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69  tween 0 and 4, i
76a0: 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d  nclusive, that m
76b0: 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73  odifies the P4 s
76c0: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  tring..**.**    
76d0: 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a  0:  (no change).
76e0: 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55  **    1:  NOT NU
76f0: 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69  LL contraint fai
7700: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a  led: P4.**    2:
7710: 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61    UNIQUE constra
7720: 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a  int failed: P4.*
7730: 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63  *    3:  CHECK c
7740: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7750: 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46  : P4.**    4:  F
7760: 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74  OREIGN KEY const
7770: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7780: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
7790: 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20  not zero and P4 
77a0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76  is NULL, then ev
77b0: 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74  erything after t
77c0: 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69  he ":" is.** omi
77d0: 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  tted..**.** Ther
77e0: 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20  e is an implied 
77f0: 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73  "Halt 0 0 0" ins
7800: 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65  truction inserte
7810: 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e  d at the very en
7820: 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72  d of.** every pr
7830: 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d  ogram.  So a jum
7840: 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20  p past the last 
7850: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7860: 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73  he program.** is
7870: 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65   the same as exe
7880: 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a  cuting Halt..*/.
7890: 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a  case OP_Halt: {.
78a0: 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
78b0: 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  ype;.  const cha
78c0: 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64  r *zLogFmt;.  Vd
78d0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
78e0: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
78f0: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
7900: 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70   aOp);.  if( pOp
7910: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7920: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
7930: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
7940: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
7950: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
7960: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
7970: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
7980: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7990: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
79a0: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
79b0: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
79c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
79d0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
79e0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
79f0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
7a00: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
7a10: 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69  e);.    lastRowi
7a20: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
7a30: 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  d;.    if( pOp->
7a40: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7a50: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7a60: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7a70: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7a80: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7a90: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7aa0: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7ab0: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7ac0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7ad0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7ae0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7af0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7b00: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7b10: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7b20: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7b30: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7b40: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7b50: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7b60: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7b70: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7b80: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7b90: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7ba0: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7bb0: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7bc0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7bd0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7be0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7bf0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7c00: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7c10: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7c20: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7c30: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7c40: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7c50: 3d 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e  = pcx;.  if( p->
7c60: 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f  rc ){.    if( pO
7c70: 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73  p->p5 ){.      s
7c80: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
7c90: 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b   * const azType[
7ca0: 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22  ] = { "NOT NULL"
7cb0: 2c 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45  , "UNIQUE", "CHE
7cc0: 43 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  CK",.           
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cf0: 20 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20    "FOREIGN KEY" 
7d00: 7d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  };.      assert(
7d10: 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70   pOp->p5>=1 && p
7d20: 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20  Op->p5<=4 );.   
7d30: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7d40: 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20  ->p5==1 );.     
7d50: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7d60: 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74  p5==2 );.      t
7d70: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
7d80: 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==3 );.      tes
7d90: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7da0: 34 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65  4 );.      zType
7db0: 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70   = azType[pOp->p
7dc0: 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  5-1];.    }else{
7dd0: 0a 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30  .      zType = 0
7de0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  ;.    }.    asse
7df0: 72 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20  rt( zType!=0 || 
7e00: 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a  pOp->p4.z!=0 );.
7e10: 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61      zLogFmt = "a
7e20: 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25  bort at %d in [%
7e30: 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28  s]: %s";.    if(
7e40: 20 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70   zType && pOp->p
7e50: 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  4.z ){.      sql
7e60: 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
7e70: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7e80: 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79  failed: %s", zTy
7e90: 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  pe, pOp->p4.z);.
7ea0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
7eb0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7ec0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
7ed0: 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e  r(p, "%s", pOp->
7ee0: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65  p4.z);.    }else
7ef0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
7f00: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20  dbeError(p, "%s 
7f10: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7f20: 64 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20  d", zType);.    
7f30: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f  }.    sqlite3_lo
7f40: 67 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46  g(pOp->p1, zLogF
7f50: 6d 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c  mt, pcx, p->zSql
7f60: 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
7f70: 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65   }.  rc = sqlite
7f80: 33 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20  3VdbeHalt(p);.  
7f90: 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49  assert( rc==SQLI
7fa0: 54 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53  TE_BUSY || rc==S
7fb0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d  QLITE_OK || rc==
7fc0: 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a  SQLITE_ERROR );.
7fd0: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
7fe0: 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e  _BUSY ){.    p->
7ff0: 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
8000: 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _BUSY;.  }else{.
8010: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8020: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
8030: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
8040: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a  E_CONSTRAINT );.
8050: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8060: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
8070: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30  >nDeferredCons>0
8080: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
8090: 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  dImmCons>0 );.  
80a0: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
80b0: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
80c0: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
80d0: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
80e0: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
80f0: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
8100: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8110: 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a  : r[P2]=P1.**.**
8120: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
8130: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
8140: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
8150: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
8160: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
8170: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
8180: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8190: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
81a0: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
81b0: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
81c0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
81d0: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
81e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
81f0: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8200: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8210: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
8220: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
8230: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
8240: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
8250: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
8260: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
8270: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
8280: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8290: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
82a0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
82b0: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
82c0: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
82d0: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
82e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
82f0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
8300: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
8310: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
8320: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
8330: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
8340: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
8350: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
8360: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
8370: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
8380: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8390: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
83a0: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
83b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
83c0: 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20  FLOAT, out2 */. 
83d0: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
83e0: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
83f0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8400: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
8410: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
8420: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
8430: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72  ) );.  pOut->u.r
8440: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
8450: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
8460: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
8470: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
8480: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8490: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a  : r[P2]='P4'.**.
84a0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
84b0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
84c0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
84d0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
84e0: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
84f0: 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f  to a String opco
8500: 64 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  de before it is 
8510: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
8520: 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75   first time.  Du
8530: 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61  ring.** this tra
8540: 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  nsformation, the
8550: 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e   length of strin
8560: 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64  g P4 is computed
8570: 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61   and stored.** a
8580: 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74  s the P1 paramet
8590: 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  er..*/.case OP_S
85a0: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
85b0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
85c0: 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a  STRING, out2 */.
85d0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
85e0: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
85f0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8600: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70  e(p, pOp);.  pOp
8610: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
8620: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
8630: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
8640: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
8650: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
8660: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
8670: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
8680: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
8690: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
86a0: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
86b0: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
86c0: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
86d0: 54 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20  TATIC);.    if( 
86e0: 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49  rc==SQLITE_TOOBI
86f0: 47 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67  G ) goto too_big
8700: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
8710: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
8720: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
8730: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
8740: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
8750: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
8760: 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f  szMalloc>0 && pO
8770: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
8780: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
8790: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
87a0: 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20  ic(pOut)==0 );. 
87b0: 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f     pOut->szMallo
87c0: 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d  c = 0;.    pOut-
87d0: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
87e0: 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f  atic;.    if( pO
87f0: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
8800: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
8810: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
8820: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8830: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
8840: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
8850: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
8860: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
8870: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
8880: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66  .  }.#endif.  if
8890: 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c  ( pOp->p1>db->aL
88a0: 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
88b0: 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
88c0: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
88d0: 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72   }.  /* Fall thr
88e0: 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
88f0: 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67   case, OP_String
8900: 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f   */.}.  ./* Opco
8910: 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32  de: String P1 P2
8920: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
8930: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8940: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
8950: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
8960: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
8970: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
8980: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
8990: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21  P2..**.** If P5!
89a0: 3d 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65  =0 and the conte
89b0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
89c0: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
89d0: 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20  n zero, then.** 
89e0: 74 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20  the datatype of 
89f0: 74 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20  the register P2 
8a00: 69 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  is converted to 
8a10: 42 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65  BLOB.  The conte
8a20: 6e 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d  nt is.** the sam
8a30: 65 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79  e sequence of by
8a40: 74 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c  tes, it is merel
8a50: 79 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73  y interpreted as
8a60: 20 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a   a BLOB instead.
8a70: 2a 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20  ** of a string, 
8a80: 61 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65  as if it had bee
8a90: 6e 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20  n CAST..*/.case 
8aa0: 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20  OP_String: {    
8ab0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8ac0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ad0: 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75  p4.z!=0 );.  pOu
8ae0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
8af0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
8b00: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
8b10: 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  Str|MEM_Static|M
8b20: 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d  EM_Term;.  pOut-
8b30: 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a  >z = pOp->p4.z;.
8b40: 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d    pOut->n = pOp-
8b50: 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  >p1;.  pOut->enc
8b60: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
8b70: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
8b80: 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65  ZE(pOut);.#ifnde
8b90: 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f  f SQLITE_LIKE_DO
8ba0: 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53  ESNT_MATCH_BLOBS
8bb0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8bc0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8bd0: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8be0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8bf0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8c00: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8c10: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8c20: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8c30: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8c40: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8c50: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
8c60: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
8c70: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
8c80: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64  M_Term;.  }.#end
8c90: 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  if.  break;.}../
8ca0: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8cb0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8cc0: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e  ynopsis:  r[P2..
8cd0: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
8ce0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
8cf0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
8d00: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
8d10: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
8d20: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
8d30: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8d40: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8d50: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8d60: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8d70: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8d80: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8d90: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
8da0: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
8db0: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
8dc0: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
8dd0: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
8de0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
8df0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
8e00: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
8e10: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
8e20: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
8e30: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
8e40: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
8e50: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
8e60: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
8e70: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
8e80: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
8e90: 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75  /.  int cnt;.  u
8ea0: 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70  16 nullFlag;.  p
8eb0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
8ec0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
8ed0: 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f  cnt = pOp->p3-pO
8ee0: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
8ef0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
8f00: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
8f10: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8f20: 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70  = nullFlag = pOp
8f30: 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c  ->p1 ? (MEM_Null
8f40: 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20  |MEM_Cleared) : 
8f50: 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c  MEM_Null;.  whil
8f60: 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20  e( cnt>0 ){.    
8f70: 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41  pOut++;.    memA
8f80: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
8f90: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
8fa0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
8fb0: 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74  (pOut);.    pOut
8fc0: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
8fd0: 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20  ag;.    cnt--;. 
8fe0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
8ff0: 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75  * Opcode: SoftNu
9000: 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ll P1 * * * *.**
9010: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31   Synopsis:  r[P1
9020: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74  ]=NULL.**.** Set
9030: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
9040: 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e  have the value N
9050: 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74  ULL as seen by t
9060: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
9070: 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  .** instruction,
9080: 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65   but do not free
9090: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
90a0: 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63  lob memory assoc
90b0: 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68  iated with.** th
90c0: 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74  e register, so t
90d0: 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65  hat if the value
90e0: 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72   was a string or
90f0: 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a   blob that was.*
9100: 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70  * previously cop
9110: 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f  ied using OP_SCo
9120: 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77  py, the copies w
9130: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
9140: 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73  be valid..*/.cas
9150: 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b  e OP_SoftNull: {
9160: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
9170: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
9180: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
9190: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
91a0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
91b0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
91c0: 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d  = (pOut->flags|M
91d0: 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e  EM_Null)&~MEM_Un
91e0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
91f0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9200: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
9210: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9220: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
9230: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
9240: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
9250: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
9260: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
9270: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
9280: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
9290: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
92a0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
92b0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
92c0: 2d 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d  ->p1 <= SQLITE_M
92d0: 41 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70  AX_LENGTH );.  p
92e0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
92f0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
9300: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
9310: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
9320: 70 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30  p4.z, pOp->p1, 0
9330: 2c 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  , 0);.  pOut->en
9340: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
9350: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
9360: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
9370: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9380: 3a 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32  : Variable P1 P2
9390: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
93a0: 73 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d  sis: r[P2]=param
93b0: 65 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a  eter(P1,P4).**.*
93c0: 2a 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76  * Transfer the v
93d0: 61 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70  alues of bound p
93e0: 61 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f  arameter P1 into
93f0: 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
9400: 2a 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65  ** If the parame
9410: 74 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68  ter is named, th
9420: 65 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65  en its name appe
9430: 61 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68  ars in P4..** Th
9440: 65 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73  e P4 value is us
9450: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69  ed by sqlite3_bi
9460: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
9470: 65 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e()..*/.case OP_
9480: 56 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20  Variable: {     
9490: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
94a0: 2f 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20  /.  Mem *pVar;  
94b0: 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65       /* Value be
94c0: 69 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20  ing transferred 
94d0: 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  */..  assert( pO
94e0: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
94f0: 70 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20  p1<=p->nVar );. 
9500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
9510: 2e 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34  .z==0 || pOp->p4
9520: 2e 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70  .z==p->azVar[pOp
9530: 2d 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61  ->p1-1] );.  pVa
9540: 72 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70  r = &p->aVar[pOp
9550: 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28  ->p1 - 1];.  if(
9560: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
9570: 6f 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20  ooBig(pVar) ){. 
9580: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
9590: 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75  .  }.  pOut = ou
95a0: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
95b0: 70 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  pOp);.  sqlite3V
95c0: 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
95d0: 79 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45  y(pOut, pVar, ME
95e0: 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44  M_Static);.  UPD
95f0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9600: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9610: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
9620: 6f 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ove P1 P2 P3 * *
9630: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
9640: 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d  [P2@P3]=r[P1@P3]
9650: 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20  .**.** Move the 
9660: 50 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  P3 values in reg
9670: 69 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d  ister P1..P1+P3-
9680: 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72  1 over into.** r
9690: 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b  egisters P2..P2+
96a0: 50 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73  P3-1.  Registers
96b0: 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65   P1..P1+P3-1 are
96c0: 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67  .** left holding
96d0: 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20   a NULL.  It is 
96e0: 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67  an error for reg
96f0: 69 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20  ister ranges.** 
9700: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20  P1..P1+P3-1 and 
9710: 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f  P2..P2+P3-1 to o
9720: 76 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61  verlap.  It is a
9730: 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50  n error.** for P
9740: 33 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61  3 to be less tha
9750: 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n 1..*/.case OP_
9760: 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  Move: {.  int n;
9770: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
9780: 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
9790: 73 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a  s left to copy *
97a0: 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  /.  int p1;     
97b0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
97c0: 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f   to copy from */
97d0: 0a 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20  .  int p2;      
97e0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
97f0: 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20  to copy to */.. 
9800: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9810: 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  p1 = pOp->p1;.  
9820: 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
9830: 61 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70  assert( n>0 && p
9840: 31 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20  1>0 && p2>0 );. 
9850: 20 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70   assert( p1+n<=p
9860: 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b  2 || p2+n<=p1 );
9870: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
9880: 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  [p1];.  pOut = &
9890: 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a  aMem[p2];.  do{.
98a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74      assert( pOut
98b0: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
98c0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
98d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
98e0: 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  1<=&aMem[(p->nMe
98f0: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29  m-p->nCursor)] )
9900: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
9910: 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
9920: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
9930: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
9940: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9950: 4d 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49  MemMove(pOut, pI
9960: 6e 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  n1);.#ifdef SQLI
9970: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
9980: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9990: 6d 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20  m>=&aMem[p1] && 
99a0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
99b0: 3c 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70  <pOut ){.      p
99c0: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
99d0: 2b 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b  += pOp->p2 - p1;
99e0: 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
99f0: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
9a00: 28 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49  (pOut);.    REGI
9a10: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9a20: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9a30: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9a40: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9a50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9a60: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
9a70: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
9a80: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
9a90: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
9aa0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
9ab0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
9ac0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9ad0: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9ae0: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9af0: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9b00: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9b10: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9b20: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9b30: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9b40: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9b50: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9b60: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
9b70: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
9b80: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
9b90: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
9ba0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
9bb0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
9bc0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9bd0: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9be0: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9bf0: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9c00: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9c10: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9c20: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9c30: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9c40: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9c50: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9c60: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
9c70: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
9c80: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
9c90: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
9ca0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
9cb0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
9cc0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9cd0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9ce0: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9d10: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
9d20: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
9d30: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9d40: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9d50: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9d60: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
9d70: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
9d80: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
9d90: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
9da0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
9db0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
9dc0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
9dd0: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
9de0: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
9df0: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
9e00: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
9e10: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
9e20: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
9e30: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
9e40: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
9e50: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
9e60: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
9e70: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
9e80: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
9e90: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
9ea0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
9eb0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
9ec0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
9ed0: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
9ee0: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
9ef0: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
9f00: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9f10: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
9f20: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9f30: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9f40: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9f50: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
9f60: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
9f70: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
9f80: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
9f90: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9fa0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
9fb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
9fc0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9fd0: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
9fe0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9ff0: 4f 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20  Opcode: IntCopy 
a000: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a010: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
a020: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73  [P1].**.** Trans
a030: 66 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20  fer the integer 
a040: 76 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65  value held in re
a050: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
a060: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
a070: 2a 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74  * This is an opt
a080: 69 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f  imized version o
a090: 66 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72  f SCopy that wor
a0a0: 6b 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65  ks only for inte
a0b0: 67 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a  ger.** values..*
a0c0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70  /.case OP_IntCop
a0d0: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
a0e0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e  /* out2 */.  pIn
a0f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a100: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70  1];.  assert( (p
a110: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
a120: 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f  _Int)!=0 );.  pO
a130: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
a140: 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
a150: 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f  beMemSetInt64(pO
a160: 75 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a  ut, pIn1->u.i);.
a170: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
a180: 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77  pcode: ResultRow
a190: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
a1a0: 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75  Synopsis:  outpu
a1b0: 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a  t=r[P1@P2].**.**
a1c0: 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50   The registers P
a1d0: 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d  1 through P1+P2-
a1e0: 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67  1 contain a sing
a1f0: 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73  le row of.** res
a200: 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64  ults. This opcod
a210: 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c  e causes the sql
a220: 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c  ite3_step() call
a230: 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a   to terminate.**
a240: 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f   with an SQLITE_
a250: 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20  ROW return code 
a260: 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74  and it sets up t
a270: 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a  he sqlite3_stmt.
a280: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  ** structure to 
a290: 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74  provide access t
a2a0: 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50  o the r(P1)..r(P
a2b0: 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61  1+P2-1) values a
a2c0: 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20  s.** the result 
a2d0: 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  row..*/.case OP_
a2e0: 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d  ResultRow: {.  M
a2f0: 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20  em *pMem;.  int 
a300: 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  i;.  assert( p->
a310: 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d  nResColumn==pOp-
a320: 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >p2 );.  assert(
a330: 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20   pOp->p1>0 );.  
a340: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b  assert( pOp->p1+
a350: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
a360: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
a370: 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
a380: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
a390: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52  _CALLBACK.  /* R
a3a0: 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  un the progress 
a3b0: 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66  counter just bef
a3c0: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20  ore returning.. 
a3d0: 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50   */.  if( db->xP
a3e0: 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26  rogress!=0.   &&
a3f0: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
a400: 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64  essLimit.   && d
a410: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
a420: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d  >pProgressArg)!=
a430: 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  0.  ){.    rc = 
a440: 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
a450: 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f  ;.    goto vdbe_
a460: 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a  error_halt;.  }.
a470: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20  #endif..  /* If 
a480: 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68  this statement h
a490: 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65  as violated imme
a4a0: 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
a4b0: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64  y constraints, d
a4c0: 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72  o.  ** not retur
a4d0: 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  n the number of 
a4e0: 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41  rows modified. A
a4f0: 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53  nd do not RELEAS
a500: 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  E the statement.
a510: 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
a520: 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65  . It needs to be
a530: 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a   rolled back.  *
a540: 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f  /.  if( SQLITE_O
a550: 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33  K!=(rc = sqlite3
a560: 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30  VdbeCheckFk(p, 0
a570: 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  )) ){.    assert
a580: 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  ( db->flags&SQLI
a590: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a  TE_CountRows );.
a5a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75      assert( p->u
a5b0: 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29  sesStmtJournal )
a5c0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
a5d0: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51  ..  /* If the SQ
a5e0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66  LITE_CountRows f
a5f0: 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71  lag is set in sq
a600: 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b  lite3.flags mask
a610: 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c  , then .  ** DML
a620: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f   statements invo
a630: 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74  ke this opcode t
a640: 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d  o return the num
a650: 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a  ber of rows .  *
a660: 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68  * modified to th
a670: 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20  e user. This is 
a680: 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61  the only way tha
a690: 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a  t a VM that.  **
a6a0: 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65   opens a stateme
a6b0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
a6c0: 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f  ay invoke this o
a6d0: 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  pcode..  **.  **
a6e0: 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73   In case this is
a6f0: 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e   such a statemen
a700: 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61  t, close any sta
a710: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
a720: 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62  on.  ** opened b
a730: 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65  y this VM before
a740: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72   returning contr
a750: 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ol to the user. 
a760: 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20  This is to.  ** 
a770: 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74  ensure that stat
a780: 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f  ement-transactio
a790: 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65  ns are always ne
a7a0: 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61  sted, not overla
a7b0: 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74  pping..  ** If t
a7c0: 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e  he open statemen
a7d0: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  t-transaction is
a7e0: 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65   not closed here
a7f0: 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a  , then the user.
a800: 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e    ** may step an
a810: 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70  other VM that op
a820: 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74  ens its own stat
a830: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a840: 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79  n. This.  ** may
a850: 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70   lead to overlap
a860: 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74  ping statement t
a870: 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a  ransactions..  *
a880: 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65  *.  ** The state
a890: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a8a0: 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d   is never a top-
a8b0: 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f  level transactio
a8c0: 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74  n.  Hence.  ** t
a8d0: 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20  he RELEASE call 
a8e0: 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20  below can never 
a8f0: 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73  fail..  */.  ass
a900: 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65  ert( p->iStateme
a910: 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61  nt==0 || db->fla
a920: 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  gs&SQLITE_CountR
a930: 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ows );.  rc = sq
a940: 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74  lite3VdbeCloseSt
a950: 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50  atement(p, SAVEP
a960: 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20  OINT_RELEASE);. 
a970: 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53   if( NEVER(rc!=S
a980: 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20  QLITE_OK) ){.   
a990: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a9a0: 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c  * Invalidate all
a9b0: 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f   ephemeral curso
a9c0: 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a  r row caches */.
a9d0: 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20    p->cacheCtr = 
a9e0: 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32  (p->cacheCtr + 2
a9f0: 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  )|1;..  /* Make 
aa00: 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73  sure the results
aa10: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
aa20: 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72  row are \000 ter
aa30: 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64  minated.  ** and
aa40: 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65   have an assigne
aa50: 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73  d type.  The res
aa60: 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65  ults are de-ephe
aa70: 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a  meralized as.  *
aa80: 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e  * a side effect.
aa90: 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70  .  */.  pMem = p
aaa0: 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26  ->pResultSet = &
aab0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
aac0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d   for(i=0; i<pOp-
aad0: 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  >p2; i++){.    a
aae0: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
aaf0: 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20  d(&pMem[i]) );. 
ab00: 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a     Deephemeraliz
ab10: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
ab20: 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69   assert( (pMem[i
ab30: 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70  ].flags & MEM_Ep
ab40: 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20  hem)==0.        
ab50: 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e      || (pMem[i].
ab60: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
ab70: 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
ab80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ab90: 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65  eMemNulTerminate
aba0: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
abb0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
abc0: 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b  Op->p1+i, &pMem[
abd0: 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64  i]);.  }.  if( d
abe0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20  b->mallocFailed 
abf0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a  ) goto no_mem;..
ac00: 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49    /* Return SQLI
ac10: 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d  TE_ROW.  */.  p-
ac20: 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
ac30: 2d 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63  - aOp) + 1;.  rc
ac40: 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20   = SQLITE_ROW;. 
ac50: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
ac60: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
ac70: 20 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33   Concat P1 P2 P3
ac80: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ac90: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b  : r[P3]=r[P2]+r[
aca0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68  P1].**.** Add th
acb0: 65 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74  e text in regist
acc0: 65 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65  er P1 onto the e
acd0: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69  nd of the text i
ace0: 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32  n.** register P2
acf0: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
ad00: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
ad10: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
ad20: 65 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20  er the P1 or P2 
ad30: 74 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68  text are NULL th
ad40: 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e  en store NULL in
ad50: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20   P3..**.**   P3 
ad60: 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a  = P2 || P1.**.**
ad70: 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66   It is illegal f
ad80: 6f 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20  or P1 and P3 to 
ad90: 62 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69  be the same regi
ada0: 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c  ster. Sometimes,
adb0: 0a 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65  .** if P3 is the
adc0: 20 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61   same register a
add0: 73 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d  s P2, the implem
ade0: 65 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65  entation is able
adf0: 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d  .** to avoid a m
ae00: 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65  emcpy()..*/.case
ae10: 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20   OP_Concat: {   
ae20: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
ae30: 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e  as TK_CONCAT, in
ae40: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ae50: 20 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20    i64 nByte;..  
ae60: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
ae70: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20  ->p1];.  pIn2 = 
ae80: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
ae90: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
aea0: 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
aeb0: 74 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b  t( pIn1!=pOut );
aec0: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
aed0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
aee0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
aef0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
af00: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
af10: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
af20: 0a 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f  .  if( ExpandBlo
af30: 62 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e  b(pIn1) || Expan
af40: 64 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f  dBlob(pIn2) ) go
af50: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72  to no_mem;.  Str
af60: 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63  ingify(pIn1, enc
af70: 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67  oding);.  String
af80: 69 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69  ify(pIn2, encodi
af90: 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70  ng);.  nByte = p
afa0: 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e  In1->n + pIn2->n
afb0: 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
afc0: 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
afd0: 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
afe0: 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
aff0: 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c  g;.  }.  if( sql
b000: 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
b010: 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65  pOut, (int)nByte
b020: 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20  +2, pOut==pIn2) 
b030: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
b040: 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74  em;.  }.  MemSet
b050: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
b060: 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70  EM_Str);.  if( p
b070: 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20  Out!=pIn2 ){.   
b080: 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c   memcpy(pOut->z,
b090: 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e   pIn2->z, pIn2->
b0a0: 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79  n);.  }.  memcpy
b0b0: 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e  (&pOut->z[pIn2->
b0c0: 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e  n], pIn1->z, pIn
b0d0: 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a  1->n);.  pOut->z
b0e0: 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75  [nByte]=0;.  pOu
b0f0: 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20  t->z[nByte+1] = 
b100: 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  0;.  pOut->flags
b110: 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20   |= MEM_Term;.  
b120: 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e  pOut->n = (int)n
b130: 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  Byte;.  pOut->en
b140: 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
b150: 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
b160: 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
b170: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
b180: 3a 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a  : Add P1 P2 P3 *
b190: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b1a0: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50   r[P3]=r[P1]+r[P
b1b0: 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  2].**.** Add the
b1c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b1d0: 65 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  er P1 to the val
b1e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b1f0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b200: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b210: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b220: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b230: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b240: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b250: 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79  Opcode: Multiply
b260: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b270: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b280: 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a  ]=r[P1]*r[P2].**
b290: 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20  .**.** Multiply 
b2a0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b2b0: 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20  ister P1 by the 
b2c0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b2d0: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b2e0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b2f0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b300: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b310: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b320: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b330: 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72  /* Opcode: Subtr
b340: 61 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  act P1 P2 P3 * *
b350: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
b360: 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d  [P3]=r[P2]-r[P1]
b370: 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20  .**.** Subtract 
b380: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b390: 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68  ister P1 from th
b3a0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b3b0: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b3c0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b3d0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b3e0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b3f0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b400: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b410: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76  /./* Opcode: Div
b420: 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ide P1 P2 P3 * *
b430: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
b440: 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d  [P3]=r[P2]/r[P1]
b450: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
b460: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b470: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
b480: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b490: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b4a0: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b4b0: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
b4c0: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
b4d0: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
b4e0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
b4f0: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
b500: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
b510: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
b520: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b530: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b540: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
b550: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b560: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
b570: 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]%r[P1].**
b580: 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20  .** Compute the 
b590: 72 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20  remainder after 
b5a0: 69 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72  integer register
b5b0: 20 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62   P2 is divided b
b5c0: 79 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  y .** register P
b5d0: 31 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  1 and store the 
b5e0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
b5f0: 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68  er P3. .** If th
b600: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b610: 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74  ter P1 is zero t
b620: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b630: 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  L..** If either 
b640: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c  operand is NULL,
b650: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b660: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
b670: 41 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20  Add:            
b680: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b690: 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20  s TK_PLUS, in1, 
b6a0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b6b0: 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20  e OP_Subtract:  
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
b6d0: 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c  ame as TK_MINUS,
b6e0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
b6f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69  */.case OP_Multi
b700: 70 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20  ply:            
b710: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
b720: 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  STAR, in1, in2, 
b730: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
b740: 44 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20  Divide:         
b750: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b760: 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c  s TK_SLASH, in1,
b770: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
b780: 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a  se OP_Remainder:
b790: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
b7a0: 73 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20  same as TK_REM, 
b7b0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b7c0: 2f 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74  /.  char bIntint
b7d0: 3b 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f  ;   /* Started o
b7e0: 75 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65  ut as two intege
b7f0: 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20  r operands */.  
b800: 75 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20  u16 flags;      
b810: 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f  /* Combined MEM_
b820: 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74  * flags from bot
b830: 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31  h inputs */.  u1
b840: 36 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a  6 type1;      /*
b850: 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66   Numeric type of
b860: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
b870: 0a 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20  .  u16 type2;   
b880: 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79     /* Numeric ty
b890: 70 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  pe of right oper
b8a0: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  and */.  i64 iA;
b8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
b8c0: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66  ger value of lef
b8d0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
b8e0: 36 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f  64 iB;         /
b8f0: 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20  * Integer value 
b900: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b910: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b   */.  double rA;
b920: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b930: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
b940: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
b950: 72 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rB;      /* Real
b960: 20 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20   value of right 
b970: 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49  operand */..  pI
b980: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
b990: 70 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e  p1];.  type1 = n
b9a0: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29  umericType(pIn1)
b9b0: 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
b9c0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70  [pOp->p2];.  typ
b9d0: 65 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65  e2 = numericType
b9e0: 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d  (pIn2);.  pOut =
b9f0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
ba00: 0a 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d  .  flags = pIn1-
ba10: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
ba20: 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61  lags;.  if( (fla
ba30: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
ba40: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
ba50: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
ba60: 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31  ll;.  if( (type1
ba70: 20 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49   & type2 & MEM_I
ba80: 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41  nt)!=0 ){.    iA
ba90: 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20   = pIn1->u.i;.  
baa0: 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69    iB = pIn2->u.i
bab0: 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20  ;.    bIntint = 
bac0: 31 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70  1;.    switch( p
bad0: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
bae0: 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a      case OP_Add:
baf0: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
bb00: 65 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69  e3AddInt64(&iB,i
bb10: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
bb20: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
bb30: 20 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63   case OP_Subtrac
bb40: 74 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53  t:  if( sqlite3S
bb50: 75 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ubInt64(&iB,iA) 
bb60: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
bb70: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bb80: 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20  se OP_Multiply: 
bb90: 20 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49   if( sqlite3MulI
bba0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
bbb0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
bbc0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bbd0: 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20  OP_Divide: {.   
bbe0: 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29       if( iA==0 )
bbf0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
bc00: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
bc10: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bc20: 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c  =-1 && iB==SMALL
bc30: 45 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f  EST_INT64 ) goto
bc40: 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20   fp_math;.      
bc50: 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20    iB /= iA;.    
bc60: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
bc70: 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74   }.      default
bc80: 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  : {.        if( 
bc90: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
bca0: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bcb0: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
bcc0: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
bcd0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20  = 1;.        iB 
bce0: 25 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62  %= iA;.        b
bcf0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
bd00: 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e    }.    pOut->u.
bd10: 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53  i = iB;.    MemS
bd20: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
bd30: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c   MEM_Int);.  }el
bd40: 73 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20  se{.    bIntint 
bd50: 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20  = 0;.fp_math:.  
bd60: 20 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64    rA = sqlite3Vd
bd70: 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31  beRealValue(pIn1
bd80: 29 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69  );.    rB = sqli
bd90: 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
bda0: 28 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74  (pIn2);.    swit
bdb0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
bdc0: 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  ){.      case OP
bdd0: 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42  _Add:         rB
bde0: 20 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72   += rA;       br
bdf0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
be00: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20  OP_Subtract:    
be10: 72 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20  rB -= rA;       
be20: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
be30: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
be40: 20 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20    rB *= rA;     
be50: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
be60: 61 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b  ase OP_Divide: {
be70: 0a 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75  .        /* (dou
be80: 62 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66  ble)0 In case of
be90: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
bea0: 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a  ATING_POINT... *
beb0: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41  /.        if( rA
bec0: 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f  ==(double)0 ) go
bed0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bee0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bef0: 20 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a        rB /= rA;.
bf00: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
bf10: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66       }.      def
bf20: 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20  ault: {.        
bf30: 69 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20  iA = (i64)rA;.  
bf40: 20 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29        iB = (i64)
bf50: 72 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  rB;.        if( 
bf60: 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69  iA==0 ) goto ari
bf70: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
bf80: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
bf90: 69 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20  if( iA==-1 ) iA 
bfa0: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20  = 1;.        rB 
bfb0: 3d 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20  = (double)(iB % 
bfc0: 69 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65  iA);.        bre
bfd0: 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
bfe0: 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
bff0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
c000: 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  INT.    pOut->u.
c010: 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  i = rB;.    MemS
c020: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
c030: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65   MEM_Int);.#else
c040: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
c050: 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20  IsNaN(rB) ){.   
c060: 20 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74     goto arithmet
c070: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
c080: 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  l;.    }.    pOu
c090: 74 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20  t->u.r = rB;.   
c0a0: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
c0b0: 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b  pOut, MEM_Real);
c0c0: 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31  .    if( ((type1
c0d0: 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c  |type2)&MEM_Real
c0e0: 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74  )==0 && !bIntint
c0f0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
c100: 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69  3VdbeIntegerAffi
c110: 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20  nity(pOut);.    
c120: 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
c130: 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69  reak;..arithmeti
c140: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c150: 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  :.  sqlite3VdbeM
c160: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
c170: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
c180: 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20  Opcode: CollSeq 
c190: 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20  P1 * * P4.**.** 
c1a0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
c1b0: 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72  to a CollSeq str
c1c0: 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74  uct. If the next
c1d0: 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20   call to a user 
c1e0: 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61  function.** or a
c1f0: 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73  ggregate calls s
c200: 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c  qlite3GetFuncCol
c210: 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c  lSeq(), this col
c220: 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20  lation sequence 
c230: 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72  will.** be retur
c240: 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ned. This is use
c250: 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69  d by the built-i
c260: 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61  n min(), max() a
c270: 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66  nd nullif().** f
c280: 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20  unctions..**.** 
c290: 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72  If P1 is not zer
c2a0: 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20  o, then it is a 
c2b0: 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20  register that a 
c2c0: 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29  subsequent min()
c2d0: 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67   or.** max() agg
c2e0: 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20  regate will set 
c2f0: 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72  to 1 if the curr
c300: 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74  ent row is not t
c310: 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a  he minimum or.**
c320: 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50   maximum.  The P
c330: 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e  1 register is in
c340: 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62  itialized to 0 b
c350: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
c360: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e  on..**.** The in
c370: 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20  terface used by 
c380: 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
c390: 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d  on of the aforem
c3a0: 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f  entioned functio
c3b0: 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76  ns.** to retriev
c3c0: 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20  e the collation 
c3d0: 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20  sequence set by 
c3e0: 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e  this opcode is n
c3f0: 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20  ot available.** 
c400: 70 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20  publicly.  Only 
c410: 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f  built-in functio
c420: 6e 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74  ns have access t
c430: 6f 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a  o this feature..
c440: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53  */.case OP_CollS
c450: 65 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  eq: {.  assert( 
c460: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
c470: 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28  COLLSEQ );.  if(
c480: 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20   pOp->p1 ){.    
c490: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
c4a0: 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
c4b0: 2d 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20  ->p1], 0);.  }. 
c4c0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c4d0: 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20  code: Function0 
c4e0: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
c4f0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
c500: 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29  ]=func(r[P2@P5])
c510: 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20  .**.** Invoke a 
c520: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50  user function (P
c530: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c540: 6f 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  o a FuncDef obje
c550: 63 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  ct that.** defin
c560: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
c570: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c580: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
c590: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
c5a0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c5b0: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c5c0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c5d0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
c5e0: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
c5f0: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
c600: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c610: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
c620: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
c630: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
c640: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c650: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
c660: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
c670: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
c680: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
c690: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
c6a0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
c6b0: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
c6c0: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
c6d0: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
c6e0: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c6f0: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
c700: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
c710: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c720: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c730: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
c740: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
c750: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
c760: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
c770: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
c780: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
c790: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
c7a0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
c7b0: 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67  so: Function, Ag
c7c0: 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a  gStep, AggFinal.
c7d0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75  */./* Opcode: Fu
c7e0: 6e 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20  nction P1 P2 P3 
c7f0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
c800: 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b  s: r[P3]=func(r[
c810: 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e  P2@P5]).**.** In
c820: 76 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63  voke a user func
c830: 74 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f  tion (P4 is a po
c840: 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
c850: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
c860: 63 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61  ct that.** conta
c870: 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
c880: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
c890: 20 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35   be run) with P5
c8a0: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
c8b0: 0a 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65  .** from registe
c8c0: 72 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73  r P2 and success
c8d0: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
c8e0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c8f0: 20 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e   is stored.** in
c900: 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52   register P3.  R
c910: 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20  egister P3 must 
c920: 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68  not be one of th
c930: 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74  e function input
c940: 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  s..**.** P1 is a
c950: 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20   32-bit bitmask 
c960: 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68  indicating wheth
c970: 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61  er or not each a
c980: 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a  rgument to the .
c990: 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ** function was 
c9a0: 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65  determined to be
c9b0: 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d   constant at com
c9c0: 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68  pile time. If th
c9d0: 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d  e first.** argum
c9e0: 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74  ent was constant
c9f0: 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50   then bit 0 of P
ca00: 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69  1 is set. This i
ca10: 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  s used to determ
ca20: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d  ine.** whether m
ca30: 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61  eta data associa
ca40: 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20  ted with a user 
ca50: 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e  function argumen
ca60: 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73  t using the.** s
ca70: 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61  qlite3_set_auxda
ca80: 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20  ta() API may be 
ca90: 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20  safely retained 
caa0: 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a  until the next.*
cab0: 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20  * invocation of 
cac0: 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
cad0: 2a 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73  ** SQL functions
cae0: 20 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63   are initially c
caf0: 6f 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74  oded as OP_Funct
cb00: 69 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69  ion0 with P4 poi
cb10: 6e 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75  nting.** to a Fu
cb20: 6e 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42  ncDef object.  B
cb30: 75 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c  ut on first eval
cb40: 75 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f  uation, the P4 o
cb50: 70 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74  perand is.** aut
cb60: 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65  omatically conve
cb70: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c  rted into an sql
cb80: 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
cb90: 65 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72  ect and the oper
cba0: 61 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64  ation.** changed
cbb0: 20 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63   to this OP_Func
cbc0: 74 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e  tion opcode.  In
cbd0: 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69   this way, the i
cbe0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66  nitialization of
cbf0: 0a 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f  .** the sqlite3_
cc00: 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f  context object o
cc10: 63 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c  ccurs only once,
cc20: 20 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63   rather than onc
cc30: 65 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76  e for each.** ev
cc40: 61 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  aluation of the 
cc50: 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  function..**.** 
cc60: 53 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69  See also: Functi
cc70: 6f 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67  on0, AggStep, Ag
cc80: 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f  gFinal.*/.case O
cc90: 50 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20  P_Function0: {. 
cca0: 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65   int n;.  sqlite
ccb0: 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
ccc0: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
ccd0: 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
cce0: 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70  DEF );.  n = pOp
ccf0: 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
cd00: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
cd10: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
cd20: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
cd30: 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20  assert( n==0 || 
cd40: 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f  (pOp->p2>0 && pO
cd50: 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  p->p2+n<=(p->nMe
cd60: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29  m-p->nCursor)+1)
cd70: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
cd80: 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c  p->p3<pOp->p2 ||
cd90: 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70   pOp->p3>=pOp->p
cda0: 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20  2+n );.  pCtx = 
cdb0: 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52  sqlite3DbMallocR
cdc0: 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70  aw(db, sizeof(*p
cdd0: 43 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a  Ctx) + (n-1)*siz
cde0: 65 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75  eof(sqlite3_valu
cdf0: 65 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78  e*));.  if( pCtx
ce00: 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
ce10: 6d 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  m;.  pCtx->pOut 
ce20: 3d 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75  = 0;.  pCtx->pFu
ce30: 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75  nc = pOp->p4.pFu
ce40: 6e 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20  nc;.  pCtx->iOp 
ce50: 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
ce60: 70 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62  p);.  pCtx->pVdb
ce70: 65 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61  e = p;.  pCtx->a
ce80: 72 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e  rgc = n;.  pOp->
ce90: 70 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43  p4type = P4_FUNC
cea0: 43 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70  CTX;.  pOp->p4.p
ceb0: 43 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f  Ctx = pCtx;.  pO
cec0: 70 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46  p->opcode = OP_F
ced0: 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61  unction;.  /* Fa
cee0: 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
cef0: 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d  OP_Function */.}
cf00: 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f  .case OP_Functio
cf10: 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  n: {.  int i;.  
cf20: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
cf30: 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
cf40: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
cf50: 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70  4_FUNCCTX );.  p
cf60: 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43  Ctx = pOp->p4.pC
cf70: 74 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69  tx;..  /* If thi
cf80: 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e  s function is in
cf90: 73 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65  side of a trigge
cfa0: 72 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20  r, the register 
cfb0: 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a  array in aMem[].
cfc0: 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67    ** might chang
cfd0: 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75  e from one evalu
cfe0: 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78  ation to the nex
cff0: 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f  t.  The next blo
d000: 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20  ck of code.  ** 
d010: 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
d020: 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72   the register ar
d030: 72 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c  ray has changed,
d040: 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20   and if so it.  
d050: 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73  ** reinitializes
d060: 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61   the relavant pa
d070: 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74  rts of the sqlit
d080: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
d090: 74 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61  t */.  pOut = &a
d0a0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
d0b0: 69 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21  if( pCtx->pOut !
d0c0: 3d 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43  = pOut ){.    pC
d0d0: 74 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b  tx->pOut = pOut;
d0e0: 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d  .    for(i=pCtx-
d0f0: 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69  >argc-1; i>=0; i
d100: 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69  --) pCtx->argv[i
d110: 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ] = &aMem[pOp->p
d120: 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d  2+i];.  }..  mem
d130: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
d140: 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69   pCtx->pOut);.#i
d150: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
d160: 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70  G.  for(i=0; i<p
d170: 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b  Ctx->argc; i++){
d180: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
d190: 49 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72  IsValid(pCtx->ar
d1a0: 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45  gv[i]) );.    RE
d1b0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
d1c0: 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72  ->p2+i, pCtx->ar
d1d0: 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64  gv[i]);.  }.#end
d1e0: 69 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  if.  MemSetTypeF
d1f0: 6c 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20  lag(pCtx->pOut, 
d200: 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74  MEM_Null);.  pCt
d210: 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  x->fErrorOrAux =
d220: 20 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f   0;.  db->lastRo
d230: 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b  wid = lastRowid;
d240: 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63  .  (*pCtx->pFunc
d250: 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20  ->xSFunc)(pCtx, 
d260: 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78  pCtx->argc, pCtx
d270: 2d 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20  ->argv);/* IMP: 
d280: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
d290: 0a 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64  .  lastRowid = d
d2a0: 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f  b->lastRowid;  /
d2b0: 2a 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64  * Remember rowid
d2c0: 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
d2d0: 20 78 53 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a   xSFunc */..  /*
d2e0: 20 49 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   If the function
d2f0: 20 72 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72   returned an err
d300: 6f 72 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  or, throw an exc
d310: 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20  eption */.  if( 
d320: 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75  pCtx->fErrorOrAu
d330: 78 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74  x ){.    if( pCt
d340: 78 2d 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20  x->isError ){.  
d350: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
d360: 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
d370: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
d380: 28 70 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20  (pCtx->pOut));. 
d390: 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
d3a0: 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
d3b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
d3c0: 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70  leteAuxData(p, p
d3d0: 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70  Ctx->iOp, pOp->p
d3e0: 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f  1);.  }..  /* Co
d3f0: 70 79 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  py the result of
d400: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e   the function in
d410: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 2a  to register P3 *
d420: 2f 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c  /.  if( pOut->fl
d430: 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d  ags & (MEM_Str|M
d440: 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20  EM_Blob) ){.    
d450: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
d460: 65 45 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e  eEncoding(pCtx->
d470: 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pOut, encoding);
d480: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
d490: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43  VdbeMemTooBig(pC
d4a0: 74 78 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f  tx->pOut) ) goto
d4b0: 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20   too_big;.  }.. 
d4c0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d4d0: 70 4f 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70  pOp->p3, pCtx->p
d4e0: 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d  Out);.  UPDATE_M
d4f0: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78  AX_BLOBSIZE(pCtx
d500: 2d 3e 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  ->pOut);.  break
d510: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
d520: 42 69 74 41 6e 64 20 50 31 20 50 32 20 50 33 20  BitAnd P1 P2 P3 
d530: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d540: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b    r[P3]=r[P1]&r[
d550: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d560: 68 65 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20  he bit-wise AND 
d570: 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e  of the values in
d580: 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64   register P1 and
d590: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65   P2 and.** store
d5a0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
d5b0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
d5c0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
d5d0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
d5e0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
d5f0: 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20  * Opcode: BitOr 
d600: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d610: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d620: 3d 72 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]|r[P2].**.
d630: 2a 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d  ** Take the bit-
d640: 77 69 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76  wise OR of the v
d650: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d660: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d670: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d680: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d690: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d6a0: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d6b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d6c0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d6d0: 3a 20 53 68 69 66 74 4c 65 66 74 20 50 31 20 50  : ShiftLeft P1 P
d6e0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
d6f0: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
d700: 32 5d 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20  2]<<r[P1].**.** 
d710: 53 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65  Shift the intege
d720: 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  r value in regis
d730: 74 65 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65  ter P2 to the le
d740: 66 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ft by the.** num
d750: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
d760: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
d770: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
d780: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
d790: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
d7a0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
d7b0: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
d7c0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
d7d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
d7e0: 70 63 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68  pcode: ShiftRigh
d7f0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
d800: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
d810: 33 5d 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a  3]=r[P2]>>r[P1].
d820: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
d830: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
d840: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
d850: 74 68 65 20 72 69 67 68 74 20 62 79 20 74 68 65  the right by the
d860: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
d870: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
d880: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
d890: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
d8a0: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
d8b0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
d8c0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
d8d0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
d8e0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
d8f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e  */.case OP_BitAn
d900: 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d:              
d910: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
d920: 5f 42 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e  _BITAND, in1, in
d930: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
d940: 4f 50 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20  OP_BitOr:       
d950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
d960: 6d 65 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20  me as TK_BITOR, 
d970: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
d980: 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c  /.case OP_ShiftL
d990: 65 66 74 3a 20 20 20 20 20 20 20 20 20 20 20 20  eft:            
d9a0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
d9b0: 4c 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32  LSHIFT, in1, in2
d9c0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
d9d0: 50 5f 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20  P_ShiftRight: { 
d9e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
d9f0: 65 20 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20  e as TK_RSHIFT, 
da00: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
da10: 2f 0a 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36  /.  i64 iA;.  u6
da20: 34 20 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a  4 uA;.  i64 iB;.
da30: 20 20 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31    u8 op;..  pIn1
da40: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
da50: 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65  ];.  pIn2 = &aMe
da60: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f  m[pOp->p2];.  pO
da70: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
da80: 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p3];.  if( (pIn1
da90: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
daa0: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
dab0: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
dac0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
dad0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
dae0: 0a 20 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69  .  }.  iA = sqli
daf0: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
db00: 70 49 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71  pIn2);.  iB = sq
db10: 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
db20: 65 28 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20  e(pIn1);.  op = 
db30: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69  pOp->opcode;.  i
db40: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64  f( op==OP_BitAnd
db50: 20 29 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42   ){.    iA &= iB
db60: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70  ;.  }else if( op
db70: 3d 3d 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20  ==OP_BitOr ){.  
db80: 20 20 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65    iA |= iB;.  }e
db90: 6c 73 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b  lse if( iB!=0 ){
dba0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d  .    assert( op=
dbb0: 3d 4f 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c  =OP_ShiftRight |
dbc0: 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  | op==OP_ShiftLe
dbd0: 66 74 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  ft );..    /* If
dbe0: 20 73 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e   shifting by a n
dbf0: 65 67 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20  egative amount, 
dc00: 73 68 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68  shift in the oth
dc10: 65 72 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a  er direction */.
dc20: 20 20 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a      if( iB<0 ){.
dc30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f 50        assert( OP
dc40: 5f 53 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f  _ShiftRight==OP_
dc50: 53 68 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20  ShiftLeft+1 );. 
dc60: 20 20 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53       op = 2*OP_S
dc70: 68 69 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f  hiftLeft + 1 - o
dc80: 70 3b 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42  p;.      iB = iB
dc90: 3e 28 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36  >(-64) ? -iB : 6
dca0: 34 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66  4;.    }..    if
dcb0: 28 20 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20  ( iB>=64 ){.    
dcc0: 20 20 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c    iA = (iA>=0 ||
dcd0: 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66   op==OP_ShiftLef
dce0: 74 29 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20  t) ? 0 : -1;.   
dcf0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65   }else{.      me
dd00: 6d 63 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73  mcpy(&uA, &iA, s
dd10: 69 7a 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20  izeof(uA));.    
dd20: 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69    if( op==OP_Shi
dd30: 66 74 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20  ftLeft ){.      
dd40: 20 20 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20    uA <<= iB;.   
dd50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
dd60: 20 20 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20    uA >>= iB;.   
dd70: 20 20 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74       /* Sign-ext
dd80: 65 6e 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73  end on a right s
dd90: 68 69 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69  hift of a negati
dda0: 76 65 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  ve number */.   
ddb0: 20 20 20 20 20 69 66 28 20 69 41 3c 30 20 29 20       if( iA<0 ) 
ddc0: 75 41 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78  uA |= ((((u64)0x
ddd0: 66 66 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30  ffffffff)<<32)|0
dde0: 78 66 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36  xffffffff) << (6
ddf0: 34 2d 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20  4-iB);.      }. 
de00: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c       memcpy(&iA,
de10: 20 26 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29   &uA, sizeof(iA)
de20: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  );.    }.  }.  p
de30: 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20  Out->u.i = iA;. 
de40: 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
de50: 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
de60: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
de70: 70 63 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50  pcode: AddImm  P
de80: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
de90: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72  nopsis:  r[P1]=r
dea0: 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41  [P1]+P2.** .** A
deb0: 64 64 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  dd the constant 
dec0: 50 32 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P2 to the value 
ded0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
dee0: 2a 2a 20 54 68 65 20 72 65 73 75 6c 74 20 69 73  ** The result is
def0: 20 61 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67   always an integ
df00: 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72  er..**.** To for
df10: 63 65 20 61 6e 79 20 72 65 67 69 73 74 65 72 20  ce any register 
df20: 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72  to be an integer
df30: 2c 20 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f  , just add 0..*/
df40: 0a 63 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a  .case OP_AddImm:
df50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
df60: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
df70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
df80: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
df90: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
dfa0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
dfb0: 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
dfc0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70    pIn1->u.i += p
dfd0: 4f 70 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b  Op->p2;.  break;
dfe0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  .}../* Opcode: M
dff0: 75 73 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a  ustBeInt P1 P2 *
e000: 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63   * *.** .** Forc
e010: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
e020: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
e030: 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66   an integer.  If
e040: 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e   the value.** in
e050: 20 50 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P1 is not an in
e060: 74 65 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74  teger and cannot
e070: 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e   be converted in
e080: 74 6f 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a  to an integer.**
e090: 20 77 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f   without data lo
e0a0: 73 73 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  ss, then jump im
e0b0: 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c  mediately to P2,
e0c0: 20 6f 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20   or if P2==0.** 
e0d0: 72 61 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f  raise an SQLITE_
e0e0: 4d 49 53 4d 41 54 43 48 20 65 78 63 65 70 74 69  MISMATCH excepti
e0f0: 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d  on..*/.case OP_M
e100: 75 73 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20  ustBeInt: {     
e110: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
e120: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e130: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e140: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
e150: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
e160: 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
e170: 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49  inity(pIn1, SQLI
e180: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
e190: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56  encoding);.    V
e1a0: 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28  dbeBranchTaken((
e1b0: 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
e1c0: 49 6e 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Int)==0, 2);.   
e1d0: 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
e1e0: 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20  s & MEM_Int)==0 
e1f0: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
e200: 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
e210: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d     rc = SQLITE_M
e220: 49 53 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20  ISMATCH;.       
e230: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
e240: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
e250: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67  }else{.        g
e260: 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
e270: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e280: 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  }.  MemSetTypeFl
e290: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74  ag(pIn1, MEM_Int
e2a0: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23  );.  break;.}..#
e2b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
e2c0: 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e  IT_FLOATING_POIN
e2d0: 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  T./* Opcode: Rea
e2e0: 6c 41 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a  lAffinity P1 * *
e2f0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65   * *.**.** If re
e300: 67 69 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20  gister P1 holds 
e310: 61 6e 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65  an integer conve
e320: 72 74 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20  rt it to a real 
e330: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  value..**.** Thi
e340: 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
e350: 20 77 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67   when extracting
e360: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f   information fro
e370: 6d 20 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a  m a column that.
e380: 2a 2a 20 68 61 73 20 52 45 41 4c 20 61 66 66 69  ** has REAL affi
e390: 6e 69 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75  nity.  Such colu
e3a0: 6d 6e 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74  mn values may st
e3b0: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73  ill be stored as
e3c0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f  .** integers, fo
e3d0: 72 20 73 70 61 63 65 20 65 66 66 69 63 69 65 6e  r space efficien
e3e0: 63 79 2c 20 62 75 74 20 61 66 74 65 72 20 65 78  cy, but after ex
e3f0: 74 72 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74  traction we want
e400: 20 74 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65   them.** to have
e410: 20 6f 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c   only a real val
e420: 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ue..*/.case OP_R
e430: 65 61 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20  ealAffinity: {  
e440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e450: 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  /* in1 */.  pIn1
e460: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
e470: 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
e480: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
e490: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e4a0: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e4b0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e4c0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
e4d0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41  f SQLITE_OMIT_CA
e4e0: 53 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61  ST./* Opcode: Ca
e4f0: 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
e500: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
e510: 6e 69 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a  nity(r[P1]).**.*
e520: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
e530: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
e540: 20 74 6f 20 62 65 20 74 68 65 20 74 79 70 65 20   to be the type 
e550: 64 65 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a  defined by P2..*
e560: 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c  * .** <ul>.** <l
e570: 69 20 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45  i value="97"> TE
e580: 58 54 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  XT.** <li value=
e590: 22 39 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c  "98"> BLOB.** <l
e5a0: 69 20 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55  i value="99"> NU
e5b0: 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c  MERIC.** <li val
e5c0: 75 65 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45  ue="100"> INTEGE
e5d0: 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  R.** <li value="
e5e0: 31 30 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f  101"> REAL.** </
e5f0: 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  ul>.**.** A NULL
e600: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
e610: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
e620: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
e630: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
e640: 20 4f 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20   OP_Cast: {     
e650: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e660: 69 6e 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  in1 */.  assert(
e670: 20 70 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45   pOp->p2>=SQLITE
e680: 5f 41 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70  _AFF_BLOB && pOp
e690: 2d 3e 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2<=SQLITE_AFF
e6a0: 5f 52 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63  _REAL );.  testc
e6b0: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e6c0: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b  LITE_AFF_TEXT );
e6d0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e6e0: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e6f0: 5f 42 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63  _BLOB );.  testc
e700: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e710: 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
e720: 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
e730: 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
e740: 41 46 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20  AFF_INTEGER );. 
e750: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e760: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2==SQLITE_AFF_R
e770: 45 41 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  EAL );.  pIn1 = 
e780: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e790: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e7a0: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72  ge(p, pIn1);.  r
e7b0: 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  c = ExpandBlob(p
e7c0: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
e7d0: 64 62 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c  dbeMemCast(pIn1,
e7e0: 20 70 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69   pOp->p2, encodi
e7f0: 6e 67 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ng);.  UPDATE_MA
e800: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
e810: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
e820: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
e830: 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f  IT_CAST */../* O
e840: 70 63 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20  pcode: Lt P1 P2 
e850: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
e860: 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72  psis: if r[P1]<r
e870: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e880: 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76  ** Compare the v
e890: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
e8a0: 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66  r P1 and P3.  If
e8b0: 20 72 65 67 28 50 33 29 3c 72 65 67 28 50 31 29   reg(P3)<reg(P1)
e8c0: 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f   then.** jump to
e8d0: 20 61 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a   address P2.  .*
e8e0: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
e8f0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69  TE_JUMPIFNULL bi
e900: 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  t of P5 is set a
e910: 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50 31  nd either reg(P1
e920: 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20  ) or.** reg(P3) 
e930: 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
e940: 65 20 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20  e the jump.  If 
e950: 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49  the SQLITE_JUMPI
e960: 46 4e 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73  FNULL .** bit is
e970: 20 63 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c   clear then fall
e980: 20 74 68 72 6f 75 67 68 20 69 66 20 65 69 74 68   through if eith
e990: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
e9a0: 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51  LL..**.** The SQ
e9b0: 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f  LITE_AFF_MASK po
e9c0: 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74  rtion of P5 must
e9d0: 20 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20   be an affinity 
e9e0: 63 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53  character -.** S
e9f0: 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20  QLITE_AFF_TEXT, 
ea00: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
ea10: 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ER, and so forth
ea20: 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20  . An attempt is 
ea30: 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72  made .** to coer
ea40: 63 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61  ce both inputs a
ea50: 63 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73  ccording to this
ea60: 20 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65   affinity before
ea70: 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73   the.** comparis
ea80: 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74  on is made. If t
ea90: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
eaa0: 53 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e  SK is 0x00, then
eab0: 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69   numeric.** affi
eac0: 6e 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f  nity is used. No
ead0: 74 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69  te that the affi
eae0: 6e 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73  nity conversions
eaf0: 20 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62   are stored.** b
eb00: 61 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70  ack into the inp
eb10: 75 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20  ut registers P1 
eb20: 61 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73  and P3.  So this
eb30: 20 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73   opcode can caus
eb40: 65 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20  e.** persistent 
eb50: 63 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73  changes to regis
eb60: 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a  ters P1 and P3..
eb70: 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63  **.** Once any c
eb80: 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20  onversions have 
eb90: 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64  taken place, and
eba0: 20 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69   neither value i
ebb0: 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20  s NULL, .** the 
ebc0: 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61  values are compa
ebd0: 72 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c  red. If both val
ebe0: 75 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68  ues are blobs th
ebf0: 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a  en memcmp() is.*
ec00: 2a 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d  * used to determ
ec10: 69 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ine the results 
ec20: 6f 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  of the compariso
ec30: 6e 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  n.  If both valu
ec40: 65 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20  es.** are text, 
ec50: 74 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72  then the appropr
ec60: 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66  iate collating f
ec70: 75 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65  unction specifie
ec80: 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75  d in.** P4 is  u
ec90: 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f  sed to do the co
eca0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34  mparison.  If P4
ecb0: 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65   is not specifie
ecc0: 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70  d then.** memcmp
ecd0: 28 29 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f  () is used to co
ece0: 6d 70 61 72 65 20 74 65 78 74 20 73 74 72 69 6e  mpare text strin
ecf0: 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75  g.  If both valu
ed00: 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69  es are.** numeri
ed10: 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69  c, then a numeri
ed20: 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20  c comparison is 
ed30: 75 73 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f  used. If the two
ed40: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f   values.** are o
ed50: 66 20 64 69 66 66 65 72 65 6e 74 20 74 79 70 65  f different type
ed60: 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20  s, then numbers 
ed70: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
ed80: 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69  ess than.** stri
ed90: 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20  ngs and strings 
eda0: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c  are considered l
edb0: 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a  ess than blobs..
edc0: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
edd0: 49 54 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20  ITE_STOREP2 bit 
ede0: 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20 74 68  of P5 is set, th
edf0: 65 6e 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20  en do not jump. 
ee00: 20 49 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f   Instead,.** sto
ee10: 72 65 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73  re a boolean res
ee20: 75 6c 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f  ult (either 0, o
ee30: 72 20 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  r 1, or NULL) in
ee40: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
ee50: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ee60: 45 5f 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20  E_NULLEQ bit is 
ee70: 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20  set in P5, then 
ee80: 4e 55 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20  NULL values are 
ee90: 63 6f 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71  considered.** eq
eea0: 75 61 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68  ual to one anoth
eeb0: 65 72 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61  er, provided tha
eec0: 74 20 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61  t they do not ha
eed0: 76 65 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65  ve their MEM_Cle
eee0: 61 72 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e  ared.** bit set.
eef0: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
ef00: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ef10: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ef20: 20 72 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f   r[P1]!=r[P3] go
ef30: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
ef40: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
ef50: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
ef60: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
ef70: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
ef80: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
ef90: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
efa0: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
efb0: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c  qual.  See the L
efc0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  t opcode for.** 
efd0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
efe0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
eff0: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69   SQLITE_NULLEQ i
f000: 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e  s set in P5 then
f010: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63   the result of c
f020: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77  omparison is alw
f030: 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72  ays either.** tr
f040: 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20  ue or false and 
f050: 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20  is never NULL.  
f060: 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  If both operands
f070: 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74   are NULL then t
f080: 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20  he result.** of 
f090: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61  comparison is fa
f0a0: 6c 73 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  lse.  If either 
f0b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
f0c0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
f0d0: 69 73 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e  is true..** If n
f0e0: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f0f0: 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c  s NULL the resul
f100: 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73  t is the same as
f110: 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a   it would be if.
f120: 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55  ** the SQLITE_NU
f130: 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f  LLEQ flag were o
f140: 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a  mitted from P5..
f150: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71  */./* Opcode: Eq
f160: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
f170: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
f180: 72 5b 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74  r[P1]==r[P3] got
f190: 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  o P2.**.** This 
f1a0: 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
f1b0: 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78  the Lt opcode ex
f1c0: 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75  cept that the ju
f1d0: 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a  mp is taken if.*
f1e0: 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69  * the operands i
f1f0: 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  n registers P1 a
f200: 6e 64 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e  nd P3 are equal.
f210: 0a 2a 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f  .** See the Lt o
f220: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
f230: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
f240: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
f250: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
f260: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
f270: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
f280: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
f290: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
f2a0: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
f2b0: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
f2c0: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
f2d0: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f2e0: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
f2f0: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
f300: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
f310: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
f320: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
f330: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
f340: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f350: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
f360: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
f370: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
f380: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
f390: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
f3a0: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20   from P5..*/./* 
f3b0: 4f 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32  Opcode: Le P1 P2
f3c0: 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
f3d0: 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c  opsis: if r[P1]<
f3e0: 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  =r[P3] goto P2.*
f3f0: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f400: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f410: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f420: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f430: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f440: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f450: 74 65 72 20 50 33 20 69 73 20 6c 65 73 73 20 74  ter P3 is less t
f460: 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
f470: 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a  the content of.*
f480: 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20  * register P1.  
f490: 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  See the Lt opcod
f4a0: 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  e for additional
f4b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
f4c0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50  ./* Opcode: Gt P
f4d0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f4e0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f4f0: 50 31 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50  P1]>r[P3] goto P
f500: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
f510: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f520: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
f530: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f540: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f550: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
f560: 67 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65  gister P3 is gre
f570: 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f  ater than the co
f580: 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69  ntent of.** regi
f590: 73 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68  ster P1.  See th
f5a0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20  e Lt opcode for 
f5b0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f5c0: 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
f5d0: 63 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50  code: Ge P1 P2 P
f5e0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f5f0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72  sis: if r[P1]>=r
f600: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f610: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f620: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f630: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f640: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f650: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f660: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f670: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
f680: 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
f690: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f6a0: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f6b0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f6c0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f6d0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f6e0: 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20  /.case OP_Eq:   
f6f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
f700: 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75  ame as TK_EQ, ju
f710: 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a  mp, in1, in3 */.
f720: 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20  case OP_Ne:     
f730: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f740: 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70  e as TK_NE, jump
f750: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f760: 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20  se OP_Lt:       
f770: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f780: 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20  as TK_LT, jump, 
f790: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f7a0: 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20   OP_Le:         
f7b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f7c0: 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LE, jump, in
f7d0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f7e0: 50 5f 47 74 3a 20 20 20 20 20 20 20 20 20 20 20  P_Gt:           
f7f0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f800: 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_GT, jump, in1,
f810: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f820: 47 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  Ge: {           
f830: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f840: 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GE, jump, in1, i
f850: 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  n3 */.  int res;
f860: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
f870: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d  esult of the com
f880: 70 61 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20  parison of pIn1 
f890: 61 67 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a  against pIn3 */.
f8a0: 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
f8b0: 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
f8c0: 79 20 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d  y to use for com
f8d0: 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36  parison */.  u16
f8e0: 20 66 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20   flags1;        
f8f0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74   /* Copy of init
f900: 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e  ial value of pIn
f910: 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31  1->flags */.  u1
f920: 36 20 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20  6 flags3;       
f930: 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69    /* Copy of ini
f940: 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49  tial value of pI
f950: 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20  n3->flags */..  
f960: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
f970: 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20  ->p1];.  pIn3 = 
f980: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
f990: 20 20 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d    flags1 = pIn1-
f9a0: 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33  >flags;.  flags3
f9b0: 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a   = pIn3->flags;.
f9c0: 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20    if( (flags1 | 
f9d0: 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c  flags3)&MEM_Null
f9e0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f   ){.    /* One o
f9f0: 72 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20  r both operands 
fa00: 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20  are NULL */.    
fa10: 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
fa20: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20  LITE_NULLEQ ){. 
fa30: 20 20 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54       /* If SQLIT
fa40: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
fa50: 28 77 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79  (which will only
fa60: 20 68 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f   happen if the o
fa70: 70 65 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20  perator is.     
fa80: 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f   ** OP_Eq or OP_
fa90: 4e 65 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68  Ne) then take th
faa0: 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65  e jump or not de
fab0: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
fac0: 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e  er.      ** or n
fad0: 6f 74 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73  ot both operands
fae0: 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20   are null..     
faf0: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
fb00: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
fb10: 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  P_Eq || pOp->opc
fb20: 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20  ode==OP_Ne );.  
fb30: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 6c 61      assert( (fla
fb40: 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65  gs1 & MEM_Cleare
fb50: 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  d)==0 );.      a
fb60: 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20  ssert( (pOp->p5 
fb70: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
fb80: 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  ULL)==0 );.     
fb90: 20 69 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d   if( (flags1&MEM
fba0: 5f 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20  _Null)!=0.      
fbb0: 20 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f   && (flags3&MEM_
fbc0: 4e 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20  Null)!=0.       
fbd0: 26 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43  && (flags3&MEM_C
fbe0: 6c 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20  leared)==0.     
fbf0: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20   ){.        res 
fc00: 3d 20 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73  = 0;  /* Results
fc10: 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
fc20: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
fc30: 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20     res = 1;  /* 
fc40: 52 65 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20  Results are not 
fc50: 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d  equal */.      }
fc60: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
fc70: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c    /* SQLITE_NULL
fc80: 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20  EQ is clear and 
fc90: 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65  at least one ope
fca0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20  rand is NULL,.  
fcb0: 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20      ** then the 
fcc0: 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73  result is always
fcd0: 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20   NULL..      ** 
fce0: 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  The jump is take
fcf0: 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f  n if the SQLITE_
fd00: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69  JUMPIFNULL bit i
fd10: 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a  s set..      */.
fd20: 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70        if( pOp->p
fd30: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
fd40: 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f  P2 ){.        pO
fd50: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
fd60: 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  p2];.        mem
fd70: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
fd80: 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20   pOut);.        
fd90: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
fda0: 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
fdb0: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
fdc0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
fdd0: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pOut);.      }el
fde0: 73 65 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65  se{.        Vdbe
fdf0: 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
fe00: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 4f  ;.        if( pO
fe10: 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a  p->p5 & SQLITE_J
fe20: 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20  UMPIFNULL ){.   
fe30: 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
fe40: 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
fe50: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
fe60: 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
fe70: 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69  else{.    /* Nei
fe80: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
fe90: 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70  NULL.  Do a comp
fea0: 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61  arison. */.    a
feb0: 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70  ffinity = pOp->p
fec0: 35 20 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d  5 & SQLITE_AFF_M
fed0: 41 53 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66  ASK;.    if( aff
fee0: 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46  inity>=SQLITE_AF
fef0: 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20  F_NUMERIC ){.   
ff00: 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
ff10: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
ff20: 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
ff30: 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
ff40: 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66   applyNumericAff
ff50: 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20  inity(pIn1,0);. 
ff60: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
ff70: 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f   (flags3 & (MEM_
ff80: 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d  Int|MEM_Real|MEM
ff90: 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  _Str))==MEM_Str 
ffa0: 29 7b 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79  ){.        apply
ffb0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
ffc0: 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d  pIn3,0);.      }
ffd0: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61  .    }else if( a
ffe0: 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f  ffinity==SQLITE_
fff0: 41 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20  AFF_TEXT ){.    
10000 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20    if( (flags1 & 
10010 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28  MEM_Str)==0 && (
10020 66 6c 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e  flags1 & (MEM_In
10030 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20  t|MEM_Real))!=0 
10040 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  ){.        testc
10050 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10060 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
10070 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
10080 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10090 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20  M_Real );.      
100a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
100b0 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
100c0 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20  encoding, 1);.  
100d0 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
100e0 28 66 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29  (flags1&MEM_Dyn)
100f0 20 21 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73   != (pIn1->flags
10100 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20  &MEM_Dyn) );.   
10110 20 20 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70       flags1 = (p
10120 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45  In1->flags & ~ME
10130 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66  M_TypeMask) | (f
10140 6c 61 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65  lags1 & MEM_Type
10150 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mask);.      }. 
10160 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 33       if( (flags3
10170 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26   & MEM_Str)==0 &
10180 26 20 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d  & (flags3 & (MEM
10190 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21  _Int|MEM_Real))!
101a0 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65  =0 ){.        te
101b0 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c  stcase( pIn3->fl
101c0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
101d0 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
101e0 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  e( pIn3->flags &
101f0 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20   MEM_Real );.   
10200 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10210 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e  MemStringify(pIn
10220 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b  3, encoding, 1);
10230 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
10240 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44  e( (flags3&MEM_D
10250 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c  yn) != (pIn3->fl
10260 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a  ags&MEM_Dyn) );.
10270 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d          flags3 =
10280 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10290 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
102a0 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54   (flags3 & MEM_T
102b0 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20  ypeMask);.      
102c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65  }.    }.    asse
102d0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
102e0 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70  =P4_COLLSEQ || p
102f0 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20  Op->p4.pColl==0 
10300 29 3b 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73  );.    if( flags
10310 31 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  1 & MEM_Zero ){.
10320 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10330 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
10340 49 6e 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67  In1);.      flag
10350 73 31 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b  s1 &= ~MEM_Zero;
10360 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 66  .    }.    if( f
10370 6c 61 67 73 33 20 26 20 4d 45 4d 5f 5a 65 72 6f  lags3 & MEM_Zero
10380 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
10390 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c  3VdbeMemExpandBl
103a0 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20  ob(pIn3);.      
103b0 66 6c 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a  flags3 &= ~MEM_Z
103c0 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  ero;.    }.    r
103d0 65 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43  es = sqlite3MemC
103e0 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e  ompare(pIn3, pIn
103f0 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c  1, pOp->p4.pColl
10400 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28  );.  }.  switch(
10410 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
10420 20 20 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20      case OP_Eq: 
10430 20 20 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b     res = res==0;
10440 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10450 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72  case OP_Ne:    r
10460 65 73 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20  es = res!=0;    
10470 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10480 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d   OP_Lt:    res =
10490 20 72 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65   res<0;      bre
104a0 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
104b0 4c 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73  Le:    res = res
104c0 3c 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a  <=0;     break;.
104d0 20 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20      case OP_Gt: 
104e0 20 20 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20     res = res>0; 
104f0 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10500 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
10510 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20  es = res>=0;    
10520 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
10530 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67  * Undo any chang
10540 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79  es made by apply
10550 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68  Affinity() to th
10560 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
10570 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  s. */.  assert( 
10580 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
10590 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
105a0 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s1 & MEM_Dyn) );
105b0 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
105c0 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72   flags1;.  asser
105d0 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  t( (pIn3->flags 
105e0 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66  & MEM_Dyn) == (f
105f0 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29  lags3 & MEM_Dyn)
10600 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67   );.  pIn3->flag
10610 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69  s = flags3;..  i
10620 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c  f( pOp->p5 & SQL
10630 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20  ITE_STOREP2 ){. 
10640 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
10650 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65  pOp->p2];.    me
10660 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
10670 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d  , pOut);.    Mem
10680 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
10690 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20  , MEM_Int);.    
106a0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b  pOut->u.i = res;
106b0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
106c0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
106d0 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
106e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
106f0 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  (res!=0, (pOp->p
10700 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
10710 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
10720 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 67 6f   res ){.      go
10730 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10740 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
10750 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
10760 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20  Permutation * * 
10770 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74  * P4 *.**.** Set
10780 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
10790 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f   used by the OP_
107a0 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72  Compare operator
107b0 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79   to be the array
107c0 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20  .** of integers 
107d0 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  in P4..**.** The
107e0 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20   permutation is 
107f0 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c  only valid until
10800 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d   the next OP_Com
10810 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a  pare that has.**
10820 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10830 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50  UTE bit set in P
10840 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65  5. Typically the
10850 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20   OP_Permutation 
10860 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72  should .** occur
10870 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69   immediately pri
10880 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d  or to the OP_Com
10890 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  pare..**.** The 
108a0 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e  first integer in
108b0 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72 20   the P4 integer 
108c0 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e  array is the len
108d0 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61 79  gth of the array
108e0 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74  .** and does not
108f0 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20   become part of 
10900 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e  the permutation.
10910 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d  .*/.case OP_Perm
10920 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73  utation: {.  ass
10930 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
10940 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b  ==P4_INTARRAY );
10950 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
10960 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d  p4.ai );.  aPerm
10970 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69  ute = pOp->p4.ai
10980 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   + 1;.  break;.}
10990 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
109a0 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
109b0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
109c0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
109d0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
109e0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
109f0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
10a00 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
10a10 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
10a20 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
10a30 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
10a40 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
10a50 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
10a60 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
10a70 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
10a80 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
10a90 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
10aa0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10ab0 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
10ac0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
10ad0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
10ae0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
10af0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
10b00 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
10b10 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10b20 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10b30 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10b40 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
10b50 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
10b60 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
10b70 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
10b80 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10b90 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
10ba0 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
10bb0 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
10bc0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
10bd0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
10be0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
10bf0 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
10c00 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
10c10 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
10c20 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
10c30 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
10c40 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
10c50 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
10c60 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
10c70 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
10c80 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
10c90 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10ca0 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
10cb0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
10cc0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
10cd0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
10ce0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
10cf0 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
10d00 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
10d10 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
10d20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
10d30 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
10d40 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
10d50 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
10d60 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10d70 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
10d80 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
10d90 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
10da0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
10db0 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
10dc0 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28   order */..  if(
10dd0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
10de0 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29  AG_PERMUTE)==0 )
10df0 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
10e00 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
10e10 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
10e20 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
10e30 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
10e40 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
10e50 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
10e60 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
10e70 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54  p->p2;.#if SQLIT
10e80 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
10e90 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
10ea0 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
10eb0 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
10ec0 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
10ed0 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
10ee0 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
10ef0 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
10f00 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  1+mx<=(p->nMem-p
10f10 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10f20 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
10f30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p2+mx<=(p->n
10f40 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10f50 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
10f60 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
10f70 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
10f80 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10f90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
10fa0 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
10fb0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10fc0 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
10fd0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
10fe0 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
10ff0 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
11000 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
11010 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
11020 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
11030 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
11040 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
11050 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
11060 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
11070 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
11080 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
11090 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
110a0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
110b0 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
110c0 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
110d0 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
110e0 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
110f0 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
11100 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
11110 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
11120 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
11130 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
11140 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
11150 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
11160 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
11170 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
11180 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
11190 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
111a0 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
111b0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
111c0 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
111d0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
111e0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
111f0 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
11200 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
11210 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
11220 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
11230 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
11240 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
11250 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
11260 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
11270 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
11280 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
11290 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
112a0 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
112b0 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
112c0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
112d0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
112e0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
112f0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
11300 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
11310 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11320 28 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (0,3); pOp = &aO
11330 70 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  p[pOp->p1 - 1];.
11340 20 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d    }else if( iCom
11350 70 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56  pare==0 ){.    V
11360 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31  dbeBranchTaken(1
11370 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b  ,3); pOp = &aOp[
11380 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20  pOp->p2 - 1];.  
11390 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
113a0 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b  ranchTaken(2,3);
113b0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d   pOp = &aOp[pOp-
113c0 3e 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20  >p3 - 1];.  }.  
113d0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
113e0 6f 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50  ode: And P1 P2 P
113f0 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
11400 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
11410 26 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  && r[P2]).**.** 
11420 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11430 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75   AND of the valu
11440 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20  es in registers 
11450 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
11460 20 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c   write the resul
11470 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
11480 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74  P3..**.** If eit
11490 68 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20  her P1 or P2 is 
114a0 30 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74  0 (false) then t
114b0 68 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65  he result is 0 e
114c0 76 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74  ven if.** the ot
114d0 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
114e0 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74  L.  A NULL and t
114f0 72 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73  rue or two NULLs
11500 20 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20   give.** a NULL 
11510 6f 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  output..*/./* Op
11520 63 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50  code: Or P1 P2 P
11530 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
11540 73 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20  s: r[P3]=(r[P1] 
11550 7c 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20  || r[P2]).**.** 
11560 54 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c  Take the logical
11570 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
11580 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
11590 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
115a0 74 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20  tore the answer 
115b0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
115c0 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  **.** If either 
115d0 50 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a  P1 or P2 is nonz
115e0 65 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20  ero (true) then 
115f0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20  the result is 1 
11600 28 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69  (true).** even i
11610 66 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  f the other inpu
11620 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
11630 4c 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20  LL and false or 
11640 74 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76  two NULLs.** giv
11650 65 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e  e a NULL output.
11660 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a  .*/.case OP_And:
11670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11680 20 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c   same as TK_AND,
11690 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
116a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b  */.case OP_Or: {
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
116c0 73 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69  same as TK_OR, i
116d0 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
116e0 0a 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a  .  int v1;    /*
116f0 20 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20   Left operand:  
11700 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
11710 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
11720 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76   NULL */.  int v
11730 32 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f  2;    /* Right o
11740 70 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45  perand: 0==FALSE
11750 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
11760 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
11770 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
11780 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
11790 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
117a0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76  EM_Null ){.    v
117b0 31 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  1 = 2;.  }else{.
117c0 20 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33      v1 = sqlite3
117d0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
117e0 31 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e  1)!=0;.  }.  pIn
117f0 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
11800 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e  2];.  if( pIn2->
11810 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11820 20 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a   ){.    v2 = 2;.
11830 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20    }else{.    v2 
11840 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
11850 56 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a  Value(pIn2)!=0;.
11860 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f    }.  if( pOp->o
11870 70 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b  pcode==OP_And ){
11880 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
11890 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
118a0 61 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20  and_logic[] = { 
118b0 30 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32  0, 0, 0, 0, 1, 2
118c0 2c 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20  , 0, 2, 2 };.   
118d0 20 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b   v1 = and_logic[
118e0 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73  v1*3+v2];.  }els
118f0 65 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  e{.    static co
11900 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
11910 72 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b  r or_logic[] = {
11920 20 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20   0, 1, 2, 1, 1, 
11930 31 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20  1, 2, 1, 2 };.  
11940 20 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b    v1 = or_logic[
11950 76 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20  v1*3+v2];.  }.  
11960 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11970 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d  ->p3];.  if( v1=
11980 3d 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74  =2 ){.    MemSet
11990 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
119a0 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73  EM_Null);.  }els
119b0 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  e{.    pOut->u.i
119c0 20 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65   = v1;.    MemSe
119d0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
119e0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20  MEM_Int);.  }.  
119f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
11a00 6f 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a  ode: Not P1 P2 *
11a10 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11a20 3a 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a  : r[P2]= !r[P1].
11a30 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11a40 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11a50 69 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f  ister P1 as a bo
11a60 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74  olean value.  St
11a70 6f 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65  ore the.** boole
11a80 61 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e  an complement in
11a90 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49   register P2.  I
11aa0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11ab0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a  egister P1 is .*
11ac0 2a 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e  * NULL, then a N
11ad0 55 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ULL is stored in
11ae0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11af0 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Not: {          
11b00 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11b10 20 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75   TK_NOT, in1, ou
11b20 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
11b30 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11b40 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
11b50 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65  p->p2];.  sqlite
11b60 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
11b70 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49  pOut);.  if( (pI
11b80 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11b90 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20  Null)==0 ){.    
11ba0 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
11bb0 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d  M_Int;.    pOut-
11bc0 3e 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56  >u.i = !sqlite3V
11bd0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
11be0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11bf0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
11c00 74 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  tNot P1 P2 * * *
11c10 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
11c20 50 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a  P1]= ~r[P1].**.*
11c30 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
11c40 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
11c50 74 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74  ter P1 as an int
11c60 65 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65  eger.  Store the
11c70 0a 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d  .** ones-complem
11c80 65 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61  ent of the P1 va
11c90 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
11ca0 72 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c  r P2.  If P1 hol
11cb0 64 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65  ds.** a NULL the
11cc0 6e 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69  n store a NULL i
11cd0 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  n P2..*/.case OP
11ce0 5f 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20  _BitNot: {      
11cf0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11d00 73 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31  s TK_BITNOT, in1
11d10 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  , out2 */.  pIn1
11d20 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11d30 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
11d40 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71  m[pOp->p2];.  sq
11d50 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
11d60 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28  ull(pOut);.  if(
11d70 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
11d80 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
11d90 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
11da0 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70  = MEM_Int;.    p
11db0 4f 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69  Out->u.i = ~sqli
11dc0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
11dd0 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
11de0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
11df0 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  : Once P1 P2 * *
11e00 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74   *.**.** Check t
11e10 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e  he "once" flag n
11e20 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20  umber P1. If it 
11e30 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20  is set, jump to 
11e40 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
11e50 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73  .** Otherwise, s
11e60 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20  et the flag and 
11e70 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
11e80 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
11e90 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  tion..** In othe
11ea0 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70  r words, this op
11eb0 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20  code causes all 
11ec0 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65  following opcode
11ed0 73 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a  s up through P2.
11ee0 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c  ** (but not incl
11ef0 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e  uding P2) to run
11f00 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74   just once and t
11f10 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20  o be skipped on 
11f20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69  subsequent.** ti
11f30 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20  mes through the 
11f40 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  loop..**.** All 
11f50 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65  "once" flags are
11f60 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72   initially clear
11f70 65 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72  ed whenever a pr
11f80 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
11f90 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73  .** first begins
11fa0 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65   to run..*/.case
11fb0 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20   OP_Once: {     
11fc0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
11fd0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
11fe0 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61  ->p1<p->nOnceFla
11ff0 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  g );.  VdbeBranc
12000 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46  hTaken(p->aOnceF
12010 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c  lag[pOp->p1]!=0,
12020 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f   2);.  if( p->aO
12030 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d  nceFlag[pOp->p1]
12040 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
12050 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
12060 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c  {.    p->aOnceFl
12070 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b  ag[pOp->p1] = 1;
12080 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12090 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50  ./* Opcode: If P
120a0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
120b0 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20  * Jump to P2 if 
120c0 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
120d0 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65  ister P1 is true
120e0 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20  .  The value.** 
120f0 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72  is considered tr
12100 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65  ue if it is nume
12110 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ric and non-zero
12120 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a  .  If the value.
12130 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c  ** in P1 is NULL
12140 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
12150 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20  ump if and only 
12160 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72  if P3 is non-zer
12170 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  o..*/./* Opcode:
12180 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20   IfNot P1 P2 P3 
12190 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74  * *.**.** Jump t
121a0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
121b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
121c0 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20   is False.  The 
121d0 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  value.** is cons
121e0 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20  idered false if 
121f0 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63  it has a numeric
12200 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20   value of zero. 
12210 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
12220 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
12230 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
12240 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
12250 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
12260 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20  .*/.case OP_If: 
12270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12280 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
12290 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b  case OP_IfNot: {
122a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
122b0 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e  ump, in1 */.  in
122c0 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  t c;.  pIn1 = &a
122d0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
122e0 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
122f0 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
12300 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    c = pOp->p3;. 
12310 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53   }else{.#ifdef S
12320 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
12330 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20  ING_POINT.    c 
12340 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
12350 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a  Value(pIn1)!=0;.
12360 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71  #else.    c = sq
12370 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c  lite3VdbeRealVal
12380 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23  ue(pIn1)!=0.0;.#
12390 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f  endif.    if( pO
123a0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66  p->opcode==OP_If
123b0 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20  Not ) c = !c;.  
123c0 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  }.  VdbeBranchTa
123d0 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20  ken(c!=0, 2);.  
123e0 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74  if( c ){.    got
123f0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
12400 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
12410 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
12420 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
12430 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
12440 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
12450 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
12460 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
12470 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
12480 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
12490 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
124a0 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
124b0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
124c0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
124d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
124e0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
124f0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
12500 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
12510 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
12520 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12530 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
12540 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
12550 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
12560 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
12570 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
12580 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
12590 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
125a0 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
125b0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
125c0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
125d0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
125e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
125f0 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
12600 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
12610 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
12620 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
12630 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
12640 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
12650 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
12660 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
12670 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
12680 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
12690 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
126a0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
126b0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
126c0 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
126d0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
126e0 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
126f0 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70  =PX.**.** Interp
12700 72 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61  ret the data tha
12710 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
12720 74 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63  ts to as a struc
12730 74 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67  ture built using
12740 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f  .** the MakeReco
12750 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  rd instruction. 
12760 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65   (See the MakeRe
12770 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20  cord opcode for 
12780 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e  additional.** in
12790 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
127a0 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68  the format of th
127b0 65 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63  e data.)  Extrac
127c0 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  t the P2-th colu
127d0 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20  mn.** from this 
127e0 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72  record.  If ther
127f0 65 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20  e are less that 
12800 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65  (P2+1) .** value
12810 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c  s in the record,
12820 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e   extract a NULL.
12830 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  .**.** The value
12840 20 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74   extracted is st
12850 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
12860 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P3..**.** If th
12870 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e  e column contain
12880 73 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20  s fewer than P2 
12890 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74  fields, then ext
128a0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72  ract a NULL.  Or
128b0 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61  ,.** if the P4 a
128c0 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f  rgument is a P4_
128d0 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75  MEM use the valu
128e0 65 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75  e of the P4 argu
128f0 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72  ment as.** the r
12900 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  esult..**.** If 
12910 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52  the OPFLAG_CLEAR
12920 43 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74  CACHE bit is set
12930 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73   on P5 and P1 is
12940 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20   a pseudo-table 
12950 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20  cursor,.** then 
12960 74 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65  the cache of the
12970 20 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74   cursor is reset
12980 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63   prior to extrac
12990 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  ting the column.
129a0 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50  .** The first OP
129b0 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20  _Column against 
129c0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61  a pseudo-table a
129d0 66 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f  fter the value o
129e0 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  f the content.**
129f0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68   register has ch
12a00 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76  anged should hav
12a10 65 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a  e this bit set..
12a20 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
12a30 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e  LAG_LENGTHARG an
12a40 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  d OPFLAG_TYPEOFA
12a50 52 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20  RG bits are set 
12a60 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68  on P5 when.** th
12a70 65 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72  e result is guar
12a80 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62  anteed to only b
12a90 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
12aa0 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67  gument of a leng
12ab0 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f  th().** or typeo
12ac0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65  f() function, re
12ad0 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65  spectively.  The
12ae0 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67   loading of larg
12af0 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a  e blobs can be.*
12b00 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65  * skipped for le
12b10 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63  ngth() and all c
12b20 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63  ontent loading c
12b30 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f  an be skipped fo
12b40 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63  r typeof()..*/.c
12b50 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b  ase OP_Column: {
12b60 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69  .  i64 payloadSi
12b70 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20  ze64; /* Number 
12b80 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20  of bytes in the 
12b90 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20  record */.  int 
12ba0 70 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  p2;            /
12bb0 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  * column number 
12bc0 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20  to retrieve */. 
12bd0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
12be0 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20      /* The VDBE 
12bf0 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75  cursor */.  BtCu
12c00 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f  rsor *pCrsr;   /
12c10 2a 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73  * The BTree curs
12c20 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  or */.  u32 *aOf
12c30 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
12c40 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
12c50 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
12c60 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
12c70 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
12c80 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
12c90 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
12ca0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
12cb0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
12cc0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
12cd0 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
12ce0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
12cf0 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
12d00 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
12d10 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
12d20 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
12d30 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
12d40 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
12d50 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
12d60 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
12d70 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
12d80 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
12d90 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
12da0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
12db0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
12dc0 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
12dd0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
12de0 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
12df0 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
12e00 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
12e10 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12e20 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
12e30 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12e40 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
12e50 2a 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36  */.  u64 offset6
12e60 34 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69  4;      /* 64-bi
12e70 74 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33  t offset */.  u3
12e80 32 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20  2 avail;        
12e90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
12ea0 74 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65  tes of available
12eb0 20 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74   data */.  u32 t
12ec0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
12ed0 20 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f   A type code fro
12ee0 6d 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61  m the record hea
12ef0 64 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  der */.  Mem *pR
12f00 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50  eg;         /* P
12f10 73 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74  seudoTable input
12f20 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20   register */..  
12f30 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
12f40 70 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70  p->p1];.  p2 = p
12f50 4f 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66  Op->p2;..  /* If
12f60 20 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68   the cursor cach
12f70 65 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e  e is stale, brin
12f80 67 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20  g it up-to-date 
12f90 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
12fa0 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
12fb0 6f 28 26 70 43 2c 20 26 70 32 29 3b 0a 0a 20 20  o(&pC, &p2);..  
12fc0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
12fd0 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
12fe0 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
12ff0 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
13000 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
13010 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
13020 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
13030 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
13040 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
13050 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73  >nCursor );.  as
13060 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
13070 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
13080 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66  nField );.  aOff
13090 73 65 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65  set = pC->aOffse
130a0 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  t;.  assert( pC-
130b0 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59  >eCurType!=CURTY
130c0 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
130d0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
130e0 65 21 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44  e!=CURTYPE_PSEUD
130f0 4f 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  O || pC->nullRow
13100 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
13110 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52 54  ->eCurType!=CURT
13120 59 50 45 5f 53 4f 52 54 45 52 20 29 3b 0a 20 20  YPE_SORTER );.  
13130 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
13140 43 75 72 73 6f 72 3b 0a 0a 20 20 69 66 28 20 72  Cursor;..  if( r
13150 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
13160 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
13170 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
13180 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
13190 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  ){.    if( pC->n
131a0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
131b0 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  if( pC->eCurType
131c0 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f  ==CURTYPE_PSEUDO
131d0 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
131e0 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65 75 64  rt( pC->uc.pseud
131f0 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 0a 20  oTableReg>0 );. 
13200 20 20 20 20 20 20 20 70 52 65 67 20 3d 20 26 61         pReg = &a
13210 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65 75 64  Mem[pC->uc.pseud
13220 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20  oTableReg];.    
13230 20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67      assert( pReg
13240 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
13250 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ob );.        as
13260 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
13270 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20  (pReg) );.      
13280 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a    pC->payloadSiz
13290 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20  e = pC->szRow = 
132a0 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b  avail = pReg->n;
132b0 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
132c0 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a  w = (u8*)pReg->z
132d0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
132e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
132f0 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
13300 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  st);.        got
13310 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b  o op_column_out;
13320 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
13330 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
13340 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
13350 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
13360 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
13370 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66  Crsr );.      if
13380 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30  ( pC->isTable==0
13390 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
133a0 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
133b0 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
133c0 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20  rsr) );.        
133d0 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
133e0 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
133f0 7a 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f  ze(pCrsr, &paylo
13400 61 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20  adSize64);.     
13410 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
13420 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54  QLITE_OK ); /* T
13430 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43  rue because of C
13440 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61  ursorMoveto() ca
13450 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20  ll above */.    
13460 20 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74      /* sqlite3Bt
13470 72 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28  reeParseCellPtr(
13480 29 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74  ) uses getVarint
13490 33 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20  32() to extract 
134a0 74 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70  the.        ** p
134b0 61 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20  ayload size, so 
134c0 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
134d0 20 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65   for payloadSize
134e0 36 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20  64 to be.       
134f0 20 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20   ** larger than 
13500 33 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20  32 bits. */.    
13510 20 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79      assert( (pay
13520 6c 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c  loadSize64 & SQL
13530 49 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75  ITE_MAX_U32)==(u
13540 36 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64)payloadSize64
13550 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e   );.        pC->
13560 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74  aRow = sqlite3Bt
13570 72 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73  reeKeyFetch(pCrs
13580 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
13590 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
135a0 69 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f  ize = (u32)paylo
135b0 61 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20  adSize64;.      
135c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
135d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
135e0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
135f0 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20  (pCrsr) );.     
13600 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d     VVA_ONLY(rc =
13610 29 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  ) sqlite3BtreeDa
13620 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70  taSize(pCrsr, &p
13630 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b  C->payloadSize);
13640 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13650 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
13660 3b 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28  ;   /* DataSize(
13670 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f  ) cannot fail */
13680 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  .        pC->aRo
13690 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  w = sqlite3Btree
136a0 44 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c  DataFetch(pCrsr,
136b0 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20   &avail);.      
136c0 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
136d0 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20  avail<=65536 ); 
136e0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65   /* Maximum page
136f0 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a   size is 64KiB *
13700 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e  /.      if( pC->
13710 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28  payloadSize <= (
13720 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20  u32)avail ){.   
13730 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d       pC->szRow =
13740 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13750 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
13760 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  ( pC->payloadSiz
13770 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69  e > (u32)db->aLi
13780 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
13790 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
137a0 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
137b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
137c0 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77         pC->szRow
137d0 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20   = avail;.      
137e0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  }.    }.    pC->
137f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70 2d  cacheStatus = p-
13800 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20 70  >cacheCtr;.    p
13810 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
13820 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d 3e  getVarint32(pC->
13830 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a 20  aRow, offset);. 
13840 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65     pC->nHdrParse
13850 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66 73  d = 0;.    aOffs
13860 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b 0a  et[0] = offset;.
13870 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c  ..    if( avail<
13880 6f 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20  offset ){.      
13890 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
138a0 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
138b0 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
138c0 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
138d0 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
138e0 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
138f0 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
13900 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
13910 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
13920 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
13930 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
13940 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
13950 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
13960 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
13970 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
13980 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
13990 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
139a0 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
139b0 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
139c0 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
139d0 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
139e0 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
139f0 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
13a00 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
13a10 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
13a20 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
13a30 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
13a40 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
13a50 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
13a60 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
13a70 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
13a80 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
13a90 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
13aa0 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
13ab0 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
13ac0 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
13ad0 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
13ae0 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
13af0 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
13b00 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
13b10 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
13b20 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
13b30 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
13b40 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
13b50 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
13b60 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
13b70 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
13b80 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
13b90 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
13ba0 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
13bb0 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
13bc0 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
13bd0 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
13be0 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e  8307 || offset >
13bf0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13c00 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
13c10 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
13c20 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
13c30 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
13c40 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
13c50 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  }..    /* The fo
13c60 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20  llowing goto is 
13c70 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
13c80 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74    It can be omit
13c90 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65  ted and.    ** e
13ca0 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73  verything will s
13cb0 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20  till work.  But 
13cc0 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61  OP_Column is mea
13cd0 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20  surably faster. 
13ce0 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e     ** by skippin
13cf0 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  g the subsequent
13d00 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68   conditional, wh
13d10 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 72  ich is always tr
13d20 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  ue..    */.    a
13d30 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
13d40 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
13d50 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
13d60 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
13d70 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13d80 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20  n_read_header;. 
13d90 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
13da0 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
13db0 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
13dc0 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
13dd0 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
13de0 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
13df0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
13e00 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
13e10 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
13e20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
13e30 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
13e40 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
13e50 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
13e60 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
13e70 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
13e80 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
13e90 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
13ea0 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
13eb0 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
13ec0 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
13ed0 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65      op_column_re
13ee0 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69  ad_header:.    i
13ef0 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
13f00 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
13f10 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
13f20 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
13f30 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
13f40 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
13f50 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
13f60 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
13f70 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
13f80 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
13f90 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
13fa0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
13fb0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
13fc0 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
13fd0 61 4f 66 66 73 65 74 5b 30 5d 2c 20 21 70 43 2d  aOffset[0], !pC-
13fe0 3e 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29  >isTable, &sMem)
13ff0 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
14000 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f  !=SQLITE_OK ) go
14010 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
14020 6f 72 3b 0a 20 20 20 20 20 20 20 20 7a 44 61 74  or;.        zDat
14030 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b  a = (u8*)sMem.z;
14040 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
14050 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 70 43        zData = pC
14060 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20 7d 0a  ->aRow;.      }.
14070 20 20 0a 20 20 20 20 20 20 2f 2a 20 46 69 6c 6c    .      /* Fill
14080 20 69 6e 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d   in pC->aType[i]
14090 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
140a0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
140b0 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
140c0 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  */.      i = pC-
140d0 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
140e0 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f     offset64 = aO
140f0 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20  ffset[i];.      
14100 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70  zHdr = zData + p
14110 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20  C->iHdrOffset;. 
14120 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a       zEndHdr = z
14130 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30  Data + aOffset[0
14140 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
14150 20 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a   i<=p2 && zHdr<z
14160 45 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20  EndHdr );.      
14170 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
14180 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78  (t = zHdr[0])<0x
14190 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
141a0 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
141b0 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
141c0 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
141d0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
141e0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
141f0 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
14200 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
14210 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
14220 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14230 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14240 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14250 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
14260 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
14270 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  i++] = t;.      
14280 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
14290 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
142a0 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
142b0 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
142c0 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
142d0 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48   );.      pC->nH
142e0 64 72 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20  drParsed = i;.  
142f0 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
14300 65 74 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20  et = (u32)(zHdr 
14310 2d 20 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20  - zData);.      
14320 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20  if( pC->aRow==0 
14330 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
14340 52 65 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a  Release(&sMem);.
14350 20 20 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20    .      /* The 
14360 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72 75 70  record is corrup
14370 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  t if any of the 
14380 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 72  following are tr
14390 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28 31 29  ue:.      ** (1)
143a0 20 74 68 65 20 62 79 74 65 73 20 6f 66 20 74 68   the bytes of th
143b0 65 20 68 65 61 64 65 72 20 65 78 74 65 6e 64 20  e header extend 
143c0 70 61 73 74 20 74 68 65 20 64 65 63 6c 61 72 65  past the declare
143d0 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a 20 20  d header size.  
143e0 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65      ** (2) the e
143f0 6e 74 69 72 65 20 68 65 61 64 65 72 20 77 61 73  ntire header was
14400 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c   used but not al
14410 6c 20 64 61 74 61 20 77 61 73 20 75 73 65 64 0a  l data was used.
14420 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74 68 65        ** (3) the
14430 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61 74 61   end of the data
14440 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e 64 20   extends beyond 
14450 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
14460 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a 2f 0a  ecord..      */.
14470 20 20 20 20 20 20 69 66 28 20 28 7a 48 64 72 3e        if( (zHdr>
14480 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a 48 64  =zEndHdr && (zHd
14490 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f 66 66  r>zEndHdr || off
144a0 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79 6c 6f  set64!=pC->paylo
144b0 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20 20 20  adSize)).       
144c0 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e 20 70  || (offset64 > p
144d0 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a  C->payloadSize).
144e0 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20        ){.       
144f0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
14500 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
14510 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
14520 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
14530 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
14540 20 20 74 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 0a    t = 0;.    }..
14550 20 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20      /* If after 
14560 74 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 63  trying to extrac
14570 74 20 6e 65 77 20 65 6e 74 72 69 65 73 20 66 72  t new entries fr
14580 6f 6d 20 74 68 65 20 68 65 61 64 65 72 2c 20 6e  om the header, n
14590 48 64 72 50 61 72 73 65 64 20 69 73 0a 20 20 20  HdrParsed is.   
145a0 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70   ** still not up
145b0 20 74 6f 20 70 32 2c 20 74 68 61 74 20 6d 65 61   to p2, that mea
145c0 6e 73 20 74 68 61 74 20 74 68 65 20 72 65 63 6f  ns that the reco
145d0 72 64 20 68 61 73 20 66 65 77 65 72 20 74 68 61  rd has fewer tha
145e0 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75  n p2.    ** colu
145f0 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20 72 65 73  mns.  So the res
14600 75 6c 74 20 77 69 6c 6c 20 62 65 20 65 69 74 68  ult will be eith
14610 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 76  er the default v
14620 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a  alue or a NULL..
14630 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 70      */.    if( p
14640 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70  C->nHdrParsed<=p
14650 32 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  2 ){.      if( p
14660 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d  Op->p4type==P4_M
14670 45 4d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  EM ){.        sq
14680 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
14690 6c 6f 77 43 6f 70 79 28 70 44 65 73 74 2c 20 70  lowCopy(pDest, p
146a0 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d  Op->p4.pMem, MEM
146b0 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20 20 20  _Static);.      
146c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73  }else{.        s
146d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
146e0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
146f0 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
14700 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
14710 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
14720 20 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b    t = pC->aType[
14730 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45  p2];.  }..  /* E
14740 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
14750 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
14760 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
14770 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
14780 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
14790 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
147a0 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
147b0 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  , and pC->aType[
147c0 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20 61 6c 6c  p2] are.  ** all
147d0 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a 20 20 61   valid..  */.  a
147e0 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 48  ssert( p2<pC->nH
147f0 64 72 50 61 72 73 65 64 20 29 3b 0a 20 20 61 73  drParsed );.  as
14800 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
14810 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  _OK );.  assert(
14820 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63   sqlite3VdbeChec
14830 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 70  kMemInvariants(p
14840 44 65 73 74 29 20 29 3b 0a 20 20 69 66 28 20 56  Dest) );.  if( V
14850 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44  dbeMemDynamic(pD
14860 65 73 74 29 20 29 20 73 71 6c 69 74 65 33 56 64  est) ) sqlite3Vd
14870 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65  beMemSetNull(pDe
14880 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 74  st);.  assert( t
14890 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20  ==pC->aType[p2] 
148a0 29 3b 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20  );.  pDest->enc 
148b0 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 69 66  = encoding;.  if
148c0 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f 66  ( pC->szRow>=aOf
148d0 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20 20  fset[p2+1] ){.  
148e0 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65    /* This is the
148f0 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68 65   common case whe
14900 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20 63  re the desired c
14910 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20 74  ontent fits on t
14920 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20 20  he original.    
14930 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65 20  ** page - where 
14940 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20 6e  the content is n
14950 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c 6f  ot on an overflo
14960 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 7a 44  w page */.    zD
14970 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77 20 2b  ata = pC->aRow +
14980 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b 0a 20 20   aOffset[p2];.  
14990 20 20 69 66 28 20 74 3c 31 32 20 29 7b 0a 20 20    if( t<12 ){.  
149a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
149b0 65 72 69 61 6c 47 65 74 28 7a 44 61 74 61 2c 20  erialGet(zData, 
149c0 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d  t, pDest);.    }
149d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 49  else{.      /* I
149e0 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
149f0 75 65 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20  ue is a string, 
14a00 77 65 20 6e 65 65 64 20 61 20 70 65 72 73 69 73  we need a persis
14a10 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e 6f 74 0a  tent value, not.
14a20 20 20 20 20 20 20 2a 2a 20 61 20 4d 45 4d 5f 45        ** a MEM_E
14a30 70 68 65 6d 20 76 61 6c 75 65 2e 20 20 54 68 69  phem value.  Thi
14a40 73 20 62 72 61 6e 63 68 20 69 73 20 61 20 66 61  s branch is a fa
14a50 73 74 20 73 68 6f 72 74 2d 63 75 74 20 74 68 61  st short-cut tha
14a60 74 20 69 73 20 65 71 75 69 76 61 6c 65 6e 74 0a  t is equivalent.
14a70 20 20 20 20 20 20 2a 2a 20 74 6f 20 63 61 6c 6c        ** to call
14a80 69 6e 67 20 73 71 6c 69 74 65 33 56 64 62 65 53  ing sqlite3VdbeS
14a90 65 72 69 61 6c 47 65 74 28 29 20 61 6e 64 20 73  erialGet() and s
14aa0 71 6c 69 74 65 33 56 64 62 65 44 65 65 70 68 65  qlite3VdbeDeephe
14ab0 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20 20 20 20  meralize()..    
14ac0 20 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69    */.      stati
14ad0 63 20 63 6f 6e 73 74 20 75 31 36 20 61 46 6c 61  c const u16 aFla
14ae0 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42 6c 6f 62  g[] = { MEM_Blob
14af0 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 54 65  , MEM_Str|MEM_Te
14b00 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70 44 65 73  rm };.      pDes
14b10 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20 28 74 2d  t->n = len = (t-
14b20 31 32 29 2f 32 3b 0a 20 20 20 20 20 20 69 66 28  12)/2;.      if(
14b30 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
14b40 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
14b50 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
14b60 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
14b70 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
14b80 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
14b90 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
14ba0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
14bb0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14bc0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
14bd0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
14be0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
14bf0 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
14c00 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
14c10 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
14c20 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
14c30 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
14c40 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
14c50 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
14c60 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
14c70 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68 20 68  /* This branch h
14c80 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e  appens only when
14c90 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f   content is on o
14ca0 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f  verflow pages */
14cb0 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e  .    if( ((pOp->
14cc0 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
14cd0 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
14ce0 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
14cf0 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
14d00 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
14d10 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
14d20 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
14d30 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e  0)).     || (len
14d40 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14d50 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d  rialTypeLen(t))=
14d60 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
14d70 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
14d80 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20 20 20  relevant for.   
14d90 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68 65 20     **    1. the 
14da0 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69 6f  typeof() functio
14db0 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 32  n,.      **    2
14dc0 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58 29 20  . the length(X) 
14dd0 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20 69 73  function if X is
14de0 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20 20 20   a blob, and.   
14df0 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66 20 74     **    3. if t
14e00 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e 67 74  he content lengt
14e10 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20 20 20  h is zero..     
14e20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68 74 20   ** So we might 
14e30 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f 67 75  as well use bogu
14e40 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65 72  s content rather
14e50 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a 20 20   than reading.  
14e60 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74 20 66      ** content f
14e70 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20 20 20  rom disk. */.   
14e80 20 20 20 73 74 61 74 69 63 20 75 38 20 61 5a 65     static u8 aZe
14e90 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54 68 69 73 20  ro[8];  /* This 
14ea0 69 73 20 74 68 65 20 62 6f 67 75 73 20 63 6f 6e  is the bogus con
14eb0 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20 73 71  tent */.      sq
14ec0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
14ed0 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70 44 65  et(aZero, t, pDe
14ee0 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
14ef0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
14f00 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72  e3VdbeMemFromBtr
14f10 65 65 28 70 43 72 73 72 2c 20 61 4f 66 66 73 65  ee(pCrsr, aOffse
14f20 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d  t[p2], len, !pC-
14f30 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20 20 20 20  >isTable,.      
14f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14f50 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44 65               pDe
14f60 73 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  st);.      if( r
14f70 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
14f80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
14f90 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
14fa0 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
14fb0 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
14fc0 20 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67       pDest->flag
14fd0 73 20 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b  s &= ~MEM_Ephem;
14fe0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14ff0 20 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75   }..op_column_ou
15000 74 3a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  t:.op_column_err
15010 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  or:.  UPDATE_MAX
15020 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29  _BLOBSIZE(pDest)
15030 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
15040 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73  CE(pOp->p3, pDes
15050 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
15060 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e  /* Opcode: Affin
15070 69 74 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a  ity P1 P2 * P4 *
15080 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66  .** Synopsis: af
15090 66 69 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29  finity(r[P1@P2])
150a0 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66  .**.** Apply aff
150b0 69 6e 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e  inities to a ran
150c0 67 65 20 6f 66 20 50 32 20 72 65 67 69 73 74 65  ge of P2 registe
150d0 72 73 20 73 74 61 72 74 69 6e 67 20 77 69 74 68  rs starting with
150e0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73   P1..**.** P4 is
150f0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
15100 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
15110 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68  long. The nth ch
15120 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a  aracter of the.*
15130 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74  * string indicat
15140 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66  es the column af
15150 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75  finity that shou
15160 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ld be used for t
15170 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79  he nth.** memory
15180 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e   cell in the ran
15190 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ge..*/.case OP_A
151a0 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e  ffinity: {.  con
151b0 73 74 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  st char *zAffini
151c0 74 79 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66  ty;   /* The aff
151d0 69 6e 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c  inity to be appl
151e0 69 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41  ied */.  char cA
151f0 66 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ff;             
15200 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68    /* A single ch
15210 61 72 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e  aracter of affin
15220 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e  ity */..  zAffin
15230 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ity = pOp->p4.z;
15240 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
15250 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73  nity!=0 );.  ass
15260 65 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70  ert( zAffinity[p
15270 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20  Op->p2]==0 );.  
15280 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
15290 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20  ->p1];.  while( 
152a0 28 63 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e  (cAff = *(zAffin
152b0 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20  ity++))!=0 ){.  
152c0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c    assert( pIn1 <
152d0 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e  = &p->aMem[(p->n
152e0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
152f0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
15300 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29  memIsValid(pIn1)
15310 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   );.    applyAff
15320 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41 66 66  inity(pIn1, cAff
15330 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15340 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62   pIn1++;.  }.  b
15350 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
15360 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64 20 50  de: MakeRecord P
15370 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
15380 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
15390 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d 29 0a  mkrec(r[P1@P2]).
153a0 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32  **.** Convert P2
153b0 20 72 65 67 69 73 74 65 72 73 20 62 65 67 69 6e   registers begin
153c0 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69 6e 74  ning with P1 int
153d0 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20 66 6f  o the [record fo
153e0 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20  rmat].** use as 
153f0 61 20 64 61 74 61 20 72 65 63 6f 72 64 20 69 6e  a data record in
15400 20 61 20 64 61 74 61 62 61 73 65 20 74 61 62 6c   a database tabl
15410 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a  e or as a key.**
15420 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20 20 54   in an index.  T
15430 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
15440 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65 20 74  ode can decode t
15450 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65 72 2e  he record later.
15460 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
15470 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 69   a string that i
15480 73 20 50 32 20 63 68 61 72 61 63 74 65 72 73 20  s P2 characters 
15490 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68 20 63  long.  The nth c
154a0 68 61 72 61 63 74 65 72 20 6f 66 20 74 68 65 0a  haracter of the.
154b0 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69 63 61  ** string indica
154c0 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61  tes the column a
154d0 66 66 69 6e 69 74 79 20 74 68 61 74 20 73 68 6f  ffinity that sho
154e0 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f 72 20  uld be used for 
154f0 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64  the nth.** field
15500 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20 6b 65   of the index ke
15510 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70  y..**.** The map
15520 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72 61 63  ping from charac
15530 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74 79 20  ter to affinity 
15540 69 73 20 67 69 76 65 6e 20 62 79 20 74 68 65 20  is given by the 
15550 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d  SQLITE_AFF_.** m
15560 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20 69 6e  acros defined in
15570 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a   sqliteInt.h..**
15580 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e 55 4c  .** If P4 is NUL
15590 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78  L then all index
155a0 20 66 69 65 6c 64 73 20 68 61 76 65 20 74 68 65   fields have the
155b0 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42 2e 0a   affinity BLOB..
155c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52  */.case OP_MakeR
155d0 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a  ecord: {.  u8 *z
155e0 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20 20 20  NewRecord;      
155f0 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20 74 6f    /* A buffer to
15600 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 66   hold the data f
15610 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  or the new recor
15620 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63  d */.  Mem *pRec
15630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15640 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
15650 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61 3b 20  */.  u64 nData; 
15660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
15670 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
15680 66 20 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a  f data space */.
15690 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20 20 20    int nHdr;     
156a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
156b0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68  er of bytes of h
156c0 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20  eader space */. 
156d0 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20 20 20   i64 nByte;     
156e0 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 20          /* Data 
156f0 73 70 61 63 65 20 72 65 71 75 69 72 65 64 20 66  space required f
15700 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64 20 2a  or this record *
15710 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b 20 20  /.  i64 nZero;  
15720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15730 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
15740 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15750 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15760 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20 20 20   int nVarint;   
15770 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15780 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 61 20  r of bytes in a 
15790 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20  varint */.  u32 
157a0 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20 20 20  serial_type;    
157b0 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65 6c 64     /* Type field
157c0 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61   */.  Mem *pData
157d0 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  0;           /* 
157e0 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f 20 62  First field to b
157f0 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20  e combined into 
15800 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  the record */.  
15810 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20 20 20  Mem *pLast;     
15820 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 66         /* Last f
15830 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65 63 6f  ield of the reco
15840 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65  rd */.  int nFie
15850 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ld;            /
15860 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
15870 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64  ds in the record
15880 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
15890 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f 2a 20  inity;       /* 
158a0 54 68 65 20 61 66 66 69 6e 69 74 79 20 73 74 72  The affinity str
158b0 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ing for the reco
158c0 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65  rd */.  int file
158d0 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 20 2f  _format;       /
158e0 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f  * File format to
158f0 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e   use for encodin
15900 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20  g */.  int i;   
15910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
15920 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a   Space used in z
15930 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65 61 64  NewRecord[] head
15940 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20  er */.  int j;  
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
15960 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e 20  * Space used in 
15970 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e  zNewRecord[] con
15980 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20 6c 65  tent */.  u32 le
15990 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n;              
159a0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 61 20   /* Length of a 
159b0 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41  field */..  /* A
159c0 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65 63 6f  ssuming the reco
159d0 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69  rd contains N fi
159e0 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f 72 64  elds, the record
159f0 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20   format looks.  
15a00 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20  ** like this:.  
15a10 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  **.  ** --------
15a20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a30 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a40 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a50 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15a60 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65  .  ** | hdr-size
15a70 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79 70 65   | type 0 | type
15a80 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20   1 | ... | type 
15a90 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e  N-1 | data0 | ..
15aa0 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a  . | data N-1 | .
15ab0 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
15ac0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ad0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15ae0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15af0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15b00 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30 29 20  **.  ** Data(0) 
15b10 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  is taken from re
15b20 67 69 73 74 65 72 20 50 31 2e 20 20 44 61 74 61  gister P1.  Data
15b30 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72  (1) comes from r
15b40 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20 20 2a  egister P1+1.  *
15b50 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a  * and so forth..
15b60 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74    **.  ** Each t
15b70 79 70 65 20 66 69 65 6c 64 20 69 73 20 61 20 76  ype field is a v
15b80 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e 74 69  arint representi
15b90 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20 74 79  ng the serial ty
15ba0 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20  pe of the .  ** 
15bb0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 64 61  corresponding da
15bc0 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65 65 20  ta element (see 
15bd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15be0 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a 20 20  lType()). The.  
15bf0 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69 65 6c  ** hdr-size fiel
15c00 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61 72 69  d is also a vari
15c10 6e 74 20 77 68 69 63 68 20 69 73 20 74 68 65 20  nt which is the 
15c20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68 65 20  offset from the 
15c30 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f  beginning.  ** o
15c40 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
15c50 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44  data0..  */.  nD
15c60 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20 20 20  ata = 0;        
15c70 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
15c80 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61 63  tes of data spac
15c90 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b  e */.  nHdr = 0;
15ca0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15cb0 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
15cc0 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f 0a  header space */.
15cd0 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20    nZero = 0;    
15ce0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15cf0 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20  f zero bytes at 
15d00 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72  the end of the r
15d10 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c  ecord */.  nFiel
15d20 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a  d = pOp->p1;.  z
15d30 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
15d40 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
15d50 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d  nField>0 && pOp-
15d60 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  >p2>0 && pOp->p2
15d70 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65  +nField<=(p->nMe
15d80 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
15d90 29 3b 0a 20 20 70 44 61 74 61 30 20 3d 20 26 61  );.  pData0 = &a
15da0 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e  Mem[nField];.  n
15db0 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b  Field = pOp->p2;
15dc0 0a 20 20 70 4c 61 73 74 20 3d 20 26 70 44 61 74  .  pLast = &pDat
15dd0 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20  a0[nField-1];.  
15de0 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d  file_format = p-
15df0 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72  >minWriteFileFor
15e00 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74  mat;..  /* Ident
15e10 69 66 79 20 74 68 65 20 6f 75 74 70 75 74 20 72  ify the output r
15e20 65 67 69 73 74 65 72 20 2a 2f 0a 20 20 61 73 73  egister */.  ass
15e30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
15e40 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p1 || pOp->p3>
15e50 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32  =pOp->p1+pOp->p2
15e60 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
15e70 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
15e80 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
15e90 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
15ea0 41 70 70 6c 79 20 74 68 65 20 72 65 71 75 65 73  Apply the reques
15eb0 74 65 64 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ted affinity to 
15ec0 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a  all inputs.  */.
15ed0 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
15ee0 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 69 66 28  <=pLast );.  if(
15ef0 20 7a 41 66 66 69 6e 69 74 79 20 29 7b 0a 20 20   zAffinity ){.  
15f00 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
15f10 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 61  .    do{.      a
15f20 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 52 65  pplyAffinity(pRe
15f30 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79  c++, *(zAffinity
15f40 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ++), encoding);.
15f50 20 20 20 20 20 20 61 73 73 65 72 74 28 20 7a 41        assert( zA
15f60 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c  ffinity[0]==0 ||
15f70 20 70 52 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a   pRec<=pLast );.
15f80 20 20 20 20 7d 77 68 69 6c 65 28 20 7a 41 66 66      }while( zAff
15f90 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a  inity[0] );.  }.
15fa0 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75  .  /* Loop throu
15fb0 67 68 20 74 68 65 20 65 6c 65 6d 65 6e 74 73 20  gh the elements 
15fc0 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75  that will make u
15fd0 70 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  p the record to 
15fe0 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20  figure.  ** out 
15ff0 68 6f 77 20 6d 75 63 68 20 73 70 61 63 65 20 69  how much space i
16000 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 74  s required for t
16010 68 65 20 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20  he new record.. 
16020 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20 70 4c 61   */.  pRec = pLa
16030 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73  st;.  do{.    as
16040 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
16050 28 70 52 65 63 29 20 29 3b 0a 20 20 20 20 70 52  (pRec) );.    pR
16060 65 63 2d 3e 75 54 65 6d 70 20 3d 20 73 65 72 69  ec->uTemp = seri
16070 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65  al_type = sqlite
16080 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28  3VdbeSerialType(
16090 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61  pRec, file_forma
160a0 74 2c 20 26 6c 65 6e 29 3b 0a 20 20 20 20 69 66  t, &len);.    if
160b0 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
160c0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
160d0 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
160e0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
160f0 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64 42  e3VdbeMemExpandB
16100 6c 6f 62 28 70 52 65 63 29 20 29 20 67 6f 74 6f  lob(pRec) ) goto
16110 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 20 20 7d   no_mem;.      }
16120 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a  else{.        nZ
16130 65 72 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e  ero += pRec->u.n
16140 5a 65 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65  Zero;.        le
16150 6e 20 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  n -= pRec->u.nZe
16160 72 6f 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ro;.      }.    
16170 7d 0a 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c  }.    nData += l
16180 65 6e 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65  en;.    testcase
16190 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
161a0 32 37 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  27 );.    testca
161b0 73 65 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d  se( serial_type=
161c0 3d 31 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72  =128 );.    nHdr
161d0 20 2b 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c   += serial_type<
161e0 3d 31 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74  =127 ? 1 : sqlit
161f0 65 33 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69  e3VarintLen(seri
16200 61 6c 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69  al_type);.  }whi
16210 6c 65 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44  le( (--pRec)>=pD
16220 61 74 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 45 56  ata0 );..  /* EV
16230 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35  IDENCE-OF: R-225
16240 36 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61  64-11647 The hea
16250 64 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20  der begins with 
16260 61 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a  a single varint.
16270 20 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72    ** which deter
16280 6d 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20  mines the total 
16290 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  number of bytes 
162a0 69 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54  in the header. T
162b0 68 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76  he varint.  ** v
162c0 61 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65  alue is the size
162d0 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69   of the header i
162e0 6e 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e  n bytes includin
162f0 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
16300 74 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a  t.  ** itself. *
16310 2f 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48  /.  testcase( nH
16320 64 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73  dr==126 );.  tes
16330 74 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37  tcase( nHdr==127
16340 20 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d   );.  if( nHdr<=
16350 31 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  126 ){.    /* Th
16360 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f  e common case */
16370 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a  .    nHdr += 1;.
16380 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
16390 52 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72  Rare case of a r
163a0 65 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64  eally large head
163b0 65 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e  er */.    nVarin
163c0 74 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e  t = sqlite3Varin
163d0 74 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20  tLen(nHdr);.    
163e0 6e 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b  nHdr += nVarint;
163f0 0a 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74  .    if( nVarint
16400 3c 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65  <sqlite3VarintLe
16410 6e 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b  n(nHdr) ) nHdr++
16420 3b 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20  ;.  }.  nByte = 
16430 6e 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66  nHdr+nData;.  if
16440 28 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62  ( nByte+nZero>db
16450 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
16460 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
16470 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
16480 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
16490 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
164a0 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
164b0 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
164c0 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
164d0 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
164e0 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
164f0 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
16500 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
16510 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
16520 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
16530 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
16540 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
16550 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
16560 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
16570 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
16580 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
16590 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
165a0 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
165b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
165c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
165d0 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
165e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
165f0 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
16600 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
16610 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
16620 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
16630 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
16640 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
16650 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b  dr);.  j = nHdr;
16660 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
16670 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52  0<=pLast );.  pR
16680 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64  ec = pData0;.  d
16690 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  o{.    serial_ty
166a0 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70  pe = pRec->uTemp
166b0 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  ;.    /* EVIDENC
166c0 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37  E-OF: R-06529-47
166d0 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  362 Following th
166e0 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72  e size varint ar
166f0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20  e one or more.  
16700 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20    ** additional 
16710 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72  varints, one per
16720 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20   column. */.    
16730 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
16740 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
16750 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
16760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72            /* ser
16770 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20  ial type */.    
16780 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
16790 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68  R-64536-51728 Th
167a0 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63  e values for eac
167b0 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
167c0 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d  record.    ** im
167d0 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
167e0 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
167f0 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33      j += sqlite3
16800 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a  VdbeSerialPut(&z
16810 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52  NewRecord[j], pR
16820 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  ec, serial_type)
16830 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ; /* content */.
16840 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65    }while( (++pRe
16850 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61  c)<=pLast );.  a
16860 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29  ssert( i==nHdr )
16870 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e  ;.  assert( j==n
16880 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
16890 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
168a0 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
168b0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
168c0 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
168d0 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
168e0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
168f0 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  b;.  if( nZero )
16900 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
16910 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
16920 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
16930 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
16940 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
16950 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
16960 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
16970 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
16980 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
16990 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
169a0 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
169b0 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
169c0 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
169d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
169e0 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
169f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
16a00 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a  [P2]=count().**.
16a10 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
16a20 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
16a30 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
16a40 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
16a50 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
16a60 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
16a70 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
16a80 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
16a90 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
16aa0 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
16ab0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
16ac0 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72  2 */.  i64 nEntr
16ad0 79 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  y;.  BtCursor *p
16ae0 43 72 73 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  Crsr;..  assert(
16af0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
16b00 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  1]->eCurType==CU
16b10 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
16b20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61 70 43 73   pCrsr = p->apCs
16b30 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75 63 2e 70  r[pOp->p1]->uc.p
16b40 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
16b50 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e  ( pCrsr );.  nEn
16b60 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  try = 0;  /* Not
16b70 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
16b80 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
16b90 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
16ba0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
16bb0 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45  Count(pCrsr, &nE
16bc0 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 20 3d 20  ntry);.  pOut = 
16bd0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
16be0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
16bf0 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20  u.i = nEntry;.  
16c00 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
16c10 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65  ./* Opcode: Save
16c20 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20  point P1 * * P4 
16c30 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65  *.**.** Open, re
16c40 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63  lease or rollbac
16c50 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  k the savepoint 
16c60 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74  named by paramet
16c70 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67  er P4, depending
16c80 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65  .** on the value
16c90 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20   of P1. To open 
16ca0 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c  a new savepoint,
16cb0 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61   P1==0. To relea
16cc0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a  se (commit) an.*
16cd0 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70  * existing savep
16ce0 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20  oint, P1==1, or 
16cf0 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65  to rollback an e
16d00 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e  xisting savepoin
16d10 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65  t P1==2..*/.case
16d20 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b   OP_Savepoint: {
16d30 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
16d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16d50 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50     /* Value of P
16d60 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63  1 operand */.  c
16d70 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
16d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16d90 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f  * Name of savepo
16da0 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61  int */.  int nNa
16db0 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20  me;.  Savepoint 
16dc0 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69  *pNew;.  Savepoi
16dd0 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a  nt *pSavepoint;.
16de0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d    Savepoint *pTm
16df0 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f  p;.  int iSavepo
16e00 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a  int;.  int ii;..
16e10 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a    p1 = pOp->p1;.
16e20 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70    zName = pOp->p
16e30 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72  4.z;..  /* Asser
16e40 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61  t that the p1 pa
16e50 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64  rameter is valid
16e60 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74  . Also that if t
16e70 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a  here is no open.
16e80 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e    ** transaction
16e90 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e  , then there can
16ea0 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70  not be any savep
16eb0 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61  oints. .  */.  a
16ec0 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
16ed0 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  point==0 || db->
16ee0 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  autoCommit==0 );
16ef0 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53  .  assert( p1==S
16f00 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c  AVEPOINT_BEGIN||
16f10 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
16f20 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50  LEASE||p1==SAVEP
16f30 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b  OINT_ROLLBACK );
16f40 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70  .  assert( db->p
16f50 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d  Savepoint || db-
16f60 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
16f70 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20  vepoint==0 );.  
16f80 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76  assert( checkSav
16f90 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20  epointCount(db) 
16fa0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
16fb0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20  bIsReader );..  
16fc0 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e  if( p1==SAVEPOIN
16fd0 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69  T_BEGIN ){.    i
16fe0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
16ff0 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  e>0 ){.      /* 
17000 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20  A new savepoint 
17010 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65  cannot be create
17020 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61  d if there are a
17030 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20  ctive write .   
17040 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73     ** statements
17050 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64   (i.e. open read
17060 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74  /write increment
17070 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29  al blob handles)
17080 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
17090 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
170a0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65  r(p, "cannot ope
170b0 6e 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  n savepoint - SQ
170c0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
170d0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
170e0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
170f0 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
17100 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
17110 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
17120 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
17130 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
17140 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
17150 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
17160 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
17170 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
17180 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
17190 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
171a0 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
171b0 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
171c0 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
171d0 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
171e0 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
171f0 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
17200 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
17210 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
17220 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
17230 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
17240 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
17250 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
17260 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
17270 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
17280 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
17290 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
172a0 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
172b0 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
172c0 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
172d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172e0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
172f0 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
17300 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
17310 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
17320 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
17330 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
17340 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
17350 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
17360 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
17370 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
17380 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
17390 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
173a0 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
173b0 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
173c0 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
173d0 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
173e0 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
173f0 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
17400 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
17410 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
17420 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
17430 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
17440 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
17450 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
17460 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
17470 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
17480 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
17490 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
174a0 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
174b0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
174c0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
174d0 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
174e0 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
174f0 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
17500 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
17510 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
17520 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
17530 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
17540 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
17550 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
17560 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
17570 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
17580 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
17590 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
175a0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
175b0 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
175c0 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
175d0 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
175e0 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
175f0 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
17600 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
17610 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
17620 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
17630 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
17640 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
17650 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
17660 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
17670 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
17680 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
17690 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
176a0 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
176b0 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
176c0 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
176d0 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
176e0 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
176f0 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
17700 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
17710 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
17720 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
17730 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
17740 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
17750 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
17760 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
17770 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
17780 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
17790 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
177a0 20 22 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f   "no such savepo
177b0 69 6e 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29  int: %s", zName)
177c0 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
177d0 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
177e0 65 6c 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64  else if( db->nVd
177f0 62 65 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d  beWrite>0 && p1=
17800 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41  =SAVEPOINT_RELEA
17810 53 45 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  SE ){.      /* I
17820 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
17830 65 20 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f  e to release (co
17840 6d 6d 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e  mmit) a savepoin
17850 74 20 69 66 20 74 68 65 72 65 20 61 72 65 20 0a  t if there are .
17860 20 20 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20        ** active 
17870 77 72 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73  write statements
17880 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
17890 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
178a0 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 72 65 6c  r(p, "cannot rel
178b0 65 61 73 65 20 73 61 76 65 70 6f 69 6e 74 20 2d  ease savepoint -
178c0 20 22 0a 20 20 20 20 20 20 20 20 20 20 20 20 20   ".             
178d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 51               "SQ
178e0 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
178f0 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
17900 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
17910 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a  SY;.    }else{..
17920 20 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69        /* Determi
17930 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ne whether or no
17940 74 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  t this is a tran
17950 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
17960 74 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20  t. If so,.      
17970 2a 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61  ** and this is a
17980 20 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64   RELEASE command
17990 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65  , then the curre
179a0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a  nt transaction .
179b0 20 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d        ** is comm
179c0 69 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f  itted. .      */
179d0 0a 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61  .      int isTra
179e0 6e 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65  nsaction = pSave
179f0 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20  point->pNext==0 
17a00 26 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  && db->isTransac
17a10 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20  tionSavepoint;. 
17a20 20 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73       if( isTrans
17a30 61 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41  action && p1==SA
17a40 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
17a50 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  ){.        if( (
17a60 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
17a70 43 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d  CheckFk(p, 1))!=
17a80 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
17a90 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
17aa0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
17ab0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61   }.        db->a
17ac0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20  utoCommit = 1;. 
17ad0 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
17ae0 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
17af0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
17b00 20 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20          p->pc = 
17b10 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
17b20 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  ;.          db->
17b30 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
17b40 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20            p->rc 
17b50 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55  = rc = SQLITE_BU
17b60 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  SY;.          go
17b70 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17b80 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17b90 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74    db->isTransact
17ba0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 30  ionSavepoint = 0
17bb0 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 70  ;.        rc = p
17bc0 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ->rc;.      }els
17bd0 65 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  e{.        int i
17be0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3b 0a 20  sSchemaChange;. 
17bf0 20 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e         iSavepoin
17c00 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69  t = db->nSavepoi
17c10 6e 74 20 2d 20 69 53 61 76 65 70 6f 69 6e 74 20  nt - iSavepoint 
17c20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  - 1;.        if(
17c30 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
17c40 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20  OLLBACK ){.     
17c50 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68 61       isSchemaCha
17c60 6e 67 65 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  nge = (db->flags
17c70 20 26 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   & SQLITE_Intern
17c80 43 68 61 6e 67 65 73 29 21 3d 30 3b 0a 20 20 20  Changes)!=0;.   
17c90 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
17ca0 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
17cb0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
17cc0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
17cd0 65 54 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28  eTripAllCursors(
17ce0 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
17cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d10 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 41          SQLITE_A
17d20 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 2c 0a 20  BORT_ROLLBACK,. 
17d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d50 20 20 20 20 20 20 69 73 53 63 68 65 6d 61 43 68        isSchemaCh
17d60 61 6e 67 65 3d 3d 30 29 3b 0a 20 20 20 20 20 20  ange==0);.      
17d70 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17d80 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17d90 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17da0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  r;.          }. 
17db0 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
17dc0 20 20 20 20 20 20 20 20 69 73 53 63 68 65 6d 61          isSchema
17dd0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 20 20  Change = 0;.    
17de0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
17df0 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
17e00 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
17e10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
17e20 33 42 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28  3BtreeSavepoint(
17e30 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
17e40 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29   p1, iSavepoint)
17e50 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
17e60 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
17e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 6f 74  .            got
17e80 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
17e90 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20  rror;.          
17ea0 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
17eb0 20 20 20 20 69 66 28 20 69 73 53 63 68 65 6d 61      if( isSchema
17ec0 43 68 61 6e 67 65 20 29 7b 0a 20 20 20 20 20 20  Change ){.      
17ed0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
17ee0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
17ef0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 20 20 20  nts(db);.       
17f00 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 41     sqlite3ResetA
17f10 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65  llSchemasOfConne
17f20 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20  ction(db);.     
17f30 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d       db->flags =
17f40 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51   (db->flags | SQ
17f50 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
17f60 65 73 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  es);.        }. 
17f70 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20       }.  .      
17f80 2f 2a 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66  /* Regardless of
17f90 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69 73   whether this is
17fa0 20 61 20 52 45 4c 45 41 53 45 20 6f 72 20 52 4f   a RELEASE or RO
17fb0 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72 6f 79 20  LLBACK, destroy 
17fc0 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a 20 73 61  all .      ** sa
17fd0 76 65 70 6f 69 6e 74 73 20 6e 65 73 74 65 64 20  vepoints nested 
17fe0 69 6e 73 69 64 65 20 6f 66 20 74 68 65 20 73 61  inside of the sa
17ff0 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70  vepoint being op
18000 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20  erated on. */.  
18010 20 20 20 20 77 68 69 6c 65 28 20 64 62 2d 3e 70      while( db->p
18020 53 61 76 65 70 6f 69 6e 74 21 3d 70 53 61 76 65  Savepoint!=pSave
18030 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  point ){.       
18040 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76   pTmp = db->pSav
18050 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20  epoint;.        
18060 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d  db->pSavepoint =
18070 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20   pTmp->pNext;.  
18080 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18090 72 65 65 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20  ree(db, pTmp);. 
180a0 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65         db->nSave
180b0 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d  point--;.      }
180c0 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 69 74  ..      /* If it
180d0 20 69 73 20 61 20 52 45 4c 45 41 53 45 2c 20 74   is a RELEASE, t
180e0 68 65 6e 20 64 65 73 74 72 6f 79 20 74 68 65 20  hen destroy the 
180f0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
18100 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a 20 20 20  operated on .   
18110 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74     ** too. If it
18120 20 69 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54   is a ROLLBACK T
18130 4f 2c 20 74 68 65 6e 20 73 65 74 20 74 68 65 20  O, then set the 
18140 6e 75 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72  number of deferr
18150 65 64 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e  ed .      ** con
18160 73 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f  straint violatio
18170 6e 73 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  ns present in th
18180 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18190 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 0a 20  e value stored. 
181a0 20 20 20 20 20 2a 2a 20 77 68 65 6e 20 74 68 65       ** when the
181b0 20 73 61 76 65 70 6f 69 6e 74 20 77 61 73 20 63   savepoint was c
181c0 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20  reated.  */.    
181d0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
181e0 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20  INT_RELEASE ){. 
181f0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
18200 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70  Savepoint==db->p
18210 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20  Savepoint );.   
18220 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18230 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  int = pSavepoint
18240 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20  ->pNext;.       
18250 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
18260 62 2c 20 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a  b, pSavepoint);.
18270 20 20 20 20 20 20 20 20 69 66 28 20 21 69 73 54          if( !isT
18280 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20  ransaction ){.  
18290 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
182a0 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20  epoint--;.      
182b0 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b    }.      }else{
182c0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
182d0 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 70 53 61  ferredCons = pSa
182e0 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
182f0 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20  edCons;.        
18300 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
18310 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
18320 74 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  t->nDeferredImmC
18330 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  ons;.      }..  
18340 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e 73      if( !isTrans
18350 61 63 74 69 6f 6e 20 7c 7c 20 70 31 3d 3d 53 41  action || p1==SA
18360 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
18370 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
18380 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
18390 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53  point(db, p1, iS
183a0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
183b0 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
183c0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
183d0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
183e0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
183f0 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  }..  break;.}../
18400 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f  * Opcode: AutoCo
18410 6d 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  mmit P1 P2 * * *
18420 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64  .**.** Set the d
18430 61 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d  atabase auto-com
18440 6d 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28  mit flag to P1 (
18450 31 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69  1 or 0). If P2 i
18460 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20  s true, roll.** 
18470 62 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74  back any current
18480 6c 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20  ly active btree 
18490 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66  transactions. If
184a0 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61   there are any a
184b0 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70  ctive.** VMs (ap
184c0 61 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e  art from this on
184d0 65 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42  e), then a ROLLB
184e0 41 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f  ACK fails.  A CO
184f0 4d 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a  MMIT fails if.**
18500 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
18510 65 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72  e writing VMs or
18520 20 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74   active VMs that
18530 20 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68   use shared cach
18540 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  e..**.** This in
18550 73 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73  struction causes
18560 20 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e   the VM to halt.
18570 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f  .*/.case OP_Auto
18580 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20  Commit: {.  int 
18590 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
185a0 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61  t;.  int iRollba
185b0 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e  ck;.  int turnOn
185c0 41 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75  AC;..  desiredAu
185d0 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e  toCommit = pOp->
185e0 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20  p1;.  iRollback 
185f0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72  = pOp->p2;.  tur
18600 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41  nOnAC = desiredA
18610 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62  utoCommit && !db
18620 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20  ->autoCommit;.  
18630 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
18640 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
18650 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
18660 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
18670 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  ( desiredAutoCom
18680 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62  mit==1 || iRollb
18690 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ack==0 );.  asse
186a0 72 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74  rt( db->nVdbeAct
186b0 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20  ive>0 );  /* At 
186c0 6c 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56  least this one V
186d0 4d 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20  M is active */. 
186e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
186f0 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
18700 74 75 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f  turnOnAC && !iRo
18710 6c 6c 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56  llback && db->nV
18720 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
18730 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
18740 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
18750 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
18760 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
18770 72 69 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  riting.    ** re
18780 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e  turn an error in
18790 64 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68  dicating that th
187a0 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74  e other VMs must
187b0 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e   complete first.
187c0 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c   .    */.    sql
187d0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
187e0 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20   "cannot commit 
187f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20 22 0a  transaction - ".
18800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18810 20 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61          "SQL sta
18820 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72  tements in progr
18830 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20 3d 20  ess");.    rc = 
18840 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d  SQLITE_BUSY;.  }
18850 65 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64  else if( desired
18860 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e  AutoCommit!=db->
18870 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
18880 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20    if( iRollback 
18890 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
188a0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
188b0 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 73  it==1 );.      s
188c0 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c  qlite3RollbackAl
188d0 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f  l(db, SQLITE_ABO
188e0 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20  RT_ROLLBACK);.  
188f0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18900 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73  it = 1;.    }els
18910 65 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69  e if( (rc = sqli
18920 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
18930 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
18940 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76   ){.      goto v
18950 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18960 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d  }else{.      db-
18970 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75  >autoCommit = (u
18980 38 29 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  8)desiredAutoCom
18990 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  mit;.    }.    i
189a0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  f( sqlite3VdbeHa
189b0 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55  lt(p)==SQLITE_BU
189c0 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70  SY ){.      p->p
189d0 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  c = (int)(pOp - 
189e0 61 4f 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  aOp);.      db->
189f0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38  autoCommit = (u8
18a00 29 28 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43  )(1-desiredAutoC
18a10 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d  ommit);.      p-
18a20 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18a30 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f  E_BUSY;.      go
18a40 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
18a50 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
18a60 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
18a70 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
18a80 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
18a90 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
18aa0 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
18ab0 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18ac0 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
18ad0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
18ae0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18af0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
18b00 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
18b10 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  se{.    sqlite3V
18b20 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
18b30 20 20 20 20 28 21 64 65 73 69 72 65 64 41 75 74      (!desiredAut
18b40 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74  oCommit)?"cannot
18b50 20 73 74 61 72 74 20 61 20 74 72 61 6e 73 61 63   start a transac
18b60 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72  tion within a tr
18b70 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20  ansaction":(.   
18b80 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29       (iRollback)
18b90 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63  ?"cannot rollbac
18ba0 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69  k - no transacti
18bb0 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20  on is active":. 
18bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18bd0 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74    "cannot commit
18be0 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f   - no transactio
18bf0 6e 20 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a  n is active"));.
18c00 20 20 20 20 20 20 20 20 20 0a 20 20 20 20 72 63           .    rc
18c10 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
18c20 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
18c30 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
18c40 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
18c50 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
18c60 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
18c70 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
18c80 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
18c90 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
18ca0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
18cb0 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
18cc0 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
18cd0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
18ce0 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
18cf0 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
18d00 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
18d10 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
18d20 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
18d30 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
18d40 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
18d50 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
18d60 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
18d70 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
18d80 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
18d90 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
18da0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
18db0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
18dc0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
18dd0 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
18de0 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
18df0 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
18e00 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
18e10 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
18e20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
18e30 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
18e40 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
18e50 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
18e60 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
18e70 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
18e80 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
18e90 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
18ea0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
18eb0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
18ec0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
18ed0 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
18ee0 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
18ef0 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
18f00 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
18f10 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18f20 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
18f30 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
18f40 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
18f50 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
18f60 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
18f70 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
18f80 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
18f90 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
18fa0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
18fb0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
18fc0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
18fd0 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
18fe0 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
18ff0 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
19000 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
19010 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
19020 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
19030 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
19040 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
19050 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
19060 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
19070 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
19080 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
19090 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
190a0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
190b0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
190c0 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
190d0 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
190e0 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
190f0 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
19100 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
19110 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
19120 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
19130 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
19140 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
19150 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
19160 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19170 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19180 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19190 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
191a0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
191b0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
191c0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
191d0 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
191e0 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
191f0 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
19200 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
19210 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
19220 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
19230 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
19240 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
19250 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
19260 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
19270 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
19280 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
19290 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
192a0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
192b0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
192c0 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
192d0 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
192e0 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
192f0 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
19300 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
19310 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
19320 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
19330 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
19340 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
19350 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
19360 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
19370 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
19380 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
19390 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
193a0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
193b0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
193c0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
193d0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
193e0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
193f0 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
19400 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19410 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
19420 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
19430 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
19440 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
19450 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
19460 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
19470 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
19480 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
19490 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
194a0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
194b0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
194c0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
194d0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
194e0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
194f0 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
19500 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
19510 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
19520 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
19530 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
19540 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
19550 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
19560 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
19570 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
19580 20 20 20 20 69 66 28 20 28 72 63 26 30 78 66 66      if( (rc&0xff
19590 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  )==SQLITE_BUSY )
195a0 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20  {.      p->pc = 
195b0 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
195c0 3b 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20  ;.      p->rc = 
195d0 72 63 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76  rc;.      goto v
195e0 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
195f0 7d 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  }.    if( rc!=SQ
19600 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
19610 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
19620 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
19630 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
19640 20 26 26 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a   && p->usesStmtJ
19650 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20 26 26 20  ournal .     && 
19660 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d  (db->autoCommit=
19670 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  =0 || db->nVdbeR
19680 65 61 64 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20  ead>1) .    ){. 
19690 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
196a0 69 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61  ite3BtreeIsInTra
196b0 6e 73 28 70 42 74 29 20 29 3b 0a 20 20 20 20 20  ns(pBt) );.     
196c0 20 69 66 28 20 70 2d 3e 69 53 74 61 74 65 6d 65   if( p->iStateme
196d0 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  nt==0 ){.       
196e0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74   assert( db->nSt
196f0 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62  atement>=0 && db
19700 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20  ->nSavepoint>=0 
19710 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  );.        db->n
19720 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20  Statement++; .  
19730 20 20 20 20 20 20 70 2d 3e 69 53 74 61 74 65 6d        p->iStatem
19740 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70  ent = db->nSavep
19750 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74  oint + db->nStat
19760 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a  ement;.      }..
19770 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19780 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
19790 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45  db, SAVEPOINT_BE
197a0 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65  GIN, p->iStateme
197b0 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20 69 66 28  nt-1);.      if(
197c0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
197d0 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
197e0 71 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e  qlite3BtreeBegin
197f0 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e 69 53 74  Stmt(pBt, p->iSt
19800 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20  atement);.      
19810 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53 74 6f 72  }..      /* Stor
19820 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61  e the current va
19830 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
19840 61 73 65 20 68 61 6e 64 6c 65 73 20 64 65 66 65  ase handles defe
19850 72 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a  rred constraint.
19860 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72        ** counter
19870 2e 20 49 66 20 74 68 65 20 73 74 61 74 65 6d 65  . If the stateme
19880 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e  nt transaction n
19890 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65  eeds to be rolle
198a0 64 20 62 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a  d back,.      **
198b0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
198c0 69 73 20 63 6f 75 6e 74 65 72 20 6e 65 65 64 73  is counter needs
198d0 20 74 6f 20 62 65 20 72 65 73 74 6f 72 65 64 20   to be restored 
198e0 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  too.  */.      p
198f0 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d  ->nStmtDefCons =
19900 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
19910 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74  ns;.      p->nSt
19920 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64  mtDefImmCons = d
19930 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
19940 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  ons;.    }..    
19950 2f 2a 20 47 61 74 68 65 72 20 74 68 65 20 73 63  /* Gather the sc
19960 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d  hema version num
19970 62 65 72 20 66 6f 72 20 63 68 65 63 6b 69 6e 67  ber for checking
19980 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c 45 4d 45  :.    ** IMPLEME
19990 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 33 32  NTATION-OF: R-32
199a0 31 39 35 2d 31 39 34 36 35 20 54 68 65 20 73 63  195-19465 The sc
199b0 68 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20  hema version is 
199c0 75 73 65 64 20 62 79 20 53 51 4c 69 74 65 0a 20  used by SQLite. 
199d0 20 20 20 2a 2a 20 65 61 63 68 20 74 69 6d 65 20     ** each time 
199e0 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63 75  a query is execu
199f0 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74 68  ted to ensure th
19a00 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  at the internal 
19a10 63 61 63 68 65 20 6f 66 20 74 68 65 0a 20 20 20  cache of the.   
19a20 20 2a 2a 20 73 63 68 65 6d 61 20 75 73 65 64 20   ** schema used 
19a30 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
19a40 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
19a50 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
19a60 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 64 61  of the.    ** da
19a70 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77  tabase against w
19a80 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65  hich the compile
19a90 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61  d query is actua
19aa0 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20  lly executed..  
19ab0 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
19ac0 42 74 72 65 65 47 65 74 4d 65 74 61 28 70 42 74  BtreeGetMeta(pBt
19ad0 2c 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56  , BTREE_SCHEMA_V
19ae0 45 52 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26  ERSION, (u32 *)&
19af0 69 4d 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e  iMeta);.    iGen
19b00 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
19b10 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65  p1].pSchema->iGe
19b20 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73  neration;.  }els
19b30 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d  e{.    iGen = iM
19b40 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61  eta = 0;.  }.  a
19b50 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
19b60 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65  0 || pOp->p4type
19b70 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
19b80 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28  if( pOp->p5 && (
19b90 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c  iMeta!=pOp->p3 |
19ba0 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e  | iGen!=pOp->p4.
19bb0 69 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  i) ){.    sqlite
19bc0 33 44 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a  3DbFree(db, p->z
19bd0 45 72 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e  ErrMsg);.    p->
19be0 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65  zErrMsg = sqlite
19bf0 33 44 62 53 74 72 44 75 70 28 64 62 2c 20 22 64  3DbStrDup(db, "d
19c00 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 68  atabase schema h
19c10 61 73 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20  as changed");.  
19c20 20 20 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65    /* If the sche
19c30 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74  ma-cookie from t
19c40 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19c50 20 6d 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f   matches the coo
19c60 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72  kie .    ** stor
19c70 65 64 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d  ed with the in-m
19c80 65 6d 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61  emory representa
19c90 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65  tion of the sche
19ca0 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f  ma, do.    ** no
19cb0 74 20 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68  t reload the sch
19cc0 65 6d 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74  ema from the dat
19cd0 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20  abase file..    
19ce0 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72  **.    ** If vir
19cf0 74 75 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20  tual-tables are 
19d00 69 6e 20 75 73 65 2c 20 74 68 69 73 20 69 73 20  in use, this is 
19d10 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69  not just an opti
19d20 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a  mization..    **
19d30 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73   Often, v-tables
19d40 20 73 74 6f 72 65 20 74 68 65 69 72 20 64 61 74   store their dat
19d50 61 20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74  a in other SQLit
19d60 65 20 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a  e tables, which.
19d70 20 20 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69      ** are queri
19d80 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78  ed from within x
19d90 4e 65 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72  Next() and other
19da0 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73   v-table methods
19db0 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72   using.    ** pr
19dc0 65 70 61 72 65 64 20 71 75 65 72 69 65 73 2e 20  epared queries. 
19dd0 49 66 20 73 75 63 68 20 61 20 71 75 65 72 79 20  If such a query 
19de0 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20  is out-of-date, 
19df0 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74  we do not want t
19e00 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64  o.    ** discard
19e10 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19e20 68 65 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65  hema, as the use
19e30 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74  r code implement
19e40 69 6e 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76  ing the.    ** v
19e50 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76  -table would hav
19e60 65 20 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f  e to be ready fo
19e70 72 20 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74  r the sqlite3_vt
19e80 61 62 20 73 74 72 75 63 74 75 72 65 20 69 74 73  ab structure its
19e90 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65  elf.    ** to be
19ea0 20 69 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65   invalidated whe
19eb0 6e 65 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74  never sqlite3_st
19ec0 65 70 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66  ep() is called f
19ed0 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20  rom within .    
19ee0 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74  ** a v-table met
19ef0 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  hod..    */.    
19f00 69 66 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  if( db->aDb[pOp-
19f10 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  >p1].pSchema->sc
19f20 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65  hema_cookie!=iMe
19f30 74 61 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ta ){.      sqli
19f40 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
19f50 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  a(db, pOp->p1);.
19f60 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70      }.    p->exp
19f70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63  ired = 1;.    rc
19f80 20 3d 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41   = SQLITE_SCHEMA
19f90 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
19fa0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61  ../* Opcode: Rea
19fb0 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20 50 33  dCookie P1 P2 P3
19fc0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20   * *.**.** Read 
19fd0 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20 50 33  cookie number P3
19fe0 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65 20 50   from database P
19ff0 31 20 61 6e 64 20 77 72 69 74 65 20 69 74 20 69  1 and write it i
1a000 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
1a010 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74 68 65  .** P3==1 is the
1a020 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
1a030 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65 20 64    P3==2 is the d
1a040 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a  atabase format..
1a050 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68 65 20  ** P3==3 is the 
1a060 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65  recommended page
1a070 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20 61 6e  r cache size, an
1a080 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d  d so forth.  P1=
1a090 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69  =0 is.** the mai
1a0a0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
1a0b0 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65  and P1==1 is the
1a0c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75   database file u
1a0d0 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20  sed to store.** 
1a0e0 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
1a0f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75  ..**.** There mu
1a100 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63  st be a read-loc
1a110 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  k on the databas
1a120 65 20 28 65 69 74 68 65 72 20 61 20 74 72 61 6e  e (either a tran
1a130 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20  saction.** must 
1a140 62 65 20 73 74 61 72 74 65 64 20 6f 72 20 74 68  be started or th
1a150 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e 20 6f  ere must be an o
1a160 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65 66 6f  pen cursor) befo
1a170 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e 67 20  re.** executing 
1a180 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1a190 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
1a1a0 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20  dCookie: {      
1a1b0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
1a1c0 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b   */.  int iMeta;
1a1d0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e  .  int iDb;.  in
1a1e0 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73  t iCookie;..  as
1a1f0 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64  sert( p->bIsRead
1a200 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f  er );.  iDb = pO
1a210 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65  p->p1;.  iCookie
1a220 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
1a230 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51  sert( pOp->p3<SQ
1a240 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54  LITE_N_BTREE_MET
1a250 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  A );.  assert( i
1a260 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1a270 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1a280 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  ( db->aDb[iDb].p
1a290 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1a2a0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1a2b0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1a2c0 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74   );..  sqlite3Bt
1a2d0 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61  reeGetMeta(db->a
1a2e0 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f  Db[iDb].pBt, iCo
1a2f0 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d  okie, (u32 *)&iM
1a300 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  eta);.  pOut = o
1a310 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
1a320 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75   pOp);.  pOut->u
1a330 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
1a340 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1a350 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
1a360 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
1a370 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
1a380 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
1a390 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
1a3a0 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
1a3b0 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
1a3c0 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
1a3d0 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
1a3e0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
1a3f0 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
1a400 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
1a410 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
1a420 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
1a430 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
1a440 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
1a450 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
1a460 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1a470 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
1a480 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
1a490 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
1a4a0 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
1a4b0 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
1a4c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
1a4d0 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
1a4e0 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
1a4f0 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
1a500 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
1a510 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
1a520 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
1a530 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
1a540 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
1a550 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
1a560 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a570 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a580 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a590 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a5a0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a5b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
1a5c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
1a5d0 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
1a5e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1a5f0 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
1a600 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1a610 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
1a620 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
1a630 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
1a640 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
1a650 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1a660 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
1a670 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
1a680 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
1a690 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
1a6a0 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
1a6b0 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
1a6c0 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
1a6d0 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
1a6e0 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
1a6f0 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
1a700 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
1a710 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
1a720 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
1a730 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
1a740 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
1a750 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
1a760 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
1a770 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
1a780 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
1a790 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
1a7a0 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
1a7b0 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
1a7c0 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1a7d0 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1a7e0 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1a7f0 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1a800 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1a810 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1a820 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
1a830 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
1a840 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
1a850 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
1a860 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
1a870 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
1a880 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
1a890 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
1a8a0 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
1a8b0 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
1a8c0 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
1a8d0 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
1a8e0 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
1a8f0 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
1a900 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1a910 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
1a920 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1a930 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1a940 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1a950 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
1a960 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
1a970 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
1a980 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
1a990 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
1a9a0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
1a9b0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1a9c0 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
1a9d0 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
1a9e0 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
1a9f0 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
1aa00 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
1aa10 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
1aa20 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
1aa30 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
1aa40 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
1aa50 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
1aa60 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
1aa70 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
1aa80 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
1aa90 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
1aaa0 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
1aab0 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
1aac0 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
1aad0 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
1aae0 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
1aaf0 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
1ab00 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
1ab10 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
1ab20 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
1ab30 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
1ab40 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
1ab50 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
1ab60 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
1ab70 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1ab80 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1ab90 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1aba0 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1abb0 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1abc0 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1abd0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1abe0 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1abf0 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1ac00 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1ac10 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1ac20 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1ac30 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1ac40 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1ac50 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1ac60 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1ac70 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1ac80 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1ac90 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1aca0 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1acb0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1acc0 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1acd0 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1ace0 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1acf0 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1ad00 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1ad10 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1ad20 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1ad30 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1ad40 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1ad50 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1ad60 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1ad70 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1ad80 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1ad90 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1ada0 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1adb0 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1adc0 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1add0 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1ade0 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1adf0 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1ae00 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1ae10 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1ae20 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1ae30 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1ae40 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1ae50 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1ae60 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1ae70 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1ae80 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1ae90 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1aea0 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1aeb0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1aec0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1aed0 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1aee0 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1aef0 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1af00 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1af10 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1af20 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1af30 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1af40 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1af50 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1af60 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1af70 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1af80 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1af90 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1afa0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1afb0 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1afc0 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1afd0 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1afe0 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1aff0 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1b000 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1b010 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1b020 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1b030 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1b040 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1b050 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1b060 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1b070 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1b080 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1b090 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1b0a0 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1b0b0 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1b0c0 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1b0d0 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1b0e0 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1b0f0 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1b100 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1b110 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1b120 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1b130 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1b140 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1b150 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1b160 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1b170 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1b180 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1b190 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1b1a0 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1b1b0 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1b1c0 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1b1d0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1b1e0 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1b1f0 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1b200 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1b210 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1b220 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1b230 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1b240 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1b250 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1b260 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1b270 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1b280 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1b290 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1b2a0 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1b2b0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1b2c0 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1b2d0 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1b2e0 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1b2f0 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1b300 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1b310 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1b320 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1b330 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1b340 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1b350 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1b360 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1b370 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1b380 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1b390 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1b3a0 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1b3b0 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1b3c0 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1b3d0 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1b3e0 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1b3f0 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1b400 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1b410 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1b420 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1b430 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1b440 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1b450 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1b460 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1b470 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1b480 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1b490 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1b4a0 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1b4b0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1b4c0 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1b4d0 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1b4e0 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20    int nField;.  
1b4f0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
1b500 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69  o;.  int p2;.  i
1b510 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72  nt iDb;.  int wr
1b520 46 6c 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70  Flag;.  Btree *p
1b530 58 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  X;.  VdbeCursor 
1b540 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62  *pCur;.  Db *pDb
1b550 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
1b560 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1b570 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1b580 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1b590 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1b5a0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72  EYINFO );.  pCur
1b5b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1b5c0 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72  >p1];.  if( pCur
1b5d0 20 26 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f   && pCur->pgnoRo
1b5e0 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32  ot==(u32)pOp->p2
1b5f0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
1b600 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e  pCur->iDb==pOp->
1b610 70 33 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75  p3 );      /* Gu
1b620 61 72 61 6e 74 65 65 64 20 62 79 20 74 68 65 20  aranteed by the 
1b630 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a  code generator *
1b640 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f  /.    goto open_
1b650 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73  cursor_set_hints
1b660 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68  ;.  }.  /* If th
1b670 65 20 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20  e cursor is not 
1b680 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f  currently open o
1b690 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64  r is open on a d
1b6a0 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e  ifferent.  ** in
1b6b0 64 65 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  dex, then fall t
1b6c0 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f  hrough into OP_O
1b6d0 70 65 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65  penRead to force
1b6e0 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73   a reopen */.cas
1b6f0 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63  e OP_OpenRead:.c
1b700 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65  ase OP_OpenWrite
1b710 3a 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  :..  assert( pOp
1b720 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65  ->opcode==OP_Ope
1b730 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70  nWrite || pOp->p
1b740 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1b750 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1b760 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1b770 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1b780 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1b790 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1b7a0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1b7b0 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1b7c0 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1b7d0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1b7e0 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1b7f0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1b800 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a  ABORT_ROLLBACK;.
1b810 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
1b820 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1b830 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1b840 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1b850 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1b860 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1b870 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1b880 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1b890 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1b8a0 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1b8b0 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1b8c0 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1b8d0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1b8e0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1b8f0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1b900 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1b910 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1b920 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1b930 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1b940 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1b950 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1b960 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1b970 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1b980 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1b990 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1b9a0 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1b9b0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1b9c0 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1b9d0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1b9e0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1b9f0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1ba00 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1ba10 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1ba20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1ba30 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1ba40 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1ba50 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1ba60 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1ba70 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1ba80 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ( p2<=(p->nMem-p
1ba90 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
1baa0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
1bab0 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  2];.    assert( 
1bac0 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32 29  memIsValid(pIn2)
1bad0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
1bae0 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
1baf0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
1bb00 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
1bb10 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32 29  Integerify(pIn2)
1bb20 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74 29  ;.    p2 = (int)
1bb30 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f  pIn2->u.i;.    /
1bb40 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20 61  * The p2 value a
1bb50 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d  lways comes from
1bb60 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65 61   a prior OP_Crea
1bb70 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20 61  teTable opcode a
1bb80 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 6f  nd.    ** that o
1bb90 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79  pcode will alway
1bba0 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61 6c  s set the p2 val
1bbb0 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20  ue to 2 or more 
1bbc0 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20  or else fail..  
1bbd0 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77 65    ** If there we
1bbe0 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74 68  re a failure, th
1bbf0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
1bc00 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65 20  ment would have 
1bc10 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62 65  halted.    ** be
1bc20 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74 68  fore reaching th
1bc30 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1bc40 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45 52  */.    if( NEVER
1bc50 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20 20  (p2<2) ) {.     
1bc60 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
1bc70 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
1bc80 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1bc90 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
1bca0 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70    }.  if( pOp->p
1bcb0 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46  4type==P4_KEYINF
1bcc0 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66  O ){.    pKeyInf
1bcd0 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1bce0 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72 74  Info;.    assert
1bcf0 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d  ( pKeyInfo->enc=
1bd00 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20  =ENC(db) );.    
1bd10 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1bd20 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20  ->db==db );.    
1bd30 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66  nField = pKeyInf
1bd40 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e  o->nField+pKeyIn
1bd50 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d  fo->nXField;.  }
1bd60 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34  else if( pOp->p4
1bd70 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1bd80 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  {.    nField = p
1bd90 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20  Op->p4.i;.  }.  
1bda0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
1bdb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1bdc0 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74  nField>=0 );.  t
1bdd0 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64 3d  estcase( nField=
1bde0 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20  =0 );  /* Table 
1bdf0 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52 49  with INTEGER PRI
1be00 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74  MARY KEY and not
1be10 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70  hing else */.  p
1be20 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
1be30 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
1be40 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43 55   nField, iDb, CU
1be50 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20 20  RTYPE_BTREE);.  
1be60 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1be70 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1be80 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1be90 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1bea0 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1beb0 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23 69  gnoRoot = p2;.#i
1bec0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1bed0 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61 67  G.  pCur->wrFlag
1bee0 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64 69   = wrFlag;.#endi
1bef0 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
1bf00 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c 20  BtreeCursor(pX, 
1bf10 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65 79  p2, wrFlag, pKey
1bf20 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e 70  Info, pCur->uc.p
1bf30 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d  Cursor);.  pCur-
1bf40 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79  >pKeyInfo = pKey
1bf50 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74  Info;.  /* Set t
1bf60 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73  he VdbeCursor.is
1bf70 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20  Table variable. 
1bf80 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e  Previous version
1bf90 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65  s of.  ** SQLite
1bfa0 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69   used to check i
1bfb0 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  f the root-page 
1bfc0 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65 20  flags were sane 
1bfd0 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20  at this point.  
1bfe0 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61  ** and report da
1bff0 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
1c000 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20 6e  n if they were n
1c010 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68 65  ot, but this che
1c020 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63  ck has.  ** sinc
1c030 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65  e moved into the
1c040 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a   btree layer.  *
1c050 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61  /  .  pCur->isTa
1c060 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70  ble = pOp->p4typ
1c070 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a  e!=P4_KEYINFO;..
1c080 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f  open_cursor_set_
1c090 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28  hints:.  assert(
1c0a0 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d   OPFLAG_BULKCSR=
1c0b0 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20  =BTREE_BULKLOAD 
1c0c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  );.  assert( OPF
1c0d0 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45  LAG_SEEKEQ==BTRE
1c0e0 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 74  E_SEEK_EQ );.  t
1c0f0 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
1c100 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53   & OPFLAG_BULKCS
1c110 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  R );.#ifdef SQLI
1c120 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52  TE_ENABLE_CURSOR
1c130 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61 73  _HINTS.  testcas
1c140 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46  e( pOp->p2 & OPF
1c150 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23 65  LAG_SEEKEQ );.#e
1c160 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42 74  ndif.  sqlite3Bt
1c170 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c 61  reeCursorHintFla
1c180 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75 72  gs(pCur->uc.pCur
1c190 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  sor,.           
1c1a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c1b0 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28      (pOp->p5 & (
1c1c0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c 4f  OPFLAG_BULKCSR|O
1c1d0 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29 3b  PFLAG_SEEKEQ)));
1c1e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1c1f0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1c200 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1c210 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1c220 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1c230 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1c240 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1c250 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1c260 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1c270 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1c280 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1c290 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1c2a0 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1c2b0 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1c2c0 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1c2d0 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1c2e0 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1c2f0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1c300 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1c310 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1c320 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1c330 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1c340 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1c350 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1c360 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1c370 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1c380 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1c390 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1c3a0 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1c3b0 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1c3c0 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1c3d0 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1c3e0 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1c3f0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1c400 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1c410 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1c420 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1c430 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1c440 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1c450 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1c460 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1c470 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1c480 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1c490 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1c4a0 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1c4b0 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1c4c0 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1c4d0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1c4e0 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1c4f0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1c500 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1c510 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1c520 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1c530 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1c540 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1c550 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1c560 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1c570 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1c580 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1c590 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1c5a0 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1c5b0 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1c5c0 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1c5d0 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1c5e0 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1c5f0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1c600 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1c610 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1c620 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1c630 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1c640 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1c650 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1c660 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1c670 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1c680 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1c690 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1c6a0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c6b0 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1c6c0 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1c6d0 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1c6e0 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1c6f0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1c700 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c710 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c720 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1c730 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1c740 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1c750 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
1c760 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1c770 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1c780 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1c790 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1c7a0 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1c7b0 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  l = 1;.  rc = sq
1c7c0 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1c7d0 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1c7e0 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20  &pCx->pBt, .    
1c7f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c800 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a      BTREE_OMIT_J
1c810 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53  OURNAL | BTREE_S
1c820 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c  INGLE | pOp->p5,
1c830 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66   vfsFlags);.  if
1c840 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1c850 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
1c860 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
1c870 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b  ns(pCx->pBt, 1);
1c880 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53  .  }.  if( rc==S
1c890 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1c8a0 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  /* If a transien
1c8b0 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75 69  t index is requi
1c8c0 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20 62  red, create it b
1c8d0 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a  y calling.    **
1c8e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1c8f0 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68 20  ateTable() with 
1c900 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  the BTREE_BLOBKE
1c910 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20  Y flag before.  
1c920 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e    ** opening it.
1c930 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1c940 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72 65  table is require
1c950 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a  d, just use the.
1c960 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63      ** automatic
1c970 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61 62  ally created tab
1c980 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67  le with root-pag
1c990 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54  e 1 (an BLOB_INT
1c9a0 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20  KEY table)..    
1c9b0 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79  */.    if( (pKey
1c9c0 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1c9d0 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20  KeyInfo)!=0 ){. 
1c9e0 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20       int pgno;. 
1c9f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1ca00 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1ca10 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63  INFO );.      rc
1ca20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1ca30 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e  reateTable(pCx->
1ca40 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45  pBt, &pgno, BTRE
1ca50 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d  E_BLOBKEY | pOp-
1ca60 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28  >p5); .      if(
1ca70 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
1ca80 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
1ca90 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52  ( pgno==MASTER_R
1caa0 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20  OOT+1 );.       
1cab0 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1cac0 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1cad0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65       assert( pKe
1cae0 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1caf0 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  db) );.        p
1cb00 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1cb10 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20  KeyInfo;.       
1cb20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1cb30 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42  eeCursor(pCx->pB
1cb40 74 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f 57  t, pgno, BTREE_W
1cb50 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20 20  RCSR,.          
1cb60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb70 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c 20        pKeyInfo, 
1cb80 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1cb90 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
1cba0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 30  pCx->isTable = 0
1cbb0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
1cbc0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
1cbd0 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e  treeCursor(pCx->
1cbe0 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f 54  pBt, MASTER_ROOT
1cbf0 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20  , BTREE_WRCSR,. 
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
1cc20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  pCx->uc.pCursor)
1cc30 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1cc40 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1cc50 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64    }.  pCx->isOrd
1cc60 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
1cc70 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
1cc80 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1cc90 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
1cca0 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34  Open P1 P2 P3 P4
1ccb0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1ccc0 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20  code works like 
1ccd0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1cce0 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20   except that it 
1ccf0 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73  opens.** a trans
1cd00 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20  ient index that 
1cd10 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20  is specifically 
1cd20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74  designed to sort
1cd30 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73   large.** tables
1cd40 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e   using an extern
1cd50 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c  al merge-sort al
1cd60 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49  gorithm..**.** I
1cd70 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73  f argument P3 is
1cd80 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
1cd90 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  it indicates tha
1cda0 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79  t the sorter may
1cdb0 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20  .** assume that 
1cdc0 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f  a stable sort co
1cdd0 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69  nsidering the fi
1cde0 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66  rst P3 fields of
1cdf0 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20   each.** key is 
1ce00 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72  sufficient to pr
1ce10 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72  oduce the requir
1ce20 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63  ed results..*/.c
1ce30 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65  ase OP_SorterOpe
1ce40 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  n: {.  VdbeCurso
1ce50 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72  r *pCx;..  asser
1ce60 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1ce70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ce80 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1ce90 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1cea0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1ceb0 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50 45  >p2, -1, CURTYPE
1cec0 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28 20  _SORTER);.  if( 
1ced0 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  pCx==0 ) goto no
1cee0 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65  _mem;.  pCx->pKe
1cef0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1cf00 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65  pKeyInfo;.  asse
1cf10 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  rt( pCx->pKeyInf
1cf20 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61  o->db==db );.  a
1cf30 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79  ssert( pCx->pKey
1cf40 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64  Info->enc==ENC(d
1cf50 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  b) );.  rc = sql
1cf60 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e  ite3VdbeSorterIn
1cf70 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c 20  it(db, pOp->p3, 
1cf80 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pCx);.  break;.}
1cf90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1cfa0 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1cfb0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1cfc0 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1cfd0 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1cfe0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1cff0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1d000 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1d010 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1d020 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1d030 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1d040 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1d050 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1d060 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1d070 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1d080 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1d090 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1d0a0 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1d0b0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1d0c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1d0d0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1d0e0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1d0f0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1d100 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
1d110 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69  orter(pC) );.  i
1d120 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74  f( (pC->seqCount
1d130 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ++)==0 ){.    go
1d140 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1d150 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1d160 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1d170 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1d180 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1d190 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1d1a0 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1d1b0 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1d1c0 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1d1d0 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1d1e0 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1d1f0 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1d200 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1d210 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1d220 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1d230 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1d240 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1d250 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1d260 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1d270 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1d280 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1d290 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1d2a0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1d2b0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1d2c0 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1d2d0 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1d2e0 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1d2f0 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1d300 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1d310 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1d320 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1d330 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1d340 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1d350 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1d360 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1d370 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1d380 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1d390 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1d3a0 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1d3b0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1d3c0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1d3d0 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1d3e0 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1d3f0 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1d400 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1d410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1d420 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1d430 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1d440 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d450 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1d460 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1d470 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1d480 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1d490 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43  , pOp->p3, -1, C
1d4a0 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a  URTYPE_PSEUDO);.
1d4b0 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1d4c0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1d4d0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1d4e0 20 20 70 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f    pCx->uc.pseudo
1d4f0 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
1d500 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1d510 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  le = 1;.  assert
1d520 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1d530 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1d540 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
1d550 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
1d560 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
1d570 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
1d580 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
1d590 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
1d5a0 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
1d5b0 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
1d5c0 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
1d5d0 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
1d5e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1d5f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1d600 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
1d610 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1d620 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d630 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
1d640 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
1d650 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
1d660 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1d670 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a  OLUMN_USED_MASK.
1d680 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
1d690 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34  nsUsed P1 * * P4
1d6a0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1d6b0 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79  code (which only
1d6c0 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74   exists if SQLit
1d6d0 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
1d6e0 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ith.** SQLITE_EN
1d6f0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1d700 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65  _MASK) identifie
1d710 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  s which columns 
1d720 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  of the.** table 
1d730 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72  or index for cur
1d740 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e  sor P1 are used.
1d750 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74    P4 is a 64-bit
1d760 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f   integer.** (P4_
1d770 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20  INT64) in which 
1d780 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74  the first 63 bit
1d790 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61  s are one for ea
1d7a0 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72  ch of the.** fir
1d7b0 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  st 63 columns of
1d7c0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1d7d0 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74  dex that are act
1d7e0 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79  ually used.** by
1d7f0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
1d800 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1d810 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63   is set if any c
1d820 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74  olumn after.** t
1d830 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e  he 64th is used.
1d840 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
1d850 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62  mnsUsed: {.  Vdb
1d860 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70  eCursor *pC;.  p
1d870 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1d880 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1d890 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
1d8a0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
1d8b0 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d    pC->maskUsed =
1d8c0 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e   *(u64*)pOp->p4.
1d8d0 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
1d8e0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
1d8f0 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1d900 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1d910 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1d920 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1d930 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1d940 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1d950 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1d960 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1d970 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1d980 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1d990 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1d9a0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1d9b0 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1d9c0 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1d9d0 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1d9e0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1d9f0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1da00 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1da10 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1da20 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1da30 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1da40 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1da50 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1da60 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1da70 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1da80 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1da90 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1daa0 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1dab0 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1dac0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1dad0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1dae0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1daf0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1db00 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1db10 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1db20 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1db30 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1db40 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1db50 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1db60 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1db70 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1db80 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1db90 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1dba0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1dbb0 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1dbc0 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1dbd0 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1dbe0 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1dbf0 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63   by an IdxLE opc
1dc00 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1dc10 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1dc20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  The IdxLE opcode
1dc30 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1dc40 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1dc50 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1dc60 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64  e.** IdxLE opcod
1dc70 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1dc80 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1dc90 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1dca0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1dcb0 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1dcc0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1dcd0 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
1dce0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1dcf0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
1dd00 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
1dd10 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1dd20 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1dd30 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1dd40 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
1dd50 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1dd60 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1dd70 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1dd80 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1dd90 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
1dda0 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1ddb0 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1ddc0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1ddd0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1dde0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1ddf0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1de00 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1de10 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1de20 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1de30 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1de40 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1de50 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1de60 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1de70 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1de80 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1de90 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1dea0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1deb0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1dec0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1ded0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1dee0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1def0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1df00 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1df10 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1df20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1df30 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1df40 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1df50 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1df60 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1df70 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1df80 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1df90 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1dfa0 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1dfb0 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1dfc0 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1dfd0 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1dfe0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1dff0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1e000 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1e010 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1e020 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1e030 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1e040 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1e050 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1e060 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1e070 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1e080 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
1e090 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1e0a0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e0b0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1e0c0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1e0d0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1e0e0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1e0f0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1e100 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1e110 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1e120 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1e130 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1e140 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1e150 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1e160 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1e170 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1e180 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1e190 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1e1a0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1e1b0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1e1c0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1e1d0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1e1e0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1e1f0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1e200 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1e210 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1e220 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1e230 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1e240 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1e250 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1e260 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1e270 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1e280 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1e290 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1e2a0 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1e2b0 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1e2c0 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1e2d0 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1e2e0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1e2f0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1e300 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1e310 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1e320 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1e330 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1e340 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1e350 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1e360 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
1e370 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e380 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e390 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1e3a0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1e3b0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1e3c0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1e3d0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1e3e0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1e3f0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1e400 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1e410 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1e420 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1e430 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1e440 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1e450 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1e460 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1e470 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1e480 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1e490 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1e4a0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1e4b0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1e4c0 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1e4d0 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1e4e0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1e4f0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1e500 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1e510 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1e520 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e530 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1e540 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1e550 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1e560 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1e570 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1e580 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1e590 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1e5a0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1e5b0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1e5c0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1e5d0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1e5e0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1e5f0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1e600 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1e610 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1e620 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1e630 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1e640 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1e650 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1e660 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1e670 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1e680 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1e690 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1e6a0 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1e6b0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1e6c0 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1e6d0 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1e6e0 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1e6f0 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1e700 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20  wed by an IdxGE 
1e710 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1e720 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1e730 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63  ** The IdxGE opc
1e740 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1e750 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1e760 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1e770 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70   the.** IdxGE op
1e780 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1e790 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1e7a0 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1e7b0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1e7c0 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1e7d0 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1e7e0 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1e7f0 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
1e800 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e810 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1e820 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
1e830 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1e840 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
1e850 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1e860 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1e870 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  GT: {       /* j
1e880 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1e890 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1e8a0 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
1e8b0 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f  esult */.  int o
1e8c0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  c;            /*
1e8d0 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62   Opcode */.  Vdb
1e8e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1e8f0 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f  /* The cursor to
1e900 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63   seek */.  Unpac
1e910 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a  kedRecord r;  /*
1e920 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b   The key to seek
1e930 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46   for */.  int nF
1e940 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
1e950 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1e960 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74  s or fields in t
1e970 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  he key */.  i64 
1e980 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f  iKey;          /
1e990 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1e9a0 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1e9b0 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20  .  int eqOnly;  
1e9c0 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e        /* Only in
1e9d0 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72  terested in == r
1e9e0 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73  esults */..  ass
1e9f0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1ea00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1ea10 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1ea20 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1ea30 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1ea40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1ea50 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1ea60 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
1ea70 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1ea80 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
1ea90 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50   OP_SeekLE == OP
1eaa0 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61  _SeekLT+1 );.  a
1eab0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1eac0 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20   == OP_SeekLT+2 
1ead0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1eae0 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65  SeekGT == OP_See
1eaf0 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLT+3 );.  asser
1eb00 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1eb10 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1eb20 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
1eb30 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
1eb40 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20  pcode;.  eqOnly 
1eb50 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  = 0;.  pC->nullR
1eb60 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1eb70 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1eb80 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1eb90 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
1eba0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1ebb0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1ebc0 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c  BTREE_SEEK_EQ fl
1ebd0 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f  ag is only set o
1ebe0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20  n index cursors 
1ebf0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  */.    assert( s
1ec00 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1ec10 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
1ec20 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
1ec30 45 45 4b 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a 20  EEK_EQ)==0 );.. 
1ec40 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74 20     /* The input 
1ec50 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67 68  value in P3 migh
1ec60 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70 65  t be of any type
1ec70 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c  : integer, real,
1ec80 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20   string,.    ** 
1ec90 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20  blob, or NULL.  
1eca0 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f 20  But it needs to 
1ecb0 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62 65  be an integer be
1ecc0 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a 20  fore we can do. 
1ecd0 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20     ** the seek, 
1ece0 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20 2a  so convert it. *
1ecf0 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d  /.    pIn3 = &aM
1ed00 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
1ed10 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1ed20 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d  s & (MEM_Int|MEM
1ed30 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d  _Real|MEM_Str))=
1ed40 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20  =MEM_Str ){.    
1ed50 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    applyNumericAf
1ed60 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29 3b  finity(pIn3, 0);
1ed70 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79 20  .    }.    iKey 
1ed80 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1ed90 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20 20  Value(pIn3);..  
1eda0 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1edb0 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20 62  alue could not b
1edc0 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
1edd0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74 68   an integer with
1ede0 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73 20  out.    ** loss 
1edf0 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20  of information, 
1ee00 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72 6f  then special pro
1ee10 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75 69  cessing is requi
1ee20 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69 66  red... */.    if
1ee30 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  ( (pIn3->flags &
1ee40 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
1ee50 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d        if( (pIn3-
1ee60 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
1ee70 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  l)==0 ){.       
1ee80 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76 61   /* If the P3 va
1ee90 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f  lue cannot be co
1eea0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 79  nverted into any
1eeb0 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62 65   kind of a numbe
1eec0 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68  r,.        ** th
1eed0 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20 6e  en the seek is n
1eee0 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f 20  ot possible, so 
1eef0 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
1ef00 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
1ef10 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74 6f  Taken(1,2); goto
1ef20 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
1ef30 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
1ef40 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
1ef50 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69   the approximati
1ef60 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65  on iKey is large
1ef70 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75 61  r than the actua
1ef80 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20  l real search.  
1ef90 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62      ** term, sub
1efa0 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e  stitute >= for >
1efb0 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65   and < for <=. e
1efc0 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72 63  .g. if the searc
1efd0 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20  h term.      ** 
1efe0 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69  is 4.9 and the i
1eff0 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61  nteger approxima
1f000 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a  tion 5:.      **
1f010 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20  .      **       
1f020 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d   (x >  4.9)    -
1f030 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20  >     (x >= 5). 
1f040 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1f050 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20  x <= 4.9)    -> 
1f060 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20      (x <  5).   
1f070 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
1f080 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c  pIn3->u.r<(doubl
1f090 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1f0a0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1f0b0 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 2d  kGE==(OP_SeekGT-
1f0c0 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1f0d0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54 3d  sert( OP_SeekLT=
1f0e0 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20 29  =(OP_SeekLE-1) )
1f0f0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f100 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20 30  ( (OP_SeekLE & 0
1f110 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1f120 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GT & 0x0001) );.
1f130 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1f140 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1f150 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29 20  eekGT & 0x0001) 
1f160 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a  ) oc--;.      }.
1f170 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1f180 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1f190 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20 74  Key is smaller t
1f1a0 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72  han the actual r
1f1b0 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20  eal search.     
1f1c0 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69   ** term, substi
1f1d0 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61 6e  tute <= for < an
1f1e0 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a  d > for >=.  */.
1f1f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20 70        else if( p
1f200 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c 65  In3->u.r>(double
1f210 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20  )iKey ){.       
1f220 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b   assert( OP_Seek
1f230 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31  LE==(OP_SeekLT+1
1f240 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  ) );.        ass
1f250 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d  ert( OP_SeekGT==
1f260 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b  (OP_SeekGE+1) );
1f270 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1f280 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78   (OP_SeekLT & 0x
1f290 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1f2a0 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20  E & 0x0001) );. 
1f2b0 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26         if( (oc &
1f2c0 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65   0x0001)==(OP_Se
1f2d0 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29  ekLT & 0x0001) )
1f2e0 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20   oc++;.      }. 
1f2f0 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73     } .    rc = s
1f300 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
1f310 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
1f320 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
1f330 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  4)iKey, 0, &res)
1f340 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f  ;.    pC->moveto
1f350 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20 20  Target = iKey;  
1f360 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44 65  /* Used by OP_De
1f370 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28 20  lete */.    if( 
1f380 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
1f390 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1f3a0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1f3b0 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
1f3c0 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73     /* For a curs
1f3d0 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52 45  or with the BTRE
1f3e0 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20  E_SEEK_EQ hint, 
1f3f0 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b  only the OP_Seek
1f400 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f 50  GE and.    ** OP
1f410 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73 20  _SeekLE opcodes 
1f420 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e 64  are allowed, and
1f430 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20 69   these must be i
1f440 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f  mmediately follo
1f450 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61 6e  wed.    ** by an
1f460 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50 5f   OP_IdxGT or OP_
1f470 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72 65  IdxLT opcode, re
1f480 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74 68  spectively, with
1f490 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a 20   the same key.. 
1f4a0 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73 71     */.    if( sq
1f4b0 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1f4c0 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e 70  HasHint(pC->uc.p
1f4d0 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53 45  Cursor, BTREE_SE
1f4e0 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20 20  EK_EQ) ){.      
1f4f0 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20 20  eqOnly = 1;.    
1f500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
1f510 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47 45  pcode==OP_SeekGE
1f520 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
1f530 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20  =OP_SeekLE );.  
1f540 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1f550 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
1f560 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
1f570 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
1f580 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
1f590 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30  pOp[1].p1==pOp[0
1f5a0 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61 73  ].p1 );.      as
1f5b0 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d  sert( pOp[1].p2=
1f5c0 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20  =pOp[0].p2 );.  
1f5d0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
1f5e0 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33  1].p3==pOp[0].p3
1f5f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
1f600 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70  ( pOp[1].p4.i==p
1f610 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20 20  Op[0].p4.i );.  
1f620 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64 20    }..    nField 
1f630 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1f640 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1f650 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1f660 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1f670 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1f680 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1f690 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1f6a0 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1f6b0 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1f6c0 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1f6d0 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1f6e0 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1f6f0 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1f700 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1f710 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1f720 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1f730 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1f740 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1f750 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1f760 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1f770 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1f780 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1f790 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1f7a0 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1f7b0 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1f7c0 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1f7d0 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1f7e0 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1f7f0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1f800 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1f810 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1f820 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1f830 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1f840 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1f850 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1f860 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1f870 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1f880 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1f890 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1f8a0 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1f8b0 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1f8c0 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1f8d0 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1f8e0 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1f8f0 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1f900 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1f910 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 2e 65  r.aMem);.    r.e
1f920 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20 72  qSeen = 0;.    r
1f930 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1f940 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1f950 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
1f960 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a  r, 0, 0, &res);.
1f970 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1f980 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
1f990 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1f9a0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
1f9b0 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26 20    if( eqOnly && 
1f9c0 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a 20  r.eqSeen==0 ){. 
1f9d0 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65 73       assert( res
1f9e0 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f 74  !=0 );.      got
1f9f0 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64  o seek_not_found
1fa00 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43  ;.    }.  }.  pC
1fa10 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1fa20 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
1fa30 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
1fa40 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53 51  STALE;.#ifdef SQ
1fa50 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69  LITE_TEST.  sqli
1fa60 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
1fa70 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  ++;.#endif.  if(
1fa80 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20 29   oc>=OP_SeekGE )
1fa90 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f  {  assert( oc==O
1faa0 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d 3d  P_SeekGE || oc==
1fab0 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20 20  OP_SeekGT );.   
1fac0 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28 72   if( res<0 || (r
1fad0 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f  es==0 && oc==OP_
1fae0 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20 20  SeekGT) ){.     
1faf0 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20   res = 0;.      
1fb00 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1fb10 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43 75  eNext(pC->uc.pCu
1fb20 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20  rsor, &res);.   
1fb30 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
1fb40 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
1fb50 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1fb60 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
1fb70 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a   res = 0;.    }.
1fb80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
1fb90 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  ert( oc==OP_Seek
1fba0 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  LT || oc==OP_See
1fbb0 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72  kLE );.    if( r
1fbc0 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20  es>0 || (res==0 
1fbd0 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54  && oc==OP_SeekLT
1fbe0 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d  ) ){.      res =
1fbf0 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73   0;.      rc = s
1fc00 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
1fc10 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ous(pC->uc.pCurs
1fc20 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
1fc30 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
1fc40 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
1fc50 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1fc60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
1fc70 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e  * res might be n
1fc80 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65 20  egative because 
1fc90 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70  the table is emp
1fca0 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20  ty.  Check to.  
1fcb0 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68      ** see if th
1fcc0 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a  is is the case..
1fcd0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72        */.      r
1fce0 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  es = sqlite3Btre
1fcf0 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75 72  eEof(pC->uc.pCur
1fd00 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
1fd10 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a 0a  seek_not_found:.
1fd20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1fd30 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72 61  2>0 );.  VdbeBra
1fd40 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
1fd50 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 7b  2);.  if( res ){
1fd60 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
1fd70 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  o_p2;.  }else if
1fd80 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20 20  ( eqOnly ){.    
1fd90 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
1fda0 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
1fdb0 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
1fdc0 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
1fdd0 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69 70    pOp++; /* Skip
1fde0 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f 72   the OP_IdxLt or
1fdf0 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20 66   OP_IdxGT that f
1fe00 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20 20  ollows */.  }.  
1fe10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1fe20 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32 20  ode: Seek P1 P2 
1fe30 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1fe40 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50  sis:  intkey=r[P
1fe50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  2].**.** P1 is a
1fe60 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72  n open table cur
1fe70 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20  sor and P2 is a 
1fe80 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20  rowid integer.  
1fe90 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50  Arrange.** for P
1fea0 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61  1 to move so tha
1feb0 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1fec0 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62  he rowid given b
1fed0 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  y P2..**.** This
1fee0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64   is actually a d
1fef0 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
1ff00 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
1ff10 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
1ff20 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
1ff30 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
1ff40 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
1ff50 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
1ff60 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
1ff70 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
1ff80 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  s..**.** P4 may 
1ff90 63 6f 6e 74 61 69 6e 20 61 6e 20 61 72 72 61 79  contain an array
1ffa0 20 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79   of integers (ty
1ffb0 70 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20  pe P4_INTARRAY) 
1ffc0 63 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e  containing.** on
1ffd0 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68  e entry for each
1ffe0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 74   column in the t
1fff0 61 62 6c 65 20 50 31 20 69 73 20 6f 70 65 6e 20  able P1 is open 
20000 6f 6e 2e 20 49 66 20 73 6f 2c 20 74 68 65 6e 0a  on. If so, then.
20010 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50 33 20  ** parameter P3 
20020 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65 6e  is a cursor open
20030 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 20 69   on a database i
20040 6e 64 65 78 2e 20 49 66 20 61 72 72 61 79 20 65  ndex. If array e
20050 6e 74 72 79 0a 2a 2a 20 61 5b 69 5d 20 69 73 20  ntry.** a[i] is 
20060 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
20070 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20 28 61  eading column (a
20080 5b 69 5d 2d 31 29 20 66 72 6f 6d 20 63 75 72 73  [i]-1) from curs
20090 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71 75  or P3 is .** equ
200a0 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66 6f  ivalent to perfo
200b0 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72 72  rming the deferr
200c0 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65 6e  ed seek and then
200d0 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e 20   reading column 
200e0 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 0a 2a  i .** from P1..*
200f0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 20  /.case OP_Seek: 
20100 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20  {    /* in2 */. 
20110 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
20120 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
20130 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20140 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
20150 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20160 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20170 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
20180 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
20190 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
201a0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
201b0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
201c0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
201d0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
201e0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  pC->nullRow = 0;
201f0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
20200 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e  pOp->p2];.  pC->
20210 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
20220 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
20230 75 65 28 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e  ue(pIn2);.  pC->
20240 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
20250 20 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   1;.  assert( pO
20260 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
20270 54 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70  TARRAY || pOp->p
20280 34 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  4.ai==0 );.  pC-
20290 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70 2d 3e  >aAltMap = pOp->
202a0 70 34 2e 61 69 3b 0a 20 20 70 43 2d 3e 70 41 6c  p4.ai;.  pC->pAl
202b0 74 43 75 72 73 6f 72 20 3d 20 70 2d 3e 61 70 43  tCursor = p->apC
202c0 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 62  sr[pOp->p3];.  b
202d0 72 65 61 6b 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f  reak;.}.  ../* O
202e0 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31 20  pcode: Found P1 
202f0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20300 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20310 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20320 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20330 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20340 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20350 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20360 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20370 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20380 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20390 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
203a0 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
203b0 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75  record..**.** Cu
203c0 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
203d0 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
203e0 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
203f0 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
20400 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72 65  d P4.** is a pre
20410 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
20420 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
20430 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
20440 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c 65   and.** P1 is le
20450 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  ft pointing at t
20460 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  he matching entr
20470 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
20480 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
20490 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
204a0 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
204b0 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  n be.** advanced
204c0 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64 20   in the forward 
204d0 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  direction.  The 
204e0 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
204f0 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62   will work,.** b
20500 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76 20  ut not the Prev 
20510 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
20520 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74  ** See also: Not
20530 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63  Found, NoConflic
20540 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53 65  t, NotExists. Se
20550 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ekGe.*/./* Opcod
20560 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20 50  e: NotFound P1 P
20570 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
20580 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
20590 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d  P4].**.** If P4=
205a0 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  =0 then register
205b0 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62   P3 holds a blob
205c0 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20   constructed by 
205d0 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a  MakeRecord.  If.
205e0 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67  ** P4>0 then reg
205f0 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20  ister P3 is the 
20600 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69  first of P4 regi
20610 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20  sters that form 
20620 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72  an unpacked.** r
20630 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75  ecord..** .** Cu
20640 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e  rsor P1 is on an
20650 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49   index btree.  I
20660 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65  f the record ide
20670 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e  ntified by P3 an
20680 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20 74  d P4.** is not t
20690 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e 79  he prefix of any
206a0 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68 65   entry in P1 the
206b0 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64 65  n a jump is made
206c0 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20 0a   to P2.  If P1 .
206d0 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20  ** does contain 
206e0 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20 70  an entry whose p
206f0 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74 68  refix matches th
20700 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20 74  e P3/P4 record t
20710 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66  hen control.** f
20720 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f 20  alls through to 
20730 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
20740 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20 6c  tion and P1 is l
20750 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20760 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67 20  the.** matching 
20770 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  entry..**.** Thi
20780 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76  s operation leav
20790 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e  es the cursor in
207a0 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69   a state where i
207b0 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61  t cannot be.** a
207c0 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65  dvanced in eithe
207d0 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e  r direction.  In
207e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
207f0 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a  e Next and Prev.
20800 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f  ** opcodes do no
20810 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69  t work after thi
20820 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a  s operation..**.
20830 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20840 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20 4e  nd, NotExists, N
20850 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20  oConflict.*/./* 
20860 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69  Opcode: NoConfli
20870 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  ct P1 P2 P3 P4 *
20880 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
20890 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
208a0 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
208b0 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
208c0 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
208d0 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
208e0 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
208f0 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
20900 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
20910 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
20920 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
20930 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
20940 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
20950 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
20960 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
20970 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
20980 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 63  y P3 and P4.** c
20990 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c 4c  ontains any NULL
209a0 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d 6d   value, jump imm
209b0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
209c0 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f 66   If all terms of
209d0 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20 61   the.** record a
209e0 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e  re not-NULL then
209f0 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65   a check is done
20a00 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
20a10 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65 0a   any row in the.
20a20 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72 65  ** P1 index btre
20a30 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e 67  e has a matching
20a40 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49 66   key prefix.  If
20a50 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 61   there are no ma
20a60 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69  tches, jump.** i
20a70 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
20a80 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20 61  .  If there is a
20a90 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68 72   match, fall thr
20aa0 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20 74  ough and leave t
20ab0 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72 20  he P1.** cursor 
20ac0 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65 20  pointing to the 
20ad0 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a  matching row..**
20ae0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
20af0 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f 50  is similar to OP
20b00 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20 74  _NotFound with t
20b10 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  he exceptions th
20b20 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63 68  at the.** branch
20b30 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65 6e   is always taken
20b40 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66 20   if any part of 
20b50 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20 69  the search key i
20b60 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a  nput is NULL..**
20b70 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
20b80 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
20b90 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
20ba0 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
20bb0 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
20bc0 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
20bd0 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
20be0 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
20bf0 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
20c00 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
20c10 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
20c20 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
20c30 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f  so: NotFound, Fo
20c40 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a 2a  und, NotExists.*
20c50 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66  /.case OP_NoConf
20c60 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75 6d  lict:     /* jum
20c70 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
20c80 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20 20  P_NotFound:     
20c90 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
20ca0 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64 3a  /.case OP_Found:
20cb0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
20cc0 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20  p, in3 */.  int 
20cd0 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a 20  alreadyExists;. 
20ce0 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a 20   int takeJump;. 
20cf0 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65 43   int ii;.  VdbeC
20d00 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74  ursor *pC;.  int
20d10 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70 46   res;.  char *pF
20d20 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52  ree;.  UnpackedR
20d30 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b 0a  ecord *pIdxKey;.
20d40 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
20d50 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d 70   r;.  char aTemp
20d60 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f  Rec[ROUND8(sizeo
20d70 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64  f(UnpackedRecord
20d80 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d 29  )) + sizeof(Mem)
20d90 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65 66  *4 + 7];..#ifdef
20da0 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69   SQLITE_TEST.  i
20db0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  f( pOp->opcode!=
20dc0 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 20  OP_NoConflict ) 
20dd0 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f  sqlite3_found_co
20de0 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20  unt++;.#endif.. 
20df0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
20e00 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
20e10 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
20e20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
20e30 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a  pe==P4_INT32 );.
20e40 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
20e50 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
20e60 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66  rt( pC!=0 );.#if
20e70 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
20e80 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20  .  pC->seekOp = 
20e90 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e  pOp->opcode;.#en
20ea0 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  dif.  pIn3 = &aM
20eb0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
20ec0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
20ed0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
20ee0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
20ef0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
20f00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
20f10 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
20f20 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20 20  .  pFree = 0;.  
20f30 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
20f40 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
20f50 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
20f60 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
20f70 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
20f80 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
20f90 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  n3;.    for(ii=0
20fa0 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
20fb0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
20fc0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
20fd0 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
20fe0 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
20ff0 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69  &r.aMem[ii]);.#i
21000 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21010 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  G.      if( ii )
21020 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
21030 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
21040 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66  Mem[ii]);.#endif
21050 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b  .    }.    pIdxK
21060 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65  ey = &r;.  }else
21070 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  {.    pIdxKey = 
21080 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
21090 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
210a0 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79          pC->pKey
210b0 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20  Info, aTempRec, 
210c0 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
210d0 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a  , &pFree.    );.
210e0 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d      if( pIdxKey=
210f0 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
21100 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
21110 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
21120 42 6c 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61  Blob );.    Expa
21130 6e 64 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20  ndBlob(pIn3);.  
21140 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 63    sqlite3VdbeRec
21150 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b  ordUnpack(pC->pK
21160 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c  eyInfo, pIn3->n,
21170 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65   pIn3->z, pIdxKe
21180 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65  y);.  }.  pIdxKe
21190 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20  y->default_rc = 
211a0 30 3b 0a 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20  0;.  takeJump = 
211b0 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  0;.  if( pOp->op
211c0 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c  code==OP_NoConfl
211d0 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f  ict ){.    /* Fo
211e0 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c  r the OP_NoConfl
211f0 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65  ict opcode, take
21200 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79   the jump if any
21210 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69   of the.    ** i
21220 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65 20  nput fields are 
21230 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20  NULL, since any 
21240 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20  key with a NULL 
21250 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20  will not.    ** 
21260 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20  conflict */.    
21270 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64  for(ii=0; ii<pId
21280 78 4b 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69  xKey->nField; ii
21290 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70  ++){.      if( p
212a0 49 64 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d  IdxKey->aMem[ii]
212b0 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  .flags & MEM_Nul
212c0 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 74 61 6b  l ){.        tak
212d0 65 4a 75 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20  eJump = 1;.     
212e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
212f0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63  }.    }.  }.  rc
21300 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d   = sqlite3BtreeM
21310 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43  ovetoUnpacked(pC
21320 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 70 49  ->uc.pCursor, pI
21330 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72 65  dxKey, 0, 0, &re
21340 73 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  s);.  sqlite3DbF
21350 72 65 65 28 64 62 2c 20 70 46 72 65 65 29 3b 0a  ree(db, pFree);.
21360 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
21370 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61 6b  _OK ){.    break
21380 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
21390 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
213a0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20  alreadyExists = 
213b0 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e  (res==0);.  pC->
213c0 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65  nullRow = 1-alre
213d0 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d  adyExists;.  pC-
213e0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
213f0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
21400 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
21410 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d  TALE;.  if( pOp-
21420 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e  >opcode==OP_Foun
21430 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  d ){.    VdbeBra
21440 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79  nchTaken(already
21450 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20  Exists!=0,2);.  
21460 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69    if( alreadyExi
21470 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  sts ) goto jump_
21480 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  to_p2;.  }else{.
21490 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
214a0 6b 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c  ken(takeJump||al
214b0 72 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32  readyExists==0,2
214c0 29 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a  );.    if( takeJ
214d0 75 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45  ump || !alreadyE
214e0 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d  xists ) goto jum
214f0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
21500 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
21510 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
21520 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
21530 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
21540 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
21550 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
21560 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
21570 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
21580 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
21590 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
215a0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
215b0 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
215c0 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
215d0 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
215e0 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
215f0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
21600 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
21610 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
21620 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
21630 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
21640 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
21650 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
21660 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
21670 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
21680 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
21690 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
216a0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
216b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
216c0 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f  .** The OP_NotFo
216d0 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f  und opcode perfo
216e0 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65  rms the same ope
216f0 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20  ration on index 
21700 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20  btrees.** (with 
21710 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d  arbitrary multi-
21720 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a  value keys)..**.
21730 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
21740 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
21750 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
21760 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61  e it cannot be a
21770 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69  dvanced.** in ei
21780 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
21790 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
217a0 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
217b0 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a  ev opcodes will.
217c0 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c  ** not work foll
217d0 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  owing this opcod
217e0 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
217f0 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
21800 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a  nd, NoConflict.*
21810 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69  /.case OP_NotExi
21820 73 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  sts: {        /*
21830 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20   jump, in3 */.  
21840 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
21850 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
21860 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  r;.  int res;.  
21870 75 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e  u64 iKey;..  pIn
21880 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
21890 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  3];.  assert( pI
218a0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
218b0 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Int );.  assert(
218c0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
218d0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
218e0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
218f0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
21900 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
21910 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
21920 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b  DEBUG.  pC->seek
21930 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  Op = 0;.#endif. 
21940 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
21950 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74  able );.  assert
21960 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
21970 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
21980 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
21990 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
219a0 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
219b0 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b  .  res = 0;.  iK
219c0 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a  ey = pIn3->u.i;.
219d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
219e0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
219f0 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65 79  d(pCrsr, 0, iKey
21a00 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 61 73  , 0, &res);.  as
21a10 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
21a20 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b  _OK || res==0 );
21a30 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  .  pC->movetoTar
21a40 67 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20  get = iKey;  /* 
21a50 55 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74  Used by OP_Delet
21a60 65 20 2a 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  e */.  pC->nullR
21a70 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  ow = 0;.  pC->ca
21a80 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
21a90 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64  E_STALE;.  pC->d
21aa0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
21ab0 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  0;.  VdbeBranchT
21ac0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
21ad0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
21ae0 20 3d 20 72 65 73 3b 0a 20 20 69 66 28 20 72 65   = res;.  if( re
21af0 73 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  s!=0 ){.    asse
21b00 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
21b10 4b 20 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  K );.    if( pOp
21b20 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ->p2==0 ){.     
21b30 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
21b40 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d  RUPT_BKPT;.    }
21b50 65 6c 73 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f  else{.      goto
21b60 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
21b70 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
21b80 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
21b90 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20 2a  quence P1 P2 * *
21ba0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21bb0 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31 5d  r[P2]=cursor[P1]
21bc0 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e  .ctr++.**.** Fin
21bd0 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69 6c  d the next avail
21be0 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e 75  able sequence nu
21bf0 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72 20  mber for cursor 
21c00 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  P1..** Write the
21c10 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
21c20 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
21c30 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65 6e  2..** The sequen
21c40 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68 65  ce number on the
21c50 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72 65   cursor is incre
21c60 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68 69  mented after thi
21c70 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e  s.** instruction
21c80 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  .  .*/.case OP_S
21c90 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20 20  equence: {      
21ca0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
21cb0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21cc0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21cd0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21ce0 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72  assert( p->apCsr
21cf0 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a  [pOp->p1]!=0 );.
21d00 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
21d10 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75  sr[pOp->p1]->eCu
21d20 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f 56  rType!=CURTYPE_V
21d30 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  TAB );.  pOut = 
21d40 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
21d50 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
21d60 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  u.i = p->apCsr[p
21d70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e  Op->p1]->seqCoun
21d80 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  t++;.  break;.}.
21d90 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77  ../* Opcode: New
21da0 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20 2a  Rowid P1 P2 P3 *
21db0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21dc0 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
21dd0 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74 65  * Get a new inte
21de0 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65  ger record numbe
21df0 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22  r (a.k.a "rowid"
21e00 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b 65  ) used as the ke
21e10 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a  y to a table..**
21e20 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d 62   The record numb
21e30 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  er is not previo
21e40 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20 6b  usly used as a k
21e50 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ey in the databa
21e60 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61 74  se.** table that
21e70 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
21e80 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20 72  s to.  The new r
21e90 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
21ea0 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74  written.** writt
21eb0 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  en to register P
21ec0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30  2..**.** If P3>0
21ed0 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72 65   then P3 is a re
21ee0 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f  gister in the ro
21ef0 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73  ot frame of this
21f00 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64 73   VDBE that holds
21f10 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73 74   .** the largest
21f20 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e 65   previously gene
21f30 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
21f40 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f  ber. No new reco
21f50 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a  rd numbers are.*
21f60 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20  * allowed to be 
21f70 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20 76  less than this v
21f80 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73 20  alue. When this 
21f90 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69 74  value reaches it
21fa0 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61  s maximum, .** a
21fb0 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72  n SQLITE_FULL er
21fc0 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65 64  ror is generated
21fd0 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74 65  . The P3 registe
21fe0 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69 74  r is updated wit
21ff0 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72  h the '.** gener
22000 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62  ated record numb
22010 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63 68  er. This P3 mech
22020 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74 6f  anism is used to
22030 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20   help implement 
22040 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45  the.** AUTOINCRE
22050 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f  MENT feature..*/
22060 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69  .case OP_NewRowi
22070 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  d: {           /
22080 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20  * out2 */.  i64 
22090 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  v;              
220a0 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f     /* The new ro
220b0 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  wid */.  VdbeCur
220c0 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20  sor *pC;        
220d0 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62  /* Cursor of tab
220e0 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65  le to get the ne
220f0 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74  w rowid */.  int
22100 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20   res;           
22110 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66      /* Result of
22120 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65   an sqlite3Btree
22130 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20  Last() */.  int 
22140 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  cnt;            
22150 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f     /* Counter to
22160 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65   limit the numbe
22170 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f  r of searches */
22180 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20  .  Mem *pMem;   
22190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
221a0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61  ister holding la
221b0 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20  rgest rowid for 
221c0 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
221d0 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
221e0 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f  rame;     /* Roo
221f0 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20  t frame of VDBE 
22200 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72  */..  v = 0;.  r
22210 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20 3d  es = 0;.  pOut =
22220 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22230 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72  p, pOp);.  asser
22240 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
22250 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
22260 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
22270 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
22280 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
22290 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
222a0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
222b0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
222c0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
222d0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b 0a  ursor!=0 );.  {.
222e0 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20      /* The next 
222f0 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20  rowid or record 
22300 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e  number (differen
22310 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20  t terms for the 
22320 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e  same.    ** thin
22330 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69  g) is obtained i
22340 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67  n a two-step alg
22350 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20  orithm..    **. 
22360 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61     ** First we a
22370 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74  ttempt to find t
22380 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
22390 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64  ing rowid and ad
223a0 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20  d one.    ** to 
223b0 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74 68  that.  But if th
223c0 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69  e largest existi
223d0 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65  ng rowid is alre
223e0 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a  ady the maximum.
223f0 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20      ** positive 
22400 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76 65  integer, we have
22410 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68   to fall through
22420 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20   to the second. 
22430 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73     ** probabilis
22440 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20  tic algorithm.  
22450 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20    **.    ** The 
22460 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d  second algorithm
22470 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20   is to select a 
22480 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20  rowid at random 
22490 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a  and see if.    *
224a0 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78 69  * it already exi
224b0 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  sts in the table
224c0 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  .  If it does no
224d0 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76 65  t exist, we have
224e0 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65  .    ** succeede
224f0 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f  d.  If the rando
22500 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69  m rowid does exi
22510 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20  st, we select a 
22520 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61  new one.    ** a
22530 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70  nd try again, up
22540 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20   to 100 times.. 
22550 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74     */.    assert
22560 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
22570 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
22580 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20  32BIT_ROWID.#   
22590 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44  define MAX_ROWID
225a0 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73   0x7fffffff.#els
225b0 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f  e.    /* Some co
225c0 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e  mpilers complain
225d0 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73   about constants
225e0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37   of the form 0x7
225f0 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 2e  fffffffffffffff.
22600 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63  .    ** Others c
22610 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78  omplain about 0x
22620 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
22630 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  fLL.  The follow
22640 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a  ing macro seems.
22650 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64      ** to provid
22660 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77  e the constant w
22670 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20  hile making all 
22680 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e  compilers happy.
22690 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69  .    */.#   defi
226a0 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69  ne MAX_ROWID  (i
226b0 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37 66  64)( (((u64)0x7f
226c0 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28  ffffff)<<32) | (
226d0 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20 29  u64)0xffffffff )
226e0 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28  .#endif..    if(
226f0 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52   !pC->useRandomR
22700 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63  owid ){.      rc
22710 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
22720 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ast(pC->uc.pCurs
22730 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  or, &res);.     
22740 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
22750 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  OK ){.        go
22760 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
22770 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
22780 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a       if( res ){.
22790 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20          v = 1;  
227a0 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34   /* IMP: R-61914
227b0 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20  -48074 */.      
227c0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61  }else{.        a
227d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
227e0 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64  reeCursorIsValid
227f0 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
22800 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   );.        rc =
22810 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
22820 53 69 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  Size(pC->uc.pCur
22830 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20  sor, &v);.      
22840 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
22850 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
22860 43 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c  Cannot fail foll
22870 6f 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28  owing BtreeLast(
22880 29 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  ) */.        if(
22890 20 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b   v>=MAX_ROWID ){
228a0 0a 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75  .          pC->u
228b0 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20  seRandomRowid = 
228c0 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
228d0 7b 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b  {.          v++;
228e0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35     /* IMP: R-295
228f0 33 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20  38-34987 */.    
22900 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
22910 20 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c    }..#ifndef SQL
22920 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43  ITE_OMIT_AUTOINC
22930 52 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70  REMENT.    if( p
22940 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20  Op->p3 ){.      
22950 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
22960 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
22970 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
22980 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
22990 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66  p3>0 );.      if
229a0 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  ( p->pFrame ){. 
229b0 20 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d         for(pFram
229c0 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72  e=p->pFrame; pFr
229d0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46  ame->pParent; pF
229e0 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61  rame=pFrame->pPa
229f0 72 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f  rent);.        /
22a00 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
22a10 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
22a20 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
22a30 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
22a40 3e 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65  >p3<=pFrame->nMe
22a50 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65  m );.        pMe
22a60 6d 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  m = &pFrame->aMe
22a70 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
22a80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
22a90 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
22aa0 50 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65  P3 is a valid me
22ab0 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20  mory cell. */.  
22ac0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
22ad0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
22ae0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
22af0 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61         pMem = &a
22b00 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
22b10 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
22b20 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b  Change(p, pMem);
22b30 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
22b40 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
22b50 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20  d(pMem) );..    
22b60 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
22b70 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b  (pOp->p3, pMem);
22b80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
22b90 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
22ba0 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73  pMem);.      ass
22bb0 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67  ert( (pMem->flag
22bc0 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
22bd0 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68  );  /* mem(P3) h
22be0 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20  olds an integer 
22bf0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65  */.      if( pMe
22c00 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49  m->u.i==MAX_ROWI
22c10 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64  D || pC->useRand
22c20 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20  omRowid ){.     
22c30 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46     rc = SQLITE_F
22c40 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  ULL;   /* IMP: R
22c50 2d 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a  -12275-61338 */.
22c60 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
22c70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
22c80 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
22c90 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31  f( v<pMem->u.i+1
22ca0 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20   ){.        v = 
22cb0 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20  pMem->u.i + 1;. 
22cc0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65       }.      pMe
22cd0 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20  m->u.i = v;.    
22ce0 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28  }.#endif.    if(
22cf0 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f   pC->useRandomRo
22d00 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  wid ){.      /* 
22d10 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f  IMPLEMENTATION-O
22d20 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31  F: R-07677-41881
22d30 20 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   If the largest 
22d40 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74  ROWID is equal t
22d50 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c  o the.      ** l
22d60 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20  argest possible 
22d70 69 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32  integer (9223372
22d80 30 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68  036854775807) th
22d90 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  en the database.
22da0 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20        ** engine 
22db0 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70  starts picking p
22dc0 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74  ositive candidat
22dd0 65 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64  e ROWIDs at rand
22de0 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a  om until.      *
22df0 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74  * it finds one t
22e00 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69  hat is not previ
22e10 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20  ously used. */. 
22e20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
22e30 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57  ->p3==0 );  /* W
22e40 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72  e cannot be in r
22e50 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65  andom rowid mode
22e60 20 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20   if this is.    
22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e80 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41           ** an A
22e90 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62  UTOINCREMENT tab
22ea0 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74  le. */.      cnt
22eb0 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f 7b 0a   = 0;.      do{.
22ec0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
22ed0 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a 65 6f  randomness(sizeo
22ee0 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20 20 20  f(v), &v);.     
22ef0 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57     v &= (MAX_ROW
22f00 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20 2f 2a  ID>>1); v++;  /*
22f10 20 45 6e 73 75 72 65 20 74 68 61 74 20 76 20 69   Ensure that v i
22f20 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
22f30 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d 77 68  ero */.      }wh
22f40 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73 71 6c  ile(  ((rc = sql
22f50 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
22f60 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
22f70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
22f80 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22fb0 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
22fc0 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
22fd0 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
22fe0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
22ff0 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b 0a 20   (++cnt<100));. 
23000 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
23010 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
23020 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
23030 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20   SQLITE_FULL;   
23040 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d  /* IMP: R-38219-
23050 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20  53002 */.       
23060 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
23070 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
23080 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  }.      assert( 
23090 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52  v>0 );  /* EV: R
230a0 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a  -40812-03570 */.
230b0 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65      }.    pC->de
230c0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
230d0 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  ;.    pC->cacheS
230e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
230f0 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  ALE;.  }.  pOut-
23100 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61  >u.i = v;.  brea
23110 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
23120 20 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33   Insert P1 P2 P3
23130 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
23140 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d  is: intkey=r[P3]
23150 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a   data=r[P2].**.*
23160 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79  * Write an entry
23170 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20   into the table 
23180 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41  of cursor P1.  A
23190 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a   new entry is.**
231a0 20 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64   created if it d
231b0 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65  oesn't already e
231c0 78 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61  xist or the data
231d0 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67   for an existing
231e0 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65  .** entry is ove
231f0 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64  rwritten.  The d
23200 61 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65  ata is the value
23210 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64   MEM_Blob stored
23220 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20   in register.** 
23230 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b  number P2. The k
23240 65 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ey is stored in 
23250 72 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65  register P3. The
23260 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20   key must.** be 
23270 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a  a MEM_Int..**.**
23280 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
23290 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50  CHANGE flag of P
232a0 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74  5 is set, then t
232b0 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f  he row change co
232c0 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d  unt is.** increm
232d0 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65  ented (otherwise
232e0 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f   not).  If the O
232f0 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
23300 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
23310 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64  t,.** then rowid
23320 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73   is stored for s
23330 75 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e  ubsequent return
23340 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74   by the.** sqlit
23350 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
23360 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  owid() function 
23370 28 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73  (otherwise it is
23380 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a   unmodified)..**
23390 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
233a0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
233b0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
233c0 74 20 61 6e 64 20 69 66 20 74 68 65 20 72 65 73  t and if the res
233d0 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61  ult of.** the la
233e0 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  st seek operatio
233f0 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29  n (OP_NotExists)
23400 20 77 61 73 20 61 20 73 75 63 63 65 73 73 2c 20   was a success, 
23410 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65  then this.** ope
23420 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20  ration will not 
23430 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
23440 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20  the appropriate 
23450 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69 6e 67  row before doing
23460 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74 20 62  .** the insert b
23470 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61 64 20  ut will instead 
23480 6f 76 65 72 77 72 69 74 65 20 74 68 65 20 72 6f  overwrite the ro
23490 77 20 74 68 61 74 20 74 68 65 20 63 75 72 73 6f  w that the curso
234a0 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c  r is.** currentl
234b0 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20  y pointing to.  
234c0 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68 65 20  Presumably, the 
234d0 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73  prior OP_NotExis
234e0 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73  ts opcode.** has
234f0 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74 69 6f   already positio
23500 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20 63  ned the cursor c
23510 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69 73 20  orrectly.  This 
23520 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69  is an optimizati
23530 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74  on.** that boost
23540 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 62 79  s performance by
23550 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75 6e 64   avoiding redund
23560 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a  ant seeks..**.**
23570 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49   If the OPFLAG_I
23580 53 55 50 44 41 54 45 20 66 6c 61 67 20 69 73 20  SUPDATE flag is 
23590 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f  set, then this o
235a0 70 63 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66  pcode is part of
235b0 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70   an.** UPDATE op
235c0 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77  eration.  Otherw
235d0 69 73 65 20 28 69 66 20 74 68 65 20 66 6c 61 67  ise (if the flag
235e0 20 69 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20   is clear) then 
235f0 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  this opcode.** i
23600 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53  s part of an INS
23610 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ERT operation.  
23620 54 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 69  The difference i
23630 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74  s only important
23640 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74   to.** the updat
23650 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61  e hook..**.** Pa
23660 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70  rameter P4 may p
23670 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69 6e 67  oint to a string
23680 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
23690 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72 0a 2a  table-name, or.*
236a0 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e 20 49  * may be NULL. I
236b0 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  f it is not NULL
236c0 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64 61 74  , then the updat
236d0 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71 6c 69  e-hook .** (sqli
236e0 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c 6c 62  te3.xUpdateCallb
236f0 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65 64 20  ack) is invoked 
23700 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63  following a succ
23710 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a  essful insert..*
23720 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f  *.** (WARNING/TO
23730 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61 20 70  DO: If P1 is a p
23740 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64  seudo-cursor and
23750 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c   P2 is dynamical
23760 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c  ly.** allocated,
23770 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20   then ownership 
23780 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73 66 65  of P2 is transfe
23790 72 72 65 64 20 74 6f 20 74 68 65 20 70 73 65 75  rred to the pseu
237a0 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64  do-cursor.** and
237b0 20 72 65 67 69 73 74 65 72 20 50 32 20 62 65 63   register P2 bec
237c0 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20  omes ephemeral. 
237d0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
237e0 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a  s changed, the.*
237f0 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  * value of regis
23800 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e  ter P2 will then
23810 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73   change.  Make s
23820 75 72 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f  ure this does no
23830 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70  t.** cause any p
23840 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20  roblems.).**.** 
23850 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
23860 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74   only works on t
23870 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69  ables.  The equi
23880 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69  valent instructi
23890 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65  on.** for indice
238a0 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72  s is OP_IdxInser
238b0 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  t..*/./* Opcode:
238c0 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32   InsertInt P1 P2
238d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
238e0 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50  opsis:  intkey=P
238f0 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a  3 data=r[P2].**.
23900 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 65 78  ** This works ex
23910 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e  actly like OP_In
23920 73 65 72 74 20 65 78 63 65 70 74 20 74 68 61 74  sert except that
23930 20 74 68 65 20 6b 65 79 20 69 73 20 74 68 65 0a   the key is the.
23940 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ** integer value
23950 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c   P3, not the val
23960 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65 67 65  ue of the intege
23970 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  r stored in regi
23980 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65  ster P3..*/.case
23990 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73   OP_Insert: .cas
239a0 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20  e OP_InsertInt: 
239b0 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20  {.  Mem *pData; 
239c0 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
239d0 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61 20 66  l holding data f
239e0 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
239f0 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
23a00 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20    Mem *pKey;    
23a10 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20      /* MEM cell 
23a20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66 6f 72  holding key  for
23a30 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
23a40 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20   i64 iKey;      
23a50 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65 67 65     /* The intege
23a60 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79 20 66  r ROWID or key f
23a70 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f  or the record to
23a80 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a   be inserted */.
23a90 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
23aa0 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f  ;   /* Cursor to
23ab0 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68 69 63   table into whic
23ac0 68 20 69 6e 73 65 72 74 20 69 73 20 77 72 69 74  h insert is writ
23ad0 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65  ten */.  int nZe
23ae0 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ro;        /* Nu
23af0 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74  mber of zero-byt
23b00 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a  es to append */.
23b10 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75 6c 74    int seekResult
23b20 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66  ;   /* Result of
23b30 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72 20 30   prior seek or 0
23b40 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b 52 45   if no USESEEKRE
23b50 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63  SULT flag */.  c
23b60 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 20  onst char *zDb; 
23b70 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e 61 6d   /* database nam
23b80 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20  e - used by the 
23b90 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20  update hook */. 
23ba0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 62   const char *zTb
23bb0 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61 6d 65  l; /* Table name
23bc0 20 2d 20 75 73 65 64 20 62 79 20 74 68 65 20 6f   - used by the o
23bd0 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20  pdate hook */.  
23be0 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20  int op;         
23bf0 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20    /* Opcode for 
23c00 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c  update hook: SQL
23c10 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51  ITE_UPDATE or SQ
23c20 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a  LITE_INSERT */..
23c30 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b    pData = &aMem[
23c40 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
23c50 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
23c60 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
23c70 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
23c80 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61  ( memIsValid(pDa
23c90 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  ta) );.  pC = p-
23ca0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
23cb0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
23cc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
23cd0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
23ce0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
23cf0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
23d00 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
23d10 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
23d20 65 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  e );.  REGISTER_
23d30 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
23d40 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f  Data);..  if( pO
23d50 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e  p->opcode==OP_In
23d60 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b 65 79  sert ){.    pKey
23d70 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
23d80 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
23d90 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Key->flags & MEM
23da0 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73 73 65  _Int );.    asse
23db0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
23dc0 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45 47 49  Key) );.    REGI
23dd0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
23de0 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20 20 69  p3, pKey);.    i
23df0 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b  Key = pKey->u.i;
23e00 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
23e10 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
23e20 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20  e==OP_InsertInt 
23e30 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70 4f  );.    iKey = pO
23e40 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
23e50 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
23e60 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
23e70 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28  nChange++;.  if(
23e80 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41   pOp->p5 & OPFLA
23e90 47 5f 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62  G_LASTROWID ) db
23ea0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
23eb0 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a  stRowid = iKey;.
23ec0 20 20 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61    if( pData->fla
23ed0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
23ee0 0a 20 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20  .    pData->z = 
23ef0 30 3b 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20  0;.    pData->n 
23f00 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 0;.  }else{.  
23f10 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 2d    assert( pData-
23f20 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
23f30 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20  ob|MEM_Str) );. 
23f40 20 7d 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20   }.  seekResult 
23f50 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
23f60 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
23f70 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65  LT) ? pC->seekRe
23f80 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28  sult : 0);.  if(
23f90 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20   pData->flags & 
23fa0 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
23fb0 6e 5a 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75  nZero = pData->u
23fc0 2e 6e 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b  .nZero;.  }else{
23fd0 0a 20 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a  .    nZero = 0;.
23fe0 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
23ff0 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43  e3BtreeInsert(pC
24000 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c  ->uc.pCursor, 0,
24010 20 69 4b 65 79 2c 0a 20 20 20 20 20 20 20 20 20   iKey,.         
24020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24030 20 70 44 61 74 61 2d 3e 7a 2c 20 70 44 61 74 61   pData->z, pData
24040 2d 3e 6e 2c 20 6e 5a 65 72 6f 2c 0a 20 20 20 20  ->n, nZero,.    
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26        (pOp->p5 &
24070 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 29 21   OPFLAG_APPEND)!
24080 3d 30 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20  =0, seekResult. 
24090 20 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72   );.  pC->deferr
240a0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
240b0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
240c0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a  = CACHE_STALE;..
240d0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
240e0 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72  update-hook if r
240f0 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66  equired. */.  if
24100 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
24110 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61  && db->xUpdateCa
24120 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70  llback && pOp->p
24130 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62 20 3d  4.z ){.    zDb =
24140 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
24150 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a 54 62  ].zName;.    zTb
24160 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  l = pOp->p4.z;. 
24170 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70     op = ((pOp->p
24180 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  5 & OPFLAG_ISUPD
24190 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f 55 50  ATE) ? SQLITE_UP
241a0 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e  DATE : SQLITE_IN
241b0 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73 65 72  SERT);.    asser
241c0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
241d0 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  ;.    db->xUpdat
241e0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
241f0 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
24200 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29 3b 0a  b, zTbl, iKey);.
24210 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
24220 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20  iDb>=0 );.  }.  
24230 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
24240 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
24250 32 20 2a 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20  2 * P4 P5.**.** 
24260 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
24270 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
24280 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
24290 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
242a0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
242b0 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
242c0 20 62 69 74 20 6f 66 20 74 68 65 20 50 35 20 70   bit of the P5 p
242d0 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c  arameter is set,
242e0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72   then.** the cur
242f0 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
24300 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69   pointing at  ei
24310 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
24320 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
24330 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
24340 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
24350 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
24360 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
24370 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
24380 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
24390 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
243a0 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c  op. As a result,
243b0 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a   in this case.**
243c0 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c   it is ok to del
243d0 65 74 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f  ete a record fro
243e0 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20  m within a Next 
243f0 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46  loop. If .** OPF
24400 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
24410 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c   bit of P5 is cl
24420 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75  ear, then the cu
24430 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  rsor will be.** 
24440 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66  left in an undef
24450 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a  ined state..**.*
24460 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
24470 41 55 58 44 45 4c 45 54 45 20 62 69 74 20 69 73  AUXDELETE bit is
24480 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74   set on P5, that
24490 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
244a0 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f  this.** delete o
244b0 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73  ne of several as
244c0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64 65  sociated with de
244d0 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72  leting a table r
244e0 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a  ow and all its.*
244f0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64  * associated ind
24500 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61  ex entries.  Exa
24510 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73  ctly one of thos
24520 65 20 64 65 6c 65 74 65 73 20 69 73 20 74 68 65  e deletes is the
24530 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65   "primary".** de
24540 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72  lete.  The other
24550 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46  s are all on OPF
24560 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75  LAG_FORDELETE cu
24570 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72  rsors or else ar
24580 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68  e.** marked with
24590 20 74 68 65 20 41 55 58 44 45 4c 45 54 45 20 66   the AUXDELETE f
245a0 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  lag..**.** If th
245b0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
245c0 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a   flag of P2 (NB:
245d0 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73   P2 not P5) is s
245e0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
245f0 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
24600 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
24610 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
24620 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
24630 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
24640 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
24650 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
24660 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
24670 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
24680 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74  4 is not NULL, t
24690 68 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61  hen it is the na
246a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
246b0 74 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f  that P1 is.** po
246c0 69 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20  inting to.  The 
246d0 75 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c  update hook will
246e0 20 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20   be invoked, if 
246f0 69 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66  it exists..** If
24700 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20   P4 is not NULL 
24710 74 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73  then the P1 curs
24720 6f 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65  or must have bee
24730 6e 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20  n positioned.** 
24740 75 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e  using OP_NotFoun
24750 64 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b  d prior to invok
24760 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e  ing this opcode.
24770 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65  .*/.case OP_Dele
24780 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  te: {.  VdbeCurs
24790 6f 72 20 2a 70 43 3b 0a 20 20 75 38 20 68 61 73  or *pC;.  u8 has
247a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0a  UpdateCallback;.
247b0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
247c0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
247d0 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
247e0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
247f0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
24800 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73  t( pC!=0 );.  as
24810 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
24820 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
24830 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
24840 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
24850 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
24860 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
24870 3d 3d 30 20 29 3b 0a 0a 20 20 68 61 73 55 70 64  ==0 );..  hasUpd
24880 61 74 65 43 61 6c 6c 62 61 63 6b 20 3d 20 64 62  ateCallback = db
24890 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  ->xUpdateCallbac
248a0 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26  k && pOp->p4.z &
248b0 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3b 0a 20  & pC->isTable;. 
248c0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 26 20   if( pOp->p5 && 
248d0 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62 61 63  hasUpdateCallbac
248e0 6b 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  k ){.    sqlite3
248f0 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
24900 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 70 43  >uc.pCursor, &pC
24910 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 29 3b  ->movetoTarget);
24920 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c  .  }..#ifdef SQL
24930 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54  ITE_DEBUG.  /* T
24940 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
24950 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
24960 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
24970 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20  or to OP_Delete 
24980 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61  will.  ** have a
24990 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
249a0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
249b0 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
249c0 6f 66 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  of the row that.
249d0 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65    ** is being de
249e0 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70  leted */.  if( p
249f0 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e  Op->p4.z && pC->
24a00 69 73 54 61 62 6c 65 20 26 26 20 70 4f 70 2d 3e  isTable && pOp->
24a10 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20 69 36 34  p5==0 ){.    i64
24a20 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20 20 73   iKey = 0;.    s
24a30 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
24a40 7a 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ze(pC->uc.pCurso
24a50 72 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61  r, &iKey);.    a
24a60 73 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74  ssert( pC->movet
24a70 6f 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b  oTarget==iKey );
24a80 20 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20   .  }.#endif..  
24a90 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67 73 20 74 68  /* Only flags th
24aa0 61 74 20 63 61 6e 20 62 65 20 73 65 74 20 61 72  at can be set ar
24ab0 65 20 53 41 56 45 50 4f 49 53 54 49 4f 4e 20 61  e SAVEPOISTION a
24ac0 6e 64 20 41 55 58 44 45 4c 45 54 45 20 2a 2f 20  nd AUXDELETE */ 
24ad0 0a 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d  .  assert( (pOp-
24ae0 3e 70 35 20 26 20 7e 28 4f 50 46 4c 41 47 5f 53  >p5 & ~(OPFLAG_S
24af0 41 56 45 50 4f 53 49 54 49 4f 4e 7c 4f 50 46 4c  AVEPOSITION|OPFL
24b00 41 47 5f 41 55 58 44 45 4c 45 54 45 29 29 3d 3d  AG_AUXDELETE))==
24b10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
24b20 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49  PFLAG_SAVEPOSITI
24b30 4f 4e 3d 3d 42 54 52 45 45 5f 53 41 56 45 50 4f  ON==BTREE_SAVEPO
24b40 53 49 54 49 4f 4e 20 29 3b 0a 20 20 61 73 73 65  SITION );.  asse
24b50 72 74 28 20 4f 50 46 4c 41 47 5f 41 55 58 44 45  rt( OPFLAG_AUXDE
24b60 4c 45 54 45 3d 3d 42 54 52 45 45 5f 41 55 58 44  LETE==BTREE_AUXD
24b70 45 4c 45 54 45 20 29 3b 0a 0a 23 69 66 64 65 66  ELETE );..#ifdef
24b80 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
24b90 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 3d 3d 30  if( p->pFrame==0
24ba0 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   ){.    if( pC->
24bb0 69 73 45 70 68 65 6d 65 72 61 6c 3d 3d 30 0a 20  isEphemeral==0. 
24bc0 20 20 20 20 20 20 20 26 26 20 28 70 4f 70 2d 3e         && (pOp->
24bd0 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 55 58 44  p5 & OPFLAG_AUXD
24be0 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20  ELETE)==0.      
24bf0 20 20 26 26 20 28 70 43 2d 3e 77 72 46 6c 61 67    && (pC->wrFlag
24c00 20 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c   & OPFLAG_FORDEL
24c10 45 54 45 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  ETE)==0.      ){
24c20 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c  .      nExtraDel
24c30 65 74 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20  ete++;.    }.   
24c40 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f   if( pOp->p2 & O
24c50 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 7b  PFLAG_NCHANGE ){
24c60 0a 20 20 20 20 20 20 6e 45 78 74 72 61 44 65 6c  .      nExtraDel
24c70 65 74 65 2d 2d 3b 0a 20 20 20 20 7d 0a 20 20 7d  ete--;.    }.  }
24c80 0a 23 65 6e 64 69 66 0a 0a 20 20 72 63 20 3d 20  .#endif..  rc = 
24c90 73 71 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65  sqlite3BtreeDele
24ca0 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  te(pC->uc.pCurso
24cb0 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20 20 70  r, pOp->p5);.  p
24cc0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
24cd0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
24ce0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
24cf0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
24d00 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
24d10 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
24d20 26 20 68 61 73 55 70 64 61 74 65 43 61 6c 6c 62  & hasUpdateCallb
24d30 61 63 6b 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78  ack ){.    db->x
24d40 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64  UpdateCallback(d
24d50 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20 53  b->pUpdateArg, S
24d60 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a 20 20  QLITE_DELETE,.  
24d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d80 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 43        db->aDb[pC
24d90 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 70 4f  ->iDb].zName, pO
24da0 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d 6f 76  p->p4.z, pC->mov
24db0 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 20 20  etoTarget);.    
24dc0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e  assert( pC->iDb>
24dd0 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  =0 );.  }.  if( 
24de0 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47  pOp->p2 & OPFLAG
24df0 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
24e00 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b  hange++;.  break
24e10 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  ;.}./* Opcode: R
24e20 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20  esetCount * * * 
24e30 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61  * *.**.** The va
24e40 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67  lue of the chang
24e50 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70  e counter is cop
24e60 69 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62  ied to the datab
24e70 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68  ase handle.** ch
24e80 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65  ange counter (re
24e90 74 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71  turned by subseq
24ea0 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71  uent calls to sq
24eb0 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29  lite3_changes())
24ec0 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d  ..** Then the VM
24ed0 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67  s internal chang
24ee0 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73  e counter resets
24ef0 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69   to 0..** This i
24f00 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65  s used by trigge
24f10 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63  r programs..*/.c
24f20 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e  ase OP_ResetCoun
24f30 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64  t: {.  sqlite3Vd
24f40 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
24f50 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
24f60 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
24f70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
24f80 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d  pcode: SorterCom
24f90 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
24fa0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
24fb0 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28  f key(P1)!=trim(
24fc0 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50  r[P3],P4) goto P
24fd0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
24fe0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54  sorter cursor. T
24ff0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
25000 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69  compares a prefi
25010 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f  x of the.** reco
25020 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73  rd blob in regis
25030 74 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61  ter P3 against a
25040 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65   prefix of the e
25050 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68  ntry that .** th
25060 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  e sorter cursor 
25070 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73  currently points
25080 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66   to.  Only the f
25090 69 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a  irst P4 fields.*
250a0 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74  * of r[P3] and t
250b0 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64  he sorter record
250c0 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a   are compared..*
250d0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
250e0 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20  3 or the sorter 
250f0 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20  contains a NULL 
25100 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20  in one of their 
25110 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66  significant.** f
25120 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74  ields (not count
25130 69 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64  ing the P4 field
25140 73 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69  s at the end whi
25150 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20  ch are ignored) 
25160 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70  then.** the comp
25170 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65  arison is assume
25180 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a  d to be equal..*
25190 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67  *.** Fall throug
251a0 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75  h to next instru
251b0 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f  ction if the two
251c0 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65   records compare
251d0 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63   equal to.** eac
251e0 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74  h other.  Jump t
251f0 6f 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65  o P2 if they are
25200 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63   different..*/.c
25210 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d  ase OP_SorterCom
25220 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  pare: {.  VdbeCu
25230 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20  rsor *pC;.  int 
25240 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43  res;.  int nKeyC
25250 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ol;..  pC = p->a
25260 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25270 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
25280 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72  r(pC) );.  asser
25290 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
252a0 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49  P4_INT32 );.  pI
252b0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
252c0 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d  p3];.  nKeyCol =
252d0 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65   pOp->p4.i;.  re
252e0 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71  s = 0;.  rc = sq
252f0 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43  lite3VdbeSorterC
25300 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c  ompare(pC, pIn3,
25310 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b   nKeyCol, &res);
25320 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
25330 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
25340 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
25350 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
25360 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.};../* Opcod
25370 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31  e: SorterData P1
25380 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
25390 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61  nopsis: r[P2]=da
253a0 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ta.**.** Write i
253b0 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
253c0 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74  the current sort
253d0 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74  er data for sort
253e0 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  er cursor P1..**
253f0 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20   Then clear the 
25400 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61  column header ca
25410 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33  che on cursor P3
25420 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
25430 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20  ode is normally 
25440 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65  use to move a re
25450 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20  cord out of the 
25460 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a  sorter and into.
25470 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68  ** a register th
25480 61 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  at is the source
25490 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61   for a pseudo-ta
254a0 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74  ble cursor creat
254b0 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e  ed using.** Open
254c0 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73  Pseudo.  That ps
254d0 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
254e0 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61  r is the one tha
254f0 74 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20  t is identified 
25500 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20  by.** parameter 
25510 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68  P3.  Clearing th
25520 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68  e P3 column cach
25530 65 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69  e as part of thi
25540 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a  s opcode saves.*
25550 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67  * us from having
25560 20 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61   to issue a sepa
25570 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73  rate NullRow ins
25580 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61  truction to clea
25590 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f  r that cache..*/
255a0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44  .case OP_SorterD
255b0 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ata: {.  VdbeCur
255c0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74  sor *pC;..  pOut
255d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
255e0 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  ];.  pC = p->apC
255f0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
25600 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28  ssert( isSorter(
25610 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  pC) );.  rc = sq
25620 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52  lite3VdbeSorterR
25630 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b  owkey(pC, pOut);
25640 0a 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53  .  assert( rc!=S
25650 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75  QLITE_OK || (pOu
25660 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  t->flags & MEM_B
25670 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74  lob) );.  assert
25680 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25690 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
256a0 6f 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  or );.  p->apCsr
256b0 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65  [pOp->p3]->cache
256c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
256d0 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TALE;.  break;.}
256e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
256f0 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
25700 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
25710 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
25720 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
25730 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65  er P2 the comple
25740 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20  te row data for 
25750 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
25760 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
25770 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
25780 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73  data.  .** It is
25790 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74   just copied ont
257a0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
257b0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
257c0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
257d0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
257e0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
257f0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
25800 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
25810 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
25820 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
25830 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
25840 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
25850 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  e..*/./* Opcode:
25860 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20   RowKey P1 P2 * 
25870 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
25880 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a   r[P2]=key.**.**
25890 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
258a0 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
258b0 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72  lete row key for
258c0 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54   cursor P1..** T
258d0 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72  here is no inter
258e0 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  pretation of the
258f0 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20   data.  .** The 
25900 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e  key is copied on
25910 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74  to the P2 regist
25920 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a  er exactly as .*
25930 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e  * it is found in
25940 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
25950 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  le..**.** If the
25960 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
25970 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61  be pointing to a
25980 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20   valid row (not 
25990 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f  a NULL row).** o
259a0 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  f a real table, 
259b0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
259c0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  le..*/.case OP_R
259d0 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52  owKey:.case OP_R
259e0 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  owData: {.  Vdbe
259f0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
25a00 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
25a10 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36   u32 n;.  i64 n6
25a20 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  4;..  pOut = &aM
25a30 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d  em[pOp->p2];.  m
25a40 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
25a50 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20  p, pOut);..  /* 
25a60 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79  Note that RowKey
25a70 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65   and RowData are
25a80 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20   really exactly 
25a90 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63  the same instruc
25aa0 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74  tion */.  assert
25ab0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
25ac0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
25ad0 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
25ae0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
25af0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
25b00 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
25b10 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
25b20 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
25b30 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
25b40 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  C)==0 );.  asser
25b50 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 7c  t( pC->isTable |
25b60 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
25b70 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
25b80 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
25b90 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70  le==0 || pOp->op
25ba0 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61 74 61  code==OP_RowData
25bb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
25bc0 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a  ->nullRow==0 );.
25bd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
25be0 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
25bf0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
25c00 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20 54  pCursor;..  /* T
25c10 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61 6e 64  he OP_RowKey and
25c20 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70 63 6f   OP_RowData opco
25c30 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c 6c 6f  des always follo
25c40 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f  w OP_NotExists o
25c50 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69 6e 64  r.  ** OP_Rewind
25c60 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20 6e 6f  /Op_Next with no
25c70 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69 6e 73   intervening ins
25c80 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74 20 6d  tructions that m
25c90 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74 65 0a  ight invalidate.
25ca0 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 2e    ** the cursor.
25cb0 20 20 49 66 20 74 68 69 73 20 77 68 65 72 65 20    If this where 
25cc0 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20 6f 6e  not the case, on
25cd0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
25ce0 67 20 61 73 73 65 72 74 28 29 73 0a 20 20 2a 2a  g assert()s.  **
25cf0 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20 53 68   would fail.  Sh
25d00 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72 20 63  ould this ever c
25d10 68 61 6e 67 65 20 28 62 65 63 61 75 73 65 20 6f  hange (because o
25d20 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65  f changes in the
25d30 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e 65 72   code.  ** gener
25d40 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65 20 66  ator) then the f
25d50 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f 20 69  ix would be to i
25d60 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74 6f 0a  nsert a call to.
25d70 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
25d80 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 2e 0a  CursorMoveto()..
25d90 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70    */.  assert( p
25da0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
25db0 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  o==0 );.  assert
25dc0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
25dd0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73  rsorIsValid(pCrs
25de0 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f 2a 20  r) );.#if 0  /* 
25df0 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64 75 65  Not required due
25e00 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
25e10 20 74 6f 20 61 73 73 65 72 74 28 29 20 73 74 61   to assert() sta
25e20 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72 63 20  tements */.  rc 
25e30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
25e40 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20  sorMoveto(pC);. 
25e50 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
25e60 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  OK ) goto abort_
25e70 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 65  due_to_error;.#e
25e80 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43 2d 3e  ndif..  if( pC->
25e90 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20  isTable==0 ){.  
25ea0 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69    assert( !pC->i
25eb0 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56  sTable );.    VV
25ec0 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c  A_ONLY(rc =) sql
25ed0 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65  ite3BtreeKeySize
25ee0 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20  (pCrsr, &n64);. 
25ef0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
25f00 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f  QLITE_OK );    /
25f10 2a 20 54 72 75 65 20 62 65 63 61 75 73 65 20 6f  * True because o
25f20 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  f CursorMoveto()
25f30 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20   call above */. 
25f40 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61     if( n64>db->a
25f50 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
25f60 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
25f70 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
25f80 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20  ;.    }.    n = 
25f90 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73  (u32)n64;.  }els
25fa0 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  e{.    VVA_ONLY(
25fb0 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72  rc =) sqlite3Btr
25fc0 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73 72  eeDataSize(pCrsr
25fd0 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72  , &n);.    asser
25fe0 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
25ff0 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69   );    /* DataSi
26000 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c  ze() cannot fail
26010 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75   */.    if( n>(u
26020 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
26030 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
26040 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  H] ){.      goto
26050 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a   too_big;.    }.
26060 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28 20    }.  testcase( 
26070 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71  n==0 );.  if( sq
26080 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65 61  lite3VdbeMemClea
26090 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75 74 2c  rAndResize(pOut,
260a0 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b 0a 20   MAX(n,32)) ){. 
260b0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
260c0 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20    }.  pOut->n = 
260d0 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46  n;.  MemSetTypeF
260e0 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 42 6c  lag(pOut, MEM_Bl
260f0 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 69  ob);.  if( pC->i
26100 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
26110 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26120 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30 2c 20  eeKey(pCrsr, 0, 
26130 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d  n, pOut->z);.  }
26140 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d 20 73  else{.    rc = s
26150 71 6c 69 74 65 33 42 74 72 65 65 44 61 74 61 28  qlite3BtreeData(
26160 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75  pCrsr, 0, n, pOu
26170 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  t->z);.  }.  pOu
26180 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
26190 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63 61 73  UTF8;  /* In cas
261a0 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20 65 76  e the blob is ev
261b0 65 72 20 63 61 73 74 20 74 6f 20 74 65 78 74 20  er cast to text 
261c0 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  */.  UPDATE_MAX_
261d0 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
261e0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
261f0 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
26200 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26210 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20 50 31  Opcode: Rowid P1
26220 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
26230 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77  opsis: r[P2]=row
26240 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 69  id.**.** Store i
26250 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  n register P2 an
26260 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
26270 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65  s the key of the
26280 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 68 61   table entry tha
26290 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72 72 65  t.** P1 is curre
262a0 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e 0a 2a  ntly point to..*
262b0 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65 20 65  *.** P1 can be e
262c0 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e 61 72  ither an ordinar
262d0 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76 69 72  y table or a vir
262e0 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54 68 65  tual table.  The
262f0 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  re used to.** be
26300 20 61 20 73 65 70 61 72 61 74 65 20 4f 50 5f 56   a separate OP_V
26310 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66 6f 72  Rowid opcode for
26320 20 75 73 65 20 77 69 74 68 20 76 69 72 74 75 61   use with virtua
26330 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20 74 68  l tables, but th
26340 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f 64 65  is.** one opcode
26350 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72 20 62   now works for b
26360 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65 73 2e  oth table types.
26370 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 69  .*/.case OP_Rowi
26380 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
26390 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
263a0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
263b0 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c  ;.  i64 v;.  sql
263c0 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
263d0 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
263e0 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
263f0 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  e;..  pOut = out
26400 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
26410 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
26420 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26430 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26440 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26450 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26460 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26470 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
26480 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
26490 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e 6e 75  PSEUDO || pC->nu
264a0 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70  llRow );.  if( p
264b0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
264c0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
264d0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72  MEM_Null;.    br
264e0 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  eak;.  }else if(
264f0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
26500 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70  eto ){.    v = p
26510 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b  C->movetoTarget;
26520 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
26530 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
26540 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43  E.  }else if( pC
26550 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
26560 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20 20 20  YPE_VTAB ){.    
26570 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
26580 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 70  VCur!=0 );.    p
26590 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e 70 56  Vtab = pC->uc.pV
265a0 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20  Cur->pVtab;.    
265b0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
265c0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73  >pModule;.    as
265d0 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
265e0 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20  Rowid );.    rc 
265f0 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69  = pModule->xRowi
26600 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72 2c 20  d(pC->uc.pVCur, 
26610 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  &v);.    sqlite3
26620 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
26630 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65 6e 64  (p, pVtab);.#end
26640 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
26650 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
26660 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  /.  }else{.    a
26670 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
26680 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
26690 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  EE );.    assert
266a0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
266b0 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20  !=0 );.    rc = 
266c0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
266d0 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20  rRestore(pC);.  
266e0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
266f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
26700 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e  or;.    if( pC->
26710 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20  nullRow ){.     
26720 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
26730 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62  EM_Null;.      b
26740 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  reak;.    }.    
26750 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
26760 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e  eKeySize(pC->uc.
26770 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20  pCursor, &v);.  
26780 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
26790 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20 41  LITE_OK );  /* A
267a0 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73 65  lways so because
267b0 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f 72   of CursorRestor
267c0 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 7d  e() above */.  }
267d0 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76  .  pOut->u.i = v
267e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
267f0 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77   Opcode: NullRow
26800 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
26810 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73 6f  * Move the curso
26820 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72  r P1 to a null r
26830 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75  ow.  Any OP_Colu
26840 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a  mn operations.**
26850 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69 6c   that occur whil
26860 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  e the cursor is 
26870 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20  on the null row 
26880 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77  will always.** w
26890 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a  rite a NULL..*/.
268a0 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a  case OP_NullRow:
268b0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
268c0 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
268d0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
268e0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
268f0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26900 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
26910 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
26920 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
26930 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   1;.  pC->cacheS
26940 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
26950 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65  ALE;.  if( pC->e
26960 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
26970 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20 61 73  _BTREE ){.    as
26980 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
26990 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 73  rsor!=0 );.    s
269a0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
269b0 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
269c0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
269d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
269e0 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20 50 33  e: Last P1 P2 P3
269f0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
26a00 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
26a10 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
26a20 72 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  r Prev instructi
26a30 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
26a40 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
26a50 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  last entry in th
26a60 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26a70 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
26a80 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
26a90 64 65 78 20 69 73 20 65 6d 70 74 79 20 61 6e 64  dex is empty and
26aa0 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70   P2>0, then jump
26ab0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
26ac0 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20  P2..** If P2 is 
26ad0 30 20 6f 72 20 69 66 20 74 68 65 20 74 61 62 6c  0 or if the tabl
26ae0 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 6e 6f  e or index is no
26af0 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68  t empty, fall th
26b00 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
26b10 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
26b20 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  ction..**.** Thi
26b30 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
26b40 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
26b50 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
26b60 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
26b70 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
26b80 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
26b90 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
26ba0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
26bb0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
26bc0 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
26bd0 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73  not Next..*/.cas
26be0 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20  e OP_Last: {    
26bf0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
26c00 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26c10 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
26c20 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a  sr;.  int res;..
26c30 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
26c40 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
26c50 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
26c60 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
26c70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
26c80 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
26c90 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
26ca0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
26cb0 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
26cc0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
26cd0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
26ce0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
26cf0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
26d00 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
26d10 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
26d20 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
26d30 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
26d40 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
26d50 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26d60 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73  E_STALE;.  pC->s
26d70 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70 2d  eekResult = pOp-
26d80 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  >p3;.#ifdef SQLI
26d90 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
26da0 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74 3b  eekOp = OP_Last;
26db0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 4f  .#endif.  if( pO
26dc0 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20 20 56  p->p2>0 ){.    V
26dd0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
26de0 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
26df0 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
26e00 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
26e10 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63  reak;.}.../* Opc
26e20 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32 20  ode: Sort P1 P2 
26e30 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
26e40 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78 61   opcode does exa
26e50 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74 68  ctly the same th
26e60 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e 64  ing as OP_Rewind
26e70 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a 20   except that.** 
26e80 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e  it increments an
26e90 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c   undocumented gl
26ea0 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75 73  obal variable us
26eb0 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a  ed for testing..
26ec0 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73  **.** Sorting is
26ed0 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79   accomplished by
26ee0 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64 73   writing records
26ef0 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67 20   into a sorting 
26f00 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72  index,.** then r
26f10 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69 6e  ewinding that in
26f20 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67 20  dex and playing 
26f30 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65 67  it back from beg
26f40 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64  inning to.** end
26f50 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f 50  .  We use the OP
26f60 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e 73  _Sort opcode ins
26f70 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e  tead of OP_Rewin
26f80 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72  d to do the.** r
26f90 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61 74  ewinding so that
26fa0 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
26fb0 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e 63  able will be inc
26fc0 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20  remented and.** 
26fd0 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74 73  regression tests
26fe0 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20 77   can determine w
26ff0 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68  hether or not th
27000 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a  e optimizer is.*
27010 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74 69  * correctly opti
27020 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74 73  mizing out sorts
27030 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
27040 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a  terSort:    /* j
27050 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ump */.case OP_S
27060 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ort: {        /*
27070 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20   jump */.#ifdef 
27080 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71  SQLITE_TEST.  sq
27090 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74  lite3_sort_count
270a0 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73 65  ++;.  sqlite3_se
270b0 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65  arch_count--;.#e
270c0 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74  ndif.  p->aCount
270d0 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54  er[SQLITE_STMTST
270e0 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20  ATUS_SORT]++;.  
270f0 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
27100 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a  into OP_Rewind *
27110 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  /.}./* Opcode: R
27120 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a 20  ewind P1 P2 * * 
27130 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
27140 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
27150 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e  d or Column or N
27160 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
27170 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
27180 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69 72  refer to the fir
27190 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20  st entry in the 
271a0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
271b0 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74  r index..** If t
271c0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
271d0 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d 70  x is empty, jump
271e0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
271f0 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  P2..** If the ta
27200 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
27210 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
27220 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 66  through to the f
27230 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e 73  ollowing .** ins
27240 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
27250 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76  This opcode leav
27260 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f  es the cursor co
27270 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65  nfigured to move
27280 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65   in forward orde
27290 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62  r,.** from the b
272a0 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20  eginning toward 
272b0 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68  the end.  In oth
272c0 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75  er words, the cu
272d0 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69  rsor is.** confi
272e0 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78  gured to use Nex
272f0 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f 0a  t, not Prev..*/.
27300 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a 20  case OP_Rewind: 
27310 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
27320 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
27330 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
27340 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
27350 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  es;..  assert( p
27360 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
27370 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
27380 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27390 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
273a0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
273b0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
273c0 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
273d0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 53  code==OP_SorterS
273e0 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d 20  ort) );.  res = 
273f0 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  1;.#ifdef SQLITE
27400 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
27410 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64 3b  kOp = OP_Rewind;
27420 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69 73  .#endif.  if( is
27430 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
27440 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
27450 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28 70  beSorterRewind(p
27460 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c 73  C, &res);.  }els
27470 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
27480 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
27490 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
274a0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
274b0 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61 73  .pCursor;.    as
274c0 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
274d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
274e0 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72 2c  treeFirst(pCrsr,
274f0 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d 3e   &res);.    pC->
27500 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
27510 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
27520 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
27530 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 43 2d  STALE;.  }.  pC-
27540 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38 29 72  >nullRow = (u8)r
27550 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  es;.  assert( pO
27560 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
27570 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 56  p2<p->nOp );.  V
27580 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
27590 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
275a0 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  res ) goto jump_
275b0 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a  to_p2;.  break;.
275c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  }../* Opcode: Ne
275d0 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  xt P1 P2 P3 P4 P
275e0 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20  5.**.** Advance 
275f0 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61  cursor P1 so tha
27600 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
27610 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61  he next key/data
27620 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20   pair in its.** 
27630 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
27640 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
27650 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20   more key/value 
27660 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20  pairs then fall 
27670 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
27680 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
27690 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66  ruction.  But if
276a0 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76 61   the cursor adva
276b0 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73 66  nce was successf
276c0 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
276d0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
276e0 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70  *.** The Next op
276f0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c  code is only val
27700 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20  id following an 
27710 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
27720 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20  or.** OP_Rewind 
27730 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70  opcode used to p
27740 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73  osition the curs
27750 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74  or.  Next is not
27760 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66   allowed.** to f
27770 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65  ollow SeekLT, Se
27780 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74  ekLE, or OP_Last
27790 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63  ..**.** The P1 c
277a0 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f  ursor must be fo
277b0 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20  r a real table, 
277c0 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62  not a pseudo-tab
277d0 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76  le.  P1 must hav
277e0 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64  e.** been opened
277f0 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f   prior to this o
27800 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f  pcode or the pro
27810 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75  gram will segfau
27820 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  lt..**.** The P3
27830 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
27840 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
27850 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
27860 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
27870 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
27880 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
27890 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
278a0 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
278b0 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
278c0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
278d0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
278e0 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
278f0 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
27900 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
27910 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
27920 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
27930 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
27940 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
27950 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
27960 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a  treeNext()..**.*
27970 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69 74  * If P5 is posit
27980 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70  ive and the jump
27990 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20   is taken, then 
279a0 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a  event counter.**
279b0 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20   number P5-1 in 
279c0 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61  the prepared sta
279d0 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d  tement is increm
279e0 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ented..**.** See
279f0 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78   also: Prev, Nex
27a00 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70  tIfOpen.*/./* Op
27a10 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e  code: NextIfOpen
27a20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
27a30 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
27a40 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b  e works just lik
27a50 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74 68  e Next except th
27a60 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31 20  at if cursor P1 
27a70 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69  is not.** open i
27a80 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f  t behaves a no-o
27a90 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  p..*/./* Opcode:
27aa0 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20 50   Prev P1 P2 P3 P
27ab0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20  4 P5.**.** Back 
27ac0 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  up cursor P1 so 
27ad0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
27ae0 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b  o the previous k
27af0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
27b00 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
27b10 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
27b20 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20   is no previous 
27b30 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20  key/value pairs 
27b40 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
27b50 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
27b60 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
27b70 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20 63  n.  But if the c
27b80 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73  ursor backup was
27b90 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20   successful,.** 
27ba0 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
27bb0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a   to P2..**.**.**
27bc0 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65   The Prev opcode
27bd0 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66   is only valid f
27be0 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b  ollowing an Seek
27bf0 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a  LT, SeekLE, or.*
27c00 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65  * OP_Last opcode
27c10 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f   used to positio
27c20 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50  n the cursor.  P
27c30 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  rev is not allow
27c40 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20  ed.** to follow 
27c50 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20  SeekGT, SeekGE, 
27c60 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a  or OP_Rewind..**
27c70 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f  .** The P1 curso
27c80 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20  r must be for a 
27c90 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20  real table, not 
27ca0 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  a pseudo-table. 
27cb0 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74   If P1 is.** not
27cc0 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62   open then the b
27cd0 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66  ehavior is undef
27ce0 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ined..**.** The 
27cf0 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
27d00 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
27d10 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
27d20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
27d30 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
27d40 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
27d50 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
27d60 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
27d70 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
27d80 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
27d90 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
27da0 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
27db0 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
27dc0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
27dd0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
27de0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
27df0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
27e00 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
27e10 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
27e20 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28 29  3BtreePrevious()
27e30 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  ..**.** If P5 is
27e40 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68   positive and th
27e50 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c  e jump is taken,
27e60 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e   then event coun
27e70 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35  ter.** number P5
27e80 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72  -1 in the prepar
27e90 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ed statement is 
27ea0 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a  incremented..*/.
27eb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49  /* Opcode: PrevI
27ec0 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
27ed0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
27ee0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
27ef0 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65  t like Prev exce
27f00 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
27f10 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
27f20 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
27f30 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20   no-op..*/.case 
27f40 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b  OP_SorterNext: {
27f50 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
27f60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
27f70 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20   int res;..  pC 
27f80 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27f90 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
27fa0 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20  sSorter(pC) );. 
27fb0 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
27fc0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
27fd0 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26  erNext(db, pC, &
27fe0 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78  res);.  goto nex
27ff0 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f  t_tail;.case OP_
28000 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f  PrevIfOpen:    /
28010 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
28020 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20  P_NextIfOpen:   
28030 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
28040 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
28050 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a  p1]==0 ) break;.
28060 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
28070 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65  h */.case OP_Pre
28080 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  v:          /* j
28090 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  ump */.case OP_N
280a0 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  ext:          /*
280b0 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
280c0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
280d0 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
280e0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
280f0 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69   pOp->p5<ArraySi
28100 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20  ze(p->aCounter) 
28110 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
28120 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72  sr[pOp->p1];.  r
28130 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  es = pOp->p3;.  
28140 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
28150 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64  .  assert( pC->d
28160 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30  eferredMoveto==0
28170 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
28180 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
28190 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
281a0 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c  ssert( res==0 ||
281b0 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e   (res==1 && pC->
281c0 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20  isTable==0) );. 
281d0 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d   testcase( res==
281e0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
281f0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
28200 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78  ext || pOp->p4.x
28210 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33  Advance==sqlite3
28220 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61  BtreeNext );.  a
28230 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28240 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70  de!=OP_Prev || p
28250 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
28260 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
28270 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72  vious );.  asser
28280 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
28290 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c  OP_NextIfOpen ||
282a0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
282b0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
282c0 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
282d0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
282e0 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70  _PrevIfOpen || p
282f0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
28300 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65  =sqlite3BtreePre
28310 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68  vious);..  /* Th
28320 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73  e Next opcode is
28330 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72   only used after
28340 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
28350 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a   and Rewind..  *
28360 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
28370 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61  e is only used a
28380 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65  fter SeekLT, See
28390 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a  kLE, and Last. *
283a0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
283b0 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74  >opcode!=OP_Next
283c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
283d0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20  =OP_NextIfOpen. 
283e0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
283f0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c  kOp==OP_SeekGT |
28400 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
28410 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c  _SeekGE.       |
28420 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
28430 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73  _Rewind || pC->s
28440 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29  eekOp==OP_Found)
28450 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28460 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76  >opcode!=OP_Prev
28470 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
28480 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20  =OP_PrevIfOpen. 
28490 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
284a0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c  kOp==OP_SeekLT |
284b0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
284c0 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c  _SeekLE.       |
284d0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
284e0 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d  _Last );..  rc =
284f0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
28500 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  e(pC->uc.pCursor
28510 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61  , &res);.next_ta
28520 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53  il:.  pC->cacheS
28530 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
28540 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  ALE;.  VdbeBranc
28550 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29  hTaken(res==0,2)
28560 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29  ;.  if( res==0 )
28570 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  {.    pC->nullRo
28580 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43  w = 0;.    p->aC
28590 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b  ounter[pOp->p5]+
285a0 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  +;.#ifdef SQLITE
285b0 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65  _TEST.    sqlite
285c0 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b  3_search_count++
285d0 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74  ;.#endif.    got
285e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
285f0 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
28600 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rupt;.  }else{. 
28610 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
28620 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63   1;.  }.  goto c
28630 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
28640 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
28650 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31 20 50  : IdxInsert P1 P
28660 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53 79 6e  2 P3 * P5.** Syn
28670 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d  opsis: key=r[P2]
28680 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
28690 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20  P2 holds an SQL 
286a0 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75  index key made u
286b0 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65  sing the.** Make
286c0 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69  Record instructi
286d0 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ons.  This opcod
286e0 65 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65  e writes that ke
286f0 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e  y.** into the in
28700 64 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f  dex P1.  Data fo
28710 72 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e  r the entry is n
28720 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20  il..**.** P3 is 
28730 61 20 66 6c 61 67 20 74 68 61 74 20 70 72 6f 76  a flag that prov
28740 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f 20 74  ides a hint to t
28750 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65 72 20  he b-tree layer 
28760 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69 6e 73  that this.** ins
28770 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  ert is likely to
28780 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e 0a 2a   be an append..*
28790 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
287a0 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47  he OPFLAG_NCHANG
287b0 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20  E bit set, then 
287c0 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  the change count
287d0 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  er is.** increme
287e0 6e 74 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  nted by this ins
287f0 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68  truction.  If th
28800 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
28810 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 0a 2a   bit is clear,.*
28820 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  * then the chang
28830 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75 6e 63  e counter is unc
28840 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  hanged..**.** If
28850 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
28860 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
28870 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e 20 74   bit set, then t
28880 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74 20 68  he cursor must h
28890 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f 6e 65  ave.** just done
288a0 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65 20 73   a seek to the s
288b0 70 6f 74 20 77 68 65 72 65 20 74 68 65 20 6e 65  pot where the ne
288c0 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20 62 65  w entry is to be
288d0 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20 54 68   inserted..** Th
288e0 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73 20 64  is flag avoids d
288f0 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20 73 65  oing an extra se
28900 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  ek..**.** This i
28910 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
28920 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65  works for indice
28930 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65  s.  The equivale
28940 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a  nt instruction.*
28950 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20  * for tables is 
28960 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61  OP_Insert..*/.ca
28970 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  se OP_SorterInse
28980 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32  rt:       /* in2
28990 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49   */.case OP_IdxI
289a0 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20  nsert: {        
289b0 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65  /* in2 */.  Vdbe
289c0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
289d0 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20  t nKey;.  const 
289e0 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61  char *zKey;..  a
289f0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
28a00 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
28a10 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
28a20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
28a30 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
28a40 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
28a50 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
28a60 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
28a70 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
28a80 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
28a90 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
28aa0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
28ab0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
28ac0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
28ad0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
28ae0 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
28af0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
28b00 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
28b10 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
28b20 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
28b30 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
28b40 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
28b50 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
28b60 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
28b70 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
28b80 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  ){.    if( pOp->
28b90 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
28ba0 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 20  rInsert ){.     
28bb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
28bc0 65 53 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c  eSorterWrite(pC,
28bd0 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
28be0 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20  e{.      nKey = 
28bf0 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a  pIn2->n;.      z
28c00 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
28c10 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
28c20 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d  3BtreeInsert(pC-
28c30 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 7a 4b 65  >uc.pCursor, zKe
28c40 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30 2c 20  y, nKey, "", 0, 
28c50 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20 20 20  0, pOp->p3, .   
28c60 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35         ((pOp->p5
28c70 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45   & OPFLAG_USESEE
28c80 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73  KRESULT) ? pC->s
28c90 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20  eekResult : 0). 
28ca0 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20 20           );.    
28cb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
28cc0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
28cd0 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63 61 63  );.      pC->cac
28ce0 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
28cf0 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a 20 20  _STALE;.    }.  
28d00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
28d10 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
28d20 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
28d30 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
28d40 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
28d50 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
28d60 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
28d70 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
28d80 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
28d90 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
28da0 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
28db0 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
28dc0 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
28dd0 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
28de0 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
28df0 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
28e00 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
28e10 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
28e20 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
28e30 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
28e40 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
28e50 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
28e60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
28e70 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
28e80 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
28e90 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
28ea0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28eb0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
28ec0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
28ed0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
28ee0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
28ef0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
28f00 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
28f10 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
28f20 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
28f30 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
28f40 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
28f50 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
28f60 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e  p->p5==0 );.  r.
28f70 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
28f80 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
28f90 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
28fa0 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f  p3;.  r.default_
28fb0 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d  rc = 0;.  r.aMem
28fc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
28fd0 5d 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  ];.  rc = sqlite
28fe0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
28ff0 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20  cked(pCrsr, &r, 
29000 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69  0, 0, &res);.  i
29010 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
29020 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
29030 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
29040 72 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 2c  reeDelete(pCrsr,
29050 20 42 54 52 45 45 5f 41 55 58 44 45 4c 45 54 45   BTREE_AUXDELETE
29060 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28  );.  }.  assert(
29070 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
29080 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  eto==0 );.  pC->
29090 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
290a0 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65  CHE_STALE;.  bre
290b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
290c0 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50 32  : IdxRowid P1 P2
290d0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
290e0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
290f0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
29100 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 20   register P2 an 
29110 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69 73  integer which is
29120 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20   the last entry 
29130 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  in the record at
29140 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74  .** the end of t
29150 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69  he index key poi
29160 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f  nted to by curso
29170 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65  r P1.  This inte
29180 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a  ger should be.**
29190 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
291a0 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f  e table entry to
291b0 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64 65   which this inde
291c0 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a  x entry points..
291d0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
291e0 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72  Rowid, MakeRecor
291f0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  d..*/.case OP_Id
29200 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
29210 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
29220 2f 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43  /.  BtCursor *pC
29230 72 73 72 3b 0a 20 20 56 64 62 65 43 75 72 73 6f  rsr;.  VdbeCurso
29240 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 72 6f 77  r *pC;.  i64 row
29250 69 64 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75  id;..  pOut = ou
29260 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
29270 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20  pOp);.  assert( 
29280 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
29290 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
292a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
292b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
292c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
292d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
292e0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
292f0 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73  _BTREE );.  pCrs
29300 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
29310 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  or;.  assert( pC
29320 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  rsr!=0 );.  pOut
29330 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
29340 6c 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ll;.  assert( pC
29350 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a  ->isTable==0 );.
29360 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
29370 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
29380 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
29390 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
293a0 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
293b0 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
293c0 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
293d0 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
293e0 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
293f0 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
29400 20 68 61 70 70 65 6e 64 20 66 6f 72 20 61 6e 20   happend for an 
29410 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 70  IdxRowid.  ** op
29420 63 6f 64 65 2c 20 68 65 6e 63 65 20 74 68 65 20  code, hence the 
29430 4e 45 56 45 52 28 29 20 61 72 72 6f 75 6e 64 20  NEVER() arround 
29440 74 68 65 20 63 68 65 63 6b 20 6f 66 20 74 68 65  the check of the
29450 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e 0a 20   return value.. 
29460 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
29470 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
29480 6f 72 65 28 70 43 29 3b 0a 20 20 69 66 28 20 4e  ore(pC);.  if( N
29490 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45 5f  EVER(rc!=SQLITE_
294a0 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  OK) ) goto abort
294b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a  _due_to_error;..
294c0 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52    if( !pC->nullR
294d0 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20  ow ){.    rowid 
294e0 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65  = 0;  /* Not nee
294f0 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20  ded.  Only used 
29500 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72  to silence a war
29510 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20  ning. */.    rc 
29520 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
29530 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c  Rowid(db, pCrsr,
29540 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
29550 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
29560 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
29570 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
29580 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
29590 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20  ->u.i = rowid;. 
295a0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
295b0 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20   MEM_Int;.  }.  
295c0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
295d0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
295e0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
295f0 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
29600 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
29610 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
29620 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
29630 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
29640 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
29650 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
29660 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
29670 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
29680 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
29690 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
296a0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
296b0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
296c0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
296d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
296e0 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
296f0 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
29700 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
29710 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
29720 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
29730 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
29740 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
29750 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
29760 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
29770 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
29780 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
29790 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
297a0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
297b0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
297c0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
297d0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
297e0 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
297f0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
29800 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
29810 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
29820 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
29830 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
29840 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
29850 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
29860 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
29870 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
29880 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
29890 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
298a0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
298b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
298c0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
298d0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
298e0 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
298f0 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
29900 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
29910 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
29920 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
29930 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
29940 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
29950 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
29960 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
29970 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
29980 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
29990 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
299a0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
299b0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
299c0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
299d0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
299e0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
299f0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
29a00 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
29a10 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
29a20 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
29a30 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
29a40 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
29a50 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
29a60 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
29a70 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
29a80 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
29a90 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
29aa0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
29ab0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
29ac0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
29ad0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
29ae0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
29af0 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
29b00 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
29b10 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
29b20 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
29b30 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
29b40 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
29b50 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
29b60 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
29b70 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
29b80 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
29b90 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
29ba0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
29bb0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
29bc0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
29bd0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
29be0 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
29bf0 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
29c00 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
29c10 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
29c20 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
29c30 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
29c40 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
29c50 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
29c60 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
29c70 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
29c80 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
29c90 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
29ca0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
29cb0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
29cc0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
29cd0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
29ce0 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
29cf0 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
29d00 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
29d10 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
29d20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
29d30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
29d40 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
29d50 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
29d60 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29d70 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29d80 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
29d90 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
29da0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29db0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
29dc0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
29dd0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
29de0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
29df0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
29e00 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
29e10 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
29e20 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29e30 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
29e40 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
29e50 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
29e60 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
29e70 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
29e80 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
29e90 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
29ea0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
29eb0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
29ec0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
29ed0 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
29ee0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
29ef0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
29f00 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
29f10 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
29f20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
29f30 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
29f40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
29f50 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
29f60 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
29f70 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
29f80 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
29f90 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
29fa0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
29fb0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
29fc0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
29fd0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
29fe0 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
29ff0 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2a000 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2a010 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2a020 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2a030 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2a040 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2a050 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2a060 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2a070 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2a080 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2a090 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2a0a0 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2a0b0 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2a0c0 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2a0d0 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2a0e0 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2a0f0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2a100 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2a110 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2a120 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2a130 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2a140 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2a150 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2a160 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2a170 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2a180 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2a190 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2a1a0 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2a1b0 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29  );.  if( res>0 )
2a1c0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2a1d0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2a1e0 20 4f 70 63 6f 64 65 3a 20 44 65 73 74 72 6f 79   Opcode: Destroy
2a1f0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2a200 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6e 20 65 6e  .** Delete an en
2a210 74 69 72 65 20 64 61 74 61 62 61 73 65 20 74 61  tire database ta
2a220 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
2a230 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20  se root page in 
2a240 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
2a250 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
2a260 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74   P1..**.** The t
2a270 61 62 6c 65 20 62 65 69 6e 67 20 64 65 73 74 72  able being destr
2a280 6f 79 65 64 20 69 73 20 69 6e 20 74 68 65 20 6d  oyed is in the m
2a290 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
2a2a0 65 20 69 66 20 50 33 3d 3d 30 2e 20 20 49 66 0a  e if P3==0.  If.
2a2b0 2a 2a 20 50 33 3d 3d 31 20 74 68 65 6e 20 74 68  ** P3==1 then th
2a2c0 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c  e table to be cl
2a2d0 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61 75  ear is in the au
2a2e0 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2a2f0 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73   file.** that is
2a300 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2a310 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73 69  ables create usi
2a320 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52  ng CREATE TEMPOR
2a330 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a  ARY TABLE..**.**
2a340 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69   If AUTOVACUUM i
2a350 73 20 65 6e 61 62 6c 65 64 20 74 68 65 6e 20 69  s enabled then i
2a360 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74 68  t is possible th
2a370 61 74 20 61 6e 6f 74 68 65 72 20 72 6f 6f 74 20  at another root 
2a380 70 61 67 65 0a 2a 2a 20 6d 69 67 68 74 20 62 65  page.** might be
2a390 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20   moved into the 
2a3a0 6e 65 77 6c 79 20 64 65 6c 65 74 65 64 20 72 6f  newly deleted ro
2a3b0 6f 74 20 70 61 67 65 20 69 6e 20 6f 72 64 65 72  ot page in order
2a3c0 20 74 6f 20 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20   to keep all.** 
2a3d0 72 6f 6f 74 20 70 61 67 65 73 20 63 6f 6e 74 69  root pages conti
2a3e0 67 75 6f 75 73 20 61 74 20 74 68 65 20 62 65 67  guous at the beg
2a3f0 69 6e 6e 69 6e 67 20 6f 66 20 74 68 65 20 64 61  inning of the da
2a400 74 61 62 61 73 65 2e 20 20 54 68 65 20 66 6f 72  tabase.  The for
2a410 6d 65 72 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20  mer.** value of 
2a420 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 74 68  the root page th
2a430 61 74 20 6d 6f 76 65 64 20 2d 20 69 74 73 20 76  at moved - its v
2a440 61 6c 75 65 20 62 65 66 6f 72 65 20 74 68 65 20  alue before the 
2a450 6d 6f 76 65 20 6f 63 63 75 72 72 65 64 20 2d 0a  move occurred -.
2a460 2a 2a 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ** is stored in 
2a470 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
2a480 20 6e 6f 20 70 61 67 65 20 0a 2a 2a 20 6d 6f 76   no page .** mov
2a490 65 6d 65 6e 74 20 77 61 73 20 72 65 71 75 69 72  ement was requir
2a4a0 65 64 20 28 62 65 63 61 75 73 65 20 74 68 65 20  ed (because the 
2a4b0 74 61 62 6c 65 20 62 65 69 6e 67 20 64 72 6f 70  table being drop
2a4c0 70 65 64 20 77 61 73 20 61 6c 72 65 61 64 79 20  ped was already 
2a4d0 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 6f 6e 65  .** the last one
2a4e0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2a4f0 29 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73  ) then a zero is
2a500 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2a510 74 65 72 20 50 32 2e 0a 2a 2a 20 49 66 20 41 55  ter P2..** If AU
2a520 54 4f 56 41 43 55 55 4d 20 69 73 20 64 69 73 61  TOVACUUM is disa
2a530 62 6c 65 64 20 74 68 65 6e 20 61 20 7a 65 72 6f  bled then a zero
2a540 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
2a550 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
2a560 20 53 65 65 20 61 6c 73 6f 3a 20 43 6c 65 61 72   See also: Clear
2a570 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 73 74  .*/.case OP_Dest
2a580 72 6f 79 3a 20 7b 20 20 20 20 20 2f 2a 20 6f 75  roy: {     /* ou
2a590 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 6f 76  t2 */.  int iMov
2a5a0 65 64 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a  ed;.  int iDb;..
2a5b0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2a5c0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2a5d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 31 20  sert( pOp->p1>1 
2a5e0 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
2a5f0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
2a600 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67  p);.  pOut->flag
2a610 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
2a620 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65 61  if( db->nVdbeRea
2a630 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  d > db->nVDestro
2a640 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  y+1 ){.    rc = 
2a650 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
2a660 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
2a670 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
2a680 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
2a690 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
2a6a0 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2a6b0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69  (p->btreeMask, i
2a6c0 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76 65  Db) );.    iMove
2a6d0 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  d = 0;  /* Not n
2a6e0 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f 20  eeded.  Only to 
2a6f0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2a700 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2a710 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70 54  qlite3BtreeDropT
2a720 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44 62  able(db->aDb[iDb
2a730 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2a740 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70 4f  &iMoved);.    pO
2a750 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
2a760 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Int;.    pOut->u
2a770 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69 66  .i = iMoved;.#if
2a780 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2a790 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20  _AUTOVACUUM.    
2a7a0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2a7b0 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20 29  K && iMoved!=0 )
2a7c0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
2a7d0 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62 2c  ootPageMoved(db,
2a7e0 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f   iDb, iMoved, pO
2a7f0 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a  p->p1);.      /*
2a800 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20   All OP_Destroy 
2a810 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75 72  operations occur
2a820 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74 72   on the same btr
2a830 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65  ee */.      asse
2a840 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61 4f  rt( resetSchemaO
2a850 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73  nFault==0 || res
2a860 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d  etSchemaOnFault=
2a870 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20 20  =iDb+1 );.      
2a880 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
2a890 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20  lt = iDb+1;.    
2a8a0 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62  }.#endif.  }.  b
2a8b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2a8c0 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32 20  de: Clear P1 P2 
2a8d0 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20  P3.**.** Delete 
2a8e0 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20  all contents of 
2a8f0 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
2a900 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
2a910 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69  e root page.** i
2a920 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
2a930 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79 20  ile is given by 
2a940 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65  P1.  But, unlike
2a950 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74   Destroy, do not
2a960 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20 74  .** remove the t
2a970 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66 72  able or index fr
2a980 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20  om the database 
2a990 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  file..**.** The 
2a9a0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2a9b0 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e  r is in the main
2a9c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2a9d0 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20  f P2==0.  If.** 
2a9e0 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74  P2==1 then the t
2a9f0 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72  able to be clear
2aa00 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c   is in the auxil
2aa10 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2aa20 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73  le.** that is us
2aa30 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c  ed to store tabl
2aa40 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20  es create using 
2aa50 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59  CREATE TEMPORARY
2aa60 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66   TABLE..**.** If
2aa70 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   the P3 value is
2aa80 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20   non-zero, then 
2aa90 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72 72  the table referr
2aaa0 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61 6e  ed to must be an
2aab0 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c 65  .** intkey table
2aac0 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20   (an SQL table, 
2aad0 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20 49  not an index). I
2aae0 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65 20  n this case the 
2aaf0 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63  row change .** c
2ab00 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ount is incremen
2ab10 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65  ted by the numbe
2ab20 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65  r of rows in the
2ab30 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2ab40 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20  ared. .** If P3 
2ab50 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
2ab60 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 76  zero, then the v
2ab70 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20 72  alue stored in r
2ab80 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a 2a  egister P3 is.**
2ab90 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65   also incremente
2aba0 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20  d by the number 
2abb0 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74  of rows in the t
2abc0 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72  able being clear
2abd0 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
2abe0 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63  so: Destroy.*/.c
2abf0 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a  ase OP_Clear: {.
2ac00 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20    int nChange;. 
2ac10 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  .  nChange = 0;.
2ac20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2ac30 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73  dOnly==0 );.  as
2ac40 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
2ac50 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
2ac60 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63 20  Op->p2) );.  rc 
2ac70 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c  = sqlite3BtreeCl
2ac80 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20 20  earTable(.      
2ac90 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d  db->aDb[pOp->p2]
2aca0 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28  .pBt, pOp->p1, (
2acb0 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e  pOp->p3 ? &nChan
2acc0 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69  ge : 0).  );.  i
2acd0 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
2ace0 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20    p->nChange += 
2acf0 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66 28  nChange;.    if(
2ad00 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20   pOp->p3>0 ){.  
2ad10 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2ad20 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
2ad30 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
2ad40 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
2ad50 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  (p, &aMem[pOp->p
2ad60 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b  3]);.      aMem[
2ad70 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20  pOp->p3].u.i += 
2ad80 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20  nChange;.    }. 
2ad90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2ada0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74 53  * Opcode: ResetS
2adb0 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20 2a  orter P1 * * * *
2adc0 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c  .**.** Delete al
2add0 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d 20  l contents from 
2ade0 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61  the ephemeral ta
2adf0 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a 2a  ble or sorter.**
2ae00 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f 6e   that is open on
2ae10 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a   cursor P1..**.*
2ae20 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f 6e  * This opcode on
2ae30 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75 72  ly works for cur
2ae40 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73 6f  sors used for so
2ae50 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70 65  rting and.** ope
2ae60 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65 6e  ned with OP_Open
2ae70 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50 5f  Ephemeral or OP_
2ae80 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63  SorterOpen..*/.c
2ae90 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72 74  ase OP_ResetSort
2aea0 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  er: {.  VdbeCurs
2aeb0 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73 65  or *pC;. .  asse
2aec0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2aed0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2aee0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2aef0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2af00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2af10 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f 72  0 );.  if( isSor
2af20 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20 73  ter(pC) ){.    s
2af30 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2af40 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75 63  Reset(db, pC->uc
2af50 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c  .pSorter);.  }el
2af60 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2af70 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
2af80 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
2af90 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
2afa0 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20  sEphemeral );.  
2afb0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2afc0 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66 43  reeClearTableOfC
2afd0 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75  ursor(pC->uc.pCu
2afe0 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65  rsor);.  }.  bre
2aff0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2b000 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
2b010 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2b020 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2b030 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2b040 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
2b050 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
2b060 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2b070 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2b080 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2b090 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2b0a0 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2b0b0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2b0c0 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2b0d0 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2b0e0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2b0f0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2b100 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
2b110 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
2b120 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
2b130 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
2b140 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
2b150 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
2b160 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
2b170 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
2b180 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
2b190 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
2b1a0 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
2b1b0 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
2b1c0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2b1d0 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
2b1e0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
2b1f0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
2b200 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2b210 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2b220 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2b230 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
2b240 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2b250 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2b260 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2b270 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2b280 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2b290 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2b2a0 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2b2b0 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2b2c0 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2b2d0 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2b2e0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2b2f0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
2b300 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
2b310 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
2b320 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2b330 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
2b340 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
2b350 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
2b360 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50   out2 */.case OP
2b370 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
2b380 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2b390 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2b3a0 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
2b3b0 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2b3c0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2b3d0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2b3e0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2b3f0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2b400 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2b410 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2b420 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2b430 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2b440 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2b450 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2b460 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2b470 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b480 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2b490 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2b4a0 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
2b4b0 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
2b4c0 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2b4d0 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
2b4e0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
2b4f0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
2b500 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
2b510 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
2b520 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
2b530 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
2b540 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
2b550 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e   pOut->u.i = pgn
2b560 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  o;.  break;.}../
2b570 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53  * Opcode: ParseS
2b580 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20  chema P1 * * P4 
2b590 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64  *.**.** Read and
2b5a0 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69   parse all entri
2b5b0 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49  es from the SQLI
2b5c0 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20  TE_MASTER table 
2b5d0 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a  of database P1.*
2b5e0 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65  * that match the
2b5f0 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34   WHERE clause P4
2b600 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  . .**.** This op
2b610 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
2b620 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74   parser to creat
2b630 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20  e a new virtual 
2b640 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e  machine,.** then
2b650 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69   runs the new vi
2b660 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20  rtual machine.  
2b670 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d  It is thus a re-
2b680 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a  entrant opcode..
2b690 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65  */.case OP_Parse
2b6a0 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20  Schema: {.  int 
2b6b0 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61  iDb;.  const cha
2b6c0 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68  r *zMaster;.  ch
2b6d0 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74  ar *zSql;.  Init
2b6e0 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a  Data initData;..
2b6f0 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65    /* Any prepare
2b700 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74  d statement that
2b710 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70   invokes this op
2b720 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d  code will hold m
2b730 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65  utexes.  ** on e
2b740 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69  very btree.  Thi
2b750 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73  s is a prerequis
2b760 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67  ite for invoking
2b770 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e   .  ** sqlite3In
2b780 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20  itCallback()..  
2b790 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
2b7a0 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62  _DEBUG.  for(iDb
2b7b0 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b  =0; iDb<db->nDb;
2b7c0 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73   iDb++){.    ass
2b7d0 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73  ert( iDb==1 || s
2b7e0 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73  qlite3BtreeHolds
2b7f0 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44  Mutex(db->aDb[iD
2b800 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23  b].pBt) );.  }.#
2b810 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70  endif..  iDb = p
2b820 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74  Op->p1;.  assert
2b830 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c  ( iDb>=0 && iDb<
2b840 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2b850 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72  ert( DbHasProper
2b860 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53  ty(db, iDb, DB_S
2b870 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a  chemaLoaded) );.
2b880 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20    /* Used to be 
2b890 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f  a conditional */
2b8a0 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d   {.    zMaster =
2b8b0 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44   SCHEMA_TABLE(iD
2b8c0 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  b);.    initData
2b8d0 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e  .db = db;.    in
2b8e0 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70  itData.iDb = pOp
2b8f0 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61  ->p1;.    initDa
2b900 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70  ta.pzErrMsg = &p
2b910 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a  ->zErrMsg;.    z
2b920 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Sql = sqlite3MPr
2b930 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20  intf(db,.       
2b940 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f  "SELECT name, ro
2b950 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d  otpage, sql FROM
2b960 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25   '%q'.%s WHERE %
2b970 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64  s ORDER BY rowid
2b980 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44  ",.       db->aD
2b990 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d  b[iDb].zName, zM
2b9a0 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a  aster, pOp->p4.z
2b9b0 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d  );.    if( zSql=
2b9c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  =0 ){.      rc =
2b9d0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20   SQLITE_NOMEM;. 
2b9e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2b9f0 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74  assert( db->init
2ba00 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20  .busy==0 );.    
2ba10 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20    db->init.busy 
2ba20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44  = 1;.      initD
2ba30 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f  ata.rc = SQLITE_
2ba40 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  OK;.      assert
2ba50 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  ( !db->mallocFai
2ba60 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20  led );.      rc 
2ba70 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64  = sqlite3_exec(d
2ba80 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33  b, zSql, sqlite3
2ba90 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69  InitCallback, &i
2baa0 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20  nitData, 0);.   
2bab0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
2bac0 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74  E_OK ) rc = init
2bad0 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73  Data.rc;.      s
2bae0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2baf0 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62   zSql);.      db
2bb00 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b  ->init.busy = 0;
2bb10 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28  .    }.  }.  if(
2bb20 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73   rc ) sqlite3Res
2bb30 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
2bb40 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
2bb50 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e  if( rc==SQLITE_N
2bb60 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f  OMEM ){.    goto
2bb70 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62   no_mem;.  }.  b
2bb80 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21  reak;  .}..#if !
2bb90 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2bba0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20  MIT_ANALYZE)./* 
2bbb0 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c  Opcode: LoadAnal
2bbc0 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  ysis P1 * * * *.
2bbd0 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73  **.** Read the s
2bbe0 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c  qlite_stat1 tabl
2bbf0 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  e for database P
2bc00 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63  1 and load the c
2bc10 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61  ontent.** of tha
2bc20 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65  t table into the
2bc30 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20   internal index 
2bc40 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69  hash table.  Thi
2bc50 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20  s will cause.** 
2bc60 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20  the analysis to 
2bc70 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65  be used when pre
2bc80 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65  paring all subse
2bc90 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a  quent queries..*
2bca0 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e  /.case OP_LoadAn
2bcb0 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65  alysis: {.  asse
2bcc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2bcd0 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2bce0 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  b );.  rc = sqli
2bcf0 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28  te3AnalysisLoad(
2bd00 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
2bd10 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69  break;  .}.#endi
2bd20 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
2bd30 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a  LITE_OMIT_ANALYZ
2bd40 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  E) */../* Opcode
2bd50 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a  : DropTable P1 *
2bd60 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2bd70 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2bd80 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2bd90 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2bda0 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2bdb0 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50  he table named P
2bdc0 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2bdd0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2bde0 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a  d after a table.
2bdf0 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2be00 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2be10 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2be20 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2be30 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2be40 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2be50 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2be60 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2be70 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2be80 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2be90 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20  _DropTable: {.  
2bea0 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2beb0 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20  DeleteTable(db, 
2bec0 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2bed0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2bee0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2bef0 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20  Index P1 * * P4 
2bf00 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
2bf10 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
2bf20 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
2bf30 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
2bf40 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64  cribe.** the ind
2bf50 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  ex named P4 in d
2bf60 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
2bf70 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
2bf80 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73  r an index.** is
2bf90 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2bfa0 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2bfb0 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a  stroy opcode).**
2bfc0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
2bfd0 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  p the internal r
2bfe0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2bff0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2c000 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2c010 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2c020 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49  */.case OP_DropI
2c030 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ndex: {.  sqlite
2c040 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
2c050 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70  Index(db, pOp->p
2c060 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
2c070 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2c080 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65  code: DropTrigge
2c090 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  r P1 * * P4 *.**
2c0a0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2c0b0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2c0c0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2c0d0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2c0e0 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72  e.** the trigger
2c0f0 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74   named P4 in dat
2c100 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20  abase P1.  This 
2c110 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20  is called after 
2c120 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20  a trigger.** is 
2c130 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2c140 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2c150 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
2c160 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
2c170 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
2c180 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
2c190 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
2c1a0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
2c1b0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
2c1c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
2c1d0 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69  rigger: {.  sqli
2c1e0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
2c1f0 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f  teTrigger(db, pO
2c200 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a  p->p1, pOp->p4.z
2c210 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a  );.  break;.}...
2c220 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c230 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  MIT_INTEGRITY_CH
2c240 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  ECK./* Opcode: I
2c250 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32  ntegrityCk P1 P2
2c260 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44   P3 * P5.**.** D
2c270 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66  o an analysis of
2c280 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f   the currently o
2c290 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53  pen database.  S
2c2a0 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73  tore in.** regis
2c2b0 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20  ter P1 the text 
2c2c0 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  of an error mess
2c2d0 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61  age describing a
2c2e0 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20  ny problems..** 
2c2f0 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61  If no problems a
2c300 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20  re found, store 
2c310 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74  a NULL in regist
2c320 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P1..**.** The
2c330 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e   register P3 con
2c340 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75  tains the maximu
2c350 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f  m number of allo
2c360 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41  wed errors..** A
2c370 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65  t most reg(P3) e
2c380 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65  rrors will be re
2c390 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74  ported..** In ot
2c3a0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61  her words, the a
2c3b0 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73  nalysis stops as
2c3c0 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29   soon as reg(P1)
2c3d0 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20   errors are .** 
2c3e0 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69  seen.  Reg(P1) i
2c3f0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
2c400 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72  he number of err
2c410 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a  ors remaining..*
2c420 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61  *.** The root pa
2c430 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c  ge numbers of al
2c440 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20  l tables in the 
2c450 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74  database are int
2c460 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69  eger.** stored i
2c470 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50  n reg(P1), reg(P
2c480 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c  1+1), reg(P1+2),
2c490 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65   ....  There are
2c4a0 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f   P2 tables.** to
2c4b0 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  tal..**.** If P5
2c4c0 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
2c4d0 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20  e check is done 
2c4e0 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  on the auxiliary
2c4f0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c   database.** fil
2c500 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20  e, not the main 
2c510 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a  database file..*
2c520 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2c530 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c   is used to impl
2c540 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72  ement the integr
2c550 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61  ity_check pragma
2c560 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
2c570 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e  egrityCk: {.  in
2c580 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a  t nRoot;      /*
2c590 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
2c5a0 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75  s to check.  (Nu
2c5b0 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67  mber of root pag
2c5c0 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61  es.) */.  int *a
2c5d0 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72  Root;     /* Arr
2c5e0 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e  ay of rootpage n
2c5f0 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65  umbers for table
2c600 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20  s to be checked 
2c610 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
2c620 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
2c630 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  nter */.  int nE
2c640 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  rr;       /* Num
2c650 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2c660 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72  ported */.  char
2c670 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54   *z;        /* T
2c680 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72  ext of the error
2c690 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d   report */.  Mem
2c6a0 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20   *pnErr;     /* 
2c6b0 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67  Register keeping
2c6c0 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73   track of errors
2c6d0 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20   remaining */.. 
2c6e0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
2c6f0 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74  eader );.  nRoot
2c700 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
2c710 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b  sert( nRoot>0 );
2c720 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74  .  aRoot = sqlit
2c730 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62  e3DbMallocRaw(db
2c740 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e  , sizeof(int)*(n
2c750 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28  Root+1) );.  if(
2c760 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f   aRoot==0 ) goto
2c770 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72   no_mem;.  asser
2c780 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
2c790 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
2c7a0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
2c7b0 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d  .  pnErr = &aMem
2c7c0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
2c7d0 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2c7e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
2c7f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2c800 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d  nErr->flags & (M
2c810 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
2c820 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d  )==0 );.  pIn1 =
2c830 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2c840 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52  .  for(j=0; j<nR
2c850 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61  oot; j++){.    a
2c860 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73  Root[j] = (int)s
2c870 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
2c880 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20  ue(&pIn1[j]);.  
2c890 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30  }.  aRoot[j] = 0
2c8a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
2c8b0 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p5<db->nDb );. 
2c8c0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
2c8d0 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
2c8e0 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20  , pOp->p5) );.  
2c8f0 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  z = sqlite3Btree
2c900 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64  IntegrityCheck(d
2c910 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e  b->aDb[pOp->p5].
2c920 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f  pBt, aRoot, nRoo
2c930 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
2c940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c950 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e      (int)pnErr->
2c960 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73  u.i, &nErr);.  s
2c970 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
2c980 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72   aRoot);.  pnErr
2c990 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20  ->u.i -= nErr;. 
2c9a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c9b0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2c9c0 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20  if( nErr==0 ){. 
2c9d0 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20     assert( z==0 
2c9e0 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a  );.  }else if( z
2c9f0 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
2ca00 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b  no_mem;.  }else{
2ca10 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2ca20 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20  MemSetStr(pIn1, 
2ca30 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54  z, -1, SQLITE_UT
2ca40 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65  F8, sqlite3_free
2ca50 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f  );.  }.  UPDATE_
2ca60 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e  MAX_BLOBSIZE(pIn
2ca70 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
2ca80 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
2ca90 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  pIn1, encoding);
2caa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2cab0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2cac0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
2cad0 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  K */../* Opcode:
2cae0 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32   RowSetAdd P1 P2
2caf0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2cb00 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d  is:  rowset(P1)=
2cb10 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65  r[P2].**.** Inse
2cb20 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  rt the integer v
2cb30 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67  alue held by reg
2cb40 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20  ister P2 into a 
2cb50 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a  boolean index.**
2cb60 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
2cb70 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61  r P1..**.** An a
2cb80 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69  ssertion fails i
2cb90 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69  f P2 is not an i
2cba0 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20  nteger..*/.case 
2cbb0 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20  OP_RowSetAdd: { 
2cbc0 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e        /* in1, in
2cbd0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
2cbe0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2cbf0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
2cc00 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
2cc10 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
2cc20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
2cc30 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2cc40 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2cc50 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2cc60 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2cc70 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2cc80 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2cc90 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2cca0 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2ccb0 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65  }.  sqlite3RowSe
2ccc0 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2ccd0 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75  pRowSet, pIn2->u
2cce0 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .i);.  break;.}.
2ccf0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53  ./* Opcode: RowS
2cd00 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20  etRead P1 P2 P3 
2cd10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
2cd20 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50    r[P3]=rowset(P
2cd30 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74  1).**.** Extract
2cd40 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
2cd50 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e  lue from boolean
2cd60 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75   index P1 and pu
2cd70 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  t that value int
2cd80 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33  o.** register P3
2cd90 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61  .  Or, if boolea
2cda0 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e  n index P1 is in
2cdb0 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c  itially empty, l
2cdc0 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61  eave P3.** uncha
2cdd0 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f  nged and jump to
2cde0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
2cdf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53  .*/.case OP_RowS
2ce00 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20  etRead: {       
2ce10 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75  /* jump, in1, ou
2ce20 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b  t3 */.  i64 val;
2ce30 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
2ce40 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
2ce50 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2ce60 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a  MEM_RowSet)==0 .
2ce70 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77     || sqlite3Row
2ce80 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e  SetNext(pIn1->u.
2ce90 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d  pRowSet, &val)==
2cea0 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  0.  ){.    /* Th
2ceb0 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20  e boolean index 
2cec0 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20  is empty */.    
2ced0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2cee0 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20  tNull(pIn1);.   
2cef0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2cf00 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f 20  (1,2);.    goto 
2cf10 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2cf20 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2cf30 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2cf40 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2cf50 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2cf60 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64 62  index */.    Vdb
2cf70 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c 32  eBranchTaken(0,2
2cf80 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
2cf90 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61  beMemSetInt64(&a
2cfa0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61  Mem[pOp->p3], va
2cfb0 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  l);.  }.  goto c
2cfc0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2cfd0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2cfe0 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2cff0 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2d000 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2d010 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2d020 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2d030 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2d040 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2d050 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2d060 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2d070 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2d080 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2d090 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2d0a0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2d0b0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2d0c0 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2d0d0 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2d0e0 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2d0f0 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2d100 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2d110 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2d120 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2d130 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2d140 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2d150 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2d160 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2d170 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2d180 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2d190 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2d1a0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2d1b0 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2d1c0 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2d1d0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2d1e0 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2d1f0 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2d200 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2d210 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2d220 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2d230 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2d240 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2d250 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2d260 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2d270 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2d280 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2d290 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2d2a0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2d2b0 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2d2c0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2d2d0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2d2e0 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2d2f0 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2d300 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2d310 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2d320 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2d330 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2d340 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2d350 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2d360 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2d370 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2d380 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2d390 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2d3a0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2d3b0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2d3c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2d3d0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2d3e0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2d3f0 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2d400 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2d410 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2d420 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2d430 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2d440 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2d450 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2d460 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2d470 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d490 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2d4a0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2d4b0 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2d4c0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2d4d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2d4e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2d4f0 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2d500 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2d510 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2d520 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2d530 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2d540 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2d550 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2d560 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2d570 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2d580 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2d590 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2d5a0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2d5b0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2d5c0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2d5d0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2d5e0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2d5f0 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2d600 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2d610 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2d620 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2d630 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2d640 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2d650 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2d660 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2d670 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2d680 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2d690 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2d6a0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2d6b0 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2d6c0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2d6d0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2d6e0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2d6f0 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20 6a   exists ) goto j
2d700 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2d710 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a   if( iSet>=0 ){.
2d720 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65      sqlite3RowSe
2d730 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e  tInsert(pIn1->u.
2d740 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75  pRowSet, pIn3->u
2d750 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  .i);.  }.  break
2d760 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2d770 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
2d780 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72  R../* Opcode: Pr
2d790 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20 50  ogram P1 P2 P3 P
2d7a0 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75  4 P5.**.** Execu
2d7b0 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20 70  te the trigger p
2d7c0 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61 73  rogram passed as
2d7d0 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55 42   P4 (type P4_SUB
2d7e0 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a  PROGRAM). .**.**
2d7f0 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P1 contains the
2d800 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2d810 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
2d820 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69   contains the fi
2d830 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63  rst memory .** c
2d840 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20  ell in an array 
2d850 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20 61  of values used a
2d860 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74  s arguments to t
2d870 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
2d880 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20  P2 .** contains 
2d890 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a  the address to j
2d8a0 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73 75  ump to if the su
2d8b0 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73  b-program throws
2d8c0 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65   an IGNORE .** e
2d8d0 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74  xception using t
2d8e0 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63 74  he RAISE() funct
2d8f0 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33  ion. Register P3
2d900 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64   contains the ad
2d910 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d  dress .** of a m
2d920 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
2d930 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29 20  is (the parent) 
2d940 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64 20  VM that is used 
2d950 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20  to allocate the 
2d960 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69  .** memory requi
2d970 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d 76  red by the sub-v
2d980 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a  dbe at runtime..
2d990 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
2d9a0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20  inter to the VM 
2d9b0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
2d9c0 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a  rigger program..
2d9d0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2d9e0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65  on-zero, then re
2d9f0 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20  cursive program 
2da00 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e  invocation is en
2da10 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  abled..*/.case O
2da20 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20  P_Program: {    
2da30 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
2da40 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20   int nMem;      
2da50 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
2da60 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67  er of memory reg
2da70 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70  isters for sub-p
2da80 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20  rogram */.  int 
2da90 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20 20  nByte;          
2daa0 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20      /* Bytes of 
2dab0 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65  runtime space re
2dac0 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70  quired for sub-p
2dad0 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20  rogram */.  Mem 
2dae0 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20 20  *pRt;           
2daf0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2db00 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74  to allocate runt
2db10 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d  ime space */.  M
2db20 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2db30 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74         /* Used t
2db40 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75 67  o iterate throug
2db50 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a  h memory cells *
2db60 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20  /.  Mem *pEnd;  
2db70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2db80 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  ast memory cell 
2db90 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a  in new array */.
2dba0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
2dbb0 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77  ame;      /* New
2dbc0 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65   vdbe frame to e
2dbd0 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53  xecute in */.  S
2dbe0 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
2dbf0 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72  ram;   /* Sub-pr
2dc00 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65  ogram to execute
2dc10 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20   */.  void *t;  
2dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2dc30 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69   Token identifyi
2dc40 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20  ng trigger */.. 
2dc50 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d   pProgram = pOp-
2dc60 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20  >p4.pProgram;.  
2dc70 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  pRt = &aMem[pOp-
2dc80 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
2dc90 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20  pProgram->nOp>0 
2dca0 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68  );.  .  /* If th
2dcb0 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65  e p5 flag is cle
2dcc0 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ar, then recursi
2dcd0 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ve invocation of
2dce0 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20 20   triggers is .  
2dcf0 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20  ** disabled for 
2dd00 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74  backwards compat
2dd10 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20 73  ibility (p5 is s
2dd20 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d 70  et if this sub-p
2dd30 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72  rogram.  ** is r
2dd40 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c  eally a trigger,
2dd50 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b   not a foreign k
2dd60 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74  ey action, and t
2dd70 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a  he flag set.  **
2dd80 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20   and cleared by 
2dd90 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63 75  the "PRAGMA recu
2dda0 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 20  rsive_triggers" 
2ddb0 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72  command is clear
2ddc0 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74  )..  ** .  ** It
2ddd0 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69 6e   is recursive in
2dde0 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2ddf0 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c  gers, at the SQL
2de00 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20   level, that is 
2de10 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20  .  ** disabled. 
2de20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20  In some cases a 
2de30 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d  single trigger m
2de40 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65  ay generate more
2de50 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20   than one .  ** 
2de60 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74  SubProgram (if t
2de70 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 62  he trigger may b
2de80 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68 20  e executed with 
2de90 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69  more than one di
2dea0 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e  fferent .  ** ON
2deb0 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69   CONFLICT algori
2dec0 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d  thm). SubProgram
2ded0 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73 6f   structures asso
2dee0 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20 20  ciated with a.  
2def0 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65  ** single trigge
2df00 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73  r all have the s
2df10 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68  ame value for th
2df20 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b  e SubProgram.tok
2df30 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c  en .  ** variabl
2df40 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  e.  */.  if( pOp
2df50 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20  ->p5 ){.    t = 
2df60 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2df70 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2df80 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2df90 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b  e && pFrame->tok
2dfa0 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46  en!=t; pFrame=pF
2dfb0 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2dfc0 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20 29      if( pFrame )
2dfd0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69   break;.  }..  i
2dfe0 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62  f( p->nFrame>=db
2dff0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
2e000 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45  LIMIT_TRIGGER_DE
2e010 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d  PTH] ){.    rc =
2e020 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
2e030 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
2e040 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e 79  ror(p, "too many
2e050 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67 67   levels of trigg
2e060 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b 0a  er recursion");.
2e070 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
2e080 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70 52    /* Register pR
2e090 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2e0a0 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  re the memory re
2e0b0 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20 74  quired to save t
2e0c0 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f 66  he state.  ** of
2e0d0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2e0e0 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d 65  gram, and the me
2e0f0 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61 74  mory required at
2e100 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65 63   runtime to exec
2e110 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72 69  ute.  ** the tri
2e120 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49 66  gger program. If
2e130 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68 61   this trigger ha
2e140 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65 66  s been fired bef
2e150 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a 20  ore, then pRt . 
2e160 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20 61   ** is already a
2e170 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72 77  llocated. Otherw
2e180 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65 20  ise, it must be 
2e190 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a 2f  initialized.  */
2e1a0 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c 61  .  if( (pRt->fla
2e1b0 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d 30  gs&MEM_Frame)==0
2e1c0 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50 72   ){.    /* SubPr
2e1d0 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73 65  ogram.nMem is se
2e1e0 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
2e1f0 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  of memory cells 
2e200 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20 20  used by the .   
2e210 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f 72   ** program stor
2e220 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61 6d  ed in SubProgram
2e230 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61 73  .aOp. As well as
2e240 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f   these, one memo
2e250 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20 69  ry.    ** cell i
2e260 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 65  s required for e
2e270 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64 20  ach cursor used 
2e280 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20  by the program. 
2e290 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a  Set local.    **
2e2a0 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20 28   variable nMem (
2e2b0 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65 46  and later, VdbeF
2e2c0 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29 20  rame.nChildMem) 
2e2d0 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a 20  to this value.. 
2e2e0 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d     */.    nMem =
2e2f0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20   pProgram->nMem 
2e300 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  + pProgram->nCsr
2e310 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f  ;.    nByte = RO
2e320 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65  UND8(sizeof(Vdbe
2e330 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20  Frame)).        
2e340 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73        + nMem * s
2e350 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20  izeof(Mem).     
2e360 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67           + pProg
2e370 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65  ram->nCsr * size
2e380 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29  of(VdbeCursor *)
2e390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2e3a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2e3b0 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a 20   * sizeof(u8);. 
2e3c0 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c 69     pFrame = sqli
2e3d0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
2e3e0 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20 20  db, nByte);.    
2e3f0 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a 20  if( !pFrame ){. 
2e400 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
2e410 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
2e420 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73  te3VdbeMemReleas
2e430 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74 2d  e(pRt);.    pRt-
2e440 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72 61  >flags = MEM_Fra
2e450 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e 70  me;.    pRt->u.p
2e460 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
2e470 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20 3d  .    pFrame->v =
2e480 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e   p;.    pFrame->
2e490 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d  nChildMem = nMem
2e4a0 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43  ;.    pFrame->nC
2e4b0 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67 72  hildCsr = pProgr
2e4c0 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70 46  am->nCsr;.    pF
2e4d0 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74 29  rame->pc = (int)
2e4e0 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20  (pOp - aOp);.   
2e4f0 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20   pFrame->aMem = 
2e500 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72  p->aMem;.    pFr
2e510 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e  ame->nMem = p->n
2e520 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Mem;.    pFrame-
2e530 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73  >apCsr = p->apCs
2e540 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  r;.    pFrame->n
2e550 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72  Cursor = p->nCur
2e560 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  sor;.    pFrame-
2e570 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20  >aOp = p->aOp;. 
2e580 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d     pFrame->nOp =
2e590 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72   p->nOp;.    pFr
2e5a0 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72  ame->token = pPr
2e5b0 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20  ogram->token;.  
2e5c0 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46    pFrame->aOnceF
2e5d0 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c  lag = p->aOnceFl
2e5e0 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  ag;.    pFrame->
2e5f0 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e  nOnceFlag = p->n
2e600 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64 65 66  OnceFlag;.#ifdef
2e610 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
2e620 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
2e630 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78 65     pFrame->anExe
2e640 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a 23  c = p->anExec;.#
2e650 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64 20  endif..    pEnd 
2e660 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28  = &VdbeFrameMem(
2e670 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e  pFrame)[pFrame->
2e680 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20  nChildMem];.    
2e690 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61  for(pMem=VdbeFra
2e6a0 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70  meMem(pFrame); p
2e6b0 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b  Mem!=pEnd; pMem+
2e6c0 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e  +){.      pMem->
2e6d0 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
2e6e0 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65  fined;.      pMe
2e6f0 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20  m->db = db;.    
2e700 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  }.  }else{.    p
2e710 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70  Frame = pRt->u.p
2e720 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72  Frame;.    asser
2e730 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65  t( pProgram->nMe
2e740 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  m+pProgram->nCsr
2e750 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2e760 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Mem );.    asser
2e770 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
2e780 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2e790 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
2e7a0 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
2e7b0 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
2e7c0 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
2e7d0 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
2e7e0 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
2e7f0 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
2e800 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
2e810 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d 65  tRowid;.  pFrame
2e820 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e  ->nChange = p->n
2e830 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65  Change;.  pFrame
2e840 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70 2d  ->nDbChange = p-
2e850 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20  >db->nChange;.  
2e860 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a  p->nChange = 0;.
2e870 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46    p->pFrame = pF
2e880 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20  rame;.  p->aMem 
2e890 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72  = aMem = &VdbeFr
2e8a0 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d  ameMem(pFrame)[-
2e8b0 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20  1];.  p->nMem = 
2e8c0 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65  pFrame->nChildMe
2e8d0 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20  m;.  p->nCursor 
2e8e0 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e  = (u16)pFrame->n
2e8f0 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61  ChildCsr;.  p->a
2e900 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72 73  pCsr = (VdbeCurs
2e910 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e  or **)&aMem[p->n
2e920 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70  Mem+1];.  p->aOp
2e930 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61   = aOp = pProgra
2e940 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70  m->aOp;.  p->nOp
2e950 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70   = pProgram->nOp
2e960 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  ;.  p->aOnceFlag
2e970 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43   = (u8 *)&p->apC
2e980 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a  sr[p->nCursor];.
2e990 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d    p->nOnceFlag =
2e9a0 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65   pProgram->nOnce
2e9b0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
2e9c0 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
2e9d0 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45 78  STATUS.  p->anEx
2e9e0 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20  ec = 0;.#endif. 
2e9f0 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b   pOp = &aOp[-1];
2ea00 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e  .  memset(p->aOn
2ea10 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f  ceFlag, 0, p->nO
2ea20 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65  nceFlag);..  bre
2ea30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2ea40 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20  : Param P1 P2 * 
2ea50 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  * *.**.** This o
2ea60 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76  pcode is only ev
2ea70 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75  er present in su
2ea80 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65  b-programs calle
2ea90 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50  d via the .** OP
2eaa0 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63  _Program instruc
2eab0 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c  tion. Copy a val
2eac0 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f  ue currently sto
2ead0 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20  red in a memory 
2eae0 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20  .** cell of the 
2eaf0 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29  calling (parent)
2eb00 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50   frame to cell P
2eb10 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74  2 in the current
2eb20 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72   frames .** addr
2eb30 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73 20  ess space. This 
2eb40 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67 67  is used by trigg
2eb50 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61  er programs to a
2eb60 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20  ccess the new.* 
2eb70 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61  .** and old.* va
2eb80 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  lues..**.** The 
2eb90 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 63  address of the c
2eba0 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e  ell in the paren
2ebb0 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65 72  t frame is deter
2ebc0 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a  mined by adding.
2ebd0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
2ebe0 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2ebf0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
2ec00 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20  the P1 argument 
2ec10 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e  to the.** callin
2ec20 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73  g OP_Program ins
2ec30 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  truction..*/.cas
2ec40 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20  e OP_Param: {   
2ec50 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
2ec60 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2ec70 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a 70  pFrame;.  Mem *p
2ec80 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  In;.  pOut = out
2ec90 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2eca0 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d 20  Op);.  pFrame = 
2ecb0 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49 6e  p->pFrame;.  pIn
2ecc0 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
2ecd0 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61 6d  [pOp->p1 + pFram
2ece0 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e 70  e->aOp[pFrame->p
2ecf0 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71 6c  c].p1];   .  sql
2ed00 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c  ite3VdbeMemShall
2ed10 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e  owCopy(pOut, pIn
2ed20 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20  , MEM_Ephem);.  
2ed30 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69 66  break;.}..#endif
2ed40 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49   /* #ifndef SQLI
2ed50 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 20  TE_OMIT_TRIGGER 
2ed60 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
2ed70 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2ed80 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46  KEY./* Opcode: F
2ed90 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20 2a  kCounter P1 P2 *
2eda0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2edb0 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32 0a  : fkctr[P1]+=P2.
2edc0 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20  **.** Increment 
2edd0 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  a "constraint co
2ede0 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50 32  unter" by P2 (P2
2edf0 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76 65   may be negative
2ee00 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a 2a   or positive)..*
2ee10 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2ee20 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61 73  ero, the databas
2ee30 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f 75  e constraint cou
2ee40 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e  nter is incremen
2ee50 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72 65  ted .** (deferre
2ee60 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  d foreign key co
2ee70 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68 65  nstraints). Othe
2ee80 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73 20  rwise, if P1 is 
2ee90 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73 74  zero, the .** st
2eea0 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72 20  atement counter 
2eeb0 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  is incremented (
2eec0 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2eed0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2eee0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
2eef0 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69 66  kCounter: {.  if
2ef00 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ( db->flags & SQ
2ef10 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 7b  LITE_DeferFKs ){
2ef20 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2ef30 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f 70  edImmCons += pOp
2ef40 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ->p2;.  }else if
2ef50 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2ef60 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
2ef70 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  ns += pOp->p2;. 
2ef80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 6e   }else{.    p->n
2ef90 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d 20  FkConstraint += 
2efa0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20 62  pOp->p2;.  }.  b
2efb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2efc0 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31 20  de: FkIfZero P1 
2efd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2efe0 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b 50  psis: if fkctr[P
2eff0 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a  1]==0 goto P2.**
2f000 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2f010 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65 69  tests if a forei
2f020 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2f030 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72  t-counter is cur
2f040 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a 20  rently zero..** 
2f050 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20 69  If so, jump to i
2f060 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 4f  nstruction P2. O
2f070 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74  therwise, fall t
2f080 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
2f090 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  xt .** instructi
2f0a0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  on..**.** If P1 
2f0b0 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2f0c0 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  n the jump is ta
2f0d0 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61 62  ken if the datab
2f0e0 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63  ase constraint-c
2f0f0 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65 72  ounter.** is zer
2f100 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74 20  o (the one that 
2f110 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64 20  counts deferred 
2f120 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
2f130 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69 73  tions). If P1 is
2f140 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a 75  .** zero, the ju
2f150 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2f160 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6e  he statement con
2f170 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20  straint-counter 
2f180 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d 65  is zero.** (imme
2f190 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65  diate foreign ke
2f1a0 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  y constraint vio
2f1b0 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61 73  lations)..*/.cas
2f1c0 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20 7b  e OP_FkIfZero: {
2f1d0 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
2f1e0 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   */.  if( pOp->p
2f1f0 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61  1 ){.    VdbeBra
2f200 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44 65  nchTaken(db->nDe
2f210 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
2f220 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
2f230 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20  mCons==0, 2);.  
2f240 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65 72    if( db->nDefer
2f250 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62  redCons==0 && db
2f260 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2f270 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d  ns==0 ) goto jum
2f280 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
2f290 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2f2a0 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73  Taken(p->nFkCons
2f2b0 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2f2c0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2f2d0 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2f2e0 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
2f2f0 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2f300 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2f310 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f   ) goto jump_to_
2f320 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
2f330 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66  .}.#endif /* #if
2f340 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2f350 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a  _FOREIGN_KEY */.
2f360 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2f370 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
2f380 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65  NT./* Opcode: Me
2f390 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  mMax P1 P2 * * *
2f3a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2f3b0 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b  P1]=max(r[P1],r[
2f3c0 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  P2]).**.** P1 is
2f3d0 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74   a register in t
2f3e0 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66  he root frame of
2f3f0 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f   this VM (the ro
2f400 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64  ot frame is.** d
2f410 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68  ifferent from th
2f420 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20  e current frame 
2f430 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  if this instruct
2f440 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65  ion is being exe
2f450 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20  cuted.** within 
2f460 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20  a sub-program). 
2f470 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  Set the value of
2f480 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
2f490 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a  the maximum of .
2f4a0 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76  ** its current v
2f4b0 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c  alue and the val
2f4c0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
2f4d0 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  2..**.** This in
2f4e0 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73  struction throws
2f4f0 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65   an error if the
2f500 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20   memory cell is 
2f510 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a  not initially.**
2f520 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a   an integer..*/.
2f530 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20  case OP_MemMax: 
2f540 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20  {        /* in2 
2f550 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2f560 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d  pFrame;.  if( p-
2f570 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66  >pFrame ){.    f
2f580 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
2f590 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
2f5a0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
2f5b0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
2f5c0 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d     pIn1 = &pFram
2f5d0 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  e->aMem[pOp->p1]
2f5e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2f5f0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2f600 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65  >p1];.  }.  asse
2f610 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2f620 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65  In1) );.  sqlite
2f630 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69  3VdbeMemIntegeri
2f640 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32  fy(pIn1);.  pIn2
2f650 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2f660 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
2f670 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
2f680 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d  n2);.  if( pIn1-
2f690 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b  >u.i<pIn2->u.i){
2f6a0 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d  .    pIn1->u.i =
2f6b0 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a   pIn2->u.i;.  }.
2f6c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2f6d0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2f6e0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a  _AUTOINCREMENT *
2f6f0 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66  /../* Opcode: If
2f700 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a  Pos P1 P2 P3 * *
2f710 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2f720 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
2f730 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]-=P3, goto P2
2f740 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2f750 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2f760 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20 49  an integer..** I
2f770 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 72  f the value of r
2f780 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31 20  egister P1 is 1 
2f790 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62 74  or greater, subt
2f7a0 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
2f7b0 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31 20  .** value in P1 
2f7c0 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  and jump to P2..
2f7d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e 69  **.** If the ini
2f7e0 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 65  tial value of re
2f7f0 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65 73  gister P1 is les
2f800 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20 74  s than 1, then t
2f810 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 75  he.** value is u
2f820 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f 6e  nchanged and con
2f830 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72 6f  trol passes thro
2f840 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2f850 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2f860 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b  case OP_IfPos: {
2f870 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2f880 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2f890 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f8a0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2f8b0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2f8c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2f8d0 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30  ken( pIn1->u.i>0
2f8e0 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  , 2);.  if( pIn1
2f8f0 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 70  ->u.i>0 ){.    p
2f900 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70 2d  In1->u.i -= pOp-
2f910 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  >p3;.    goto ju
2f920 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
2f930 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2f940 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69 6d 69 74  ode: OffsetLimit
2f950 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2f960 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
2f970 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b 50 32 5d  P1]>0 then r[P2]
2f980 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c 72 5b 50  =r[P1]+max(0,r[P
2f990 33 5d 29 20 65 6c 73 65 20 72 5b 50 32 5d 3d 28  3]) else r[P2]=(
2f9a0 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  -1).**.** This o
2f9b0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 61  pcode performs a
2f9c0 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65 64 20 63   commonly used c
2f9d0 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73 73 6f 63  omputation assoc
2f9e0 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 4c 49  iated with.** LI
2f9f0 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 70  MIT and OFFSET p
2fa00 72 6f 63 65 73 73 2e 20 20 72 5b 50 31 5d 20 68  rocess.  r[P1] h
2fa10 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69 74 20 63  olds the limit c
2fa20 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33 5d 0a 2a  ounter.  r[P3].*
2fa30 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f 66 66 73  * holds the offs
2fa40 65 74 20 63 6f 75 6e 74 65 72 2e 20 20 54 68 65  et counter.  The
2fa50 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75 74 65 73   opcode computes
2fa60 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 76 61   the combined va
2fa70 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65 20 4c 49  lue.** of the LI
2fa80 4d 49 54 20 61 6e 64 20 4f 46 46 53 45 54 20 61  MIT and OFFSET a
2fa90 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20 76  nd stores that v
2faa0 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d 2e 20 20  alue in r[P2].  
2fab0 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20 76 61 6c  The r[P2].** val
2fac0 75 65 20 63 6f 6d 70 75 74 65 64 20 69 73 20 74  ue computed is t
2fad0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
2fae0 6f 66 20 72 6f 77 73 20 74 68 61 74 20 77 69 6c  of rows that wil
2faf0 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a 2a 2a 20  l need to be.** 
2fb00 76 69 73 69 74 65 64 20 69 6e 20 6f 72 64 65 72  visited in order
2fb10 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20 74 68 65   to complete the
2fb20 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49 66   query..**.** If
2fb30 20 72 5b 50 33 5d 20 69 73 20 7a 65 72 6f 20 6f   r[P3] is zero o
2fb40 72 20 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74  r negative, that
2fb50 20 6d 65 61 6e 73 20 74 68 65 72 65 20 69 73 20   means there is 
2fb60 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20 61 6e 64  no OFFSET.** and
2fb70 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
2fb80 20 62 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66   be the value of
2fb90 20 74 68 65 20 4c 49 4d 49 54 2c 20 72 5b 50 31   the LIMIT, r[P1
2fba0 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72 5b 50 31  ]..**.** if r[P1
2fbb0 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67  ] is zero or neg
2fbc0 61 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e  ative, that mean
2fbd0 73 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49  s there is no LI
2fbe0 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  MIT.** and r[P2]
2fbf0 20 69 73 20 73 65 74 20 74 6f 20 2d 31 2e 20 0a   is set to -1. .
2fc00 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  **.** Otherwise,
2fc10 20 72 5b 50 32 5d 20 69 73 20 73 65 74 20 74 6f   r[P2] is set to
2fc20 20 74 68 65 20 73 75 6d 20 6f 66 20 72 5b 50 31   the sum of r[P1
2fc30 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a 2a 2f 0a  ] and r[P3]..*/.
2fc40 63 61 73 65 20 4f 50 5f 4f 66 66 73 65 74 4c 69  case OP_OffsetLi
2fc50 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 31  mit: {    /* in1
2fc60 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a 2f 0a 20  , out2, in3 */. 
2fc70 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2fc80 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d  p->p1];.  pIn3 =
2fc90 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2fca0 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
2fcb0 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
2fcc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2fcd0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2fce0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
2fcf0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
2fd00 5f 49 6e 74 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  _Int );.  pOut->
2fd10 75 2e 69 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3c  u.i = pIn1->u.i<
2fd20 3d 30 20 3f 20 2d 31 20 3a 20 70 49 6e 31 2d 3e  =0 ? -1 : pIn1->
2fd30 75 2e 69 2b 28 70 49 6e 33 2d 3e 75 2e 69 3e 30  u.i+(pIn3->u.i>0
2fd40 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 3b 0a 20  ?pIn3->u.i:0);. 
2fd50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2fd60 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20  code: IfNotZero 
2fd70 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
2fd80 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
2fd90 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b 50 31 5d  1]!=0 then r[P1]
2fda0 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a  -=P3, goto P2.**
2fdb0 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20  .** Register P1 
2fdc0 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20  must contain an 
2fdd0 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
2fde0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
2fdf0 73 74 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e  ster P1 is.** in
2fe00 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65 72 6f 2c  itially nonzero,
2fe10 20 74 68 65 6e 20 73 75 62 74 72 61 63 74 20 50   then subtract P
2fe20 33 20 66 72 6f 6d 20 74 68 65 20 76 61 6c 75 65  3 from the value
2fe30 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
2fe40 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 50  and.** jump to P
2fe50 32 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20  2.  If register 
2fe60 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20  P1 is initially 
2fe70 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69 74 20 75  zero, leave it u
2fe80 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20  nchanged.** and 
2fe90 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f  fall through..*/
2fea0 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 5a 65  .case OP_IfNotZe
2feb0 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ro: {        /* 
2fec0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2fed0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2fee0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2fef0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2ff00 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61  Int );.  VdbeBra
2ff10 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75  nchTaken(pIn1->u
2ff20 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66 28 20  .i<0, 2);.  if( 
2ff30 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20 20 20  pIn1->u.i ){.   
2ff40 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
2ff50 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20 67 6f 74  Op->p3;.     got
2ff60 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2ff70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2ff80 20 4f 70 63 6f 64 65 3a 20 44 65 63 72 4a 75 6d   Opcode: DecrJum
2ff90 70 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20  pZero P1 P2 * * 
2ffa0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2ffb0 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d 30 20 67  f (--r[P1])==0 g
2ffc0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
2ffd0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 68 6f  ister P1 must ho
2ffe0 6c 64 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  ld an integer.  
2fff0 44 65 63 72 65 6d 65 6e 74 20 74 68 65 20 76 61  Decrement the va
30000 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
30010 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  P1.** then jump 
30020 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65 77  to P2 if the new
30030 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74 6c   value is exactl
30040 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20  y zero..*/.case 
30050 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f 3a  OP_DecrJumpZero:
30060 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c   {      /* jump,
30070 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
30080 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
30090 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
300a0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
300b0 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  ;.  pIn1->u.i--;
300c0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
300d0 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
300e0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
300f0 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  >u.i==0 ) goto j
30100 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
30110 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
30120 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20  e: JumpZeroIncr 
30130 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
30140 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 72 5b 50  ynopsis: if (r[P
30150 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20  1]++)==0 ) goto 
30160 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67  P2.**.** The reg
30170 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
30180 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
30190 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50  .  If register P
301a0 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a  1 is initially.*
301b0 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d  * zero, then jum
301c0 70 20 74 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d  p to P2.  Increm
301d0 65 6e 74 20 72 65 67 69 73 74 65 72 20 50 31 20  ent register P1 
301e0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
301f0 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20  ether or.** not 
30200 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
30210 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75  n..*/.case OP_Ju
30220 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20  mpZeroIncr: {   
30230 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
30240 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
30250 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
30260 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
30270 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  ags&MEM_Int );. 
30280 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
30290 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32  (pIn1->u.i==0, 2
302a0 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
302b0 75 2e 69 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f  u.i++)==0 ) goto
302c0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
302d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
302e0 64 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50  de: AggStep0 * P
302f0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
30300 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
30310 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
30320 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
30330 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
30340 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
30350 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
30360 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
30370 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
30380 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
30390 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
303a0 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
303b0 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
303c0 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20  n.  Register P3 
303d0 69 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75  is the.** accumu
303e0 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  lator..**.** The
303f0 20 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72   P5 arguments ar
30400 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  e taken from reg
30410 69 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73  ister P2 and its
30420 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a  .** successors..
30430 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  */./* Opcode: Ag
30440 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
30450 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
30460 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
30470 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
30480 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
30490 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
304a0 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
304b0 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
304c0 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
304d0 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
304e0 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  er to an sqlite3
304f0 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65  _context.** obje
30500 63 74 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ct that is used 
30510 74 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74  to run the funct
30520 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50  ion.  Register P
30530 33 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61  3 is.** as the a
30540 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a  ccumulator..**.*
30550 2a 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e  * The P5 argumen
30560 74 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f  ts are taken fro
30570 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  m register P2 an
30580 64 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73  d its.** success
30590 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ors..**.** This 
305a0 6f 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61  opcode is initia
305b0 6c 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f  lly coded as OP_
305c0 41 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69  AggStep0.  On fi
305d0 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a  rst evaluation,.
305e0 2a 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73  ** the FuncDef s
305f0 74 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63  tored in P4 is c
30600 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
30610 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
30620 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f   and.** the opco
30630 64 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  de is changed.  
30640 49 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65  In this way, the
30650 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
30660 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  of the.** sqlite
30670 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68  3_context only h
30680 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73  appens once, ins
30690 74 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20  tead of on each 
306a0 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73  call to the.** s
306b0 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  tep function..*/
306c0 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
306d0 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20  0: {.  int n;.  
306e0 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
306f0 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74  *pCtx;..  assert
30700 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
30710 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e  4_FUNCDEF );.  n
30720 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73   = pOp->p5;.  as
30730 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
30740 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  && pOp->p3<=(p->
30750 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
30760 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d   );.  assert( n=
30770 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30  =0 || (pOp->p2>0
30780 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28   && pOp->p2+n<=(
30790 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
307a0 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73 65  or)+1) );.  asse
307b0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d  rt( pOp->p3<pOp-
307c0 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d  >p2 || pOp->p3>=
307d0 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20 70  pOp->p2+n );.  p
307e0 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62 4d  Ctx = sqlite3DbM
307f0 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a  allocRaw(db, siz
30800 65 6f 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d  eof(*pCtx) + (n-
30810 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65  1)*sizeof(sqlite
30820 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66  3_value*));.  if
30830 28 20 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f  ( pCtx==0 ) goto
30840 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d   no_mem;.  pCtx-
30850 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20 70 43 74  >pMem = 0;.  pCt
30860 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  x->pFunc = pOp->
30870 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78  p4.pFunc;.  pCtx
30880 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f  ->iOp = (int)(pO
30890 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78  p - aOp);.  pCtx
308a0 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70  ->pVdbe = p;.  p
308b0 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20  Ctx->argc = n;. 
308c0 20 70 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50   pOp->p4type = P
308d0 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70  4_FUNCCTX;.  pOp
308e0 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78  ->p4.pCtx = pCtx
308f0 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
30900 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b 0a 20 20  = OP_AggStep;.  
30910 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
30920 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74 65 70 20  into OP_AggStep 
30930 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 41 67 67  */.}.case OP_Agg
30940 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  Step: {.  int i;
30950 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
30960 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d 65 6d 20  xt *pCtx;.  Mem 
30970 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 74 3b 0a  *pMem;.  Mem t;.
30980 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
30990 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
309a0 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
309b0 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 20 20 70  Op->p4.pCtx;.  p
309c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
309d0 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74  >p3];..  /* If t
309e0 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20  his function is 
309f0 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72 69 67  inside of a trig
30a00 67 65 72 2c 20 74 68 65 20 72 65 67 69 73 74 65  ger, the registe
30a10 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b  r array in aMem[
30a20 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63 68 61  ].  ** might cha
30a30 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61  nge from one eva
30a40 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e  luation to the n
30a50 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74 20 62  ext.  The next b
30a60 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a  lock of code.  *
30a70 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20  * checks to see 
30a80 69 66 20 74 68 65 20 72 65 67 69 73 74 65 72 20  if the register 
30a90 61 72 72 61 79 20 68 61 73 20 63 68 61 6e 67 65  array has change
30aa0 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69 74 0a  d, and if so it.
30ab0 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a    ** reinitializ
30ac0 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e 74 20  es the relavant 
30ad0 70 61 72 74 73 20 6f 66 20 74 68 65 20 73 71 6c  parts of the sql
30ae0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a  ite3_context obj
30af0 65 63 74 20 2a 2f 0a 20 20 69 66 28 20 70 43 74  ect */.  if( pCt
30b00 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d 65 6d 20  x->pMem != pMem 
30b10 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4d 65  ){.    pCtx->pMe
30b20 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20 20 66 6f  m = pMem;.    fo
30b30 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
30b40 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
30b50 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
30b60 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
30b70 20 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54   }..#ifdef SQLIT
30b80 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d  E_DEBUG.  for(i=
30b90 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b  0; i<pCtx->argc;
30ba0 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
30bb0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43  t( memIsValid(pC
30bc0 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a  tx->argv[i]) );.
30bd0 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
30be0 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43  CE(pOp->p2+i, pC
30bf0 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20  tx->argv[i]);.  
30c00 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70 4d 65 6d  }.#endif..  pMem
30c10 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  ->n++;.  sqlite3
30c20 56 64 62 65 4d 65 6d 49 6e 69 74 28 26 74 2c 20  VdbeMemInit(&t, 
30c30 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  db, MEM_Null);. 
30c40 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 26 74   pCtx->pOut = &t
30c50 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  ;.  pCtx->fError
30c60 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20 70 43 74  OrAux = 0;.  pCt
30c70 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b  x->skipFlag = 0;
30c80 0a 20 20 28 70 43 74 78 2d 3e 70 46 75 6e 63 2d  .  (pCtx->pFunc-
30c90 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 70 43  >xSFunc)(pCtx,pC
30ca0 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d 3e 61  tx->argc,pCtx->a
30cb0 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d  rgv); /* IMP: R-
30cc0 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20  24505-23230 */. 
30cd0 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f   if( pCtx->fErro
30ce0 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66  rOrAux ){.    if
30cf0 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20  ( pCtx->isError 
30d00 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
30d10 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
30d20 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ", sqlite3_value
30d30 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20 20 20  _text(&t));.    
30d40 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73 45    rc = pCtx->isE
30d50 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
30d60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
30d70 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 7d 65 6c  lease(&t);.  }el
30d80 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
30d90 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c  t.flags==MEM_Nul
30da0 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  l );.  }.  if( p
30db0 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b  Ctx->skipFlag ){
30dc0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
30dd0 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  [-1].opcode==OP_
30de0 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69  CollSeq );.    i
30df0 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20   = pOp[-1].p1;. 
30e00 20 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74     if( i ) sqlit
30e10 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36  e3VdbeMemSetInt6
30e20 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a  4(&aMem[i], 1);.
30e30 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
30e40 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69  /* Opcode: AggFi
30e50 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a  nal P1 P2 * P4 *
30e60 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63  .** Synopsis: ac
30e70 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a  cum=r[P1] N=P2.*
30e80 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
30e90 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74   finalizer funct
30ea0 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65  ion for an aggre
30eb0 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20  gate.  P1 is.** 
30ec0 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74  the memory locat
30ed0 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20  ion that is the 
30ee0 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20  accumulator for 
30ef0 74 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a  the aggregate..*
30f00 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
30f10 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
30f20 74 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70  ts that the step
30f30 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20   function takes 
30f40 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  and.** P4 is a p
30f50 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75  ointer to the Fu
30f60 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66  ncDef for this f
30f70 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32  unction.  The P2
30f80 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20  .** argument is 
30f90 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73  not used by this
30fa0 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20   opcode.  It is 
30fb0 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69  only there to di
30fc0 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75  sambiguate.** fu
30fd0 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e  nctions that can
30fe0 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75   take varying nu
30ff0 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e  mbers of argumen
31000 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61  ts.  The.** P4 a
31010 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20  rgument is only 
31020 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64  needed for the d
31030 65 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77  egenerate case w
31040 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70  here.** the step
31050 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f   function was no
31060 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c  t previously cal
31070 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
31080 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65  AggFinal: {.  Me
31090 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72  m *pMem;.  asser
310a0 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
310b0 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p1<=(p->nMe
310c0 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
310d0 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
310e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
310f0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
31100 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45   & ~(MEM_Null|ME
31110 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20  M_Agg))==0 );.  
31120 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
31130 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d  MemFinalize(pMem
31140 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29  , pOp->p4.pFunc)
31150 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20  ;.  if( rc ){.  
31160 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
31170 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
31180 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
31190 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  Mem));.  }.  sql
311a0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
311b0 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
311c0 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
311d0 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
311e0 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
311f0 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
31200 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
31210 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
31220 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
31230 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
31240 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
31250 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
31260 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
31270 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
31280 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
31290 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
312a0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
312b0 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
312c0 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
312d0 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
312e0 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
312f0 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f  L,.** RESTART, o
31300 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69  r TRUNCATE.  Wri
31310 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
31320 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
31330 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
31340 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
31350 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
31360 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
31370 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
31380 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
31390 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
313a0 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
313b0 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
313c0 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
313d0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
313e0 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
313f0 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
31400 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
31410 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
31420 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
31430 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
31440 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
31450 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
31460 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
31470 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
31480 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
31490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
314a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
314b0 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
314c0 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
314d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
314e0 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
314f0 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
31500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31510 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
31520 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
31530 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
31540 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
31550 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
31560 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
31570 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
31580 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
31590 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
315a0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
315b0 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
315c0 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
315d0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
315e0 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
315f0 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  T.       || pOp-
31600 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
31610 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a  KPOINT_TRUNCATE.
31620 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
31630 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
31640 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
31650 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
31660 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
31670 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29  c==SQLITE_BUSY )
31680 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
31690 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b 30  E_OK;.    aRes[0
316a0 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f 72  ] = 1;.  }.  for
316b0 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61 4d  (i=0, pMem = &aM
316c0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33  em[pOp->p3]; i<3
316d0 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a  ; i++, pMem++){.
316e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
316f0 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d 2c  emSetInt64(pMem,
31700 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b 0a   (i64)aRes[i]);.
31710 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b 3b    }    .  break;
31720 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23 69  .};  .#endif..#i
31730 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31740 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f  T_PRAGMA./* Opco
31750 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20  de: JournalMode 
31760 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
31770 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a 6f  ** Change the jo
31780 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64 61  urnal mode of da
31790 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33 2e  tabase P1 to P3.
317a0 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65 20   P3 must be one 
317b0 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52 5f  of the.** PAGER_
317c0 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20  JOURNALMODE_XXX 
317d0 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e 67  values. If chang
317e0 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65 20  ing between the 
317f0 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63 6b  various rollback
31800 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65 74  .** modes (delet
31810 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65 72  e, truncate, per
31820 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d 65  sist, off and me
31830 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20 61  mory), this is a
31840 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72 61   simple.** opera
31850 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20 72  tion. No IO is r
31860 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49  equired..**.** I
31870 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f 20  f changing into 
31880 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d 6f  or out of WAL mo
31890 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72 65  de the procedure
318a0 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69 63   is more complic
318b0 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74  ated..**.** Writ
318c0 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  e a string conta
318d0 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 20  ining the final 
318e0 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20  journal-mode to 
318f0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
31900 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d  case OP_JournalM
31910 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75 74  ode: {    /* out
31920 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42  2 */.  Btree *pB
31930 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
31940 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65 20         /* Btree 
31950 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61  to change journa
31960 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50  l mode of */.  P
31970 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20 20  ager *pPager;   
31980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
31990 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61 74  * Pager associat
319a0 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a 20  ed with pBt */. 
319b0 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20 20   int eNew;      
319c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
319d0 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20   /* New journal 
319e0 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f  mode */.  int eO
319f0 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ld;             
31a00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
31a10 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   old journal mod
31a20 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  e */.#ifndef SQL
31a30 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63  ITE_OMIT_WAL.  c
31a40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c 65  onst char *zFile
31a50 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 2f  name;          /
31a60 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62 61  * Name of databa
31a70 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61 67  se file for pPag
31a80 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20  er */.#endif..  
31a90 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
31aa0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
31ab0 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33 3b   eNew = pOp->p3;
31ac0 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77 3d  .  assert( eNew=
31ad0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31ae0 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20 20  DE_DELETE .     
31af0 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52    || eNew==PAGER
31b00 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52 55  _JOURNALMODE_TRU
31b10 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  NCATE .       ||
31b20 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
31b30 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54  RNALMODE_PERSIST
31b40 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77   .       || eNew
31b50 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
31b60 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20 7c  ODE_OFF.       |
31b70 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
31b80 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
31b90 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
31ba0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31bb0 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c 7c  DE_WAL.       ||
31bc0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
31bd0 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a 20  RNALMODE_QUERY. 
31be0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
31bf0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
31c00 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
31c10 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
31c20 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70 42  Only==0 );..  pB
31c30 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
31c40 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61 67  >p1].pBt;.  pPag
31c50 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
31c60 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 65  ePager(pBt);.  e
31c70 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61 67  Old = sqlite3Pag
31c80 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erGetJournalMode
31c90 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28 20  (pPager);.  if( 
31ca0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
31cb0 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29 20  NALMODE_QUERY ) 
31cc0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 69  eNew = eOld;.  i
31cd0 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65 72  f( !sqlite3Pager
31ce0 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e 61  OkToChangeJourna
31cf0 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29 20  lMode(pPager) ) 
31d00 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69  eNew = eOld;..#i
31d10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31d20 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d  T_WAL.  zFilenam
31d30 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
31d40 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72 2c  Filename(pPager,
31d50 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f   1);..  /* Do no
31d60 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73 69  t allow a transi
31d70 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f  tion to journal_
31d80 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20 64  mode=WAL for a d
31d90 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e 20  atabase.  ** in 
31da0 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
31db0 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53 20  e or if the VFS 
31dc0 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74  does not support
31dd0 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20 0a   shared memory .
31de0 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77 3d    */.  if( eNew=
31df0 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31e00 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73 71  DE_WAL.   && (sq
31e10 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 46  lite3Strlen30(zF
31e20 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20 20  ilename)==0     
31e30 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66 69        /* Temp fi
31e40 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c 20  le */.       || 
31e50 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c  !sqlite3PagerWal
31e60 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65 72  Supported(pPager
31e70 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72 65  ))   /* No share
31e80 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72 74  d-memory support
31e90 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e 65   */.  ){.    eNe
31ea0 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20  w = eOld;.  }.. 
31eb0 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c 64   if( (eNew!=eOld
31ec0 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d 50  ).   && (eOld==P
31ed0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31ee0 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50 41  _WAL || eNew==PA
31ef0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
31f00 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69 66  WAL).  ){.    if
31f10 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
31f20 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65  t || db->nVdbeRe
31f30 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72 63  ad>1 ){.      rc
31f40 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
31f50 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
31f60 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20  beError(p,.     
31f70 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68 61       "cannot cha
31f80 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65 20  nge %s wal mode 
31f90 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
31fa0 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20 20  ansaction",.    
31fb0 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41 47        (eNew==PAG
31fc0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
31fd0 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22 6f  AL ? "into" : "o
31fe0 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29 3b  ut of").      );
31ff0 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
32000 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20 20 20    }else{. .     
32010 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
32020 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
32030 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
32040 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20 6d 6f  f leaving WAL mo
32050 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20 6c 6f  de, close the lo
32060 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63 63 65  g file. If succe
32070 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c 6c 0a  ssful, the call.
32080 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20 50 61          ** to Pa
32090 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20 63 68  gerCloseWal() ch
320a0 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20 64 65  eckpoints and de
320b0 6c 65 74 65 73 20 74 68 65 20 77 72 69 74 65 2d  letes the write-
320c0 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20 20 20  ahead-log .     
320d0 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e 20 45     ** file. An E
320e0 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20 6d 61  XCLUSIVE lock ma
320f0 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c 64 20  y still be held 
32100 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  on the database 
32110 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20 2a 2a  file .        **
32120 20 61 66 74 65 72 20 61 20 73 75 63 63 65 73 73   after a success
32130 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20 20 20  ful return. .   
32140 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
32150 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  rc = sqlite3Page
32160 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67 65 72  rCloseWal(pPager
32170 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
32180 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
32190 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
321a0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
321b0 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
321c0 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  w);.        }.  
321d0 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 65 4f      }else if( eO
321e0 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ld==PAGER_JOURNA
321f0 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a  LMODE_MEMORY ){.
32200 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e 6e 6f          /* Canno
32210 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64 69 72  t transition dir
32220 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d 4f 52  ectly from MEMOR
32230 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65 20 6d  Y to WAL.  Use m
32240 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20 20 20  ode OFF.        
32250 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72 6d 65  ** as an interme
32260 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20 20 20  diate */.       
32270 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
32280 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
32290 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  er, PAGER_JOURNA
322a0 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20 20 20  LMODE_OFF);.    
322b0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
322c0 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63 74 69  Open a transacti
322d0 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  on on the databa
322e0 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72 64 6c  se file. Regardl
322f0 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75 72 6e  ess of the journ
32300 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f 64 65  al.      ** mode
32310 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63 74 69  , this transacti
32320 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73 20 61  on always uses a
32330 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72 6e 61   rollback journa
32340 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  l..      */.    
32350 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
32360 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
32370 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  pBt)==0 );.     
32380 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
32390 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  OK ){.        rc
323a0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
323b0 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c 20 28  etVersion(pBt, (
323c0 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eNew==PAGER_JOUR
323d0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20 32 20  NALMODE_WAL ? 2 
323e0 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d 0a 20  : 1));.      }. 
323f0 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 20     }.  }.#endif 
32400 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /* ifndef SQLITE
32410 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20  _OMIT_WAL */..  
32420 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 65 4e  if( rc ){.    eN
32430 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 20  ew = eOld;.  }. 
32440 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50   eNew = sqlite3P
32450 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
32460 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29  de(pPager, eNew)
32470 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  ;..  pOut->flags
32480 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
32490 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
324a0 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61    pOut->z = (cha
324b0 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e  r *)sqlite3Journ
324c0 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29  alModename(eNew)
324d0 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71  ;.  pOut->n = sq
324e0 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f  lite3Strlen30(pO
324f0 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e  ut->z);.  pOut->
32500 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46  enc = SQLITE_UTF
32510 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  8;.  sqlite3Vdbe
32520 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
32530 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
32540 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64    break;.};.#end
32550 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
32560 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66  T_PRAGMA */..#if
32570 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
32580 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26  _OMIT_VACUUM) &&
32590 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
325a0 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a  _OMIT_ATTACH)./*
325b0 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20   Opcode: Vacuum 
325c0 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  * * * * *.**.** 
325d0 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72  Vacuum the entir
325e0 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 69  e database.  Thi
325f0 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61  s opcode will ca
32600 75 73 65 20 6f 74 68 65 72 20 76 69 72 74 75 61  use other virtua
32610 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f  l.** machines to
32620 20 62 65 20 63 72 65 61 74 65 64 20 61 6e 64 20   be created and 
32630 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74  run.  It may not
32640 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   be called from 
32650 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e  within.** a tran
32660 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  saction..*/.case
32670 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20   OP_Vacuum: {.  
32680 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
32690 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  nly==0 );.  rc =
326a0 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75   sqlite3RunVacuu
326b0 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  m(&p->zErrMsg, d
326c0 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  b);.  break;.}.#
326d0 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
326e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
326f0 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
32700 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
32710 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
32720 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
32730 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
32740 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
32750 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
32760 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
32770 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
32780 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
32790 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
327a0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
327b0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
327c0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
327d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
327e0 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
327f0 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
32800 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
32810 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
32820 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
32830 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
32840 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
32850 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
32860 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
32870 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
32880 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
32890 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
328a0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
328b0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
328c0 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
328d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
328e0 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  (rc==SQLITE_DONE
328f0 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ,2);.  if( rc==S
32900 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20  QLITE_DONE ){.  
32910 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
32920 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  ;.    goto jump_
32930 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
32940 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
32950 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20   Opcode: Expire 
32960 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
32970 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c   Cause precompil
32980 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f  ed statements to
32990 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61   expire.  When a
329a0 6e 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d  n expired statem
329b0 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74  ent.** is execut
329c0 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ed using sqlite3
329d0 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20  _step() it will 
329e0 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63  either automatic
329f0 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72  ally.** reprepar
32a00 65 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20  e itself (if it 
32a10 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63  was originally c
32a20 72 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c  reated using sql
32a30 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28  ite3_prepare_v2(
32a40 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c  )).** or it will
32a50 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54   fail with SQLIT
32a60 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a  E_SCHEMA..** .**
32a70 20 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65   If P1 is 0, the
32a80 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d  n all SQL statem
32a90 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69  ents become expi
32aa0 72 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f  red. If P1 is no
32ab0 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20  n-zero,.** then 
32ac0 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74  only the current
32ad0 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61  ly executing sta
32ae0 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65  tement is expire
32af0 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78  d..*/.case OP_Ex
32b00 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70  pire: {.  if( !p
32b10 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71  Op->p1 ){.    sq
32b20 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
32b30 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
32b40 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
32b50 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
32b60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
32b70 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
32b80 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
32b90 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c  ./* Opcode: Tabl
32ba0 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50  eLock P1 P2 P3 P
32bb0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
32bc0 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20   iDb=P1 root=P2 
32bd0 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  write=P3.**.** O
32be0 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20  btain a lock on 
32bf0 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62  a particular tab
32c00 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63  le. This instruc
32c10 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65  tion is only use
32c20 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68  d when.** the sh
32c30 61 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75  ared-cache featu
32c40 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a  re is enabled. .
32c50 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20  **.** P1 is the 
32c60 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74  index of the dat
32c70 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33  abase in sqlite3
32c80 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61  .aDb[] of the da
32c90 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69  tabase.** on whi
32ca0 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61  ch the lock is a
32cb0 63 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64  cquired.  A read
32cc0 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64  lock is obtained
32cd0 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20   if P3==0 or.** 
32ce0 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20  a write lock if 
32cf0 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20  P3==1..**.** P2 
32d00 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f  contains the roo
32d10 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61  t-page of the ta
32d20 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a  ble to lock..**.
32d30 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61  ** P4 contains a
32d40 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
32d50 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c  name of the tabl
32d60 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20  e being locked. 
32d70 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20  This is only.** 
32d80 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  used to generate
32d90 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   an error messag
32da0 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61  e if the lock ca
32db0 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64  nnot be obtained
32dc0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62  ..*/.case OP_Tab
32dd0 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69  leLock: {.  u8 i
32de0 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38  sWriteLock = (u8
32df0 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20  )pOp->p3;.  if( 
32e00 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30  isWriteLock || 0
32e10 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  ==(db->flags&SQL
32e20 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74  ITE_ReadUncommit
32e30 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20  ted) ){.    int 
32e40 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20  p1 = pOp->p1; . 
32e50 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30     assert( p1>=0
32e60 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29   && p1<db->nDb )
32e70 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
32e80 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
32e90 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20  eMask, p1) );.  
32ea0 20 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74    assert( isWrit
32eb0 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72  eLock==0 || isWr
32ec0 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20  iteLock==1 );.  
32ed0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
32ee0 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d  reeLockTable(db-
32ef0 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f  >aDb[p1].pBt, pO
32f00 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f  p->p2, isWriteLo
32f10 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63  ck);.    if( (rc
32f20 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c  &0xFF)==SQLITE_L
32f30 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63  OCKED ){.      c
32f40 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70  onst char *z = p
32f50 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20  Op->p4.z;.      
32f60 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
32f70 28 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61  (p, "database ta
32f80 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25  ble is locked: %
32f90 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20  s", z);.    }.  
32fa0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
32fb0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
32fc0 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 20  IT_SHARED_CACHE 
32fd0 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
32fe0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
32ff0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
33000 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20  VBegin * * * P4 
33010 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62  *.**.** P4 may b
33020 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  e a pointer to a
33030 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
33040 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f 2c  tructure. If so,
33050 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42   call the .** xB
33060 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20  egin method for 
33070 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a  that table..**.*
33080 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72 20  * Also, whether 
33090 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65 74  or not P4 is set
330a0 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68 69  , check that thi
330b0 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20 63  s is not being c
330c0 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69  alled from.** wi
330d0 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20  thin a callback 
330e0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
330f0 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68 6f  le xSync() metho
33100 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68 65  d. If it is, the
33110 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77   error.** code w
33120 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53 51  ill be set to SQ
33130 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a  LITE_LOCKED..*/.
33140 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20  case OP_VBegin: 
33150 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  {.  VTable *pVTa
33160 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f 70  b;.  pVTab = pOp
33170 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72 63  ->p4.pVtab;.  rc
33180 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42 65   = sqlite3VtabBe
33190 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b 0a  gin(db, pVTab);.
331a0 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73 71    if( pVTab ) sq
331b0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
331c0 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d 3e  rrmsg(p, pVTab->
331d0 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b  pVtab);.  break;
331e0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
331f0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33200 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
33210 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
33220 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
33230 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20 50 31  code: VCreate P1
33240 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
33250 50 32 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P2 is a register
33260 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68 65 20   that holds the 
33270 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
33280 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
33290 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61 6c 6c  ase .** P1. Call
332a0 20 74 68 65 20 78 43 72 65 61 74 65 20 6d 65 74   the xCreate met
332b0 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74 61 62  hod for that tab
332c0 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
332d0 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65 6d 20  Create: {.  Mem 
332e0 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f  sMem;          /
332f0 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68  * For storing th
33300 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64  e record being d
33310 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73  ecoded */.  cons
33320 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20 20 2f  t char *zTab;  /
33330 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 76 69  * Name of the vi
33340 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 0a  rtual table */..
33350 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20    memset(&sMem, 
33360 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29  0, sizeof(sMem))
33370 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20 64 62  ;.  sMem.db = db
33380 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65 20 50  ;.  /* Because P
33390 32 20 69 73 20 61 6c 77 61 79 73 20 61 20 73 74  2 is always a st
333a0 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69 74 20  atic string, it 
333b0 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20 66 6f  is impossible fo
333c0 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c 69 74  r the.  ** sqlit
333d0 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 29 20  e3VdbeMemCopy() 
333e0 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61 73 73  to fail */.  ass
333f0 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
33400 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
33410 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Str)!=0 );.  ass
33420 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ert( (aMem[pOp->
33430 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p2].flags & MEM_
33440 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a 20 20  Static)!=0 );.  
33450 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
33460 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c 20 26  MemCopy(&sMem, &
33470 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a  aMem[pOp->p2]);.
33480 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
33490 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a 54 61  LITE_OK );.  zTa
334a0 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61 72 2a  b = (const char*
334b0 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74  )sqlite3_value_t
334c0 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20 61 73  ext(&sMem);.  as
334d0 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20 64 62  sert( zTab || db
334e0 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
334f0 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29 7b 0a  ;.  if( zTab ){.
33500 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
33510 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64  VtabCallCreate(d
33520 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54 61 62  b, pOp->p1, zTab
33530 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a  , &p->zErrMsg);.
33540 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62    }.  sqlite3Vdb
33550 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
33560 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  m);.  break;.}.#
33570 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33580 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
33590 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
335a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
335b0 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
335c0 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20  : VDestroy P1 * 
335d0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
335e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
335f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
33600 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
33610 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f  Call the xDestro
33620 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74  y method.** of t
33630 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  hat table..*/.ca
33640 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20  se OP_VDestroy: 
33650 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f  {.  db->nVDestro
33660 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  y++;.  rc = sqli
33670 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72  te3VtabCallDestr
33680 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  oy(db, pOp->p1, 
33690 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62  pOp->p4.z);.  db
336a0 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20  ->nVDestroy--;. 
336b0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
336c0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
336d0 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
336e0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
336f0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
33700 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70  E./* Opcode: VOp
33710 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  en P1 * * P4 *.*
33720 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
33730 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
33740 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
33750 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
33760 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31  structure..** P1
33770 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e 75 6d   is a cursor num
33780 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63 6f 64  ber.  This opcod
33790 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73 6f 72  e opens a cursor
337a0 20 74 6f 20 74 68 65 20 76 69 72 74 75 61 6c 0a   to the virtual.
337b0 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73 74 6f  ** table and sto
337c0 72 65 73 20 74 68 61 74 20 63 75 72 73 6f 72 20  res that cursor 
337d0 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  in P1..*/.case O
337e0 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  P_VOpen: {.  Vdb
337f0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
33800 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75   sqlite3_vtab_cu
33810 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20 20 73  rsor *pVCur;.  s
33820 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
33830 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
33840 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
33850 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  ule;..  assert( 
33860 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
33870 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20 70 56    pCur = 0;.  pV
33880 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
33890 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
338a0 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70  ->pVtab;.  if( p
338b0 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52  Vtab==0 || NEVER
338c0 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d  (pVtab->pModule=
338d0 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  =0) ){.    rc = 
338e0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
338f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
33900 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
33910 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d  >pModule;.  rc =
33920 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28   pModule->xOpen(
33930 70 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a  pVtab, &pVCur);.
33940 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
33950 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
33960 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c 49 54  ab);.  if( SQLIT
33970 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20 20 20  E_OK==rc ){.    
33980 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
33990 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
339a0 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
339b0 20 20 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62      pVCur->pVtab
339c0 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20 20 2f   = pVtab;..    /
339d0 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76 64 62  * Initialize vdb
339e0 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63 74 20  e cursor object 
339f0 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20 61 6c  */.    pCur = al
33a00 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20  locateCursor(p, 
33a10 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31 2c 20  pOp->p1, 0, -1, 
33a20 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b 0a 20  CURTYPE_VTAB);. 
33a30 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
33a40 20 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70 56       pCur->uc.pV
33a50 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20 20  Cur = pVCur;.   
33a60 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b     pVtab->nRef++
33a70 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
33a80 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
33a90 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
33aa0 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43       pModule->xC
33ab0 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20  lose(pVCur);.   
33ac0 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
33ad0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
33ae0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
33af0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
33b00 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
33b10 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
33b20 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
33b30 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20  Opcode: VFilter 
33b40 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
33b50 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e   Synopsis: iplan
33b60 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34  =r[P3] zplan='P4
33b70 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  '.**.** P1 is a 
33b80 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73  cursor opened us
33b90 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69  ing VOpen.  P2 i
33ba0 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20  s an address to 
33bb0 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68  jump to if.** th
33bc0 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c  e filtered resul
33bd0 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a  t set is empty..
33be0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68  **.** P4 is eith
33bf0 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72  er NULL or a str
33c00 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65 6e  ing that was gen
33c10 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78 42  erated by the xB
33c20 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68  estIndex.** meth
33c30 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65  od of the module
33c40 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65 74  .  The interpret
33c50 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20  ation of the P4 
33c60 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a  string is left.*
33c70 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20  * to the module 
33c80 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a  implementation..
33c90 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
33ca0 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46  e invokes the xF
33cb0 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20  ilter method on 
33cc0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
33cd0 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62  e specified.** b
33ce0 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67  y P1.  The integ
33cf0 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61  er query plan pa
33d00 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74  rameter to xFilt
33d10 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  er is stored in 
33d20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20  register.** P3. 
33d30 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73 74  Register P3+1 st
33d40 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70 61  ores the argc pa
33d50 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61  rameter to be pa
33d60 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78  ssed to the.** x
33d70 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52  Filter method. R
33d80 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50  egisters P3+2..P
33d90 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68 65  3+1+argc are the
33da0 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f   argc.** additio
33db0 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77  nal parameters w
33dc0 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64 20  hich are passed 
33dd0 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73  to.** xFilter as
33de0 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72 20   argv. Register 
33df0 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67  P3+2 becomes arg
33e00 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64  v[0] when passed
33e10 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a   to xFilter..**.
33e20 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64  ** A jump is mad
33e30 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 72  e to P2 if the r
33e40 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72 20  esult set after 
33e50 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20  filtering would 
33e60 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73  be empty..*/.cas
33e70 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20  e OP_VFilter: { 
33e80 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
33e90 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69  nt nArg;.  int i
33ea0 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73  Query;.  const s
33eb0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
33ec0 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
33ed0 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41  Query;.  Mem *pA
33ee0 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  rgc;.  sqlite3_v
33ef0 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43 75  tab_cursor *pVCu
33f00 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  r;.  sqlite3_vta
33f10 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65  b *pVtab;.  Vdbe
33f20 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20  Cursor *pCur;.  
33f30 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69  int res;.  int i
33f40 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b  ;.  Mem **apArg;
33f50 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d  ..  pQuery = &aM
33f60 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
33f70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31  Argc = &pQuery[1
33f80 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61  ];.  pCur = p->a
33f90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
33fa0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
33fb0 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20  lid(pQuery) );. 
33fc0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
33fd0 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29  pOp->p3, pQuery)
33fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
33ff0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
34000 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70 56  YPE_VTAB );.  pV
34010 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  Cur = pCur->uc.p
34020 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d 20  VCur;.  pVtab = 
34030 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
34040 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
34050 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
34060 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
34070 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
34080 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
34090 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
340a0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
340b0 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
340c0 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
340d0 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
340e0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
340f0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
34100 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
34110 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
34120 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d 20  thod */.  res = 
34130 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  0;.  apArg = p->
34140 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20 3d  apArg;.  for(i =
34150 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29   0; i<nArg; i++)
34160 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d  {.    apArg[i] =
34170 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20   &pArgc[i+1];.  
34180 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65  }.  rc = pModule
34190 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72 2c  ->xFilter(pVCur,
341a0 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70 34   iQuery, pOp->p4
341b0 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 29  .z, nArg, apArg)
341c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
341d0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
341e0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d  Vtab);.  if( rc=
341f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
34200 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d    res = pModule-
34210 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20 20  >xEof(pVCur);.  
34220 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  }.  pCur->nullRo
34230 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61  w = 0;.  VdbeBra
34240 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c  nchTaken(res!=0,
34250 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29 20  2);.  if( res ) 
34260 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
34270 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34280 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34290 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
342a0 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
342b0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
342c0 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
342d0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
342e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
342f0 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
34300 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
34310 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
34320 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
34330 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
34340 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
34350 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
34360 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
34370 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
34380 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
34390 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
343a0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
343b0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
343c0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
343d0 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
343e0 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
343f0 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
34400 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
34410 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
34420 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
34430 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70  t( pCur->eCurTyp
34440 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20  e==CURTYPE_VTAB 
34450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
34460 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
34470 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
34480 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44 65  Cursor) );.  pDe
34490 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  st = &aMem[pOp->
344a0 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p3];.  memAboutT
344b0 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73 74  oChange(p, pDest
344c0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
344d0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73 71  ullRow ){.    sq
344e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
344f0 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20  ull(pDest);.    
34500 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74  break;.  }.  pVt
34510 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70 56  ab = pCur->uc.pV
34520 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  Cur->pVtab;.  pM
34530 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70  odule = pVtab->p
34540 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74  Module;.  assert
34550 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75  ( pModule->xColu
34560 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26  mn );.  memset(&
34570 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a  sContext, 0, siz
34580 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a  eof(sContext));.
34590 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74 20    sContext.pOut 
345a0 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53 65  = pDest;.  MemSe
345b0 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74 2c  tTypeFlag(pDest,
345c0 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63   MEM_Null);.  rc
345d0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c   = pModule->xCol
345e0 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  umn(pCur->uc.pVC
345f0 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70  ur, &sContext, p
34600 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74  Op->p2);.  sqlit
34610 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
34620 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20  sg(p, pVtab);.  
34630 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45  if( sContext.isE
34640 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d  rror ){.    rc =
34650 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f   sContext.isErro
34660 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  r;.  }.  sqlite3
34670 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
34680 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64 69  ng(pDest, encodi
34690 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ng);.  REGISTER_
346a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
346b0 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f  Dest);.  UPDATE_
346c0 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
346d0 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69  st);..  if( sqli
346e0 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67  te3VdbeMemTooBig
346f0 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67  (pDest) ){.    g
34700 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
34710 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34720 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
34730 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
34740 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
34750 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
34760 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
34770 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
34780 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
34790 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
347a0 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
347b0 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
347c0 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
347d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
347e0 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
347f0 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
34800 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
34810 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
34820 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
34830 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
34840 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
34850 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
34860 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
34870 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
34880 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
34890 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
348a0 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
348b0 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
348c0 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
348d0 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
348e0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
348f0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
34900 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
34910 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  E_VTAB );.  if( 
34920 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
34930 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
34940 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
34950 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
34960 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
34970 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
34980 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
34990 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
349a0 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
349b0 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
349c0 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
349d0 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
349e0 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
349f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
34a00 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
34a10 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
34a20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
34a30 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
34a40 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
34a50 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
34a60 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
34a70 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
34a80 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
34a90 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
34aa0 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
34ab0 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
34ac0 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
34ad0 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
34ae0 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
34af0 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
34b00 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d  ..  */.  rc = pM
34b10 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
34b20 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
34b30 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
34b40 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
34b50 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
34b60 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
34b70 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
34b80 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  f(pCur->uc.pVCur
34b90 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  );.  }.  VdbeBra
34ba0 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
34bb0 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
34bc0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
34bd0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
34be0 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20   P2 */.    goto 
34bf0 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
34c00 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
34c10 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  pt;.  }.  goto c
34c20 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
34c30 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  pt;.}.#endif /* 
34c40 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
34c50 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
34c60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
34c70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
34c80 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65   Opcode: VRename
34c90 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
34ca0 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74  ** P4 is a point
34cb0 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  er to a virtual 
34cc0 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e  table object, an
34cd0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74   sqlite3_vtab st
34ce0 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73  ructure..** This
34cf0 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
34d00 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  the correspondin
34d10 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64  g xRename method
34d20 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  . The value.** i
34d30 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
34d40 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 7a   passed as the z
34d50 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f  Name argument to
34d60 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74   the xRename met
34d70 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  hod..*/.case OP_
34d80 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c  VRename: {.  sql
34d90 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
34da0 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a  ;.  Mem *pName;.
34db0 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
34dc0 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
34dd0 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d  .  pName = &aMem
34de0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
34df0 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64  ert( pVtab->pMod
34e00 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a  ule->xRename );.
34e10 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
34e20 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20  alid(pName) );. 
34e30 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
34e40 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47  Only==0 );.  REG
34e50 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
34e60 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61  >p1, pName);.  a
34e70 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c  ssert( pName->fl
34e80 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b  ags & MEM_Str );
34e90 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
34ea0 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
34eb0 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61  UTF8 );.  testca
34ec0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
34ed0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
34ee0 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e  ;.  testcase( pN
34ef0 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45  ame->enc==SQLITE
34f00 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63  _UTF16LE );.  rc
34f10 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68   = sqlite3VdbeCh
34f20 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61  angeEncoding(pNa
34f30 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  me, SQLITE_UTF8)
34f40 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
34f50 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
34f60 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
34f70 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c  ->xRename(pVtab,
34f80 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20   pName->z);.    
34f90 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
34fa0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
34fb0 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
34fc0 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65  d = 0;.  }.  bre
34fd0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
34fe0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
34ff0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
35000 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74  * Opcode: VUpdat
35010 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
35020 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61  .** Synopsis: da
35030 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a  ta=r[P3@P2].**.*
35040 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
35050 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
35060 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
35070 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
35080 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20  ucture..** This 
35090 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74  opcode invokes t
350a0 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
350b0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e   xUpdate method.
350c0 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72   P2 values.** ar
350d0 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d  e contiguous mem
350e0 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69  ory cells starti
350f0 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61 73 73  ng at P3 to pass
35100 20 74 6f 20 74 68 65 20 78 55 70 64 61 74 65 20   to the xUpdate 
35110 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20  .** invocation. 
35120 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  The value in reg
35130 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20  ister (P3+P2-1) 
35140 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74  corresponds to t
35150 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d  he .** p2th elem
35160 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67 76 20  ent of the argv 
35170 61 72 72 61 79 20 70 61 73 73 65 64 20 74 6f 20  array passed to 
35180 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54  xUpdate..**.** T
35190 68 65 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  he xUpdate metho
351a0 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45  d will do a DELE
351b0 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20  TE or an INSERT 
351c0 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20  or both..** The 
351d0 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20  argv[0] element 
351e0 28 77 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e  (which correspon
351f0 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  ds to memory cel
35200 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20  l P3).** is the 
35210 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74  rowid of a row t
35220 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72  o delete.  If ar
35230 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68  gv[0] is NULL th
35240 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69  en no .** deleti
35250 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20  on occurs.  The 
35260 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20  argv[1] element 
35270 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  is the rowid of 
35280 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e  the new .** row.
35290 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55    This can be NU
352a0 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65 20 76  LL to have the v
352b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c  irtual table sel
352c0 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20  ect the new .** 
352d0 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66  rowid for itself
352e0 2e 20 20 54 68 65 20 73 75 62 73 65 71 75 65 6e  .  The subsequen
352f0 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68  t elements in th
35300 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20  e array are .** 
35310 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f  the values of co
35320 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77  lumns in the new
35330 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50   row..**.** If P
35340 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73  2==1 then no ins
35350 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64  ert is performed
35360 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68  .  argv[0] is th
35370 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20  e rowid of.** a 
35380 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a  row to delete..*
35390 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f  *.** P1 is a boo
353a0 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74  lean flag. If it
353b0 20 69 73 20 73 65 74 20 74 6f 20 74 72 75 65 20   is set to true 
353c0 61 6e 64 20 74 68 65 20 78 55 70 64 61 74 65 20  and the xUpdate 
353d0 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65  call.** is succe
353e0 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20  ssful, then the 
353f0 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62  value returned b
35400 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69  y sqlite3_last_i
35410 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a  nsert_rowid() .*
35420 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  * is set to the 
35430 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77  value of the row
35440 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a  id for the row j
35450 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a  ust inserted..**
35460 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20 65 72  .** P5 is the er
35470 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f  ror actions (OE_
35480 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c  Replace, OE_Fail
35490 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63  , OE_Ignore, etc
354a0 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e  ) to.** apply in
354b0 20 74 68 65 20 63 61 73 65 20 6f 66 20 61 20 63   the case of a c
354c0 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72  onstraint failur
354d0 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f  e on an insert o
354e0 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73  r update..*/.cas
354f0 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a  e OP_VUpdate: {.
35500 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
35510 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
35520 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
35530 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41  Module;.  int nA
35540 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  rg;.  int i;.  s
35550 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69  qlite_int64 rowi
35560 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  d;.  Mem **apArg
35570 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20  ;.  Mem *pX;..  
35580 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
35590 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70  =1        || pOp
355a0 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20  ->p5==OE_Fail   
355b0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52  || pOp->p5==OE_R
355c0 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20  ollback .       
355d0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41  || pOp->p5==OE_A
355e0 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  bort || pOp->p5=
355f0 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f  =OE_Ignore || pO
35600 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63  p->p5==OE_Replac
35610 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28  e.  );.  assert(
35620 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
35630 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  );.  pVtab = pOp
35640 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
35650 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d  b;.  if( pVtab==
35660 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62  0 || NEVER(pVtab
35670 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b  ->pModule==0) ){
35680 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
35690 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65  _LOCKED;.    bre
356a0 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  ak;.  }.  pModul
356b0 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
356c0 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
356d0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
356e0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
356f0 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
35700 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
35710 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
35720 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
35730 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
35740 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
35750 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
35760 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
35770 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
35780 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
35790 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
357a0 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
357b0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
357c0 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
357d0 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
357e0 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
357f0 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
35800 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
35810 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
35820 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
35830 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
35840 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
35850 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
35860 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
35870 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
35880 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
35890 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
358a0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
358b0 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
358c0 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
358d0 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
358e0 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
358f0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
35900 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
35910 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
35920 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
35930 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
35940 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
35950 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
35960 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
35970 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
35980 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
35990 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
359a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
359b0 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
359c0 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
359d0 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
359e0 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
359f0 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
35a00 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
35a10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
35a20 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
35a30 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
35a40 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
35a50 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35a60 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
35a70 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
35a80 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
35a90 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
35aa0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
35ab0 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
35ac0 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
35ad0 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
35ae0 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
35af0 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
35b00 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
35b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
35b20 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75  2 */.  pOut = ou
35b30 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
35b40 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  pOp);.  pOut->u.
35b50 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  i = sqlite3Btree
35b60 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62  LastPage(db->aDb
35b70 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a  [pOp->p1].pBt);.
35b80 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
35b90 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c  f...#ifndef  SQL
35ba0 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
35bb0 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65  RAGMAS./* Opcode
35bc0 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32  : MaxPgcnt P1 P2
35bd0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72   P3 * *.**.** Tr
35be0 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78  y to set the max
35bf0 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
35c00 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20  for database P1 
35c10 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  to the value in 
35c20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20 6c 65  P3..** Do not le
35c30 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  t the maximum pa
35c40 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20 62 65  ge count fall be
35c50 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e 74 20  low the current 
35c60 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64 0a 2a  page count and.*
35c70 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67 65 20  * do not change 
35c80 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65  the maximum page
35c90 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69 66 20   count value if 
35ca0 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53 74 6f  P3==0..**.** Sto
35cb0 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  re the maximum p
35cc0 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65 72 20  age count after 
35cd0 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20 72 65  the change in re
35ce0 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61  gister P2..*/.ca
35cf0 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74 3a 20  se OP_MaxPgcnt: 
35d00 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
35d10 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  out2 */.  unsign
35d20 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20  ed int newMax;. 
35d30 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20   Btree *pBt;..  
35d40 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
35d50 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
35d60 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
35d70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e  Op->p1].pBt;.  n
35d80 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28  ewMax = 0;.  if(
35d90 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20   pOp->p3 ){.    
35da0 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33  newMax = sqlite3
35db0 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 70 42  BtreeLastPage(pB
35dc0 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d  t);.    if( newM
35dd0 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70  ax < (unsigned)p
35de0 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20  Op->p3 ) newMax 
35df0 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d  = (unsigned)pOp-
35e00 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  >p3;.  }.  pOut-
35e10 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74  >u.i = sqlite3Bt
35e20 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28  reeMaxPageCount(
35e30 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20  pBt, newMax);.  
35e40 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
35e50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69  ../* Opcode: Ini
35e60 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a  t * P2 * P4 *.**
35e70 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72   Synopsis:  Star
35e80 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72  t at P2.**.** Pr
35e90 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61  ograms contain a
35ea0 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65   single instance
35eb0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
35ec0 61 73 20 74 68 65 20 76 65 72 79 20 66 69 72 73  as the very firs
35ed0 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  t.** opcode..**.
35ee0 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20 69 73  ** If tracing is
35ef0 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65   enabled (by the
35f00 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29   sqlite3_trace()
35f10 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65  ) interface, the
35f20 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73  n.** the UTF-8 s
35f30 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20  tring contained 
35f40 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74 65 64  in P4 is emitted
35f50 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20 63 61   on the trace ca
35f60 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66  llback..** Or if
35f70 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73   P4 is blank, us
35f80 65 20 74 68 65 20 73 74 72 69 6e 67 20 72 65 74  e the string ret
35f90 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
35fa0 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  _sql()..**.** If
35fb0 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c   P2 is not zero,
35fc0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
35fd0 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  tion P2..*/.case
35fe0 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20   OP_Init: {     
35ff0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
36000 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a    char *zTrace;.
36010 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69 66 6e    char *z;..#ifn
36020 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
36030 54 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e  TRACE.  if( db->
36040 78 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d  xTrace.   && !p-
36050 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26  >doingRerun.   &
36060 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70  & (zTrace = (pOp
36070 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34  ->p4.z ? pOp->p4
36080 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d  .z : p->zSql))!=
36090 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73  0.  ){.    z = s
360a0 71 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64  qlite3VdbeExpand
360b0 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a  Sql(p, zTrace);.
360c0 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64      db->xTrace(d
360d0 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29  b->pTraceArg, z)
360e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  ;.    sqlite3DbF
360f0 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a  ree(db, z);.  }.
36100 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
36110 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20  E_FCNTL_TRACE.  
36120 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
36130 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
36140 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66  : p->zSql);.  if
36150 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20  ( zTrace ){.    
36160 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69  int i;.    for(i
36170 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
36180 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44  ++){.      if( D
36190 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72  bMaskTest(p->btr
361a0 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20  eeMask, i)==0 ) 
361b0 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
361c0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
361d0 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62  trol(db, db->aDb
361e0 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54  [i].zName, SQLIT
361f0 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a  E_FCNTL_TRACE, z
36200 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20  Trace);.    }.  
36210 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
36220 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41  TE_USE_FCNTL_TRA
36230 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  CE */.#ifdef SQL
36240 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20  ITE_DEBUG.  if( 
36250 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
36260 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30  ITE_SqlTrace)!=0
36270 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d  .   && (zTrace =
36280 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f   (pOp->p4.z ? pO
36290 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71  p->p4.z : p->zSq
362a0 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20  l))!=0.  ){.    
362b0 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e  sqlite3DebugPrin
362c0 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25  tf("SQL-trace: %
362d0 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20  s\n", zTrace);. 
362e0 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c   }.#endif /* SQL
362f0 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e  ITE_DEBUG */.#en
36300 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36310 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 69 66  IT_TRACE */.  if
36320 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f  ( pOp->p2 ) goto
36330 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
36340 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66 20  reak;.}..#ifdef 
36350 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55  SQLITE_ENABLE_CU
36360 52 53 4f 52 5f 48 49 4e 54 53 0a 2f 2a 20 4f 70  RSOR_HINTS./* Op
36370 63 6f 64 65 3a 20 43 75 72 73 6f 72 48 69 6e 74  code: CursorHint
36380 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
36390 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 68 69 6e  ** Provide a hin
363a0 74 20 74 6f 20 63 75 72 73 6f 72 20 50 31 20 74  t to cursor P1 t
363b0 68 61 74 20 69 74 20 6f 6e 6c 79 20 6e 65 65 64  hat it only need
363c0 73 20 74 6f 20 72 65 74 75 72 6e 20 72 6f 77 73  s to return rows
363d0 20 74 68 61 74 0a 2a 2a 20 73 61 74 69 73 66 79   that.** satisfy
363e0 20 74 68 65 20 45 78 70 72 20 69 6e 20 50 34 2e   the Expr in P4.
363f0 20 20 54 4b 5f 52 45 47 49 53 54 45 52 20 74 65    TK_REGISTER te
36400 72 6d 73 20 69 6e 20 74 68 65 20 50 34 20 65 78  rms in the P4 ex
36410 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72 0a 2a  pression refer.*
36420 2a 20 74 6f 20 76 61 6c 75 65 73 20 63 75 72 72  * to values curr
36430 65 6e 74 6c 79 20 68 65 6c 64 20 69 6e 20 72 65  ently held in re
36440 67 69 73 74 65 72 73 2e 20 20 54 4b 5f 43 4f 4c  gisters.  TK_COL
36450 55 4d 4e 20 74 65 72 6d 73 20 69 6e 20 74 68 65  UMN terms in the
36460 20 50 34 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f   P4.** expressio
36470 6e 20 72 65 66 65 72 20 74 6f 20 63 6f 6c 75 6d  n refer to colum
36480 6e 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  ns in the b-tree
36490 20 74 6f 20 77 68 69 63 68 20 63 75 72 73 6f 72   to which cursor
364a0 20 50 31 20 69 73 20 70 6f 69 6e 74 69 6e 67 2e   P1 is pointing.
364b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 75 72 73  .*/.case OP_Curs
364c0 6f 72 48 69 6e 74 3a 20 7b 0a 20 20 56 64 62 65  orHint: {.  Vdbe
364d0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61  Cursor *pC;..  a
364e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
364f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
36500 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  nCursor );.  ass
36510 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
36520 3d 3d 50 34 5f 45 58 50 52 20 29 3b 0a 20 20 70  ==P4_EXPR );.  p
36530 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
36540 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 43 20  ->p1];.  if( pC 
36550 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
36560 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
36570 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
36580 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
36590 72 73 6f 72 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rsorHint(pC->uc.
365a0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 48  pCursor, BTREE_H
365b0 49 4e 54 5f 52 41 4e 47 45 2c 0a 20 20 20 20 20  INT_RANGE,.     
365c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
365d0 20 20 20 20 20 20 70 4f 70 2d 3e 70 34 2e 70 45        pOp->p4.pE
365e0 78 70 72 2c 20 61 4d 65 6d 29 3b 0a 20 20 7d 0a  xpr, aMem);.  }.
365f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36600 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
36610 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 20  LE_CURSOR_HINTS 
36620 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  */../* Opcode: N
36630 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  oop * * * * *.**
36640 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20  .** Do nothing. 
36650 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
36660 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75  n is often usefu
36670 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64  l as a jump.** d
36680 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  estination..*/./
36690 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45  *.** The magic E
366a0 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72  xplain opcode ar
366b0 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20  e only inserted 
366c0 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20  when explain==2 
366d0 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20  (which.** is to 
366e0 73 61 79 20 77 68 65 6e 20 74 68 65 20 45 58 50  say when the EXP
366f0 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20  LAIN QUERY PLAN 
36700 73 79 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29  syntax is used.)
36710 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
36720 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74  records informat
36730 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74  ion from the opt
36740 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74  imizer.  It is t
36750 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61  he.** the same a
36760 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73  s a no-op.  This
36770 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70   opcodesnever ap
36780 70 65 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20  pears in a real 
36790 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64  VM program..*/.d
367a0 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20  efault: {       
367b0 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65     /* This is re
367c0 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64  ally OP_Noop and
367d0 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20   OP_Explain */. 
367e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
367f0 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c  code==OP_Noop ||
36800 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
36810 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72  _Explain );.  br
36820 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a  eak;.}../*******
36830 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36840 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36850 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36860 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36870 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61  ******.** The ca
36880 73 65 73 20 6f 66 20 74 68 65 20 73 77 69 74 63  ses of the switc
36890 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76  h statement abov
368a0 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75  e this line shou
368b0 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74  ld all be indent
368c0 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65  ed.** by 6 space
368d0 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65 66 74  s.  But the left
368e0 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73 20 68  -most 6 spaces h
368f0 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64  ave been removed
36900 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a   to improve the.
36910 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20  ** readability. 
36920 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74   From this point
36930 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f   on down, the no
36940 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e  rmal indentation
36950 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65   rules are.** re
36960 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a  stored..********
36970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
369b0 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69  *****/.    }..#i
369c0 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
369d0 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36  E.    {.      u6
369e0 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c 69  4 endTime = sqli
369f0 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20 20 20  te3Hwtime();.   
36a00 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65 3e 73     if( endTime>s
36a10 74 61 72 74 20 29 20 70 4f 72 69 67 4f 70 2d 3e  tart ) pOrigOp->
36a20 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
36a30 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
36a40 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74 2b 2b 3b   pOrigOp->cnt++;
36a50 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  .    }.#endif.. 
36a60 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77     /* The follow
36a70 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20 6e 6f  ing code adds no
36a80 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61 63 74  thing to the act
36a90 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74  ual functionalit
36aa0 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20  y.    ** of the 
36ab0 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69 73 20  program.  It is 
36ac0 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20 74 65  only here for te
36ad0 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75 67 67  sting and debugg
36ae0 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e 20 74  ing..    ** On t
36af0 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c 20 69  he other hand, i
36b00 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50 55 20  t does burn CPU 
36b10 63 79 63 6c 65 73 20 65 76 65 72 79 20 74 69 6d  cycles every tim
36b20 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20 2a 2a  e through.    **
36b30 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72 20 6c   the evaluator l
36b40 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61 6e 20  oop.  So we can 
36b50 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77 68 65  leave it out whe
36b60 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65 66 69  n NDEBUG is defi
36b70 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 6e  ned..    */.#ifn
36b80 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20 20 61  def NDEBUG.    a
36b90 73 73 65 72 74 28 20 70 4f 70 3e 3d 26 61 4f 70  ssert( pOp>=&aOp
36ba0 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26 61 4f 70  [-1] && pOp<&aOp
36bb0 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b 0a 0a 23  [p->nOp-1] );..#
36bc0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
36bd0 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66  UG.    if( db->f
36be0 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64  lags & SQLITE_Vd
36bf0 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20  beTrace ){.     
36c00 20 69 66 28 20 72 63 21 3d 30 20 29 20 70 72 69   if( rc!=0 ) pri
36c10 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c 72 63  ntf("rc=%d\n",rc
36c20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72  );.      if( pOr
36c30 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  igOp->opflags & 
36c40 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a  (OPFLG_OUT2) ){.
36c50 20 20 20 20 20 20 20 20 72 65 67 69 73 74 65 72          register
36c60 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70  Trace(pOrigOp->p
36c70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70  2, &aMem[pOrigOp
36c80 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
36c90 20 20 20 20 20 20 69 66 28 20 70 4f 72 69 67 4f        if( pOrigO
36ca0 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
36cb0 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
36cc0 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
36cd0 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c 20 26 61  (pOrigOp->p3, &a
36ce0 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70 33 5d  Mem[pOrigOp->p3]
36cf0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
36d00 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51 4c 49  .#endif  /* SQLI
36d10 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
36d20 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20 2a 2f  if  /* NDEBUG */
36d30 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65 6e 64  .  }  /* The end
36d40 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b 29 20   of the for(;;) 
36d50 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73 20 74  loop the loops t
36d60 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73 20 2a  hrough opcodes *
36d70 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20 72 65  /..  /* If we re
36d80 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74 2c 20  ach this point, 
36d90 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 65 78  it means that ex
36da0 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e 69 73  ecution is finis
36db0 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20 61 6e  hed with.  ** an
36dc0 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65 20 6b   error of some k
36dd0 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65 5f 65  ind..  */.vdbe_e
36de0 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61 73 73  rror_halt:.  ass
36df0 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70 2d 3e  ert( rc );.  p->
36e00 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73 74 63  rc = rc;.  testc
36e10 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c 6f 62  ase( sqlite3Glob
36e20 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21 3d 30  alConfig.xLog!=0
36e30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6c 6f   );.  sqlite3_lo
36e40 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65 6e 74  g(rc, "statement
36e50 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a 20 5b   aborts at %d: [
36e60 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20 20 20  %s] %s", .      
36e70 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e               (in
36e80 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
36e90 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d  ->zSql, p->zErrM
36ea0 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  sg);.  sqlite3Vd
36eb0 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69 66 28  beHalt(p);.  if(
36ec0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f 45 52   rc==SQLITE_IOER
36ed0 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e 6d 61  R_NOMEM ) db->ma
36ee0 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
36ef0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
36f00 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73 65 74  ROR;.  if( reset
36f10 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e 30 20  SchemaOnFault>0 
36f20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 65  ){.    sqlite3Re
36f30 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c  setOneSchema(db,
36f40 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
36f50 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f  ult-1);.  }..  /
36f60 2a 20 54 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * This is the on
36f70 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20 74 68  ly way out of th
36f80 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20 20 57  is procedure.  W
36f90 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a 20 72  e have to.  ** r
36fa0 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74 65 78  elease the mutex
36fb0 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74 68 61  es on btrees tha
36fc0 74 20 77 65 72 65 20 61 63 71 75 69 72 65 64 20  t were acquired 
36fd0 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f 70 2e  at the.  ** top.
36fe0 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72 6e 3a   */.vdbe_return:
36ff0 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64  .  db->lastRowid
37000 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
37010 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53 74 65  testcase( nVmSte
37020 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43 6f 75  p>0 );.  p->aCou
37030 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
37040 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 20  STATUS_VM_STEP] 
37050 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65 70 3b  += (int)nVmStep;
37060 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4c 65  .  sqlite3VdbeLe
37070 61 76 65 28 70 29 3b 0a 20 20 61 73 73 65 72 74  ave(p);.  assert
37080 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
37090 7c 7c 20 6e 45 78 74 72 61 44 65 6c 65 74 65 3d  || nExtraDelete=
370a0 3d 30 20 0a 20 20 20 20 20 20 20 7c 7c 20 73 71  =0 .       || sq
370b0 6c 69 74 65 33 5f 73 74 72 6c 69 6b 65 28 22 44  lite3_strlike("D
370c0 45 4c 45 54 45 25 22 2c 70 2d 3e 7a 53 71 6c 2c  ELETE%",p->zSql,
370d0 30 29 21 3d 30 20 0a 20 20 29 3b 0a 20 20 72 65  0)!=0 .  );.  re
370e0 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a  turn rc;..  /* J
370f0 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 61  ump to here if a
37100 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
37110 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49  larger than SQLI
37120 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20  TE_MAX_LENGTH.  
37130 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65  ** is encountere
37140 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a  d..  */.too_big:
37150 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72  .  sqlite3VdbeEr
37160 72 6f 72 28 70 2c 20 22 73 74 72 69 6e 67 20 6f  ror(p, "string o
37170 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
37180 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
37190 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
371a0 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
371b0 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
371c0 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
371d0 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
371e0 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
371f0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
37200 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
37210 70 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  p, "out of memor
37220 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49  y");.  rc = SQLI
37230 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f  TE_NOMEM;.  goto
37240 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74   vdbe_error_halt
37250 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20  ;..  /* Jump to 
37260 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68  here for any oth
37270 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c  er kind of fatal
37280 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63   error.  The "rc
37290 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20  " variable.  ** 
372a0 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20  should hold the 
372b0 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20  error number..  
372c0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
372d0 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28  error:.  assert(
372e0 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29   p->zErrMsg==0 )
372f0 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c  ;.  if( db->mall
37300 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20  ocFailed ) rc = 
37310 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
37320 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49  if( rc!=SQLITE_I
37330 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20  OERR_NOMEM ){.  
37340 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
37350 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
37360 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
37370 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
37380 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
37390 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
373a0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
373b0 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
373c0 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
373d0 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
373e0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
373f0 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
37400 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
37410 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
37420 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
37430 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
37440 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 45  ;.  sqlite3VdbeE
37450 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
37460 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
37470 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
37480 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.