/ Hex Artifact Content
Login

Artifact 39d7628bb8eed10a5378adcf97cca6dce7829a8f:


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 7d 0a 73 74 61 74 69 63 20 76 6f 69 64   }.}.static void
3d80: 20 72 65 67 69 73 74 65 72 54 72 61 63 65 28 69   registerTrace(i
3d90: 6e 74 20 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29  nt iReg, Mem *p)
3da0: 7b 0a 20 20 70 72 69 6e 74 66 28 22 52 45 47 5b  {.  printf("REG[
3db0: 25 64 5d 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a  %d] = ", iReg);.
3dc0: 20 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74 28    memTracePrint(
3dd0: 70 29 3b 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e  p);.  printf("\n
3de0: 22 29 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ");.}.#endif..#i
3df0: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3e00: 47 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47 49  G.#  define REGI
3e10: 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29 20  STER_TRACE(R,M) 
3e20: 69 66 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  if(db->flags&SQL
3e30: 49 54 45 5f 56 64 62 65 54 72 61 63 65 29 72 65  ITE_VdbeTrace)re
3e40: 67 69 73 74 65 72 54 72 61 63 65 28 52 2c 4d 29  gisterTrace(R,M)
3e50: 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65  .#else.#  define
3e60: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
3e70: 52 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  R,M).#endif...#i
3e80: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
3e90: 45 0a 0a 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65  E../* .** hwtime
3ea0: 2e 68 20 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69  .h contains inli
3eb0: 6e 65 20 61 73 73 65 6d 62 6c 65 72 20 63 6f 64  ne assembler cod
3ec0: 65 20 66 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69  e for implementi
3ed0: 6e 67 20 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66  ng .** high-perf
3ee0: 6f 72 6d 61 6e 63 65 20 74 69 6d 69 6e 67 20 72  ormance timing r
3ef0: 6f 75 74 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63  outines..*/.#inc
3f00: 6c 75 64 65 20 22 68 77 74 69 6d 65 2e 68 22 0a  lude "hwtime.h".
3f10: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66  .#endif..#ifndef
3f20: 20 4e 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68   NDEBUG./*.** Th
3f30: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f  is function is o
3f40: 6e 6c 79 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  nly called from 
3f50: 77 69 74 68 69 6e 20 61 6e 20 61 73 73 65 72 74  within an assert
3f60: 28 29 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 49  () expression. I
3f70: 74 0a 2a 2a 20 63 68 65 63 6b 73 20 74 68 61 74  t.** checks that
3f80: 20 74 68 65 20 73 71 6c 69 74 65 33 2e 6e 54 72   the sqlite3.nTr
3f90: 61 6e 73 61 63 74 69 6f 6e 20 76 61 72 69 61 62  ansaction variab
3fa0: 6c 65 20 69 73 20 63 6f 72 72 65 63 74 6c 79 20  le is correctly 
3fb0: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
3fc0: 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e  mber of non-tran
3fd0: 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
3fe0: 74 73 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ts currently in 
3ff0: 74 68 65 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c  the .** linked l
4000: 69 73 74 20 73 74 61 72 74 69 6e 67 20 61 74 20  ist starting at 
4010: 73 71 6c 69 74 65 33 2e 70 53 61 76 65 70 6f 69  sqlite3.pSavepoi
4020: 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65  nt..** .** Usage
4030: 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
4040: 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
4050: 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a  ntCount(db) );.*
4060: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68 65  /.static int che
4070: 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74  ckSavepointCount
4080: 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20  (sqlite3 *db){. 
4090: 20 69 6e 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61   int n = 0;.  Sa
40a0: 76 65 70 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f  vepoint *p;.  fo
40b0: 72 28 70 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  r(p=db->pSavepoi
40c0: 6e 74 3b 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78  nt; p; p=p->pNex
40d0: 74 29 20 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74  t) n++;.  assert
40e0: 28 20 6e 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70  ( n==(db->nSavep
40f0: 6f 69 6e 74 20 2b 20 64 62 2d 3e 69 73 54 72 61  oint + db->isTra
4100: 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
4110: 74 29 20 29 3b 0a 20 20 72 65 74 75 72 6e 20 31  t) );.  return 1
4120: 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  ;.}.#endif../*.*
4130: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 67  * Return the reg
4140: 69 73 74 65 72 20 6f 66 20 70 4f 70 2d 3e 70 32  ister of pOp->p2
4150: 20 61 66 74 65 72 20 66 69 72 73 74 20 70 72 65   after first pre
4160: 70 61 72 69 6e 67 20 69 74 20 74 6f 20 62 65 0a  paring it to be.
4170: 2a 2a 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77  ** overwritten w
4180: 69 74 68 20 61 6e 20 69 6e 74 65 67 65 72 20 76  ith an integer v
4190: 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  alue..*/.static 
41a0: 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20  SQLITE_NOINLINE 
41b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
41c0: 61 73 65 57 69 74 68 43 6c 65 61 72 28 4d 65 6d  aseWithClear(Mem
41d0: 20 2a 70 4f 75 74 29 7b 0a 20 20 73 71 6c 69 74   *pOut){.  sqlit
41e0: 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
41f0: 28 70 4f 75 74 29 3b 0a 20 20 70 4f 75 74 2d 3e  (pOut);.  pOut->
4200: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
4210: 0a 20 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a  .  return pOut;.
4220: 7d 0a 73 74 61 74 69 63 20 4d 65 6d 20 2a 6f 75  }.static Mem *ou
4230: 74 32 50 72 65 72 65 6c 65 61 73 65 28 56 64 62  t2Prerelease(Vdb
4240: 65 20 2a 70 2c 20 56 64 62 65 4f 70 20 2a 70 4f  e *p, VdbeOp *pO
4250: 70 29 7b 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 3b  p){.  Mem *pOut;
4260: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
4270: 70 32 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p2>0 );.  assert
4280: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
4290: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
42a0: 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 70 2d 3e  );.  pOut = &p->
42b0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
42c0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
42d0: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 69 66  e(p, pOut);.  if
42e0: 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
42f0: 28 70 4f 75 74 29 20 29 7b 0a 20 20 20 20 72 65  (pOut) ){.    re
4300: 74 75 72 6e 20 6f 75 74 32 50 72 65 72 65 6c 65  turn out2Prerele
4310: 61 73 65 57 69 74 68 43 6c 65 61 72 28 70 4f 75  aseWithClear(pOu
4320: 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
4330: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4340: 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 72 65 74 75  EM_Int;.    retu
4350: 72 6e 20 70 4f 75 74 3b 0a 20 20 7d 0a 7d 0a 0a  rn pOut;.  }.}..
4360: 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 61  ./*.** Execute a
4370: 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42 45  s much of a VDBE
4380: 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20 63   program as we c
4390: 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20 74  an..** This is t
43a0: 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69 74  he core of sqlit
43b0: 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f 0a  e3_step().  .*/.
43c0: 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 45  int sqlite3VdbeE
43d0: 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20 20  xec(.  Vdbe *p  
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43f0: 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a 2f    /* The VDBE */
4400: 0a 29 7b 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20  .){.  Op *aOp = 
4410: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
4420: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
4430: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 20  Op */.  Op *pOp 
4440: 3d 20 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  = aOp;          
4450: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
4460: 65 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 20 64  eration */.#if d
4470: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
4480: 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  BUG) || defined(
4490: 56 44 42 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20  VDBE_PROFILE).  
44a0: 4f 70 20 2a 70 4f 72 69 67 4f 70 3b 20 20 20 20  Op *pOrigOp;    
44b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
44c0: 6c 75 65 20 6f 66 20 70 4f 70 20 61 74 20 74 68  lue of pOp at th
44d0: 65 20 74 6f 70 20 6f 66 20 74 68 65 20 6c 6f 6f  e top of the loo
44e0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  p */.#endif.  in
44f0: 74 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b  t rc = SQLITE_OK
4500: 3b 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75  ;        /* Valu
4510: 65 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20  e to return */. 
4520: 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70   sqlite3 *db = p
4530: 2d 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54  ->db;       /* T
4540: 68 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20  he database */. 
4550: 20 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f   u8 resetSchemaO
4560: 6e 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52  nFault = 0; /* R
4570: 65 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65  eset schema afte
4580: 72 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f  r an error if po
4590: 73 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65  sitive */.  u8 e
45a0: 6e 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62  ncoding = ENC(db
45b0: 29 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61  );     /* The da
45c0: 74 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20  tabase encoding 
45d0: 2a 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72  */.  int iCompar
45e0: 65 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  e = 0;          
45f0: 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73  /* Result of las
4600: 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65  t OP_Compare ope
4610: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  ration */.  unsi
4620: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4630: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4640: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4650: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4660: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4670: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4680: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4690: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
46a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
46b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
46c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
46d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
46e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
46f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4700: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4710: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4720: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4730: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4740: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4750: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4760: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4770: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4780: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4790: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
47a0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
47b0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
47c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
47d0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
47e0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
47f0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4800: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4810: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4820: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4830: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4840: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4850: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4860: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4870: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4880: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4890: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
48a0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
48b0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
48c0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
48d0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
48e0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
48f0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4900: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4910: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4920: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4930: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4940: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4950: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4960: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4970: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4980: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4990: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
49a0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
49b0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
49c0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
49d0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
49e0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
49f0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4a00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4a10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4a20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4a30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4a40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4a50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4a60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4a70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4a80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4a90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4aa0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4ab0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4ac0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4ad0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4ae0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4af0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4b00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4b10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4b20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4b30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4b40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4b50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4b60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4b70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4b80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4b90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ba0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4bb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4bc0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4bd0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4be0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4bf0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4c00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4c10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4c20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4c30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4c40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4c50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4c60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4c70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4c80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4c90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4ca0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4cb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4cc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4cd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4ce0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4cf0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
4d00: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
4d10: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
4d20: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
4d30: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
4d40: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
4d50: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
4d60: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
4d70: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4d80: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
4d90: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
4da0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
4db0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
4dc0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
4dd0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
4de0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
4df0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
4e00: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
4e10: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
4e20: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
4e30: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
4e40: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
4e50: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
4e60: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
4e70: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
4e80: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
4e90: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
4ea0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
4eb0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
4ec0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
4ed0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
4ee0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
4ef0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
4f00: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
4f10: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 72  p=&aOp[p->pc]; r
4f20: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 4f  c==SQLITE_OK; pO
4f30: 70 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  p++){.    assert
4f40: 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f  ( pOp>=aOp && pO
4f50: 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b  p<&aOp[p->nOp]);
4f60: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c  .    if( db->mal
4f70: 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74 6f  locFailed ) goto
4f80: 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64 65 66 20   no_mem;.#ifdef 
4f90: 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 20 20 20  VDBE_PROFILE.   
4fa0: 20 73 74 61 72 74 20 3d 20 73 71 6c 69 74 65 33   start = sqlite3
4fb0: 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e 64 69 66  Hwtime();.#endif
4fc0: 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b 2b 3b 0a  .    nVmStep++;.
4fd0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
4fe0: 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
4ff0: 41 54 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e  ATUS.    if( p->
5000: 61 6e 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78  anExec ) p->anEx
5010: 65 63 5b 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70  ec[(int)(pOp-aOp
5020: 29 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  )]++;.#endif..  
5030: 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f 77 20    /* Only allow 
5040: 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c 49 54  tracing if SQLIT
5050: 45 5f 44 45 42 55 47 20 69 73 20 64 65 66 69 6e  E_DEBUG is defin
5060: 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65  ed..    */.#ifde
5070: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
5080: 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
5090: 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
50a0: 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ace ){.      sql
50b0: 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28  ite3VdbePrintOp(
50c0: 73 74 64 6f 75 74 2c 20 28 69 6e 74 29 28 70 4f  stdout, (int)(pO
50d0: 70 20 2d 20 61 4f 70 29 2c 20 70 4f 70 29 3b 0a  p - aOp), pOp);.
50e0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
50f0: 20 20 20 0a 0a 20 20 20 20 2f 2a 20 43 68 65 63     ..    /* Chec
5100: 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20 6e  k to see if we n
5110: 65 65 64 20 74 6f 20 73 69 6d 75 6c 61 74 65 20  eed to simulate 
5120: 61 6e 20 69 6e 74 65 72 72 75 70 74 2e 20 20 54  an interrupt.  T
5130: 68 69 73 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  his only happens
5140: 0a 20 20 20 20 2a 2a 20 69 66 20 77 65 20 68 61  .    ** if we ha
5150: 76 65 20 61 20 73 70 65 63 69 61 6c 20 74 65 73  ve a special tes
5160: 74 20 62 75 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a  t build..    */.
5170: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45  #ifdef SQLITE_TE
5180: 53 54 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ST.    if( sqlit
5190: 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75  e3_interrupt_cou
51a0: 6e 74 3e 30 20 29 7b 0a 20 20 20 20 20 20 73 71  nt>0 ){.      sq
51b0: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f  lite3_interrupt_
51c0: 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 69  count--;.      i
51d0: 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72  f( sqlite3_inter
51e0: 72 75 70 74 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b  rupt_count==0 ){
51f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5200: 5f 69 6e 74 65 72 72 75 70 74 28 64 62 29 3b 0a  _interrupt(db);.
5210: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65        }.    }.#e
5220: 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 53 61 6e  ndif..    /* San
5230: 69 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20  ity checking on 
5240: 6f 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a  other operands *
5250: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
5260: 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74  DEBUG.    assert
5270: 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d  ( pOp->opflags==
5280: 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
5290: 70 65 72 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64  perty[pOp->opcod
52a0: 65 5d 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70  e] );.    if( (p
52b0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
52c0: 46 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20  FLG_IN1)!=0 ){. 
52d0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
52e0: 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p1>0 );.      
52f0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c  assert( pOp->p1<
5300: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
5310: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
5320: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
5330: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  d(&aMem[pOp->p1]
5340: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
5350: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
5360: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
5370: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
5380: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
5390: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
53a0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  , &aMem[pOp->p1]
53b0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
53c0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
53d0: 20 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29   OPFLG_IN2)!=0 )
53e0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
53f0: 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20  pOp->p2>0 );.   
5400: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5410: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
5420: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5430: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5440: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5450: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p2]) );.      as
5460: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
5470: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
5480: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
5490: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  2]) );.      REG
54a0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
54b0: 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p2, &aMem[pOp->
54c0: 70 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p2]);.    }.    
54d0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
54e0: 73 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d  s & OPFLG_IN3)!=
54f0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
5500: 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
5510: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
5520: 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
5530: 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
5540: 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
5550: 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
5560: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5570: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5580: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5590: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
55a0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
55b0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
55c0: 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p3, &aMem[pO
55d0: 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20  p->p3]);.    }. 
55e0: 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66     if( (pOp->opf
55f0: 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54  lags & OPFLG_OUT
5600: 32 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61  2)!=0 ){.      a
5610: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5620: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5630: 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e  ( pOp->p2<=(p->n
5640: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
5650: 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  );.      memAbou
5660: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5670: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
5680: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5690: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
56a0: 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20  G_OUT3)!=0 ){.  
56b0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56c0: 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p3>0 );.      a
56d0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
56e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
56f0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
5700: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5710: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5720: 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
5730: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
5740: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
5750: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
5760: 45 29 0a 20 20 20 20 70 4f 72 69 67 4f 70 20 3d  E).    pOrigOp =
5770: 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a 20 20 0a   pOp;.#endif.  .
5780: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5790: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
57a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
57e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
57f0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
5800: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
5810: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
5820: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
5830: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
5840: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5850: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5860: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5870: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5880: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5890: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
58a0: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
58b0: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
58c0: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
58d0: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
58e0: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
58f0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
5900: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
5910: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
5920: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
5930: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
5940: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5950: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5960: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5970: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5980: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5990: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
59a0: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
59b0: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
59c0: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
59d0: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
59e0: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
59f0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
5a00: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
5a10: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
5a20: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
5a30: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
5a40: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5a50: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5a60: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5a70: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5a80: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5a90: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5aa0: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5ab0: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5ac0: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5ad0: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5ae0: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
5af0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
5b00: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
5b10: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
5b20: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
5b30: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
5b40: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5b50: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5b60: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5b70: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5b80: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5b90: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5ba0: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5bb0: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5bc0: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5bd0: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5be0: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
5bf0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
5c00: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
5c10: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
5c20: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
5c30: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
5c40: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5c50: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5c60: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5c70: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5c80: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5c90: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5ca0: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5cb0: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5cc0: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5cd0: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 2c 20 6f  n2, in3, out2, o
5ce0: 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68 65  ut3.  See.** the
5cf0: 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20 73   mkopcodeh.awk s
5d00: 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74 69  cript for additi
5d10: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
5d20: 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e 74  ..**.** Document
5d30: 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42 45  ation about VDBE
5d40: 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e 65   opcodes is gene
5d50: 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69 6e  rated by scannin
5d60: 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20 66  g this file.** f
5d70: 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61 74  or lines of that
5d80: 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64 65   contain "Opcode
5d90: 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20 61  :".  That line a
5da0: 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e  nd all subsequen
5db0: 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69 6e  t.** comment lin
5dc0: 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20 74  es are used in t
5dd0: 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66  he generation of
5de0: 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d 6c   the opcode.html
5df0: 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a 2a   documentation.*
5e00: 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 55  * file..**.** SU
5e10: 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  MMARY:.**.**    
5e20: 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20 69   Formatting is i
5e30: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72 69  mportant to scri
5e40: 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74 68  pts that scan th
5e50: 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20 20  is file..**     
5e60: 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66  Do not deviate f
5e70: 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74 69  rom the formatti
5e80: 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e 74  ng style current
5e90: 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a 2a  ly in use..**.**
5ea0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5eb0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
5ef0: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20 2a   Opcode:  Goto *
5f00: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
5f10: 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61 6c  An unconditional
5f20: 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73   jump to address
5f30: 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78 74   P2..** The next
5f40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78 65   instruction exe
5f50: 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a 2a  cuted will be .*
5f60: 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e 64  * the one at ind
5f70: 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20 62  ex P2 from the b
5f80: 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20 74  eginning of.** t
5f90: 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a  he program..**.*
5fa0: 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65 74  * The P1 paramet
5fb0: 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61 6c  er is not actual
5fc0: 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ly used by this 
5fd0: 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65 72  opcode.  However
5fe0: 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65 74  , it.** is somet
5ff0: 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69 6e  imes set to 1 in
6000: 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61 20  stead of 0 as a 
6010: 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d 6d  hint to the comm
6020: 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a 2a  and-line shell.*
6030: 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74 6f  * that this Goto
6040: 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f   is the bottom o
6050: 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68 61  f a loop and tha
6060: 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f 6d  t the lines from
6070: 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20 74   P2 down.** to t
6080: 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65 20  he current line 
6090: 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e 74  should be indent
60a0: 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ed for EXPLAIN o
60b0: 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
60c0: 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20 20  P_Goto: {       
60d0: 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
60e0: 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f  .jump_to_p2_and_
60f0: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
6100: 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20 26 61 4f  upt:.  pOp = &aO
6110: 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a  p[pOp->p2 - 1];.
6120: 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68  .  /* Opcodes th
6130: 61 74 20 61 72 65 20 75 73 65 64 20 61 73 20 74  at are used as t
6140: 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c  he bottom of a l
6150: 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50  oop (OP_Next, OP
6160: 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56  _Prev,.  ** OP_V
6170: 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e  Next, OP_RowSetN
6180: 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65  ext, or OP_Sorte
6190: 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20  rNext) all jump 
61a0: 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63  here upon.  ** c
61b0: 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63  ompletion.  Chec
61c0: 6b 20 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69  k to see if sqli
61d0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20  te3_interrupt() 
61e0: 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a  has been called.
61f0: 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70    ** or if the p
6200: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
6210: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76   needs to be inv
6220: 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a  oked. .  **.  **
6230: 20 54 68 69 73 20 63 6f 64 65 20 75 73 65 73 20   This code uses 
6240: 75 6e 73 74 72 75 63 74 75 72 65 64 20 22 67 6f  unstructured "go
6250: 74 6f 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61  to" statements a
6260: 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b  nd does not look
6270: 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74   clean..  ** But
6280: 20 74 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65   that is not due
6290: 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e   to sloppy codin
62a0: 67 20 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f  g habits. The co
62b0: 64 65 20 69 73 20 77 72 69 74 74 65 6e 20 74 68  de is written th
62c0: 69 73 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20  is.  ** way for 
62d0: 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20  performance, to 
62e0: 61 76 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20  avoid having to 
62f0: 72 75 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70  run the interrup
6300: 74 20 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20  t and progress. 
6310: 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76   ** checks on ev
6320: 65 72 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69  ery opcode.  Thi
6330: 73 20 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f  s helps sqlite3_
6340: 73 74 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62  step() to run ab
6350: 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61  out 1.5%.  ** fa
6360: 73 74 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74  ster according t
6370: 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f  o "valgrind --to
6380: 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a  ol=cachegrind" *
6390: 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  /.check_for_inte
63a0: 72 72 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d  rrupt:.  if( db-
63b0: 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65  >u1.isInterrupte
63c0: 64 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  d ) goto abort_d
63d0: 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b  ue_to_interrupt;
63e0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
63f0: 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41  OMIT_PROGRESS_CA
6400: 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c  LLBACK.  /* Call
6410: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
6420: 6c 6c 62 61 63 6b 20 69 66 20 69 74 20 69 73 20  llback if it is 
6430: 63 6f 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74  configured and t
6440: 68 65 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62  he required numb
6450: 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20  er.  ** of VDBE 
6460: 6f 70 73 20 68 61 76 65 20 62 65 65 6e 20 65 78  ops have been ex
6470: 65 63 75 74 65 64 20 28 65 69 74 68 65 72 20 73  ecuted (either s
6480: 69 6e 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61  ince this invoca
6490: 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c  tion of.  ** sql
64a0: 69 74 65 33 56 64 62 65 45 78 65 63 28 29 20 6f  ite3VdbeExec() o
64b0: 72 20 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d  r since last tim
64c0: 65 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  e the progress c
64d0: 61 6c 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c  allback was call
64e0: 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ed)..  ** If the
64f0: 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61   progress callba
6500: 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a  ck returns non-z
6510: 65 72 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69  ero, exit the vi
6520: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69  rtual machine wi
6530: 74 68 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e  th.  ** a return
6540: 20 63 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f   code SQLITE_ABO
6550: 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64  RT..  */.  if( d
6560: 62 2d 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20  b->xProgress!=0 
6570: 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f  && nVmStep>=nPro
6580: 67 72 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20  gressLimit ){.  
6590: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50    assert( db->nP
65a0: 72 6f 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b  rogressOps!=0 );
65b0: 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69  .    nProgressLi
65c0: 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20  mit = nVmStep + 
65d0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
65e0: 20 2d 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e   - (nVmStep%db->
65f0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
6600: 20 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67     if( db->xProg
6610: 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65  ress(db->pProgre
6620: 73 73 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20  ssArg) ){.      
6630: 72 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45  rc = SQLITE_INTE
6640: 52 52 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  RRUPT;.      got
6650: 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  o vdbe_error_hal
6660: 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e  t;.    }.  }.#en
6670: 64 69 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a  dif.  .  break;.
6680: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47  }../* Opcode:  G
6690: 6f 73 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a  osub P1 P2 * * *
66a0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65  .**.** Write the
66b0: 20 63 75 72 72 65 6e 74 20 61 64 64 72 65 73 73   current address
66c0: 20 6f 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   onto register P
66d0: 31 0a 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75  1.** and then ju
66e0: 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50 32  mp to address P2
66f0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73  ..*/.case OP_Gos
6700: 75 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ub: {           
6710: 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73   /* jump */.  as
6720: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
6730: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
6740: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
6750: 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
6760: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
6770: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
6780: 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29  namic(pIn1)==0 )
6790: 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
67a0: 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20  ange(p, pIn1);. 
67b0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d   pIn1->flags = M
67c0: 45 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e  EM_Int;.  pIn1->
67d0: 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d  u.i = (int)(pOp-
67e0: 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52  aOp);.  REGISTER
67f0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20  _TRACE(pOp->p1, 
6800: 70 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73  pIn1);..  /* Mos
6810: 74 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e  t jump operation
6820: 73 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74  s do a goto to t
6830: 68 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65  his spot in orde
6840: 72 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a  r to update.  **
6850: 20 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72   the pOp pointer
6860: 2e 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a  . */.jump_to_p2:
6870: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f  .  pOp = &aOp[pO
6880: 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72  p->p2 - 1];.  br
6890: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
68a0: 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20  e:  Return P1 * 
68b0: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  * * *.**.** Jump
68c0: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
68d0: 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74  truction after t
68e0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
68f0: 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65  gister P1.  Afte
6900: 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72  r.** the jump, r
6910: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
6920: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f  es undefined..*/
6930: 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a  .case OP_Return:
6940: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
6950: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
6960: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6970: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6980: 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29  flags==MEM_Int )
6990: 3b 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  ;.  pOp = &aOp[p
69a0: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e  In1->u.i];.  pIn
69b0: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
69c0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
69d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
69e0: 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50   InitCoroutine P
69f0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
6a00: 2a 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65  * Set up registe
6a10: 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20  r P1 so that it 
6a20: 77 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68  will Yield to th
6a30: 65 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c  e coroutine.** l
6a40: 6f 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73  ocated at addres
6a50: 73 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  s P3..**.** If P
6a60: 32 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f  2!=0 then the co
6a70: 72 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e  routine implemen
6a80: 74 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65  tation immediate
6a90: 6c 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68  ly follows.** th
6aa0: 69 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a  is opcode.  So j
6ab0: 75 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72  ump over the cor
6ac0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6ad0: 61 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72  ation to.** addr
6ae0: 65 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65  ess P2..**.** Se
6af0: 65 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75  e also: EndCorou
6b00: 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  tine.*/.case OP_
6b10: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b  InitCoroutine: {
6b20: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
6b30: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6b40: 31 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c  1>0 &&  pOp->p1<
6b50: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
6b60: 72 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72  rsor) );.  asser
6b70: 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26  t( pOp->p2>=0 &&
6b80: 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20   pOp->p2<p->nOp 
6b90: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
6ba0: 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p3>=0 && pOp->
6bb0: 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p3<p->nOp );.  p
6bc0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
6bd0: 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
6be0: 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28  !VdbeMemDynamic(
6bf0: 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d  pOut) );.  pOut-
6c00: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d  >u.i = pOp->p3 -
6c10: 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   1;.  pOut->flag
6c20: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69  s = MEM_Int;.  i
6c30: 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74  f( pOp->p2 ) got
6c40: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
6c50: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6c60: 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69  ode:  EndCorouti
6c70: 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ne P1 * * * *.**
6c80: 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74  .** The instruct
6c90: 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65  ion at the addre
6ca0: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
6cb0: 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a  1 is a Yield..**
6cc0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20   Jump to the P2 
6cd0: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61  parameter of tha
6ce0: 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65  t Yield..** Afte
6cf0: 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  r the jump, regi
6d00: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6d10: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
6d20: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
6d30: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6d40: 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65   OP_EndCoroutine
6d50: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6d60: 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70   in1 */.  VdbeOp
6d70: 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e   *pCaller;.  pIn
6d80: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
6d90: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
6da0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
6db0: 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
6dc0: 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20  pIn1->u.i>=0 && 
6dd0: 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70  pIn1->u.i<p->nOp
6de0: 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20   );.  pCaller = 
6df0: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6e00: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6e10: 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59  er->opcode==OP_Y
6e20: 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ield );.  assert
6e30: 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30  ( pCaller->p2>=0
6e40: 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c   && pCaller->p2<
6e50: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20  p->nOp );.  pOp 
6e60: 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e  = &aOp[pCaller->
6e70: 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d  p2 - 1];.  pIn1-
6e80: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
6e90: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
6ea0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6eb0: 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20  Yield P1 P2 * * 
6ec0: 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65  *.**.** Swap the
6ed0: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
6ee0: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
6ef0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  in register P1. 
6f00: 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65   This.** has the
6f10: 20 65 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64   effect of yield
6f20: 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69  ing to a corouti
6f30: 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ne..**.** If the
6f40: 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20   coroutine that 
6f50: 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74  is launched by t
6f60: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
6f70: 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65  ends with.** Yie
6f80: 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65  ld or Return the
6f90: 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68  n continue to th
6fa0: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6fb0: 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74  on.  But if.** t
6fc0: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75  he coroutine lau
6fd0: 6e 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e  nched by this in
6fe0: 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77  struction ends w
6ff0: 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74  ith.** EndCorout
7000: 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ine, then jump t
7010: 6f 20 50 32 20 72 61 74 68 65 72 20 74 68 61 6e  o P2 rather than
7020: 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68   continuing with
7030: 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73   the.** next ins
7040: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  truction..**.** 
7050: 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f  See also: InitCo
7060: 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20  routine.*/.case 
7070: 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20  OP_Yield: {     
7080: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a         /* in1, j
7090: 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44  ump */.  int pcD
70a0: 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  est;.  pIn1 = &a
70b0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
70c0: 61 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44  assert( VdbeMemD
70d0: 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20  ynamic(pIn1)==0 
70e0: 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73  );.  pIn1->flags
70f0: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63   = MEM_Int;.  pc
7100: 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31  Dest = (int)pIn1
7110: 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75  ->u.i;.  pIn1->u
7120: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  .i = (int)(pOp -
7130: 20 61 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45   aOp);.  REGISTE
7140: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
7150: 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20   pIn1);.  pOp = 
7160: 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20  &aOp[pcDest];.  
7170: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
7180: 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c  ode:  HaltIfNull
7190: 20 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35    P1 P2 P3 P4 P5
71a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69  .** Synopsis:  i
71b0: 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c  f r[P3]=null hal
71c0: 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  t.**.** Check th
71d0: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
71e0: 74 65 72 20 50 33 2e 20 20 49 66 20 69 74 20 69  ter P3.  If it i
71f0: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74  s NULL then Halt
7200: 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65   using.** parame
7210: 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20  ter P1, P2, and 
7220: 50 34 20 61 73 20 69 66 20 74 68 69 73 20 77 65  P4 as if this we
7230: 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75  re a Halt instru
7240: 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a  ction.  If the.*
7250: 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  * value in regis
7260: 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55  ter P3 is not NU
7270: 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f  LL, then this ro
7280: 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70  utine is a no-op
7290: 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61  ..** The P5 para
72a0: 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20  meter should be 
72b0: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61  1..*/.case OP_Ha
72c0: 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  ltIfNull: {     
72d0: 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e   /* in3 */.  pIn
72e0: 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
72f0: 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d  3];.  if( (pIn3-
7300: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
7310: 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20  l)==0 ) break;. 
7320: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
7330: 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f   into OP_Halt */
7340: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
7350: 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20  Halt P1 P2 * P4 
7360: 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d  P5.**.** Exit im
7370: 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20  mediately.  All 
7380: 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74  open cursors, et
7390: 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20  c are closed.** 
73a0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a  automatically..*
73b0: 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72  *.** P1 is the r
73c0: 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72  esult code retur
73d0: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65  ned by sqlite3_e
73e0: 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72  xec(), sqlite3_r
73f0: 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71  eset(),.** or sq
7400: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29  lite3_finalize()
7410: 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20  .  For a normal 
7420: 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c  halt, this shoul
7430: 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28  d be SQLITE_OK (
7440: 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72  0)..** For error
7450: 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d  s, it can be som
7460: 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20  e other value.  
7470: 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32  If P1!=0 then P2
7480: 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a   will determine.
7490: 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ** whether or no
74a0: 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68  t to rollback th
74b0: 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
74c0: 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72  ction.  Do not r
74d0: 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32  ollback.** if P2
74e0: 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68  ==OE_Fail. Do th
74f0: 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32  e rollback if P2
7500: 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20  ==OE_Rollback.  
7510: 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c  If P2==OE_Abort,
7520: 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75  .** then back ou
7530: 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68  t all changes th
7540: 61 74 20 68 61 76 65 20 6f 63 63 75 72 72 65 64  at have occurred
7550: 20 64 75 72 69 6e 67 20 74 68 69 73 20 65 78 65   during this exe
7560: 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  cution of the.**
7570: 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f   VDBE, but do no
7580: 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74  t rollback the t
7590: 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a  ransaction. .**.
75a0: 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20  ** If P4 is not 
75b0: 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20  null then it is 
75c0: 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
75d0: 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50   string..**.** P
75e0: 35 20 69 73 20 61 20 76 61 6c 75 65 20 62 65 74  5 is a value bet
75f0: 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e  ween 0 and 4, in
7600: 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f  clusive, that mo
7610: 64 69 66 69 65 73 20 74 68 65 20 50 34 20 73 74  difies the P4 st
7620: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ring..**.**    0
7630: 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a  :  (no change).*
7640: 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c  *    1:  NOT NUL
7650: 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c  L contraint fail
7660: 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20  ed: P4.**    2: 
7670: 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69   UNIQUE constrai
7680: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7690: 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f      3:  CHECK co
76a0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
76b0: 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f   P4.**    4:  FO
76c0: 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72  REIGN KEY constr
76d0: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
76e0: 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
76f0: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69  ot zero and P4 i
7700: 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65  s NULL, then eve
7710: 72 79 74 68 69 6e 67 20 61 66 74 65 72 20 74 68  rything after th
7720: 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74  e ":" is.** omit
7730: 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  ted..**.** There
7740: 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22   is an implied "
7750: 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74  Halt 0 0 0" inst
7760: 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64  ruction inserted
7770: 20 61 74 20 74 68 65 20 76 65 72 79 20 65 6e 64   at the very end
7780: 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f   of.** every pro
7790: 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70  gram.  So a jump
77a0: 20 70 61 73 74 20 74 68 65 20 6c 61 73 74 20 69   past the last i
77b0: 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68  nstruction of th
77c0: 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20  e program.** is 
77d0: 74 68 65 20 73 61 6d 65 20 61 73 20 65 78 65 63  the same as exec
77e0: 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63  uting Halt..*/.c
77f0: 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20  ase OP_Halt: {. 
7800: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79   const char *zTy
7810: 70 65 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  pe;.  const char
7820: 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 20 20 56 64 62   *zLogFmt;.  Vdb
7830: 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a  eFrame *pFrame;.
7840: 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70 63    int pcx;..  pc
7850: 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  x = (int)(pOp - 
7860: 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  aOp);.  if( pOp-
7870: 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26  >p1==SQLITE_OK &
7880: 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20  & p->pFrame ){. 
7890: 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20 73     /* Halt the s
78a0: 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74 75  ub-program. Retu
78b0: 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68  rn control to th
78c0: 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e 20  e parent frame. 
78d0: 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20  */.    pFrame = 
78e0: 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70  p->pFrame;.    p
78f0: 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d  ->pFrame = pFram
7900: 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20  e->pParent;.    
7910: 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20  p->nFrame--;.   
7920: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
7930: 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43  hanges(db, p->nC
7940: 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78 20  hange);.    pcx 
7950: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 61  = sqlite3VdbeFra
7960: 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65  meRestore(pFrame
7970: 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64  );.    lastRowid
7980: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
7990: 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
79a0: 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a  2==OE_Ignore ){.
79b0: 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63        /* Instruc
79c0: 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65 20  tion pcx is the 
79d0: 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74 20  OP_Program that 
79e0: 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62 2d  invoked the sub-
79f0: 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20 2a  program .      *
7a00: 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e  * currently bein
7a10: 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68 65  g halted. If the
7a20: 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   p2 instruction 
7a30: 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a  of this OP_Halt.
7a40: 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75 63        ** instruc
7a50: 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20 4f  tion is set to O
7a60: 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74  E_Ignore, then t
7a70: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 69  he sub-program i
7a80: 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20 20  s throwing.     
7a90: 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65 78   ** an IGNORE ex
7aa0: 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73  ception. In this
7ab0: 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74 68   case jump to th
7ac0: 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69 66  e address specif
7ad0: 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ied.      ** as 
7ae0: 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63 61  the p2 of the ca
7af0: 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d  lling OP_Program
7b00: 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78 20  .  */.      pcx 
7b10: 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70 32  = p->aOp[pcx].p2
7b20: 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 4f  -1;.    }.    aO
7b30: 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20  p = p->aOp;.    
7b40: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a  aMem = p->aMem;.
7b50: 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70      pOp = &aOp[p
7b60: 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  cx];.    break;.
7b70: 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70 4f    }.  p->rc = pO
7b80: 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72 6f  p->p1;.  p->erro
7b90: 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70 4f  rAction = (u8)pO
7ba0: 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20 3d  p->p2;.  p->pc =
7bb0: 20 70 63 78 3b 0a 20 20 69 66 28 20 70 2d 3e 72   pcx;.  if( p->r
7bc0: 63 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  c ){.    if( pOp
7bd0: 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74  ->p5 ){.      st
7be0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
7bf0: 2a 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d  * const azType[]
7c00: 20 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c   = { "NOT NULL",
7c10: 20 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43   "UNIQUE", "CHEC
7c20: 4b 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  K",.            
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c50: 20 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d   "FOREIGN KEY" }
7c60: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
7c70: 70 4f 70 2d 3e 70 35 3e 3d 31 20 26 26 20 70 4f  pOp->p5>=1 && pO
7c80: 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 20 20  p->p5<=4 );.    
7c90: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7ca0: 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20  >p5==1 );.      
7cb0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
7cc0: 35 3d 3d 32 20 29 3b 0a 20 20 20 20 20 20 74 65  5==2 );.      te
7cd0: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d  stcase( pOp->p5=
7ce0: 3d 33 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74  =3 );.      test
7cf0: 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34  case( pOp->p5==4
7d00: 20 29 3b 0a 20 20 20 20 20 20 7a 54 79 70 65 20   );.      zType 
7d10: 3d 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70 35  = azType[pOp->p5
7d20: 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  -1];.    }else{.
7d30: 20 20 20 20 20 20 7a 54 79 70 65 20 3d 20 30 3b        zType = 0;
7d40: 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72  .    }.    asser
7d50: 74 28 20 7a 54 79 70 65 21 3d 30 20 7c 7c 20 70  t( zType!=0 || p
7d60: 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20  Op->p4.z!=0 );. 
7d70: 20 20 20 7a 4c 6f 67 46 6d 74 20 3d 20 22 61 62     zLogFmt = "ab
7d80: 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25 73  ort at %d in [%s
7d90: 5d 3a 20 25 73 22 3b 0a 20 20 20 20 69 66 28 20  ]: %s";.    if( 
7da0: 7a 54 79 70 65 20 26 26 20 70 4f 70 2d 3e 70 34  zType && pOp->p4
7db0: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  .z ){.      sqli
7dc0: 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20  te3VdbeError(p, 
7dd0: 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20 66  "%s constraint f
7de0: 61 69 6c 65 64 3a 20 25 73 22 2c 20 7a 54 79 70  ailed: %s", zTyp
7df0: 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  e, pOp->p4.z);. 
7e00: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70     }else if( pOp
7e10: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7e20: 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
7e30: 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70  (p, "%s", pOp->p
7e40: 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  4.z);.    }else{
7e50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7e60: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63  beError(p, "%s c
7e70: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
7e80: 22 2c 20 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d  ", zType);.    }
7e90: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67  .    sqlite3_log
7ea0: 28 70 4f 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d  (pOp->p1, zLogFm
7eb0: 74 2c 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c  t, pcx, p->zSql,
7ec0: 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20   p->zErrMsg);.  
7ed0: 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
7ee0: 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61  VdbeHalt(p);.  a
7ef0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7f00: 45 5f 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51  E_BUSY || rc==SQ
7f10: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53  LITE_OK || rc==S
7f20: 51 4c 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20  QLITE_ERROR );. 
7f30: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
7f40: 42 55 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72  BUSY ){.    p->r
7f50: 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
7f60: 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  BUSY;.  }else{. 
7f70: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7f80: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e  QLITE_OK || (p->
7f90: 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45  rc&0xff)==SQLITE
7fa0: 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a 20  _CONSTRAINT );. 
7fb0: 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
7fc0: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e  QLITE_OK || db->
7fd0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30 20  nDeferredCons>0 
7fe0: 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  || db->nDeferred
7ff0: 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20 20  ImmCons>0 );.   
8000: 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53 51   rc = p->rc ? SQ
8010: 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51 4c  LITE_ERROR : SQL
8020: 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20  ITE_DONE;.  }.  
8030: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
8040: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
8050: 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a 20  Integer P1 P2 * 
8060: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
8070: 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20   r[P2]=P1.**.** 
8080: 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65 67  The 32-bit integ
8090: 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20 77  er value P1 is w
80a0: 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67 69  ritten into regi
80b0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
80c0: 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20 20   OP_Integer: {  
80d0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
80e0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
80f0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8100: 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
8110: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
8120: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
8130: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
8140: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
8150: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
8160: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
8170: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
8180: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
8190: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
81a0: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
81b0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
81c0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
81d0: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20   out2 */.  pOut 
81e0: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
81f0: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
8200: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
8210: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
8220: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
8230: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
8240: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
8250: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
8260: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
8270: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
8280: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
8290: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
82a0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
82b0: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
82c0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
82d0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
82e0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
82f0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
8300: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
8310: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
8320: 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20 20  LOAT, out2 */.  
8330: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8340: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8350: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8360: 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65 72  EM_Real;.  asser
8370: 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61 4e  t( !sqlite3IsNaN
8380: 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c 29  (*pOp->p4.pReal)
8390: 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72 20   );.  pOut->u.r 
83a0: 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  = *pOp->p4.pReal
83b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
83c0: 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  dif../* Opcode: 
83d0: 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20 50  String8 * P2 * P
83e0: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
83f0: 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a 2a   r[P2]='P4'.**.*
8400: 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20 61  * P4 points to a
8410: 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64 20   nul terminated 
8420: 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54 68  UTF-8 string. Th
8430: 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72 61  is opcode is tra
8440: 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e 74  nsformed .** int
8450: 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f 64  o a String opcod
8460: 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 65  e before it is e
8470: 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65 20  xecuted for the 
8480: 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72  first time.  Dur
8490: 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e  ing.** this tran
84a0: 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20  sformation, the 
84b0: 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67  length of string
84c0: 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20   P4 is computed 
84d0: 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73  and stored.** as
84e0: 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74 65   the P1 paramete
84f0: 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  r..*/.case OP_St
8500: 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20  ring8: {        
8510: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
8520: 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a 20  TRING, out2 */. 
8530: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
8540: 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20  .z!=0 );.  pOut 
8550: 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
8560: 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70 2d  (p, pOp);.  pOp-
8570: 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72  >opcode = OP_Str
8580: 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d  ing;.  pOp->p1 =
8590: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
85a0: 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69  (pOp->p4.z);..#i
85b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
85c0: 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e  T_UTF16.  if( en
85d0: 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55  coding!=SQLITE_U
85e0: 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  TF8 ){.    rc = 
85f0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
8600: 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e  tStr(pOut, pOp->
8610: 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45  p4.z, -1, SQLITE
8620: 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54  _UTF8, SQLITE_ST
8630: 41 54 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72  ATIC);.    if( r
8640: 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47  c==SQLITE_TOOBIG
8650: 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b   ) goto too_big;
8660: 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f  .    if( SQLITE_
8670: 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43  OK!=sqlite3VdbeC
8680: 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f  hangeEncoding(pO
8690: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20  ut, encoding) ) 
86a0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20  goto no_mem;.   
86b0: 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73   assert( pOut->s
86c0: 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75  zMalloc>0 && pOu
86d0: 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74  t->zMalloc==pOut
86e0: 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ->z );.    asser
86f0: 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69  t( VdbeMemDynami
8700: 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20  c(pOut)==0 );.  
8710: 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63    pOut->szMalloc
8720: 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e   = 0;.    pOut->
8730: 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61  flags |= MEM_Sta
8740: 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  tic;.    if( pOp
8750: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e  ->p4type==P4_DYN
8760: 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71  AMIC ){.      sq
8770: 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
8780: 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20  pOp->p4.z);.    
8790: 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70  }.    pOp->p4typ
87a0: 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a  e = P4_DYNAMIC;.
87b0: 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20      pOp->p4.z = 
87c0: 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70  pOut->z;.    pOp
87d0: 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a  ->p1 = pOut->n;.
87e0: 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28    }.#endif.  if(
87f0: 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69   pOp->p1>db->aLi
8800: 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
8810: 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
8820: 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
8830: 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  }.  /* Fall thro
8840: 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
8850: 63 61 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20  case, OP_String 
8860: 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64  */.}.  ./* Opcod
8870: 65 3a 20 53 74 72 69 6e 67 20 50 31 20 50 32 20  e: String P1 P2 
8880: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
8890: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27  psis: r[P2]='P4'
88a0: 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20   (len=P1).**.** 
88b0: 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65  The string value
88c0: 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31   P4 of length P1
88d0: 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f 72   (bytes) is stor
88e0: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
88f0: 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  2..**.** If P5!=
8900: 30 20 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e  0 and the conten
8910: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
8920: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
8930: 20 7a 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74   zero, then.** t
8940: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8950: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8960: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8970: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8980: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8990: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
89a0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
89b0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
89c0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
89d0: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
89e0: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
89f0: 20 43 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f   CAST..*/.case O
8a00: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
8a10: 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
8a20: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8a30: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8a40: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8a50: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75  e(p, pOp);.  pOu
8a60: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 53  t->flags = MEM_S
8a70: 74 72 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  tr|MEM_Static|ME
8a80: 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e  M_Term;.  pOut->
8a90: 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
8aa0: 20 70 4f 75 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e   pOut->n = pOp->
8ab0: 70 31 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20  p1;.  pOut->enc 
8ac0: 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50  = encoding;.  UP
8ad0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
8ae0: 45 28 70 4f 75 74 29 3b 0a 23 69 66 6e 64 65 66  E(pOut);.#ifndef
8af0: 20 53 51 4c 49 54 45 5f 4c 49 4b 45 5f 44 4f 45   SQLITE_LIKE_DOE
8b00: 53 4e 54 5f 4d 41 54 43 48 5f 42 4c 4f 42 53 0a  SNT_MATCH_BLOBS.
8b10: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b    if( pOp->p5 ){
8b20: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
8b30: 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61 73  ->p3>0 );.    as
8b40: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
8b50: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8b60: 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33 20  or) );.    pIn3 
8b70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
8b80: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49  ;.    assert( pI
8b90: 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
8ba0: 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20 70  Int );.    if( p
8bb0: 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74 2d  In3->u.i ) pOut-
8bc0: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
8bd0: 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d  b|MEM_Static|MEM
8be0: 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e 64 69  _Term;.  }.#endi
8bf0: 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  f.  break;.}../*
8c00: 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31   Opcode: Null P1
8c10: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
8c20: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50  nopsis:  r[P2..P
8c30: 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72  3]=NULL.**.** Wr
8c40: 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20  ite a NULL into 
8c50: 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20 49  registers P2.  I
8c60: 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68 61  f P3 greater tha
8c70: 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20  n P2, then also 
8c80: 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e  write.** NULL in
8c90: 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20 61  to register P3 a
8ca0: 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74 65  nd every registe
8cb0: 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20  r in between P2 
8cc0: 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a  and P3.  If P3.*
8cd0: 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50  * is less than P
8ce0: 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20  2 (typically P3 
8cf0: 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e  is zero) then on
8d00: 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20 69  ly register P2 i
8d10: 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c  s.** set to NULL
8d20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
8d30: 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a  1 value is non-z
8d40: 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73  ero, then also s
8d50: 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72  et the MEM_Clear
8d60: 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a  ed flag so that.
8d70: 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77  ** NULL values w
8d80: 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20  ill not compare 
8d90: 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51  equal even if SQ
8da0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
8db0: 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f  et on.** OP_Ne o
8dc0: 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65  r OP_Eq..*/.case
8dd0: 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20   OP_Null: {     
8de0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
8df0: 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75 31  .  int cnt;.  u1
8e00: 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70 4f  6 nullFlag;.  pO
8e10: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
8e20: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 63  ase(p, pOp);.  c
8e30: 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f 70  nt = pOp->p3-pOp
8e40: 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
8e50: 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
8e60: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
8e70: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
8e80: 20 6e 75 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d   nullFlag = pOp-
8e90: 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c  >p1 ? (MEM_Null|
8ea0: 4d 45 4d 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d  MEM_Cleared) : M
8eb0: 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77 68 69 6c 65  EM_Null;.  while
8ec0: 28 20 63 6e 74 3e 30 20 29 7b 0a 20 20 20 20 70  ( cnt>0 ){.    p
8ed0: 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d 65 6d 41 62  Out++;.    memAb
8ee0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
8ef0: 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Out);.    sqlite
8f00: 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
8f10: 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  pOut);.    pOut-
8f20: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
8f30: 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20  g;.    cnt--;.  
8f40: 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
8f50: 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c   Opcode: SoftNul
8f60: 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20  l P1 * * * *.** 
8f70: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31 5d  Synopsis:  r[P1]
8f80: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20  =NULL.**.** Set 
8f90: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 68  register P1 to h
8fa0: 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e 55  ave the value NU
8fb0: 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74 68  LL as seen by th
8fc0: 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 0a  e OP_MakeRecord.
8fd0: 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  ** instruction, 
8fe0: 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65 20  but do not free 
8ff0: 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62 6c  any string or bl
9000: 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69  ob memory associ
9010: 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68 65  ated with.** the
9020: 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74 68   register, so th
9030: 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  at if the value 
9040: 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20  was a string or 
9050: 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a 2a  blob that was.**
9060: 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70 69   previously copi
9070: 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f 70  ed using OP_SCop
9080: 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77 69  y, the copies wi
9090: 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 62  ll continue to b
90a0: 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65  e valid..*/.case
90b0: 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a   OP_SoftNull: {.
90c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
90d0: 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
90e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
90f0: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
9100: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
9110: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
9120: 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45   (pOut->flags|ME
9130: 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64  M_Null)&~MEM_Und
9140: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
9150: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9160: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9170: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9180: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9190: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
91a0: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
91b0: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
91c0: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
91d0: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
91e0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
91f0: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
9200: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9210: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
9220: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
9230: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
9240: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
9250: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9260: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9270: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9280: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9290: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
92a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
92b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
92c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
92d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
92e0: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
92f0: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
9300: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
9310: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
9320: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
9330: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
9340: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
9350: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9360: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9370: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9380: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9390: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
93a0: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
93b0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
93c0: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
93d0: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
93e0: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
93f0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
9400: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
9410: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
9420: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
9430: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
9440: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
9450: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9460: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9470: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9480: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9490: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
94a0: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
94b0: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
94c0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
94d0: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
94e0: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
94f0: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74    }.  pOut = out
9500: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9510: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9520: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
9530: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
9540: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
9550: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9560: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9570: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9580: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9590: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
95a0: 50 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a  P2@P3]=r[P1@P3].
95b0: 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50  **.** Move the P
95c0: 33 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  3 values in regi
95d0: 73 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ster P1..P1+P3-1
95e0: 20 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65   over into.** re
95f0: 67 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50  gisters P2..P2+P
9600: 33 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20  3-1.  Registers 
9610: 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a  P1..P1+P3-1 are.
9620: 2a 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20  ** left holding 
9630: 61 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61  a NULL.  It is a
9640: 6e 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69  n error for regi
9650: 73 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50  ster ranges.** P
9660: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50  1..P1+P3-1 and P
9670: 32 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76  2..P2+P3-1 to ov
9680: 65 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e  erlap.  It is an
9690: 20 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33   error.** for P3
96a0: 20 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e   to be less than
96b0: 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d   1..*/.case OP_M
96c0: 6f 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20  ove: {.  int n; 
96d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
96e0: 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
96f0: 20 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f   left to copy */
9700: 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20  .  int p1;      
9710: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
9720: 74 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a  to copy from */.
9730: 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
9740: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9750: 6f 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20  o copy to */..  
9760: 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
9770: 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
9780: 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  2 = pOp->p2;.  a
9790: 73 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31  ssert( n>0 && p1
97a0: 3e 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20  >0 && p2>0 );.  
97b0: 61 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32  assert( p1+n<=p2
97c0: 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a   || p2+n<=p1 );.
97d0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
97e0: 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
97f0: 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20  Mem[p2];.  do{. 
9800: 20 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c     assert( pOut<
9810: 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2d  =&aMem[(p->nMem-
9820: 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a  p->nCursor)] );.
9830: 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
9840: 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  <=&aMem[(p->nMem
9850: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
9860: 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
9870: 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
9880: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
9890: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
98a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
98b0: 65 6d 4d 6f 76 65 28 70 4f 75 74 2c 20 70 49 6e  emMove(pOut, pIn
98c0: 31 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  1);.#ifdef SQLIT
98d0: 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28 20  E_DEBUG.    if( 
98e0: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
98f0: 3e 3d 26 61 4d 65 6d 5b 70 31 5d 20 26 26 20 70  >=&aMem[p1] && p
9900: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3c  Out->pScopyFrom<
9910: 70 4f 75 74 20 29 7b 0a 20 20 20 20 20 20 70 4f  pOut ){.      pO
9920: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 2b  ut->pScopyFrom +
9930: 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 70 31 3b 0a  = pOp->p2 - p1;.
9940: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20      }.#endif.   
9950: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9960: 70 4f 75 74 29 3b 0a 20 20 20 20 52 45 47 49 53  pOut);.    REGIS
9970: 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c 20  TER_TRACE(p2++, 
9980: 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31 2b  pOut);.    pIn1+
9990: 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  +;.    pOut++;. 
99a0: 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a   }while( --n );.
99b0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
99c0: 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20 50  pcode: Copy P1 P
99d0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
99e0: 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31 5d  psis: r[P2@P3+1]
99f0: 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a  =r[P1@P3+1].**.*
9a00: 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f 66  * Make a copy of
9a10: 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e 50   registers P1..P
9a20: 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73 74  1+P3 into regist
9a30: 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a  ers P2..P2+P3..*
9a40: 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75  *.** This instru
9a50: 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64 65  ction makes a de
9a60: 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ep copy of the v
9a70: 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63 61  alue.  A duplica
9a80: 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f 66  te.** is made of
9a90: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
9aa0: 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20 53  lob constant.  S
9ab0: 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70 79  ee also OP_SCopy
9ac0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 70  ..*/.case OP_Cop
9ad0: 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20  y: {.  int n;.. 
9ae0: 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
9af0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
9b00: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
9b10: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
9b20: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
9b30: 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65 28  pIn1 );.  while(
9b40: 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65   1 ){.    sqlite
9b50: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
9b60: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
9b70: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20 20  MEM_Ephem);.    
9b80: 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70  Deephemeralize(p
9b90: 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  Out);.#ifdef SQL
9ba0: 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70 4f  ITE_DEBUG.    pO
9bb0: 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d  ut->pScopyFrom =
9bc0: 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 52   0;.#endif.    R
9bd0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
9be0: 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c  p->p2+pOp->p3-n,
9bf0: 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28 20   pOut);.    if( 
9c00: 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61 6b  (n--)==0 ) break
9c10: 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20  ;.    pOut++;.  
9c20: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20    pIn1++;.  }.  
9c30: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
9c40: 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50 32  ode: SCopy P1 P2
9c50: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
9c60: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
9c70: 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68 61  **.** Make a sha
9c80: 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65 67  llow copy of reg
9c90: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9ca0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9cb0: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9cc0: 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c 6f  n makes a shallo
9cd0: 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76 61  w copy of the va
9ce0: 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61 6c  lue.  If the val
9cf0: 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69 6e  ue.** is a strin
9d00: 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e 20  g or blob, then 
9d10: 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c 79  the copy is only
9d20: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
9d30: 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61 6e  e.** original an
9d40: 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20 6f  d hence if the o
9d50: 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73 20  riginal changes 
9d60: 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70 79  so will the copy
9d70: 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20 74  ..** Worse, if t
9d80: 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20 64  he original is d
9d90: 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 20  eallocated, the 
9da0: 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e 76  copy becomes inv
9db0: 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74 68  alid..** Thus th
9dc0: 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20 67  e program must g
9dd0: 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74 68  uarantee that th
9de0: 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c 20  e original will 
9df0: 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64 75  not change.** du
9e00: 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69 6d  ring the lifetim
9e10: 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20 20  e of the copy.  
9e20: 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20 6d  Use OP_Copy to m
9e30: 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a 2a  ake a complete.*
9e40: 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65 20  * copy..*/.case 
9e50: 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20 20  OP_SCopy: {     
9e60: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9e70: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
9e80: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75  [pOp->p1];.  pOu
9e90: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
9ea0: 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
9eb0: 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73 71  ut!=pIn1 );.  sq
9ec0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
9ed0: 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
9ee0: 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a  n1, MEM_Ephem);.
9ef0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9f00: 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d 3e  BUG.  if( pOut->
9f10: 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29 20  pScopyFrom==0 ) 
9f20: 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d  pOut->pScopyFrom
9f30: 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66 0a   = pIn1;.#endif.
9f40: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9f50: 70 63 6f 64 65 3a 20 49 6e 74 43 6f 70 79 20 50  pcode: IntCopy P
9f60: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
9f70: 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b  nopsis: r[P2]=r[
9f80: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66  P1].**.** Transf
9f90: 65 72 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  er the integer v
9fa0: 61 6c 75 65 20 68 65 6c 64 20 69 6e 20 72 65 67  alue held in reg
9fb0: 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  ister P1 into re
9fc0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
9fd0: 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
9fe0: 6d 69 7a 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  mized version of
9ff0: 20 53 43 6f 70 79 20 74 68 61 74 20 77 6f 72 6b   SCopy that work
a000: 73 20 6f 6e 6c 79 20 66 6f 72 20 69 6e 74 65 67  s only for integ
a010: 65 72 0a 2a 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f  er.** values..*/
a020: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 43 6f 70 79  .case OP_IntCopy
a030: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
a040: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31  * out2 */.  pIn1
a050: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
a060: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  ];.  assert( (pI
a070: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
a080: 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 70 4f 75  Int)!=0 );.  pOu
a090: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
a0a0: 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
a0b0: 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75  eMemSetInt64(pOu
a0c0: 74 2c 20 70 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20  t, pIn1->u.i);. 
a0d0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
a0e0: 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f 77 20  code: ResultRow 
a0f0: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
a100: 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70 75 74  ynopsis:  output
a110: 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P1@P2].**.** 
a120: 54 68 65 20 72 65 67 69 73 74 65 72 73 20 50 31  The registers P1
a130: 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32 2d 31   through P1+P2-1
a140: 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e 67 6c   contain a singl
a150: 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65 73 75  e row of.** resu
a160: 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  lts. This opcode
a170: 20 63 61 75 73 65 73 20 74 68 65 20 73 71 6c 69   causes the sqli
a180: 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c 6c 20  te3_step() call 
a190: 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a 2a 20  to terminate.** 
a1a0: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 52  with an SQLITE_R
a1b0: 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  OW return code a
a1c0: 6e 64 20 69 74 20 73 65 74 73 20 75 70 20 74 68  nd it sets up th
a1d0: 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74 0a 2a  e sqlite3_stmt.*
a1e0: 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 70  * structure to p
a1f0: 72 6f 76 69 64 65 20 61 63 63 65 73 73 20 74 6f  rovide access to
a200: 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28 50 31   the r(P1)..r(P1
a210: 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20 61 73  +P2-1) values as
a220: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 72  .** the result r
a230: 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  ow..*/.case OP_R
a240: 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20 4d 65  esultRow: {.  Me
a250: 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74 20 69  m *pMem;.  int i
a260: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6e  ;.  assert( p->n
a270: 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e  ResColumn==pOp->
a280: 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  p2 );.  assert( 
a290: 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20 20 61  pOp->p1>0 );.  a
a2a0: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 2b 70  ssert( pOp->p1+p
a2b0: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
a2c0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
a2d0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
a2e0: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
a2f0: 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75  CALLBACK.  /* Ru
a300: 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63  n the progress c
a310: 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f  ounter just befo
a320: 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20  re returning..  
a330: 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72  */.  if( db->xPr
a340: 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20  ogress!=0.   && 
a350: 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65  nVmStep>=nProgre
a360: 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62  ssLimit.   && db
a370: 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e  ->xProgress(db->
a380: 70 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30  pProgressArg)!=0
a390: 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  .  ){.    rc = S
a3a0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b  QLITE_INTERRUPT;
a3b0: 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65  .    goto vdbe_e
a3c0: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23  rror_halt;.  }.#
a3d0: 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74  endif..  /* If t
a3e0: 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20 68 61  his statement ha
a3f0: 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64  s violated immed
a400: 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79  iate foreign key
a410: 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f   constraints, do
a420: 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e  .  ** not return
a430: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
a440: 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e  ows modified. An
a450: 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45  d do not RELEASE
a460: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 20   the statement. 
a470: 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e   ** transaction.
a480: 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   It needs to be 
a490: 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f  rolled back.  */
a4a0: 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
a4b0: 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  !=(rc = sqlite3V
a4c0: 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 30 29  dbeCheckFk(p, 0)
a4d0: 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ) ){.    assert(
a4e0: 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54   db->flags&SQLIT
a4f0: 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20  E_CountRows );. 
a500: 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e 75 73     assert( p->us
a510: 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b  esStmtJournal );
a520: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a530: 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c  .  /* If the SQL
a540: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c  ITE_CountRows fl
a550: 61 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c  ag is set in sql
a560: 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c  ite3.flags mask,
a570: 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20   then .  ** DML 
a580: 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b  statements invok
a590: 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f  e this opcode to
a5a0: 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   return the numb
a5b0: 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a  er of rows .  **
a5c0: 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65   modified to the
a5d0: 20 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74   user. This is t
a5e0: 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74  he only way that
a5f0: 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20   a VM that.  ** 
a600: 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e  opens a statemen
a610: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61  t transaction ma
a620: 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70  y invoke this op
a630: 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  code..  **.  ** 
a640: 49 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20  In case this is 
a650: 73 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74  such a statement
a660: 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74  , close any stat
a670: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a680: 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79  n.  ** opened by
a690: 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20   this VM before 
a6a0: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f  returning contro
a6b0: 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54  l to the user. T
a6c0: 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65  his is to.  ** e
a6d0: 6e 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65  nsure that state
a6e0: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
a6f0: 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73  s are always nes
a700: 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70  ted, not overlap
a710: 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68  ping..  ** If th
a720: 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74  e open statement
a730: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
a740: 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c  not closed here,
a750: 20 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20   then the user. 
a760: 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f   ** may step ano
a770: 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65  ther VM that ope
a780: 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65  ns its own state
a790: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
a7a0: 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20  . This.  ** may 
a7b0: 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70  lead to overlapp
a7c0: 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72  ing statement tr
a7d0: 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a  ansactions..  **
a7e0: 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d  .  ** The statem
a7f0: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
a800: 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c  is never a top-l
a810: 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e  evel transaction
a820: 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68  .  Hence.  ** th
a830: 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62  e RELEASE call b
a840: 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66  elow can never f
a850: 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65  ail..  */.  asse
a860: 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  rt( p->iStatemen
a870: 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67  t==0 || db->flag
a880: 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  s&SQLITE_CountRo
a890: 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  ws );.  rc = sql
a8a0: 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61  ite3VdbeCloseSta
a8b0: 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f  tement(p, SAVEPO
a8c0: 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20  INT_RELEASE);.  
a8d0: 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
a8e0: 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20 20 20  LITE_OK) ){.    
a8f0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
a900: 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
a910: 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73 6f 72  ephemeral cursor
a920: 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f 0a 20   row caches */. 
a930: 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d 20 28   p->cacheCtr = (
a940: 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20 32 29  p->cacheCtr + 2)
a950: 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  |1;..  /* Make s
a960: 75 72 65 20 74 68 65 20 72 65 73 75 6c 74 73 20  ure the results 
a970: 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  of the current r
a980: 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65 72 6d  ow are \000 term
a990: 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20  inated.  ** and 
a9a0: 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e 65 64  have an assigned
a9b0: 20 74 79 70 65 2e 20 20 54 68 65 20 72 65 73 75   type.  The resu
a9c0: 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68 65 6d  lts are de-ephem
a9d0: 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a  eralized as.  **
a9e0: 20 61 20 73 69 64 65 20 65 66 66 65 63 74 2e 0a   a side effect..
a9f0: 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d    */.  pMem = p-
aa00: 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20 26 61  >pResultSet = &a
aa10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
aa20: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e  for(i=0; i<pOp->
aa30: 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  p2; i++){.    as
aa40: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
aa50: 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20  (&pMem[i]) );.  
aa60: 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65    Deephemeralize
aa70: 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20  (&pMem[i]);.    
aa80: 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d  assert( (pMem[i]
aa90: 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45 70 68  .flags & MEM_Eph
aaa0: 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20 20 20  em)==0.         
aab0: 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66     || (pMem[i].f
aac0: 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c  lags & (MEM_Str|
aad0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b  MEM_Blob))==0 );
aae0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
aaf0: 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28  MemNulTerminate(
ab00: 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52  &pMem[i]);.    R
ab10: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
ab20: 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69  p->p1+i, &pMem[i
ab30: 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 64 62  ]);.  }.  if( db
ab40: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
ab50: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20   goto no_mem;.. 
ab60: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
ab70: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
ab80: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
ab90: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
aba0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
abb0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
abc0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
abd0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
abe0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
abf0: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
ac00: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
ac10: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
ac20: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
ac30: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
ac40: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
ac50: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
ac60: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
ac70: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
ac80: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
ac90: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
aca0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
acb0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
acc0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
acd0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
ace0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
acf0: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
ad00: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
ad10: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
ad20: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
ad30: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
ad40: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
ad50: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
ad60: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
ad70: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
ad80: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ad90: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
ada0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
adb0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
adc0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
add0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
ade0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
adf0: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
ae00: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
ae10: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
ae20: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
ae30: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
ae40: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
ae50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
ae60: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
ae70: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
ae80: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
ae90: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
aea0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
aeb0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
aec0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
aed0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
aee0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
aef0: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
af00: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
af10: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
af20: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
af30: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
af40: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
af50: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
af60: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
af70: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
af80: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
af90: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
afa0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
afb0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
afc0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
afd0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
afe0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
aff0: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
b000: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
b010: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
b020: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
b030: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
b040: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
b050: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
b060: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
b070: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
b080: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
b090: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
b0a0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
b0b0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b0c0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b0d0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b0e0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
b0f0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
b100: 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32  r[P3]=r[P1]+r[P2
b110: 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20  ].**.** Add the 
b120: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b130: 72 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75  r P1 to the valu
b140: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
b150: 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68  .** and store th
b160: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
b170: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
b180: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
b190: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b1a0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b1b0: 70 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20  pcode: Multiply 
b1c0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b1d0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b1e0: 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a  =r[P1]*r[P2].**.
b1f0: 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74  **.** Multiply t
b200: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b210: 73 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76  ster P1 by the v
b220: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b230: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
b240: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
b250: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
b260: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
b270: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
b280: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
b290: 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61  * Opcode: Subtra
b2a0: 63 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ct P1 P2 P3 * *.
b2b0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b2c0: 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a  P3]=r[P2]-r[P1].
b2d0: 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74  **.** Subtract t
b2e0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b2f0: 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65  ster P1 from the
b300: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b310: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
b320: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
b330: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
b340: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
b350: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
b360: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
b370: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69  ./* Opcode: Divi
b380: 64 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  de P1 P2 P3 * *.
b390: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
b3a0: 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a  P3]=r[P2]/r[P1].
b3b0: 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65  **.** Divide the
b3c0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b3d0: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b3e0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b3f0: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b400: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b410: 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f  ister P3 (P3=P2/
b420: 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75  P1). If the valu
b430: 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65  e in .** registe
b440: 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  r P1 is zero, th
b450: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
b460: 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72   NULL. If either
b470: 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55   input is .** NU
b480: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b490: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b4a0: 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20  code: Remainder 
b4b0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b4c0: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
b4d0: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b4e0: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b4f0: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b500: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b510: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b520: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b530: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b540: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b550: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b560: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b570: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b580: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b590: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b5a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b5b0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b5c0: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
b5d0: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
b5e0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b5f0: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
b600: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b610: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
b620: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b630: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
b640: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b650: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
b660: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
b670: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b680: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
b690: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
b6a0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
b6b0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b6c0: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
b6d0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
b6e0: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
b6f0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b700: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
b710: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
b720: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
b730: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
b740: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
b750: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
b760: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
b770: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
b780: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
b790: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
b7a0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
b7b0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
b7c0: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
b7d0: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
b7e0: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
b7f0: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
b800: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
b810: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
b820: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
b830: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
b840: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
b850: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
b860: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
b870: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
b880: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
b890: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
b8a0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
b8b0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
b8c0: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
b8d0: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
b8e0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
b8f0: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
b900: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
b910: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
b920: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
b930: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
b940: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
b950: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
b960: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
b970: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
b980: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
b990: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
b9a0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
b9b0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b9c0: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
b9d0: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
b9e0: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
b9f0: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
ba00: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
ba10: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
ba20: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
ba30: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
ba40: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
ba50: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
ba60: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
ba70: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
ba80: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
ba90: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
baa0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bab0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
bac0: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
bad0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
bae0: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
baf0: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
bb00: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
bb10: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
bb20: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bb30: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
bb40: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
bb50: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bb60: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bb70: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bb80: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
bb90: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
bba0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
bbb0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
bbc0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bbd0: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bbe0: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
bbf0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bc00: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bc10: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bc20: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bc30: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bc40: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bc50: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bc60: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bc70: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bc80: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bc90: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bca0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
bcb0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
bcc0: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
bcd0: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
bce0: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
bcf0: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
bd00: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
bd10: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
bd20: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
bd30: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
bd40: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
bd50: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
bd60: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
bd70: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
bd80: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
bd90: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
bda0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
bdb0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
bdc0: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
bdd0: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
bde0: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
bdf0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
be00: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
be10: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
be20: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
be30: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
be40: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
be50: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
be60: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
be70: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
be80: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
be90: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
bea0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
beb0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
bec0: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bed0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bee0: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bef0: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bf00: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
bf10: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
bf20: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
bf30: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
bf40: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
bf50: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
bf60: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
bf70: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
bf80: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bf90: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
bfa0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
bfb0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
bfc0: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
bfd0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
bfe0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
bff0: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
c000: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c010: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
c020: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
c030: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
c040: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
c050: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c060: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
c070: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
c080: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
c090: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
c0a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
c0b0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c0c0: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c0d0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c0e0: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
c0f0: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
c100: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c110: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
c120: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
c130: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
c140: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
c150: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
c160: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c170: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
c180: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
c190: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
c1a0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
c1b0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
c1c0: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
c1d0: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
c1e0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
c1f0: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
c200: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
c210: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
c220: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
c230: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
c240: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
c250: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
c260: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
c270: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
c280: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c290: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c2a0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c2b0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c2c0: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c2d0: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c2e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c2f0: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c300: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c310: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c320: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c330: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c340: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c350: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c360: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c370: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c380: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c390: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c3a0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c3b0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c3c0: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c3d0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c3e0: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c3f0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c400: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c410: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c420: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c430: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50  ode: Function0 P
c440: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c450: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c460: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c470: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c480: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c490: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c4a0: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
c4b0: 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  t that.** define
c4c0: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c4d0: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c4e0: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c4f0: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c500: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c510: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c520: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c530: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c540: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c550: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c560: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c570: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c580: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c590: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c5a0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c5b0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
c5c0: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
c5d0: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
c5e0: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
c5f0: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
c600: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
c610: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
c620: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
c630: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
c640: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
c650: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
c660: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
c670: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
c680: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
c690: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
c6a0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
c6b0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
c6c0: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
c6d0: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
c6e0: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
c6f0: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
c700: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
c710: 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67  o: Function, Agg
c720: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
c730: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  /./* Opcode: Fun
c740: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
c750: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
c760: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
c770: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
c780: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
c790: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
c7a0: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
c7b0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
c7c0: 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69  t that.** contai
c7d0: 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
c7e0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
c7f0: 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35 20  be run) with P5 
c800: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a  arguments taken.
c810: 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ** from register
c820: 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f   P2 and successo
c830: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
c840: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
c850: 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  is stored.** in 
c860: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52 65  register P3.  Re
c870: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
c880: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
c890: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
c8a0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
c8b0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
c8c0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
c8d0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
c8e0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
c8f0: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
c900: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
c910: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
c920: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
c930: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
c940: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
c950: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
c960: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
c970: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
c980: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
c990: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
c9a0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
c9b0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
c9c0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
c9d0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
c9e0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
c9f0: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
ca00: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
ca10: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
ca20: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
ca30: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  * SQL functions 
ca40: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f  are initially co
ca50: 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69  ded as OP_Functi
ca60: 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e  on0 with P4 poin
ca70: 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e  ting.** to a Fun
ca80: 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75  cDef object.  Bu
ca90: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
caa0: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
cab0: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
cac0: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
cad0: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
cae0: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
caf0: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
cb00: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
cb10: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
cb20: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
cb30: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
cb40: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
cb50: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
cb60: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
cb70: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
cb80: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
cb90: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
cba0: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
cbb0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
cbc0: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cbd0: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
cbe0: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
cbf0: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
cc00: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
cc10: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
cc20: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
cc30: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
cc40: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
cc50: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
cc60: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
cc70: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
cc80: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61  >nCursor) );.  a
cc90: 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28  ssert( n==0 || (
cca0: 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
ccb0: 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  ->p2+n<=(p->nMem
ccc0: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20  -p->nCursor)+1) 
ccd0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
cce0: 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20  ->p3<pOp->p2 || 
ccf0: 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32  pOp->p3>=pOp->p2
cd00: 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73  +n );.  pCtx = s
cd10: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
cd20: 77 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  w(db, sizeof(*pC
cd30: 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
cd40: 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
cd50: 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
cd60: 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
cd70: 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
cd80: 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
cd90: 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
cda0: 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
cdb0: 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
cdc0: 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
cdd0: 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
cde0: 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
cdf0: 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
ce00: 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
ce10: 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
ce20: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 46 75  ->opcode = OP_Fu
ce30: 6e 63 74 69 6f 6e 3b 0a 20 20 2f 2a 20 46 61 6c  nction;.  /* Fal
ce40: 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
ce50: 50 5f 46 75 6e 63 74 69 6f 6e 20 2a 2f 0a 7d 0a  P_Function */.}.
ce60: 63 61 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  case OP_Function
ce70: 3a 20 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73  : {.  int i;.  s
ce80: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
ce90: 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
cea0: 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
ceb0: 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43  _FUNCCTX );.  pC
cec0: 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74  tx = pOp->p4.pCt
ced0: 78 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  x;..  /* If this
cee0: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 69 6e 73   function is ins
cef0: 69 64 65 20 6f 66 20 61 20 74 72 69 67 67 65 72  ide of a trigger
cf00: 2c 20 74 68 65 20 72 65 67 69 73 74 65 72 20 61  , the register a
cf10: 72 72 61 79 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20  rray in aMem[]. 
cf20: 20 2a 2a 20 6d 69 67 68 74 20 63 68 61 6e 67 65   ** might change
cf30: 20 66 72 6f 6d 20 6f 6e 65 20 65 76 61 6c 75 61   from one evalua
cf40: 74 69 6f 6e 20 74 6f 20 74 68 65 20 6e 65 78 74  tion to the next
cf50: 2e 20 20 54 68 65 20 6e 65 78 74 20 62 6c 6f 63  .  The next bloc
cf60: 6b 20 6f 66 20 63 6f 64 65 0a 20 20 2a 2a 20 63  k of code.  ** c
cf70: 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20  hecks to see if 
cf80: 74 68 65 20 72 65 67 69 73 74 65 72 20 61 72 72  the register arr
cf90: 61 79 20 68 61 73 20 63 68 61 6e 67 65 64 2c 20  ay has changed, 
cfa0: 61 6e 64 20 69 66 20 73 6f 20 69 74 0a 20 20 2a  and if so it.  *
cfb0: 2a 20 72 65 69 6e 69 74 69 61 6c 69 7a 65 73 20  * reinitializes 
cfc0: 74 68 65 20 72 65 6c 61 76 61 6e 74 20 70 61 72  the relavant par
cfd0: 74 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  ts of the sqlite
cfe0: 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74  3_context object
cff0: 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   */.  pOut = &aM
d000: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
d010: 66 28 20 70 43 74 78 2d 3e 70 4f 75 74 20 21 3d  f( pCtx->pOut !=
d020: 20 70 4f 75 74 20 29 7b 0a 20 20 20 20 70 43 74   pOut ){.    pCt
d030: 78 2d 3e 70 4f 75 74 20 3d 20 70 4f 75 74 3b 0a  x->pOut = pOut;.
d040: 20 20 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e      for(i=pCtx->
d050: 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d  argc-1; i>=0; i-
d060: 2d 29 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d  -) pCtx->argv[i]
d070: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
d080: 2b 69 5d 3b 0a 20 20 7d 0a 0a 20 20 6d 65 6d 41  +i];.  }..  memA
d090: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
d0a0: 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 23 69 66  pCtx->pOut);.#if
d0b0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
d0c0: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
d0d0: 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
d0e0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
d0f0: 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
d100: 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
d110: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
d120: 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
d130: 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
d140: 66 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c  f.  MemSetTypeFl
d150: 61 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 4d  ag(pCtx->pOut, M
d160: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78  EM_Null);.  pCtx
d170: 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20  ->fErrorOrAux = 
d180: 30 3b 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  0;.  db->lastRow
d190: 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
d1a0: 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63 2d    (*pCtx->pFunc-
d1b0: 3e 78 46 75 6e 63 29 28 70 43 74 78 2c 20 70 43  >xFunc)(pCtx, pC
d1c0: 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78 2d 3e  tx->argc, pCtx->
d1d0: 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20 52  argv); /* IMP: R
d1e0: 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a  -24505-23230 */.
d1f0: 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62    lastRowid = db
d200: 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20 20 2f 2a  ->lastRowid;  /*
d210: 20 52 65 6d 65 6d 62 65 72 20 72 6f 77 69 64 20   Remember rowid 
d220: 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20  changes made by 
d230: 78 46 75 6e 63 20 2a 2f 0a 0a 20 20 2f 2a 20 49  xFunc */..  /* I
d240: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72  f the function r
d250: 65 74 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72  eturned an error
d260: 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70  , throw an excep
d270: 74 69 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 70 43  tion */.  if( pC
d280: 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
d290: 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
d2a0: 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
d2b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
d2c0: 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
d2d0: 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70  te3_value_text(p
d2e0: 43 74 78 2d 3e 70 4f 75 74 29 29 3b 0a 20 20 20  Ctx->pOut));.   
d2f0: 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69 73     rc = pCtx->is
d300: 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20  Error;.    }.   
d310: 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c 65   sqlite3VdbeDele
d320: 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 43 74  teAuxData(p, pCt
d330: 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31 29  x->iOp, pOp->p1)
d340: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
d350: 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
d360: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 74 6f  he function into
d370: 20 72 65 67 69 73 74 65 72 20 50 33 20 2a 2f 0a   register P3 */.
d380: 20 20 69 66 28 20 70 4f 75 74 2d 3e 66 6c 61 67    if( pOut->flag
d390: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
d3a0: 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 73 71  _Blob) ){.    sq
d3b0: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
d3c0: 6e 63 6f 64 69 6e 67 28 70 43 74 78 2d 3e 70 4f  ncoding(pCtx->pO
d3d0: 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ut, encoding);. 
d3e0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64     if( sqlite3Vd
d3f0: 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 43 74 78  beMemTooBig(pCtx
d400: 2d 3e 70 4f 75 74 29 20 29 20 67 6f 74 6f 20 74  ->pOut) ) goto t
d410: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52  oo_big;.  }..  R
d420: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
d430: 70 2d 3e 70 33 2c 20 70 43 74 78 2d 3e 70 4f 75  p->p3, pCtx->pOu
d440: 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
d450: 5f 42 4c 4f 42 53 49 5a 45 28 70 43 74 78 2d 3e  _BLOBSIZE(pCtx->
d460: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
d470: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69  }../* Opcode: Bi
d480: 74 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20  tAnd P1 P2 P3 * 
d490: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d4a0: 72 5b 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32  r[P3]=r[P1]&r[P2
d4b0: 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ].**.** Take the
d4c0: 20 62 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66   bit-wise AND of
d4d0: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
d4e0: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
d4f0: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
d500: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
d510: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
d520: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
d530: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
d540: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
d550: 4f 70 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31  Opcode: BitOr P1
d560: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
d570: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
d580: 5b 50 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]|r[P2].**.**
d590: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
d5a0: 73 65 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c  se OR of the val
d5b0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
d5c0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
d5d0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
d5e0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
d5f0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
d600: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
d610: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
d620: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
d630: 53 68 69 66 74 4c 65 66 74 20 50 31 20 50 32 20  ShiftLeft P1 P2 
d640: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
d650: 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  is:  r[P3]=r[P2]
d660: 3c 3c 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68  <<r[P1].**.** Sh
d670: 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ift the integer 
d680: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d690: 72 20 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74  r P2 to the left
d6a0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
d6b0: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
d6c0: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
d6d0: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
d6e0: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
d6f0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
d700: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
d710: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
d720: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
d730: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
d740: 6f 64 65 3a 20 53 68 69 66 74 52 69 67 68 74 20  ode: ShiftRight 
d750: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d760: 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d  Synopsis:  r[P3]
d770: 3d 72 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a  =r[P2]>>r[P1].**
d780: 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e  .** Shift the in
d790: 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72  teger value in r
d7a0: 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 74 68  egister P2 to th
d7b0: 65 20 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a  e right by the.*
d7c0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73  * number of bits
d7d0: 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74 68   specified by th
d7e0: 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67  e integer in reg
d7f0: 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f  ister P1..** Sto
d800: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
d810: 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
d820: 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74   If either input
d830: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65   is NULL, the re
d840: 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f  sult is NULL..*/
d850: 0a 63 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a  .case OP_BitAnd:
d860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d870: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
d880: 49 54 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  ITAND, in1, in2,
d890: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
d8a0: 5f 42 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20  _BitOr:         
d8b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
d8c0: 20 61 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e   as TK_BITOR, in
d8d0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d8e0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66  case OP_ShiftLef
d8f0: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
d900: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53  /* same as TK_LS
d910: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
d920: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
d930: 53 68 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20  ShiftRight: {   
d940: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d950: 61 73 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e  as TK_RSHIFT, in
d960: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
d970: 20 20 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20    i64 iA;.  u64 
d980: 75 41 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20  uA;.  i64 iB;.  
d990: 75 38 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d  u8 op;..  pIn1 =
d9a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
d9b0: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
d9c0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74  pOp->p2];.  pOut
d9d0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
d9e0: 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  ];.  if( (pIn1->
d9f0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
da00: 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  ags) & MEM_Null 
da10: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
da20: 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
da30: 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  t);.    break;. 
da40: 20 7d 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65   }.  iA = sqlite
da50: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
da60: 6e 32 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69  n2);.  iB = sqli
da70: 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
da80: 70 49 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f  pIn1);.  op = pO
da90: 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28  p->opcode;.  if(
daa0: 20 6f 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29   op==OP_BitAnd )
dab0: 7b 0a 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a  {.    iA &= iB;.
dac0: 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d    }else if( op==
dad0: 4f 50 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20  OP_BitOr ){.    
dae0: 69 41 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73  iA |= iB;.  }els
daf0: 65 20 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20  e if( iB!=0 ){. 
db00: 20 20 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f     assert( op==O
db10: 50 5f 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20  P_ShiftRight || 
db20: 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  op==OP_ShiftLeft
db30: 20 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73   );..    /* If s
db40: 68 69 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67  hifting by a neg
db50: 61 74 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68  ative amount, sh
db60: 69 66 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72  ift in the other
db70: 20 64 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20   direction */.  
db80: 20 20 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20    if( iB<0 ){.  
db90: 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53      assert( OP_S
dba0: 68 69 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68  hiftRight==OP_Sh
dbb0: 69 66 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20  iftLeft+1 );.   
dbc0: 20 20 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69     op = 2*OP_Shi
dbd0: 66 74 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b  ftLeft + 1 - op;
dbe0: 0a 20 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28  .      iB = iB>(
dbf0: 2d 36 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b  -64) ? -iB : 64;
dc00: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
dc10: 69 42 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20  iB>=64 ){.      
dc20: 69 41 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f  iA = (iA>=0 || o
dc30: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29  p==OP_ShiftLeft)
dc40: 20 3f 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d   ? 0 : -1;.    }
dc50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63  else{.      memc
dc60: 70 79 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a  py(&uA, &iA, siz
dc70: 65 6f 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20  eof(uA));.      
dc80: 69 66 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  if( op==OP_Shift
dc90: 4c 65 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Left ){.        
dca0: 75 41 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20  uA <<= iB;.     
dcb0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
dcc0: 75 41 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20  uA >>= iB;.     
dcd0: 20 20 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e     /* Sign-exten
dce0: 64 20 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69  d on a right shi
dcf0: 66 74 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65  ft of a negative
dd00: 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20   number */.     
dd10: 20 20 20 69 66 28 20 69 41 3c 30 20 29 20 75 41     if( iA<0 ) uA
dd20: 20 7c 3d 20 28 28 28 28 75 36 34 29 30 78 66 66   |= ((((u64)0xff
dd30: 66 66 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66  ffffff)<<32)|0xf
dd40: 66 66 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d  fffffff) << (64-
dd50: 69 42 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  iB);.      }.   
dd60: 20 20 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26     memcpy(&iA, &
dd70: 75 41 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b  uA, sizeof(iA));
dd80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75  .    }.  }.  pOu
dd90: 74 2d 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d  t->u.i = iA;.  M
dda0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
ddb0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
ddc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ddd0: 6f 64 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20  ode: AddImm  P1 
dde0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
ddf0: 70 73 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50  psis:  r[P1]=r[P
de00: 31 5d 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64  1]+P2.** .** Add
de10: 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32   the constant P2
de20: 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e   to the value in
de30: 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
de40: 20 54 68 65 20 72 65 73 75 6c 74 20 69 73 20 61   The result is a
de50: 6c 77 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72  lways an integer
de60: 2e 0a 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65  ..**.** To force
de70: 20 61 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f   any register to
de80: 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20   be an integer, 
de90: 6a 75 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63  just add 0..*/.c
dea0: 61 73 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b  ase OP_AddImm: {
deb0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
dec0: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
ded0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
dee0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
def0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71  e(p, pIn1);.  sq
df00: 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
df10: 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  gerify(pIn1);.  
df20: 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70  pIn1->u.i += pOp
df30: 2d 3e 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ->p2;.  break;.}
df40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73  ../* Opcode: Mus
df50: 74 42 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a  tBeInt P1 P2 * *
df60: 20 2a 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20   *.** .** Force 
df70: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
df80: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
df90: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74  n integer.  If t
dfa0: 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
dfb0: 31 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65  1 is not an inte
dfc0: 67 65 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62  ger and cannot b
dfd0: 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  e converted into
dfe0: 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77   an integer.** w
dff0: 69 74 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73  ithout data loss
e000: 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
e010: 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f  diately to P2, o
e020: 72 20 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61  r if P2==0.** ra
e030: 69 73 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49  ise an SQLITE_MI
e040: 53 4d 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e  SMATCH exception
e050: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73  ..*/.case OP_Mus
e060: 74 42 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20  tBeInt: {       
e070: 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
e080: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
e090: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e0a0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
e0b0: 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29   & MEM_Int)==0 )
e0c0: 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e  {.    applyAffin
e0d0: 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45  ity(pIn1, SQLITE
e0e0: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e  _AFF_NUMERIC, en
e0f0: 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62  coding);.    Vdb
e100: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49  eBranchTaken((pI
e110: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
e120: 74 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  t)==0, 2);.    i
e130: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e140: 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
e150: 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
e160: 70 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  p2==0 ){.       
e170: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53   rc = SQLITE_MIS
e180: 4d 41 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67  MATCH;.        g
e190: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
e1a0: 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65  _error;.      }e
e1b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  lse{.        got
e1c0: 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
e1d0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
e1e0: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
e1f0: 28 70 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b  (pIn1, MEM_Int);
e200: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e210: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
e220: 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
e230: 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41  /* Opcode: RealA
e240: 66 66 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a  ffinity P1 * * *
e250: 20 2a 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69   *.**.** If regi
e260: 73 74 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e  ster P1 holds an
e270: 20 69 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74   integer convert
e280: 20 69 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61   it to a real va
e290: 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  lue..**.** This 
e2a0: 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20 77  opcode is used w
e2b0: 68 65 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69  hen extracting i
e2c0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20  nformation from 
e2d0: 61 20 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a  a column that.**
e2e0: 20 68 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69   has REAL affini
e2f0: 74 79 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e  ty.  Such column
e300: 20 76 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c   values may stil
e310: 6c 20 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a  l be stored as.*
e320: 2a 20 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20  * integers, for 
e330: 73 70 61 63 65 20 65 66 66 69 63 69 65 6e 63 79  space efficiency
e340: 2c 20 62 75 74 20 61 66 74 65 72 20 65 78 74 72  , but after extr
e350: 61 63 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74  action we want t
e360: 68 65 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f  hem.** to have o
e370: 6e 6c 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65  nly a real value
e380: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61  ..*/.case OP_Rea
e390: 6c 41 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20  lAffinity: {    
e3a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e3b0: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
e3c0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
e3d0: 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
e3e0: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a  gs & MEM_Int ){.
e3f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
e400: 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b  emRealify(pIn1);
e410: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
e420: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
e430: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e440: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 61 73 74  ./* Opcode: Cast
e450: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e460: 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e 69  Synopsis: affini
e470: 74 79 28 72 5b 50 31 5d 29 0a 2a 2a 0a 2a 2a 20  ty(r[P1]).**.** 
e480: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e490: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e4a0: 6f 20 62 65 20 74 68 65 20 74 79 70 65 20 64 65  o be the type de
e4b0: 66 69 6e 65 64 20 62 79 20 50 32 2e 0a 2a 2a 20  fined by P2..** 
e4c0: 0a 2a 2a 20 3c 75 6c 3e 0a 2a 2a 20 3c 6c 69 20  .** <ul>.** <li 
e4d0: 76 61 6c 75 65 3d 22 39 37 22 3e 20 54 45 58 54  value="97"> TEXT
e4e0: 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39  .** <li value="9
e4f0: 38 22 3e 20 42 4c 4f 42 0a 2a 2a 20 3c 6c 69 20  8"> BLOB.** <li 
e500: 76 61 6c 75 65 3d 22 39 39 22 3e 20 4e 55 4d 45  value="99"> NUME
e510: 52 49 43 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65  RIC.** <li value
e520: 3d 22 31 30 30 22 3e 20 49 4e 54 45 47 45 52 0a  ="100"> INTEGER.
e530: 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30  ** <li value="10
e540: 31 22 3e 20 52 45 41 4c 0a 2a 2a 20 3c 2f 75 6c  1"> REAL.** </ul
e550: 3e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76  >.**.** A NULL v
e560: 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61 6e  alue is not chan
e570: 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75 74  ged by this rout
e580: 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e 73  ine.  It remains
e590: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
e5a0: 50 5f 43 61 73 74 3a 20 7b 20 20 20 20 20 20 20  P_Cast: {       
e5b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e             /* in
e5c0: 31 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  1 */.  assert( p
e5d0: 4f 70 2d 3e 70 32 3e 3d 53 51 4c 49 54 45 5f 41  Op->p2>=SQLITE_A
e5e0: 46 46 5f 42 4c 4f 42 20 26 26 20 70 4f 70 2d 3e  FF_BLOB && pOp->
e5f0: 70 32 3c 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52  p2<=SQLITE_AFF_R
e600: 45 41 4c 20 29 3b 0a 20 20 74 65 73 74 63 61 73  EAL );.  testcas
e610: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e620: 54 45 5f 41 46 46 5f 54 45 58 54 20 29 3b 0a 20  TE_AFF_TEXT );. 
e630: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
e640: 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42  p2==SQLITE_AFF_B
e650: 4c 4f 42 20 29 3b 0a 20 20 74 65 73 74 63 61 73  LOB );.  testcas
e660: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e670: 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29  TE_AFF_NUMERIC )
e680: 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f  ;.  testcase( pO
e690: 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46  p->p2==SQLITE_AF
e6a0: 46 5f 49 4e 54 45 47 45 52 20 29 3b 0a 20 20 74  F_INTEGER );.  t
e6b0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
e6c0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  ==SQLITE_AFF_REA
e6d0: 4c 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  L );.  pIn1 = &a
e6e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
e6f0: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
e700: 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 72 63 20  (p, pIn1);.  rc 
e710: 3d 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  = ExpandBlob(pIn
e720: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
e730: 65 4d 65 6d 43 61 73 74 28 70 49 6e 31 2c 20 70  eMemCast(pIn1, p
e740: 4f 70 2d 3e 70 32 2c 20 65 6e 63 6f 64 69 6e 67  Op->p2, encoding
e750: 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
e760: 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a  BLOBSIZE(pIn1);.
e770: 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
e780: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
e790: 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  _CAST */../* Opc
e7a0: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
e7b0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e7c0: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50  is: if r[P1]<r[P
e7d0: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
e7e0: 20 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c   Compare the val
e7f0: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
e800: 50 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72  P1 and P3.  If r
e810: 65 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74  eg(P3)<reg(P1) t
e820: 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61  hen.** jump to a
e830: 64 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a  ddress P2.  .**.
e840: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e850: 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
e860: 6f 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64  of P5 is set and
e870: 20 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20   either reg(P1) 
e880: 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73  or.** reg(P3) is
e890: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20   NULL then take 
e8a0: 74 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68  the jump.  If th
e8b0: 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  e SQLITE_JUMPIFN
e8c0: 55 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63  ULL .** bit is c
e8d0: 6c 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74  lear then fall t
e8e0: 68 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72  hrough if either
e8f0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
e900: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ..**.** The SQLI
e910: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74  TE_AFF_MASK port
e920: 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62  ion of P5 must b
e930: 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68  e an affinity ch
e940: 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c  aracter -.** SQL
e950: 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51  ITE_AFF_TEXT, SQ
e960: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
e970: 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20  , and so forth. 
e980: 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61  An attempt is ma
e990: 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65  de .** to coerce
e9a0: 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63   both inputs acc
e9b0: 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61  ording to this a
e9c0: 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74  ffinity before t
e9d0: 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e  he.** comparison
e9e0: 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65   is made. If the
e9f0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ea00: 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e   is 0x00, then n
ea10: 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69  umeric.** affini
ea20: 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65  ty is used. Note
ea30: 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69   that the affini
ea40: 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61  ty conversions a
ea50: 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63  re stored.** bac
ea60: 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74  k into the input
ea70: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ea80: 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f  d P3.  So this o
ea90: 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a  pcode can cause.
eaa0: 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68  ** persistent ch
eab0: 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65  anges to registe
eac0: 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a  rs P1 and P3..**
ead0: 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e  .** Once any con
eae0: 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61  versions have ta
eaf0: 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e  ken place, and n
eb00: 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20  either value is 
eb10: 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61  NULL, .** the va
eb20: 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65  lues are compare
eb30: 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  d. If both value
eb40: 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e  s are blobs then
eb50: 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20   memcmp() is.** 
eb60: 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e  used to determin
eb70: 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  e the results of
eb80: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
eb90: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
eba0: 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68  .** are text, th
ebb0: 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61  en the appropria
ebc0: 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e  te collating fun
ebd0: 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20  ction specified 
ebe0: 69 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65  in.** P4 is  use
ebf0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
ec00: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
ec10: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
ec20: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
ec30: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
ec40: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
ec50: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
ec60: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
ec70: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
ec80: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
ec90: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
eca0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
ecb0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
ecc0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
ecd0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ece0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
ecf0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
ed00: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
ed10: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
ed20: 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54  .** If the SQLIT
ed30: 45 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66  E_STOREP2 bit of
ed40: 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
ed50: 20 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49   do not jump.  I
ed60: 6e 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65  nstead,.** store
ed70: 20 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c   a boolean resul
ed80: 74 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20  t (either 0, or 
ed90: 31 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72  1, or NULL) in r
eda0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
edb0: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
edc0: 4e 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65  NULLEQ bit is se
edd0: 74 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55  t in P5, then NU
ede0: 4c 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  LL values are co
edf0: 6e 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61  nsidered.** equa
ee00: 6c 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72  l to one another
ee10: 2c 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20  , provided that 
ee20: 74 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65  they do not have
ee30: 20 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72   their MEM_Clear
ee40: 65 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a  ed.** bit set..*
ee50: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20  /./* Opcode: Ne 
ee60: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
ee70: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
ee80: 5b 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]!=r[P3] goto
ee90: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
eea0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
eeb0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
eec0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
eed0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
eee0: 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e   the operands in
eef0: 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e   registers P1 an
ef00: 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75  d P3 are not equ
ef10: 61 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  al.  See the Lt 
ef20: 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64  opcode for.** ad
ef30: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ef40: 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53  tion..**.** If S
ef50: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
ef60: 73 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74  set in P5 then t
ef70: 68 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d  he result of com
ef80: 70 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79  parison is alway
ef90: 73 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65  s either.** true
efa0: 20 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73   or false and is
efb0: 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66   never NULL.  If
efc0: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
efd0: 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65  re NULL then the
efe0: 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f   result.** of co
eff0: 6d 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73  mparison is fals
f000: 65 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70  e.  If either op
f010: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
f020: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f030: 20 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69   true..** If nei
f040: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f050: 4e 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20  NULL the result 
f060: 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69  is the same as i
f070: 74 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a  t would be if.**
f080: 20 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c   the SQLITE_NULL
f090: 45 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69  EQ flag were omi
f0a0: 74 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f  tted from P5..*/
f0b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50  ./* Opcode: Eq P
f0c0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
f0d0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
f0e0: 50 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]==r[P3] goto 
f0f0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
f100: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
f110: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
f120: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
f130: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
f140: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
f150: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f160: 20 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a   P3 are equal..*
f170: 2a 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63  * See the Lt opc
f180: 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
f190: 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
f1a0: 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f  **.** If SQLITE_
f1b0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e  NULLEQ is set in
f1c0: 20 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73   P5 then the res
f1d0: 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  ult of compariso
f1e0: 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68  n is always eith
f1f0: 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61  er.** true or fa
f200: 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72  lse and is never
f210: 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20   NULL.  If both 
f220: 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c  operands are NUL
f230: 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  L then the resul
f240: 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73  t.** of comparis
f250: 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20  on is true.  If 
f260: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
f270: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
f280: 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e  result is false.
f290: 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f  .** If neither o
f2a0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74  perand is NULL t
f2b0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65  he result is the
f2c0: 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c   same as it woul
f2d0: 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53  d be if.** the S
f2e0: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61  QLITE_NULLEQ fla
f2f0: 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66  g were omitted f
f300: 72 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70  rom P5..*/./* Op
f310: 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50  code: Le P1 P2 P
f320: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
f330: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72  sis: if r[P1]<=r
f340: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
f350: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
f360: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
f370: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
f380: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
f390: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
f3a0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
f3b0: 72 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61  r P3 is less tha
f3c0: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f3d0: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f3e0: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f3f0: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f400: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f410: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nformation..*/./
f420: 2a 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20  * Opcode: Gt P1 
f430: 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
f440: 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31  ynopsis: if r[P1
f450: 5d 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a  ]>r[P3] goto P2.
f460: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
f470: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
f480: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
f490: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
f4a0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
f4b0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
f4c0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
f4d0: 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74  er than the cont
f4e0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f4f0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f500: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f510: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f520: 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
f530: 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20  de: Ge P1 P2 P3 
f540: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
f550: 73 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50  s: if r[P1]>=r[P
f560: 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3] goto P2.**.**
f570: 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74   This works just
f580: 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63   like the Lt opc
f590: 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20  ode except that 
f5a0: 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
f5b0: 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74  n if.** the cont
f5c0: 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20  ent of register 
f5d0: 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68  P3 is greater th
f5e0: 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
f5f0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a  he content of.**
f600: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53   register P1.  S
f610: 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65  ee the Lt opcode
f620: 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
f630: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
f640: 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20  case OP_Eq:     
f650: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
f660: 65 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70  e as TK_EQ, jump
f670: 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61  , in1, in3 */.ca
f680: 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20  se OP_Ne:       
f690: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
f6a0: 61 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20  as TK_NE, jump, 
f6b0: 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  in1, in3 */.case
f6c0: 20 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20   OP_Lt:         
f6d0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
f6e0: 20 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e   TK_LT, jump, in
f6f0: 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  1, in3 */.case O
f700: 50 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20  P_Le:           
f710: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
f720: 4b 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c  K_LE, jump, in1,
f730: 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f   in3 */.case OP_
f740: 47 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  Gt:             
f750: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
f760: 47 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69  GT, jump, in1, i
f770: 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65  n3 */.case OP_Ge
f780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
f790: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45  /* same as TK_GE
f7a0: 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33  , jump, in1, in3
f7b0: 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20   */.  int res;  
f7c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
f7d0: 75 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61  ult of the compa
f7e0: 72 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67  rison of pIn1 ag
f7f0: 61 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20  ainst pIn3 */.  
f800: 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
f810: 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
f820: 74 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61  to use for compa
f830: 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66  rison */.  u16 f
f840: 6c 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f  lags1;         /
f850: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f860: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d  l value of pIn1-
f870: 3e 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20  >flags */.  u16 
f880: 66 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20  flags3;         
f890: 2f 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69  /* Copy of initi
f8a0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33  al value of pIn3
f8b0: 2d 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49  ->flags */..  pI
f8c0: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
f8d0: 70 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61  p1];.  pIn3 = &a
f8e0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
f8f0: 66 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66  flags1 = pIn1->f
f900: 6c 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d  lags;.  flags3 =
f910: 20 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20   pIn3->flags;.  
f920: 69 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c  if( (flags1 | fl
f930: 61 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29  ags3)&MEM_Null )
f940: 7b 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20  {.    /* One or 
f950: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f960: 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66  e NULL */.    if
f970: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f980: 54 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20  TE_NULLEQ ){.   
f990: 20 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f     /* If SQLITE_
f9a0: 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77  NULLEQ is set (w
f9b0: 68 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68  hich will only h
f9c0: 61 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65  appen if the ope
f9d0: 72 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a  rator is.      *
f9e0: 2a 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65  * OP_Eq or OP_Ne
f9f0: 29 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  ) then take the 
fa00: 6a 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65  jump or not depe
fa10: 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72  nding on whether
fa20: 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74  .      ** or not
fa30: 20 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61   both operands a
fa40: 72 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a  re null..      *
fa50: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
fa60: 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
fa70: 45 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  Eq || pOp->opcod
fa80: 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20  e==OP_Ne );.    
fa90: 20 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73    assert( (flags
faa0: 31 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29  1 & MEM_Cleared)
fab0: 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  ==0 );.      ass
fac0: 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20  ert( (pOp->p5 & 
fad0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
fae0: 4c 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  L)==0 );.      i
faf0: 66 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e  f( (flags1&MEM_N
fb00: 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
fb10: 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75  & (flags3&MEM_Nu
fb20: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
fb30: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65   (flags3&MEM_Cle
fb40: 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29  ared)==0.      )
fb50: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
fb60: 30 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  0;  /* Results a
fb70: 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  re equal */.    
fb80: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
fb90: 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65   res = 1;  /* Re
fba0: 73 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71  sults are not eq
fbb0: 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20  ual */.      }. 
fbc0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fbd0: 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51  /* SQLITE_NULLEQ
fbe0: 20 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74   is clear and at
fbf0: 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61   least one opera
fc00: 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20  nd is NULL,.    
fc10: 20 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65    ** then the re
fc20: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e  sult is always N
fc30: 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68  ULL..      ** Th
fc40: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
fc50: 69 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55  if the SQLITE_JU
fc60: 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20  MPIFNULL bit is 
fc70: 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  set..      */.  
fc80: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
fc90: 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  & SQLITE_STOREP2
fca0: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74   ){.        pOut
fcb0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
fcc0: 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
fcd0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
fce0: 4f 75 74 29 3b 0a 20 20 20 20 20 20 20 20 4d 65  Out);.        Me
fcf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
fd00: 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
fd10: 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54        REGISTER_T
fd20: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f  RACE(pOp->p2, pO
fd30: 75 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ut);.      }else
fd40: 7b 0a 20 20 20 20 20 20 20 20 56 64 62 65 42 72  {.        VdbeBr
fd50: 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 0a  anchTaken(2,3);.
fd60: 20 20 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d          if( pOp-
fd70: 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d  >p5 & SQLITE_JUM
fd80: 50 49 46 4e 55 4c 4c 20 29 7b 0a 20 20 20 20 20  PIFNULL ){.     
fd90: 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74       goto jump_t
fda0: 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20 7d 0a  o_p2;.        }.
fdb0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 62 72        }.      br
fdc0: 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c  eak;.    }.  }el
fdd0: 73 65 7b 0a 20 20 20 20 2f 2a 20 4e 65 69 74 68  se{.    /* Neith
fde0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
fdf0: 4c 4c 2e 20 20 44 6f 20 61 20 63 6f 6d 70 61 72  LL.  Do a compar
fe00: 69 73 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 66 66  ison. */.    aff
fe10: 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 35 20  inity = pOp->p5 
fe20: 26 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  & SQLITE_AFF_MAS
fe30: 4b 3b 0a 20 20 20 20 69 66 28 20 61 66 66 69 6e  K;.    if( affin
fe40: 69 74 79 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity>=SQLITE_AFF_
fe50: 4e 55 4d 45 52 49 43 20 29 7b 0a 20 20 20 20 20  NUMERIC ){.     
fe60: 20 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 28   if( (flags1 & (
fe70: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
fe80: 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
fe90: 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 61  Str ){.        a
fea0: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
feb0: 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
fec0: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
fed0: 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e  flags3 & (MEM_In
fee0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
fef0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
ff00: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
ff10: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
ff20: 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n3,0);.      }. 
ff30: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66     }else if( aff
ff40: 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46  inity==SQLITE_AF
ff50: 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20  F_TEXT ){.      
ff60: 69 66 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45  if( (flags1 & ME
ff70: 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 66 6c  M_Str)==0 && (fl
ff80: 61 67 73 31 20 26 20 28 4d 45 4d 5f 49 6e 74 7c  ags1 & (MEM_Int|
ff90: 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30 20 29 7b  MEM_Real))!=0 ){
ffa0: 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61 73  .        testcas
ffb0: 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  e( pIn1->flags &
ffc0: 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20   MEM_Int );.    
ffd0: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
ffe0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
fff0: 52 65 61 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  Real );.        
10000 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74  sqlite3VdbeMemSt
10010 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e  ringify(pIn1, en
10020 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20 20 20 20  coding, 1);.    
10030 20 20 20 20 74 65 73 74 63 61 73 65 28 20 28 66      testcase( (f
10040 6c 61 67 73 31 26 4d 45 4d 5f 44 79 6e 29 20 21  lags1&MEM_Dyn) !
10050 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  = (pIn1->flags&M
10060 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20 20 20 20  EM_Dyn) );.     
10070 20 20 20 66 6c 61 67 73 31 20 3d 20 28 70 49 6e     flags1 = (pIn
10080 31 2d 3e 66 6c 61 67 73 20 26 20 7e 4d 45 4d 5f  1->flags & ~MEM_
10090 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
100a0 67 73 31 20 26 20 4d 45 4d 5f 54 79 70 65 4d 61  gs1 & MEM_TypeMa
100b0 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  sk);.      }.   
100c0 20 20 20 69 66 28 20 28 66 6c 61 67 73 33 20 26     if( (flags3 &
100d0 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20   MEM_Str)==0 && 
100e0 28 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49  (flags3 & (MEM_I
100f0 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 21 3d 30  nt|MEM_Real))!=0
10100 20 29 7b 0a 20 20 20 20 20 20 20 20 74 65 73 74   ){.        test
10110 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10120 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  s & MEM_Int );. 
10130 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10140 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn3->flags & M
10150 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20 20 20 20  EM_Real );.     
10160 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
10170 6d 53 74 72 69 6e 67 69 66 79 28 70 49 6e 33 2c  mStringify(pIn3,
10180 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29 3b 0a 20   encoding, 1);. 
10190 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
101a0 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 44 79 6e   (flags3&MEM_Dyn
101b0 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ) != (pIn3->flag
101c0 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  s&MEM_Dyn) );.  
101d0 20 20 20 20 20 20 66 6c 61 67 73 33 20 3d 20 28        flags3 = (
101e0 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 7e 4d  pIn3->flags & ~M
101f0 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c 20 28  EM_TypeMask) | (
10200 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 54 79 70  flags3 & MEM_Typ
10210 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  eMask);.      }.
10220 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
10230 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
10240 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20 70 4f 70  4_COLLSEQ || pOp
10250 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30 20 29 3b  ->p4.pColl==0 );
10260 0a 20 20 20 20 69 66 28 20 66 6c 61 67 73 31 20  .    if( flags1 
10270 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20  & MEM_Zero ){.  
10280 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
10290 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e  emExpandBlob(pIn
102a0 31 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73 31  1);.      flags1
102b0 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a 20   &= ~MEM_Zero;. 
102c0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 66 6c 61     }.    if( fla
102d0 67 73 33 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  gs3 & MEM_Zero )
102e0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
102f0 64 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62  dbeMemExpandBlob
10300 28 70 49 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c  (pIn3);.      fl
10310 61 67 73 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72  ags3 &= ~MEM_Zer
10320 6f 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 73  o;.    }.    res
10330 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
10340 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c  pare(pIn3, pIn1,
10350 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b   pOp->p4.pColl);
10360 0a 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70  .  }.  switch( p
10370 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20  Op->opcode ){.  
10380 20 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20    case OP_Eq:   
10390 20 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20   res = res==0;  
103a0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
103b0 73 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73  se OP_Ne:    res
103c0 20 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62   = res!=0;     b
103d0 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f  reak;.    case O
103e0 50 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72  P_Lt:    res = r
103f0 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
10400 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
10410 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d  :    res = res<=
10420 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  0;     break;.  
10430 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20    case OP_Gt:   
10440 20 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20   res = res>0;   
10450 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65     break;.    de
10460 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73  fault:       res
10470 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62   = res>=0;     b
10480 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  reak;.  }..  /* 
10490 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
104a0 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
104b0 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
104c0 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
104d0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
104e0 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
104f0 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
10500 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
10510 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
10520 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
10530 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
10540 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10550 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
10560 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
10570 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28  = flags3;..  if(
10580 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
10590 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
105a0 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
105b0 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41  p->p2];.    memA
105c0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
105d0 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65  pOut);.    MemSe
105e0 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
105f0 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f  MEM_Int);.    pO
10600 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20  ut->u.i = res;. 
10610 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
10620 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29  E(pOp->p2, pOut)
10630 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56  ;.  }else{.    V
10640 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
10650 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20  es!=0, (pOp->p5 
10660 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29  & SQLITE_NULLEQ)
10670 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72  ?2:3);.    if( r
10680 65 73 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  es ){.      goto
10690 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20   jump_to_p2;.   
106a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
106b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 65  }../* Opcode: Pe
106c0 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a 20  rmutation * * * 
106d0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74  P4 *.**.** Set t
106e0 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 75  he permutation u
106f0 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43 6f  sed by the OP_Co
10700 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20 74  mpare operator t
10710 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a 2a  o be the array.*
10720 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69 6e  * of integers in
10730 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70   P4..**.** The p
10740 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
10750 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
10760 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
10770 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
10780 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
10790 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
107a0 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
107b0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
107c0 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
107d0 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
107e0 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
107f0 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  re..*/.case OP_P
10800 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20  ermutation: {.  
10810 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
10820 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59  ype==P4_INTARRAY
10830 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
10840 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50  p->p4.ai );.  aP
10850 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34  ermute = pOp->p4
10860 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .ai;.  break;.}.
10870 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d 70  ./* Opcode: Comp
10880 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 20  are P1 P2 P3 P4 
10890 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
108a0 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b 50  r[P1@P3] <-> r[P
108b0 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70  2@P3].**.** Comp
108c0 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73 20  are two vectors 
108d0 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e 20  of registers in 
108e0 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31 2b  reg(P1)..reg(P1+
108f0 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69 73  P3-1) (call this
10900 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29 20  .** vector "A") 
10910 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e 2e  and in reg(P2)..
10920 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22 42  reg(P2+P3-1) ("B
10930 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72 65  ").  Save the re
10940 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20 63  sult of.** the c
10950 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75 73  omparison for us
10960 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f 50  e by the next OP
10970 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e 0a  _Jump instruct..
10980 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20  **.** If P5 has 
10990 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
109a0 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  TE bit set, then
109b0 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63 6f   the order of co
109c0 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20 64  mparison is.** d
109d0 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68 65  etermined by the
109e0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f   most recent OP_
109f0 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65 72  Permutation oper
10a00 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a 2a  ator.  If the.**
10a10 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20   OPFLAG_PERMUTE 
10a20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74 68  bit is clear, th
10a30 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65 20  en register are 
10a40 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71 75  compared in sequ
10a50 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72 2e  ential.** order.
10a60 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 4b  .**.** P4 is a K
10a70 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65  eyInfo structure
10a80 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63 6f   that defines co
10a90 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
10aa0 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f 72  s and sort.** or
10ab0 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f 6d  ders for the com
10ac0 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70 65  parison.  The pe
10ad0 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69 65  rmutation applie
10ae0 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a 2a  s to registers.*
10af0 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65 79  * only.  The Key
10b00 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61 72  Info elements ar
10b10 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69 61  e used sequentia
10b20 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  lly..**.** The c
10b30 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20 73  omparison is a s
10b40 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c 20  ort comparison, 
10b50 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72 65  so NULLs compare
10b60 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73   equal,.** NULLs
10b70 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 6e   are less than n
10b80 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73 20  umbers, numbers 
10b90 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73 74  are less than st
10ba0 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73 74  rings,.** and st
10bb0 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20 74  rings are less t
10bc0 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63 61  han blobs..*/.ca
10bd0 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 7b  se OP_Compare: {
10be0 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74 20  .  int n;.  int 
10bf0 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20 69  i;.  int p1;.  i
10c00 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20 4b  nt p2;.  const K
10c10 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f  eyInfo *pKeyInfo
10c20 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20 43  ;.  int idx;.  C
10c30 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20 20  ollSeq *pColl;  
10c40 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10c50 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20 6f  equence to use o
10c60 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a 20  n this term */. 
10c70 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20 20   int bRev;      
10c80 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20      /* True for 
10c90 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74 20  DESCENDING sort 
10ca0 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28 20  order */..  if( 
10cb0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
10cc0 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29 20  G_PERMUTE)==0 ) 
10cd0 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20  aPermute = 0;.  
10ce0 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70  n = pOp->p3;.  p
10cf0 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
10d00 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
10d10 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20 61  sert( n>0 );.  a
10d20 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 21  ssert( pKeyInfo!
10d30 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f 70  =0 );.  p1 = pOp
10d40 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70  ->p1;.  p2 = pOp
10d50 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54 45  ->p2;.#if SQLITE
10d60 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50 65  _DEBUG.  if( aPe
10d70 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74  rmute ){.    int
10d80 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20   k, mx = 0;.    
10d90 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b  for(k=0; k<n; k+
10da0 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b  +) if( aPermute[
10db0 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65  k]>mx ) mx = aPe
10dc0 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73  rmute[k];.    as
10dd0 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70 31  sert( p1>0 && p1
10de0 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10df0 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10e00 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
10e10 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d  && p2+mx<=(p->nM
10e20 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
10e30 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   );.  }else{.   
10e40 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26   assert( p1>0 &&
10e50 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d   p1+n<=(p->nMem-
10e60 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
10e70 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
10e80 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e 6e  0 && p2+n<=(p->n
10e90 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10ea0 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  1 );.  }.#endif 
10eb0 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20  /* SQLITE_DEBUG 
10ec0 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  */.  for(i=0; i<
10ed0 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78  n; i++){.    idx
10ee0 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50   = aPermute ? aP
10ef0 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20  ermute[i] : i;. 
10f00 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
10f10 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69  Valid(&aMem[p1+i
10f20 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65  dx]) );.    asse
10f30 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
10f40 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b  aMem[p2+idx]) );
10f50 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
10f60 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65  ACE(p1+idx, &aMe
10f70 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20  m[p1+idx]);.    
10f80 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10f90 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b  2+idx, &aMem[p2+
10fa0 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72  idx]);.    asser
10fb0 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e  t( i<pKeyInfo->n
10fc0 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f  Field );.    pCo
10fd0 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ll = pKeyInfo->a
10fe0 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65  Coll[i];.    bRe
10ff0 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53  v = pKeyInfo->aS
11000 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20  ortOrder[i];.   
11010 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69   iCompare = sqli
11020 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61  te3MemCompare(&a
11030 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d  Mem[p1+idx], &aM
11040 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c  em[p2+idx], pCol
11050 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d  l);.    if( iCom
11060 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66  pare ){.      if
11070 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72  ( bRev ) iCompar
11080 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20  e = -iCompare;. 
11090 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
110a0 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74 65  }.  }.  aPermute
110b0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
110c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d  ../* Opcode: Jum
110d0 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  p P1 P2 P3 * *.*
110e0 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
110f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20   instruction at 
11100 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20  address P1, P2, 
11110 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20  or P3 depending 
11120 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e  on whether.** in
11130 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
11140 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74   OP_Compare inst
11150 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76  ruction the P1 v
11160 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74  ector was less t
11170 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c  han.** equal to,
11180 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
11190 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20   the P2 vector, 
111a0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f  respectively..*/
111b0 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b  .case OP_Jump: {
111c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
111d0 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43  jump */.  if( iC
111e0 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20  ompare<0 ){.    
111f0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
11200 30 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70  0,3); pOp = &aOp
11210 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20  [pOp->p1 - 1];. 
11220 20 7d 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70   }else if( iComp
11230 61 72 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64  are==0 ){.    Vd
11240 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
11250 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
11260 4f 70 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p2 - 1];.  }
11270 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72  else{.    VdbeBr
11280 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20  anchTaken(2,3); 
11290 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e  pOp = &aOp[pOp->
112a0 70 33 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62  p3 - 1];.  }.  b
112b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
112c0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
112d0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
112e0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
112f0 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
11300 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11310 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
11320 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
11330 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
11340 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
11350 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
11360 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
11370 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
11380 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
11390 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
113a0 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
113b0 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
113c0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
113d0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
113e0 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
113f0 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
11400 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
11410 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
11420 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
11430 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
11440 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
11450 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
11460 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
11470 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
11480 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
11490 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
114a0 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
114b0 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
114c0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
114d0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
114e0 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
114f0 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
11500 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
11510 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
11520 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
11530 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
11540 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
11550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11560 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
11570 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
11580 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
11590 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
115a0 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
115b0 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
115c0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
115d0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
115e0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
115f0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
11600 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
11610 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
11620 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
11630 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
11640 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
11650 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
11660 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
11670 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11680 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
11690 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
116a0 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
116b0 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
116c0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
116d0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
116e0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
116f0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
11700 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
11710 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
11720 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
11730 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
11740 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
11750 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
11760 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
11770 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
11780 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
11790 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
117a0 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
117b0 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
117c0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
117d0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
117e0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
117f0 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
11800 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
11810 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
11820 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
11830 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
11840 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
11850 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
11860 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
11870 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
11880 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
11890 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
118a0 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
118b0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
118c0 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
118d0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
118e0 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
118f0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
11900 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
11910 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
11920 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11930 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
11940 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
11950 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
11960 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
11970 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
11980 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
11990 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
119a0 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
119b0 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
119c0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
119d0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
119e0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
119f0 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
11a00 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
11a10 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11a20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11a30 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
11a40 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
11a50 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
11a60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11a70 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
11a80 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
11a90 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
11aa0 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
11ab0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
11ac0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11ad0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
11ae0 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
11af0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
11b00 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
11b10 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
11b20 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
11b30 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
11b40 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
11b50 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
11b60 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
11b70 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
11b80 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
11b90 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
11ba0 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
11bb0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
11bc0 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
11bd0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
11be0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
11bf0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
11c00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
11c10 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11c20 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11c30 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11c40 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11c50 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11c60 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11c70 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11c80 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11c90 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
11ca0 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11cb0 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
11cc0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11cd0 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
11ce0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
11cf0 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75  e "once" flag nu
11d00 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20 69  mber P1. If it i
11d10 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69  s set, jump to i
11d20 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a  nstruction P2. .
11d30 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65  ** Otherwise, se
11d40 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
11d50 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
11d60 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
11d70 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ion..** In other
11d80 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63   words, this opc
11d90 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66  ode causes all f
11da0 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
11db0 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a   up through P2.*
11dc0 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75  * (but not inclu
11dd0 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20  ding P2) to run 
11de0 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f  just once and to
11df0 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73   be skipped on s
11e00 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d  ubsequent.** tim
11e10 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  es through the l
11e20 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22  oop..**.** All "
11e30 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65 20  once" flags are 
11e40 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65  initially cleare
11e50 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72 65  d whenever a pre
11e60 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
11e70 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73 20  ** first begins 
11e80 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20  to run..*/.case 
11e90 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
11ea0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
11eb0 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
11ec0 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  >p1<p->nOnceFlag
11ed0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
11ee0 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c  Taken(p->aOnceFl
11ef0 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20  ag[pOp->p1]!=0, 
11f00 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e  2);.  if( p->aOn
11f10 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11f20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
11f30 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b  _to_p2;.  }else{
11f40 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  .    p->aOnceFla
11f50 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a  g[pOp->p1] = 1;.
11f60 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
11f70 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31  /* Opcode: If P1
11f80 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
11f90 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11fa0 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11fb0 73 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e  ster P1 is true.
11fc0 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69    The value.** i
11fd0 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75  s considered tru
11fe0 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72  e if it is numer
11ff0 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e  ic and non-zero.
12000 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
12010 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
12020 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
12030 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
12040 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
12050 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
12060 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a  IfNot P1 P2 P3 *
12070 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
12080 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
12090 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
120a0 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76  is False.  The v
120b0 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69  alue.** is consi
120c0 64 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69  dered false if i
120d0 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20  t has a numeric 
120e0 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20  value of zero.  
120f0 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20  If the value.** 
12100 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68  in P1 is NULL th
12110 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70  en take the jump
12120 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20   if and only if 
12130 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  P3 is non-zero..
12140 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20  */.case OP_If:  
12150 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
12160 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63  * jump, in1 */.c
12170 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20  ase OP_IfNot: { 
12180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
12190 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74  mp, in1 */.  int
121a0 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   c;.  pIn1 = &aM
121b0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69  em[pOp->p1];.  i
121c0 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  f( pIn1->flags &
121d0 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20   MEM_Null ){.   
121e0 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   c = pOp->p3;.  
121f0 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51  }else{.#ifdef SQ
12200 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
12210 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d  NG_POINT.    c =
12220 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
12230 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23  alue(pIn1)!=0;.#
12240 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c  else.    c = sql
12250 69 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75  ite3VdbeRealValu
12260 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65  e(pIn1)!=0.0;.#e
12270 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70  ndif.    if( pOp
12280 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e  ->opcode==OP_IfN
12290 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d  ot ) c = !c;.  }
122a0 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
122b0 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69  en(c!=0, 2);.  i
122c0 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f 74 6f  f( c ){.    goto
122d0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
122e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
122f0 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50  Opcode: IsNull P
12300 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
12310 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31  nopsis:  if r[P1
12320 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a  ]==NULL goto P2.
12330 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32  **.** Jump to P2
12340 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   if the value in
12350 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
12360 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
12370 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20  _IsNull: {      
12380 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
12390 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70   TK_ISNULL, jump
123a0 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
123b0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
123c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
123d0 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67  ken( (pIn1->flag
123e0 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
123f0 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
12400 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
12410 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 67  ull)!=0 ){.    g
12420 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
12430 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12440 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75  /* Opcode: NotNu
12450 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ll P1 P2 * * *.*
12460 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
12470 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20  [P1]!=NULL goto 
12480 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f  P2.**.** Jump to
12490 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
124a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
124b0 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a  is not NULL.  .*
124c0 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c  /.case OP_NotNul
124d0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
124e0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f  /* same as TK_NO
124f0 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  TNULL, jump, in1
12500 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
12510 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
12520 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
12530 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
12540 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b  EM_Null)==0, 2);
12550 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12560 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12570 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a  =0 ){.    goto j
12580 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
12590 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
125a0 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
125b0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
125c0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
125d0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
125e0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
125f0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
12600 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
12610 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
12620 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
12630 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
12640 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
12650 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
12660 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
12670 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
12680 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
12690 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
126a0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
126b0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
126c0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
126d0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
126e0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
126f0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
12700 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
12710 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
12720 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
12730 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
12740 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
12750 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
12760 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
12770 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
12780 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
12790 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
127a0 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
127b0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
127c0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
127d0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
127e0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
127f0 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
12800 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
12810 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
12820 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
12830 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
12840 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
12850 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
12860 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
12870 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
12880 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
12890 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
128a0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
128b0 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
128c0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
128d0 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
128e0 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
128f0 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
12900 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
12910 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
12920 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
12930 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
12940 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
12950 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
12960 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
12970 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
12980 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
12990 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
129a0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
129b0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
129c0 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
129d0 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
129e0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
129f0 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
12a00 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
12a10 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
12a20 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
12a30 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
12a40 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a    i64 payloadSiz
12a50 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e64; /* Number o
12a60 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
12a70 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70  ecord */.  int p
12a80 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
12a90 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
12aa0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
12ab0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
12ac0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
12ad0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
12ae0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
12af0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
12b00 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
12b10 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
12b20 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
12b30 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
12b40 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
12b50 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
12b60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12b70 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
12b80 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
12b90 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
12ba0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
12bb0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
12bc0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
12bd0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
12be0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
12bf0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
12c00 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
12c10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12c20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
12c30 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
12c40 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
12c50 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
12c60 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
12c70 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12c80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
12c90 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
12ca0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
12cb0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
12cc0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
12cd0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
12ce0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
12cf0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
12d00 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
12d10 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
12d20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
12d30 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
12d40 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
12d50 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
12d60 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20   avail;         
12d70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
12d80 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  es of available 
12d90 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b  data */.  u32 t;
12da0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12db0 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d  A type code from
12dc0 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
12dd0 65 72 20 2a 2f 0a 20 20 75 31 36 20 66 78 3b 20  er */.  u16 fx; 
12de0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 44             /* pD
12df0 65 73 74 2d 3e 66 6c 61 67 73 20 76 61 6c 75 65  est->flags value
12e00 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b   */.  Mem *pReg;
12e10 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75           /* Pseu
12e20 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65  doTable input re
12e30 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20  gister */..  p2 
12e40 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
12e50 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
12e60 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
12e70 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
12e80 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d  );.  pDest = &aM
12e90 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d  em[pOp->p3];.  m
12ea0 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
12eb0 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73  p, pDest);.  ass
12ec0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
12ed0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
12ee0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
12ef0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
12f00 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
12f10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
12f20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
12f30 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
12f40 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
12f50 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
12f60 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
12f70 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
12f80 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
12f90 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
12fa0 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
12fb0 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
12fc0 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
12fd0 52 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  R );.  pCrsr = p
12fe0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 0a  C->uc.pCursor;..
12ff0 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73    /* If the curs
13000 6f 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c  or cache is stal
13010 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74  e, bring it up-t
13020 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d  o-date */.  rc =
13030 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
13040 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
13050 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
13060 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
13070 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61 63 68  ;.  if( pC->cach
13080 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61 63 68  eStatus!=p->cach
13090 65 43 74 72 20 29 7b 0a 20 20 20 20 69 66 28 20  eCtr ){.    if( 
130a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
130b0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 65 43 75       if( pC->eCu
130c0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 50  rType==CURTYPE_P
130d0 53 45 55 44 4f 20 29 7b 0a 20 20 20 20 20 20 20  SEUDO ){.       
130e0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
130f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3e 30  pseudoTableReg>0
13100 20 29 3b 0a 20 20 20 20 20 20 20 20 70 52 65 67   );.        pReg
13110 20 3d 20 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e   = &aMem[pC->uc.
13120 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b  pseudoTableReg];
13130 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13140 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d   pReg->flags & M
13150 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20  EM_Blob );.     
13160 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
13170 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a 20  Valid(pReg) );. 
13180 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f         pC->paylo
13190 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52  adSize = pC->szR
131a0 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52 65  ow = avail = pRe
131b0 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70 43  g->n;.        pC
131c0 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70 52  ->aRow = (u8*)pR
131d0 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c  eg->z;.      }el
131e0 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
131f0 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c  te3VdbeMemSetNul
13200 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20  l(pDest);.      
13210 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e    goto op_column
13220 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _out;.      }.  
13230 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
13240 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
13250 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
13260 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  EE );.      asse
13270 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
13280 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
13290 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
132a0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
132b0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
132c0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
132d0 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
132e0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
132f0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
13300 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a  payloadSize64);.
13310 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
13320 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
13330 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
13340 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
13350 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
13360 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
13370 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c  te3BtreeParseCel
13380 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56  lPtr() uses getV
13390 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74  arint32() to ext
133a0 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20  ract the.       
133b0 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
133c0 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
133d0 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
133e0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
133f0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
13400 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
13410 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
13420 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
13430 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
13440 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
13450 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20  ize64 );.       
13460 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
13470 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
13480 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
13490 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
134a0 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
134b0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
134c0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
134d0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
134e0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
134f0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
13500 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
13510 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
13520 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
13530 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53  r, &pC->payloadS
13540 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ize);.        as
13550 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
13560 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
13570 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
13580 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43  il */.        pC
13590 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
135a0 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
135b0 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
135c0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
135d0 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
135e0 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
135f0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
13600 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
13610 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13620 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
13630 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
13640 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
13650 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
13660 73 65 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f  se if( pC->paylo
13670 61 64 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62  adSize > (u32)db
13680 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
13690 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
136a0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f  .        goto to
136b0 6f 5f 62 69 67 3b 0a 20 20 20 20 20 20 7d 65 6c  o_big;.      }el
136c0 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
136d0 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
136e0 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
136f0 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
13700 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72 3b 0a   = p->cacheCtr;.
13710 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73      pC->iHdrOffs
13720 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74 33 32  et = getVarint32
13730 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66 73 65  (pC->aRow, offse
13740 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48 64 72  t);.    pC->nHdr
13750 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20 20 20  Parsed = 0;.    
13760 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f 66 66  aOffset[0] = off
13770 73 65 74 3b 0a 0a 0a 20 20 20 20 69 66 28 20 61  set;...    if( a
13780 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
13790 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
137a0 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
137b0 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
137c0 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
137d0 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
137e0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
137f0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
13800 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
13810 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
13820 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
13830 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
13840 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
13850 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
13860 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
13870 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
13880 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13890 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
138a0 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
138b0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
138c0 30 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b  0;..      /* Mak
138d0 65 20 73 75 72 65 20 61 20 63 6f 72 72 75 70 74  e sure a corrupt
138e0 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
138f0 74 20 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76  t given us an ov
13900 65 72 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20  ersize header.. 
13910 20 20 20 20 20 2a 2a 20 44 6f 20 74 68 69 73 20       ** Do this 
13920 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61 6e 20  now to avoid an 
13930 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72 79 20  oversize memory 
13940 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20 20 20  allocation..    
13950 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 54 79    **.      ** Ty
13960 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
13970 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
13980 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
13990 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
139a0 20 20 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75        ** types u
139b0 73 65 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20  se so much data 
139c0 73 70 61 63 65 20 74 68 61 74 20 74 68 65 72 65  space that there
139d0 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39   can only be 409
139e0 36 20 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20  6 and 32 of.    
139f0 20 20 2a 2a 20 74 68 65 6d 2c 20 72 65 73 70 65    ** them, respe
13a00 63 74 69 76 65 6c 79 2e 20 20 53 6f 20 74 68 65  ctively.  So the
13a10 20 6d 61 78 69 6d 75 6d 20 68 65 61 64 65 72 20   maximum header 
13a20 6c 65 6e 67 74 68 20 72 65 73 75 6c 74 73 20 66  length results f
13a30 72 6f 6d 20 61 0a 20 20 20 20 20 20 2a 2a 20 33  rom a.      ** 3
13a40 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72 20 65  -byte type for e
13a50 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78 69 6d  ach of the maxim
13a60 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f 6c 75  um of 32768 colu
13a70 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65 0a 20  mns plus three. 
13a80 20 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79       ** extra by
13a90 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
13aa0 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
13ab0 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
13ac0 20 39 38 33 30 37 2e 0a 20 20 20 20 20 20 2a 2f   98307..      */
13ad0 0a 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65  .      if( offse
13ae0 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f 66 66  t > 98307 || off
13af0 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61  set > pC->payloa
13b00 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20 20 20  dSize ){.       
13b10 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
13b20 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
13b30 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
13b40 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
13b50 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 54  .    }..    /* T
13b60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74  he following got
13b70 6f 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  o is an optimiza
13b80 74 69 6f 6e 2e 20 20 49 74 20 63 61 6e 20 62 65  tion.  It can be
13b90 20 6f 6d 69 74 74 65 64 20 61 6e 64 0a 20 20 20   omitted and.   
13ba0 20 2a 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77   ** everything w
13bb0 69 6c 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20  ill still work. 
13bc0 20 42 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69   But OP_Column i
13bd0 73 20 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73  s measurably fas
13be0 74 65 72 0a 20 20 20 20 2a 2a 20 62 79 20 73 6b  ter.    ** by sk
13bf0 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
13c00 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
13c10 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
13c20 79 73 20 74 72 75 65 2e 0a 20 20 20 20 2a 2f 0a  ys true..    */.
13c30 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
13c40 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13c50 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  ;         /* Con
13c60 64 69 74 69 6f 6e 61 6c 20 73 6b 69 70 70 65 64  ditional skipped
13c70 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70 5f   */.    goto op_
13c80 63 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64  column_read_head
13c90 65 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61  er;.  }..  /* Ma
13ca0 6b 65 20 73 75 72 65 20 61 74 20 6c 65 61 73 74  ke sure at least
13cb0 20 74 68 65 20 66 69 72 73 74 20 70 32 2b 31 20   the first p2+1 
13cc0 65 6e 74 72 69 65 73 20 6f 66 20 74 68 65 20 68  entries of the h
13cd0 65 61 64 65 72 20 68 61 76 65 20 62 65 65 6e 0a  eader have been.
13ce0 20 20 2a 2a 20 70 61 72 73 65 64 20 61 6e 64 20    ** parsed and 
13cf0 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f  valid informatio
13d00 6e 20 69 73 20 69 6e 20 61 4f 66 66 73 65 74 5b  n is in aOffset[
13d10 5d 20 61 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b  ] and pC->aType[
13d20 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43  ]..  */.  if( pC
13d30 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32  ->nHdrParsed<=p2
13d40 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
13d50 65 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64  ere is more head
13d60 65 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72  er available for
13d70 20 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20   parsing in the 
13d80 72 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20  record, try.    
13d90 2a 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64  ** to extract ad
13da0 64 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20  ditional fields 
13db0 75 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  up through the p
13dc0 32 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20  2+1-th field .  
13dd0 20 20 2a 2f 0a 20 20 20 20 6f 70 5f 63 6f 6c 75    */.    op_colu
13de0 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3a 0a  mn_read_header:.
13df0 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48 64 72      if( pC->iHdr
13e00 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74 5b 30  Offset<aOffset[0
13e10 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  ] ){.      /* Ma
13e20 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20 70 6f  ke sure zData po
13e30 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68 20 6f  ints to enough o
13e40 66 20 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20  f the record to 
13e50 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65 72  cover the header
13e60 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  . */.      if( p
13e70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a 20 20  C->aRow==0 ){.  
13e80 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d        memset(&sM
13e90 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d  em, 0, sizeof(sM
13ea0 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20 72 63  em));.        rc
13eb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
13ec0 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73 72  mFromBtree(pCrsr
13ed0 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30 5d 2c  , 0, aOffset[0],
13ee0 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
13ef0 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13f00 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13f10 20 29 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d   ) goto op_colum
13f20 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  n_error;.       
13f30 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
13f40 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  em.z;.      }els
13f50 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
13f60 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20   = pC->aRow;.   
13f70 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
13f80 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79   Fill in pC->aTy
13f90 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
13fa0 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
13fb0 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
13fc0 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69 20  eld. */.      i 
13fd0 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  = pC->nHdrParsed
13fe0 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 36 34  ;.      offset64
13ff0 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20   = aOffset[i];. 
14000 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74       zHdr = zDat
14010 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73  a + pC->iHdrOffs
14020 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64  et;.      zEndHd
14030 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66  r = zData + aOff
14040 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73  set[0];.      as
14050 73 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a  sert( i<=p2 && z
14060 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20  Hdr<zEndHdr );. 
14070 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20       do{.       
14080 20 69 66 28 20 28 74 20 3d 20 7a 48 64 72 5b 30   if( (t = zHdr[0
14090 5d 29 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20  ])<0x80 ){.     
140a0 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
140b0 20 20 20 20 20 20 20 6f 66 66 73 65 74 36 34 20         offset64 
140c0 2b 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4f 6e  += sqlite3VdbeOn
140d0 65 42 79 74 65 53 65 72 69 61 6c 54 79 70 65 4c  eByteSerialTypeL
140e0 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20 20 7d  en(t);.        }
140f0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
14100 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
14110 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
14120 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20   &t);.          
14130 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71 6c 69  offset64 += sqli
14140 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
14150 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20 20 20  eLen(t);.       
14160 20 7d 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61   }.        pC->a
14170 54 79 70 65 5b 69 2b 2b 5d 20 3d 20 74 3b 0a 20  Type[i++] = t;. 
14180 20 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69         aOffset[i
14190 5d 20 3d 20 28 75 33 32 29 28 6f 66 66 73 65 74  ] = (u32)(offset
141a0 36 34 20 26 20 30 78 66 66 66 66 66 66 66 66 29  64 & 0xffffffff)
141b0 3b 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20  ;.      }while( 
141c0 69 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45  i<=p2 && zHdr<zE
141d0 6e 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70  ndHdr );.      p
141e0 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20  C->nHdrParsed = 
141f0 69 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64  i;.      pC->iHd
14200 72 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28  rOffset = (u32)(
14210 7a 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20  zHdr - zData);. 
14220 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
14230 77 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64  w==0 ) sqlite3Vd
14240 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d  beMemRelease(&sM
14250 65 6d 29 3b 0a 20 20 0a 20 20 20 20 20 20 2f 2a  em);.  .      /*
14260 20 54 68 65 20 72 65 63 6f 72 64 20 69 73 20 63   The record is c
14270 6f 72 72 75 70 74 20 69 66 20 61 6e 79 20 6f 66  orrupt if any of
14280 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61   the following a
14290 72 65 20 74 72 75 65 3a 0a 20 20 20 20 20 20 2a  re true:.      *
142a0 2a 20 28 31 29 20 74 68 65 20 62 79 74 65 73 20  * (1) the bytes 
142b0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 65 78  of the header ex
142c0 74 65 6e 64 20 70 61 73 74 20 74 68 65 20 64 65  tend past the de
142d0 63 6c 61 72 65 64 20 68 65 61 64 65 72 20 73 69  clared header si
142e0 7a 65 0a 20 20 20 20 20 20 2a 2a 20 28 32 29 20  ze.      ** (2) 
142f0 74 68 65 20 65 6e 74 69 72 65 20 68 65 61 64 65  the entire heade
14300 72 20 77 61 73 20 75 73 65 64 20 62 75 74 20 6e  r was used but n
14310 6f 74 20 61 6c 6c 20 64 61 74 61 20 77 61 73 20  ot all data was 
14320 75 73 65 64 0a 20 20 20 20 20 20 2a 2a 20 28 33  used.      ** (3
14330 29 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  ) the end of the
14340 20 64 61 74 61 20 65 78 74 65 6e 64 73 20 62 65   data extends be
14350 79 6f 6e 64 20 74 68 65 20 65 6e 64 20 6f 66 20  yond the end of 
14360 74 68 65 20 72 65 63 6f 72 64 2e 0a 20 20 20 20  the record..    
14370 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 28    */.      if( (
14380 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26  zHdr>=zEndHdr &&
14390 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c   (zHdr>zEndHdr |
143a0 7c 20 6f 66 66 73 65 74 36 34 21 3d 70 43 2d 3e  | offset64!=pC->
143b0 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20  payloadSize)).  
143c0 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 36       || (offset6
143d0 34 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53  4 > pC->payloadS
143e0 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ize).      ){.  
143f0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
14400 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a  E_CORRUPT_BKPT;.
14410 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
14420 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
14430 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
14440 0a 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28  .      VVA_ONLY(
14450 20 74 20 3d 20 30 3b 20 29 20 2f 2a 20 4f 6e 6c   t = 0; ) /* Onl
14460 79 20 6e 65 65 64 65 64 20 62 79 20 61 73 73 65  y needed by asse
14470 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20  rt() statements 
14480 2a 2f 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  */.    }..    /*
14490 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
144a0 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
144b0 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
144c0 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
144d0 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
144e0 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
144f0 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
14500 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
14510 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
14520 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
14530 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
14540 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
14550 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
14560 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
14570 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
14580 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
14590 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
145a0 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
145b0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
145c0 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
145d0 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
145e0 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
145f0 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
14600 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14610 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
14620 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
14630 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14640 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
14650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
14660 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
14670 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
14680 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
14690 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
146a0 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
146b0 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
146c0 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
146d0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
146e0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
146f0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
14700 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
14710 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
14720 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
14730 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
14740 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
14750 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
14760 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
14770 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
14780 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
14790 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
147a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
147b0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
147c0 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43 2d 3e   assert( t==pC->
147d0 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20 20 69  aType[p2] );.  i
147e0 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d 61 4f  f( pC->szRow>=aO
147f0 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b 0a 20  ffset[p2+1] ){. 
14800 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68     /* This is th
14810 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 68  e common case wh
14820 65 72 65 20 74 68 65 20 64 65 73 69 72 65 64 20  ere the desired 
14830 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f 6e 20  content fits on 
14840 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20 20 20  the original.   
14850 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65 72 65   ** page - where
14860 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
14870 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72 66 6c  not on an overfl
14880 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20 20 73  ow page */.    s
14890 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
148a0 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66  Get(pC->aRow+aOf
148b0 66 73 65 74 5b 70 32 5d 2c 20 74 2c 20 70 44 65  fset[p2], t, pDe
148c0 73 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  st);.  }else{.  
148d0 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
148e0 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
148f0 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
14900 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
14910 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
14920 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
14930 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
14940 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
14950 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
14960 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
14970 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
14980 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
14990 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
149a0 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
149b0 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
149c0 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
149d0 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
149e0 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
149f0 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
14a00 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
14a10 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
14a20 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
14a30 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
14a40 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
14a50 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
14a60 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
14a70 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
14a80 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
14a90 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
14aa0 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
14ab0 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
14ac0 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
14ad0 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14ae0 4c 20 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20  L will work for 
14af0 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 73 74  the value for st
14b00 72 69 6e 67 73 0a 20 20 20 20 20 20 2a 2a 20 61  rings.      ** a
14b10 6e 64 20 62 6c 6f 62 73 20 61 6e 64 20 77 68 61  nd blobs and wha
14b20 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
14b30 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
14b40 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
14b50 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
14b60 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 2a  erything else. *
14b70 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
14b80 64 62 65 53 65 72 69 61 6c 47 65 74 28 74 3c 3d  dbeSerialGet(t<=
14b90 31 33 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f  13 ? (u8*)&paylo
14ba0 61 64 53 69 7a 65 36 34 20 3a 20 30 2c 20 74 2c  adSize64 : 0, t,
14bb0 20 70 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c   pDest);.    }el
14bc0 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
14bd0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f  qlite3VdbeMemFro
14be0 6d 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f  mBtree(pCrsr, aO
14bf0 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
14c00 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20  !pC->isTable,.  
14c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14c30 20 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69   pDest);.      i
14c40 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
14c50 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
14c60 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72   op_column_error
14c70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
14c80 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14c90 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a 29  lGet((const u8*)
14ca0 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44 65  pDest->z, t, pDe
14cb0 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73 74  st);.      pDest
14cc0 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d 5f  ->flags &= ~MEM_
14cd0 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 7d  Ephem;.    }.  }
14ce0 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20  .  pDest->enc = 
14cf0 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f  encoding;..op_co
14d00 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 2f 2a 20 49  lumn_out:.  /* I
14d10 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c  f the column val
14d20 75 65 20 69 73 20 61 6e 20 65 70 68 65 6d 65 72  ue is an ephemer
14d30 61 6c 20 73 74 72 69 6e 67 2c 20 67 6f 20 61 68  al string, go ah
14d40 65 61 64 20 61 6e 64 20 70 65 72 73 69 73 74 0a  ead and persist.
14d50 20 20 2a 2a 20 74 68 61 74 20 73 74 72 69 6e 67    ** that string
14d60 20 69 6e 20 63 61 73 65 20 74 68 65 20 63 75 72   in case the cur
14d70 73 6f 72 20 6d 6f 76 65 73 20 62 65 66 6f 72 65  sor moves before
14d80 20 74 68 65 20 63 6f 6c 75 6d 6e 20 76 61 6c 75   the column valu
14d90 65 20 69 73 0a 20 20 2a 2a 20 75 73 65 64 2e 20  e is.  ** used. 
14da0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
14db0 6f 64 65 20 64 6f 65 73 20 74 68 65 20 65 71 75  ode does the equ
14dc0 69 76 61 6c 65 6e 74 20 6f 66 20 44 65 65 70 68  ivalent of Deeph
14dd0 65 6d 65 72 61 6c 69 7a 65 28 29 0a 20 20 2a 2a  emeralize().  **
14de0 20 62 75 74 20 64 6f 65 73 20 69 74 20 66 61 73   but does it fas
14df0 74 65 72 2e 20 2a 2f 0a 20 20 69 66 28 20 28 70  ter. */.  if( (p
14e00 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Dest->flags & ME
14e10 4d 5f 45 70 68 65 6d 29 21 3d 30 20 26 26 20 70  M_Ephem)!=0 && p
14e20 44 65 73 74 2d 3e 7a 20 29 7b 0a 20 20 20 20 66  Dest->z ){.    f
14e30 78 20 3d 20 70 44 65 73 74 2d 3e 66 6c 61 67 73  x = pDest->flags
14e40 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
14e50 42 6c 6f 62 29 3b 0a 20 20 20 20 61 73 73 65 72  Blob);.    asser
14e60 74 28 20 66 78 21 3d 30 20 29 3b 0a 20 20 20 20  t( fx!=0 );.    
14e70 7a 44 61 74 61 20 3d 20 28 63 6f 6e 73 74 20 75  zData = (const u
14e80 38 2a 29 70 44 65 73 74 2d 3e 7a 3b 0a 20 20 20  8*)pDest->z;.   
14e90 20 6c 65 6e 20 3d 20 70 44 65 73 74 2d 3e 6e 3b   len = pDest->n;
14ea0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
14eb0 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52  VdbeMemClearAndR
14ec0 65 73 69 7a 65 28 70 44 65 73 74 2c 20 6c 65 6e  esize(pDest, len
14ed0 2b 32 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  +2) ) goto no_me
14ee0 6d 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 44  m;.    memcpy(pD
14ef0 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61 2c 20 6c  est->z, zData, l
14f00 65 6e 29 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  en);.    pDest->
14f10 7a 5b 6c 65 6e 5d 20 3d 20 30 3b 0a 20 20 20 20  z[len] = 0;.    
14f20 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20  pDest->z[len+1] 
14f30 3d 20 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e  = 0;.    pDest->
14f40 66 6c 61 67 73 20 3d 20 66 78 7c 4d 45 4d 5f 54  flags = fx|MEM_T
14f50 65 72 6d 3b 0a 20 20 7d 0a 6f 70 5f 63 6f 6c 75  erm;.  }.op_colu
14f60 6d 6e 5f 65 72 72 6f 72 3a 0a 20 20 55 50 44 41  mn_error:.  UPDA
14f70 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
14f80 70 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54  pDest);.  REGIST
14f90 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
14fa0 2c 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61  , pDest);.  brea
14fb0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14fc0 20 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20   Affinity P1 P2 
14fd0 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
14fe0 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
14ff0 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70  1@P2]).**.** App
15000 6c 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f  ly affinities to
15010 20 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72   a range of P2 r
15020 65 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e  egisters startin
15030 67 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a  g with P1..**.**
15040 20 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20   P4 is a string 
15050 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
15060 63 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20  cters long. The 
15070 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66  nth character of
15080 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69   the.** string i
15090 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c  ndicates the col
150a0 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61  umn affinity tha
150b0 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
150c0 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20   for the nth.** 
150d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
150e0 68 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73  he range..*/.cas
150f0 65 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b  e OP_Affinity: {
15100 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
15110 41 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54  Affinity;   /* T
15120 68 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62  he affinity to b
15130 65 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63  e applied */.  c
15140 68 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20  har cAff;       
15150 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e          /* A sin
15160 67 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66  gle character of
15170 20 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20   affinity */..  
15180 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d  zAffinity = pOp-
15190 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28  >p4.z;.  assert(
151a0 20 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b   zAffinity!=0 );
151b0 0a 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69  .  assert( zAffi
151c0 6e 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30  nity[pOp->p2]==0
151d0 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   );.  pIn1 = &aM
151e0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77  em[pOp->p1];.  w
151f0 68 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28  hile( (cAff = *(
15200 7a 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30  zAffinity++))!=0
15210 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
15220 70 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d  pIn1 <= &p->aMem
15230 5b 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  [(p->nMem-p->nCu
15240 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73  rsor)] );.    as
15250 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
15260 28 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 61 70  (pIn1) );.    ap
15270 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
15280 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67  , cAff, encoding
15290 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
152a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
152b0 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65  * Opcode: MakeRe
152c0 63 6f 72 64 20 50 31 20 50 32 20 50 33 20 50 34  cord P1 P2 P3 P4
152d0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
152e0 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31  r[P3]=mkrec(r[P1
152f0 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76  @P2]).**.** Conv
15300 65 72 74 20 50 32 20 72 65 67 69 73 74 65 72 73  ert P2 registers
15310 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
15320 50 31 20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63  P1 into the [rec
15330 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75  ord format].** u
15340 73 65 20 61 73 20 61 20 64 61 74 61 20 72 65 63  se as a data rec
15350 6f 72 64 20 69 6e 20 61 20 64 61 74 61 62 61 73  ord in a databas
15360 65 20 74 61 62 6c 65 20 6f 72 20 61 73 20 61 20  e table or as a 
15370 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64  key.** in an ind
15380 65 78 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  ex.  The OP_Colu
15390 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e 20 64 65  mn opcode can de
153a0 63 6f 64 65 20 74 68 65 20 72 65 63 6f 72 64 20  code the record 
153b0 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  later..**.** P4 
153c0 6d 61 79 20 62 65 20 61 20 73 74 72 69 6e 67 20  may be a string 
153d0 74 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61  that is P2 chara
153e0 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65  cters long.  The
153f0 20 6e 74 68 20 63 68 61 72 61 63 74 65 72 20 6f   nth character o
15400 66 20 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20  f the.** string 
15410 69 6e 64 69 63 61 74 65 73 20 74 68 65 20 63 6f  indicates the co
15420 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68  lumn affinity th
15430 61 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65  at should be use
15440 64 20 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a  d for the nth.**
15450 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 69 6e   field of the in
15460 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54  dex key..**.** T
15470 68 65 20 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20  he mapping from 
15480 63 68 61 72 61 63 74 65 72 20 74 6f 20 61 66 66  character to aff
15490 69 6e 69 74 79 20 69 73 20 67 69 76 65 6e 20 62  inity is given b
154a0 79 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  y the SQLITE_AFF
154b0 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64 65 66 69  _.** macros defi
154c0 6e 65 64 20 69 6e 20 73 71 6c 69 74 65 49 6e 74  ned in sqliteInt
154d0 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20  .h..**.** If P4 
154e0 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c  is NULL then all
154f0 20 69 6e 64 65 78 20 66 69 65 6c 64 73 20 68 61   index fields ha
15500 76 65 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ve the affinity 
15510 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  BLOB..*/.case OP
15520 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20  _MakeRecord: {. 
15530 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b   u8 *zNewRecord;
15540 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 75 66          /* A buf
15550 66 65 72 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  fer to hold the 
15560 64 61 74 61 20 66 6f 72 20 74 68 65 20 6e 65 77  data for the new
15570 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
15580 20 2a 70 52 65 63 3b 20 20 20 20 20 20 20 20 20   *pRec;         
15590 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
155a0 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e  ecord */.  u64 n
155b0 44 61 74 61 3b 20 20 20 20 20 20 20 20 20 20 20  Data;           
155c0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
155d0 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70 61  ytes of data spa
155e0 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72  ce */.  int nHdr
155f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15600 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
15610 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61 63  s of header spac
15620 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65  e */.  i64 nByte
15630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
15640 20 44 61 74 61 20 73 70 61 63 65 20 72 65 71 75   Data space requ
15650 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 72 65  ired for this re
15660 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 6e 5a  cord */.  i64 nZ
15670 65 72 6f 3b 20 20 20 20 20 20 20 20 20 20 20 20  ero;            
15680 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
15690 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65 20  ro bytes at the 
156a0 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72  end of the recor
156b0 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69  d */.  int nVari
156c0 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  nt;           /*
156d0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
156e0 20 69 6e 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a   in a varint */.
156f0 20 20 75 33 32 20 73 65 72 69 61 6c 5f 74 79 70    u32 serial_typ
15700 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 79 70 65  e;       /* Type
15710 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20   field */.  Mem 
15720 2a 70 44 61 74 61 30 3b 20 20 20 20 20 20 20 20  *pData0;        
15730 20 20 20 2f 2a 20 46 69 72 73 74 20 66 69 65 6c     /* First fiel
15740 64 20 74 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64  d to be combined
15750 20 69 6e 74 6f 20 74 68 65 20 72 65 63 6f 72 64   into the record
15760 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74   */.  Mem *pLast
15770 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
15780 4c 61 73 74 20 66 69 65 6c 64 20 6f 66 20 74 68  Last field of th
15790 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
157a0 74 20 6e 46 69 65 6c 64 3b 20 20 20 20 20 20 20  t nField;       
157b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
157c0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
157d0 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72  record */.  char
157e0 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20 20 20 20   *zAffinity;    
157f0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
15800 74 79 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68  ty string for th
15810 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
15820 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20  t file_format;  
15830 20 20 20 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72       /* File for
15840 6d 61 74 20 74 6f 20 75 73 65 20 66 6f 72 20 65  mat to use for e
15850 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  ncoding */.  int
15860 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
15870 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65      /* Space use
15880 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b  d in zNewRecord[
15890 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e  ] header */.  in
158a0 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
158b0 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20 75 73       /* Space us
158c0 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64  ed in zNewRecord
158d0 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20  [] content */.  
158e0 75 33 32 20 6c 65 6e 3b 20 20 20 20 20 20 20 20  u32 len;        
158f0 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68         /* Length
15900 20 6f 66 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a   of a field */..
15910 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67 20 74 68    /* Assuming th
15920 65 20 72 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e  e record contain
15930 73 20 4e 20 66 69 65 6c 64 73 2c 20 74 68 65 20  s N fields, the 
15940 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f  record format lo
15950 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68  oks.  ** like th
15960 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d  is:.  **.  ** --
15970 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15980 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15990 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
159b0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64  ------.  ** | hd
159c0 72 2d 73 69 7a 65 20 7c 20 74 79 70 65 20 30 20  r-size | type 0 
159d0 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c  | type 1 | ... |
159e0 20 74 79 70 65 20 4e 2d 31 20 7c 20 64 61 74 61   type N-1 | data
159f0 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e  0 | ... | data N
15a00 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  -1 | .  ** -----
15a10 2d 2d 2d 2d 2d 2d 2d 2d 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 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61  ---.  **.  ** Da
15a60 74 61 28 30 29 20 69 73 20 74 61 6b 65 6e 20 66  ta(0) is taken f
15a70 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31 2e  rom register P1.
15a80 20 20 44 61 74 61 28 31 29 20 63 6f 6d 65 73 20    Data(1) comes 
15a90 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 31  from register P1
15aa0 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66  +1.  ** and so f
15ab0 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  orth..  **.  ** 
15ac0 45 61 63 68 20 74 79 70 65 20 66 69 65 6c 64 20  Each type field 
15ad0 69 73 20 61 20 76 61 72 69 6e 74 20 72 65 70 72  is a varint repr
15ae0 65 73 65 6e 74 69 6e 67 20 74 68 65 20 73 65 72  esenting the ser
15af0 69 61 6c 20 74 79 70 65 20 6f 66 20 74 68 65 20  ial type of the 
15b00 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64  .  ** correspond
15b10 69 6e 67 20 64 61 74 61 20 65 6c 65 6d 65 6e 74  ing data element
15b20 20 28 73 65 65 20 73 71 6c 69 74 65 33 56 64 62   (see sqlite3Vdb
15b30 65 53 65 72 69 61 6c 54 79 70 65 28 29 29 2e 20  eSerialType()). 
15b40 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a  The.  ** hdr-siz
15b50 65 20 66 69 65 6c 64 20 69 73 20 61 6c 73 6f 20  e field is also 
15b60 61 20 76 61 72 69 6e 74 20 77 68 69 63 68 20 69  a varint which i
15b70 73 20 74 68 65 20 6f 66 66 73 65 74 20 66 72 6f  s the offset fro
15b80 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a  m the beginning.
15b90 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
15ba0 72 64 20 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a  rd to data0..  *
15bb0 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30 3b 20 20  /.  nData = 0;  
15bc0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15bd0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64 61 74   of bytes of dat
15be0 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64  a space */.  nHd
15bf0 72 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  r = 0;          
15c00 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
15c10 65 73 20 6f 66 20 68 65 61 64 65 72 20 73 70 61  es of header spa
15c20 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20  ce */.  nZero = 
15c30 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  0;         /* Nu
15c40 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62 79 74  mber of zero byt
15c50 65 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  es at the end of
15c60 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
15c70 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70   nField = pOp->p
15c80 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74 79 20 3d  1;.  zAffinity =
15c90 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73   pOp->p4.z;.  as
15ca0 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 30 20 26  sert( nField>0 &
15cb0 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  & pOp->p2>0 && p
15cc0 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28  Op->p2+nField<=(
15cd0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15ce0 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
15cf0 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
15d00 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
15d10 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
15d20 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
15d30 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
15d40 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
15d50 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
15d60 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
15d70 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
15d80 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
15d90 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
15da0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
15db0 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
15dc0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
15dd0 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
15de0 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
15df0 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
15e00 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
15e10 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
15e20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
15e30 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
15e40 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
15e50 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
15e60 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
15e70 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
15e80 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
15e90 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
15ea0 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
15eb0 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
15ec0 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
15ed0 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
15ee0 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
15ef0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
15f00 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
15f10 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
15f20 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
15f30 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
15f40 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
15f50 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
15f60 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
15f70 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
15f80 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
15f90 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
15fa0 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
15fb0 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
15fc0 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
15fd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15fe0 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
15ff0 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a  _format, &len);.
16000 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
16010 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
16020 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
16030 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
16040 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
16050 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
16060 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16070 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16080 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
16090 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
160a0 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
160b0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
160c0 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
160d0 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
160e0 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
160f0 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
16100 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
16110 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
16120 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16130 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16140 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16150 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16160 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
16170 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
16180 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
16190 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
161a0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
161b0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
161c0 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
161d0 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
161e0 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
161f0 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
16200 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
16210 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
16220 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
16230 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
16240 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
16250 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
16260 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
16270 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
16280 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16290 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
162a0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
162b0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
162c0 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
162d0 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
162e0 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
162f0 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
16300 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
16310 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
16320 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
16330 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
16340 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
16350 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
16360 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
16370 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
16380 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
16390 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a  ;.  if( nByte+nZ
163a0 65 72 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  ero>db->aLimit[S
163b0 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47  QLITE_LIMIT_LENG
163c0 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  TH] ){.    goto 
163d0 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20  too_big;.  }..  
163e0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
163f0 20 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72   output register
16400 20 68 61 73 20 61 20 62 75 66 66 65 72 20 6c 61   has a buffer la
16410 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74  rge enough to st
16420 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65  ore .  ** the ne
16430 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75  w record. The ou
16440 74 70 75 74 20 72 65 67 69 73 74 65 72 20 28 70  tput register (p
16450 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61  Op->p3) is not a
16460 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62  llowed to.  ** b
16470 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70  e one of the inp
16480 75 74 20 72 65 67 69 73 74 65 72 73 20 28 62 65  ut registers (be
16490 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77  cause the follow
164a0 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a  ing call to.  **
164b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
164c0 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20  learAndResize() 
164d0 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68  could clobber th
164e0 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69  e value before i
164f0 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f  t is used)..  */
16500 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64  .  if( sqlite3Vd
16510 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73  beMemClearAndRes
16520 69 7a 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  ize(pOut, (int)n
16530 42 79 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74  Byte) ){.    got
16540 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
16550 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38  zNewRecord = (u8
16560 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f   *)pOut->z;..  /
16570 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63 6f  * Write the reco
16580 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56  rd */.  i = putV
16590 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f  arint32(zNewReco
165a0 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d  rd, nHdr);.  j =
165b0 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28   nHdr;.  assert(
165c0 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29   pData0<=pLast )
165d0 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74 61  ;.  pRec = pData
165e0 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72  0;.  do{.    ser
165f0 69 61 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d  ial_type = pRec-
16600 3e 75 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45  >uTemp;.    /* E
16610 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36  VIDENCE-OF: R-06
16620 35 32 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77  529-47362 Follow
16630 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76 61 72  ing the size var
16640 69 6e 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d  int are one or m
16650 6f 72 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74  ore.    ** addit
16660 69 6f 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f  ional varints, o
16670 6e 65 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a  ne per column. *
16680 2f 0a 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61  /.    i += putVa
16690 72 69 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f  rint32(&zNewReco
166a0 72 64 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79  rd[i], serial_ty
166b0 70 65 29 3b 20 20 20 20 20 20 20 20 20 20 20 20  pe);            
166c0 2f 2a 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a  /* serial type *
166d0 2f 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  /.    /* EVIDENC
166e0 45 2d 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31  E-OF: R-64536-51
166f0 37 32 38 20 54 68 65 20 76 61 6c 75 65 73 20 66  728 The values f
16700 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69  or each column i
16710 6e 20 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20  n the record.   
16720 20 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20   ** immediately 
16730 66 6f 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65  follow the heade
16740 72 2e 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  r. */.    j += s
16750 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
16760 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
16770 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
16780 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
16790 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
167a0 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
167b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
167c0 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
167d0 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
167e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
167f0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
16800 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
16810 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
16820 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
16830 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
16840 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e  EM_Blob;.  if( n
16850 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74  Zero ){.    pOut
16860 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72  ->u.nZero = nZer
16870 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  o;.    pOut->fla
16880 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a  gs |= MEM_Zero;.
16890 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20    }.  pOut->enc 
168a0 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20  = SQLITE_UTF8;  
168b0 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62  /* In case the b
168c0 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f 6e 76  lob is ever conv
168d0 65 72 74 65 64 20 74 6f 20 74 65 78 74 20 2a 2f  erted to text */
168e0 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
168f0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
16900 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
16910 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
16920 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
16930 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31 20 50  code: Count P1 P
16940 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
16950 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74  sis: r[P2]=count
16960 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  ().**.** Store t
16970 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74  he number of ent
16980 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67 65 72  ries (an integer
16990 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65 20 74   value) in the t
169a0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a  able or index .*
169b0 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75 72 73  * opened by curs
169c0 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73 74 65  or P1 in registe
169d0 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  r P2.*/.#ifndef 
169e0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
169f0 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43  ECOUNT.case OP_C
16a00 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ount: {         
16a10 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
16a20 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43 75 72   nEntry;.  BtCur
16a30 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61  sor *pCrsr;..  a
16a40 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b  ssert( p->apCsr[
16a50 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79  pOp->p1]->eCurTy
16a60 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
16a70 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  E );.  pCrsr = p
16a80 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
16a90 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20  ->uc.pCursor;.  
16aa0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
16ab0 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20  .  nEntry = 0;  
16ac0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
16ad0 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
16ae0 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
16af0 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
16b00 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43 72 73  3BtreeCount(pCrs
16b10 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20 20 70  r, &nEntry);.  p
16b20 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
16b30 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
16b40 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e 74  pOut->u.i = nEnt
16b50 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  ry;.  break;.}.#
16b60 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65  endif../* Opcode
16b70 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20 2a  : Savepoint P1 *
16b80 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70   * P4 *.**.** Op
16b90 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20 72  en, release or r
16ba0 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76 65  ollback the save
16bb0 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20 70  point named by p
16bc0 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65 70  arameter P4, dep
16bd0 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68 65  ending.** on the
16be0 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54 6f   value of P1. To
16bf0 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76 65   open a new save
16c00 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54 6f  point, P1==0. To
16c10 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74   release (commit
16c20 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e 67  ) an.** existing
16c30 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d 3d   savepoint, P1==
16c40 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61 63  1, or to rollbac
16c50 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73 61  k an existing sa
16c60 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a 2a  vepoint P1==2..*
16c70 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70 6f  /.case OP_Savepo
16c80 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31 3b  int: {.  int p1;
16c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ca0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
16cb0 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64 20  e of P1 operand 
16cc0 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  */.  char *zName
16cd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16ce0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
16cf0 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20 69  savepoint */.  i
16d00 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76 65  nt nName;.  Save
16d10 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20 53  point *pNew;.  S
16d20 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70  avepoint *pSavep
16d30 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69 6e  oint;.  Savepoin
16d40 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20 69  t *pTmp;.  int i
16d50 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e 74  Savepoint;.  int
16d60 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f 70   ii;..  p1 = pOp
16d70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d 20  ->p1;.  zName = 
16d80 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f 2a  pOp->p4.z;..  /*
16d90 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
16da0 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69 73   p1 parameter is
16db0 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68 61   valid. Also tha
16dc0 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f  t if there is no
16dd0 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e 73   open.  ** trans
16de0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68 65  action, then the
16df0 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e 79  re cannot be any
16e00 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20 20   savepoints. .  
16e10 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  */.  assert( db-
16e20 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20 7c  >pSavepoint==0 |
16e30 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  | db->autoCommit
16e40 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
16e50 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42   p1==SAVEPOINT_B
16e60 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EGIN||p1==SAVEPO
16e70 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31 3d  INT_RELEASE||p1=
16e80 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42  =SAVEPOINT_ROLLB
16e90 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ACK );.  assert(
16ea0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20   db->pSavepoint 
16eb0 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63  || db->isTransac
16ec0 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d 30  tionSavepoint==0
16ed0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63 68   );.  assert( ch
16ee0 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e  eckSavepointCoun
16ef0 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65 72  t(db) );.  asser
16f00 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
16f10 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53 41  );..  if( p1==SA
16f20 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29 7b  VEPOINT_BEGIN ){
16f30 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56 64  .    if( db->nVd
16f40 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20  beWrite>0 ){.   
16f50 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76 65     /* A new save
16f60 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65 20  point cannot be 
16f70 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72 65  created if there
16f80 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74   are active writ
16f90 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61 74  e .      ** stat
16fa0 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70 65  ements (i.e. ope
16fb0 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e 63  n read/write inc
16fc0 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68 61  remental blob ha
16fd0 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a 2f  ndles)..      */
16fe0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
16ff0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
17000 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e  ot open savepoin
17010 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  t - SQL statemen
17020 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17030 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17040 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17050 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d 65  lse{.      nName
17060 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e   = sqlite3Strlen
17070 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66 6e  30(zName);..#ifn
17080 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
17090 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 20  VIRTUALTABLE.   
170a0 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c 20     /* This call 
170b0 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74 68  is Ok even if th
170c0 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73 20  is savepoint is 
170d0 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e 73  actually a trans
170e0 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20  action.      ** 
170f0 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20 74  savepoint (and t
17100 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64 20  herefore should 
17110 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76 65  not prompt xSave
17120 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61 63  point()) callbac
17130 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66 20  ks..      ** If 
17140 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73 61  this is a transa
17150 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 20  ction savepoint 
17160 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69 74  being opened, it
17170 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a 20   is guaranteed. 
17180 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 65       ** that the
17190 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20 61   db->aVTrans[] a
171a0 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20 20  rray is empty.  
171b0 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
171c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d   db->autoCommit=
171d0 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61 6e  =0 || db->nVTran
171e0 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72 63  s==0 );.      rc
171f0 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61   = sqlite3VtabSa
17200 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45  vepoint(db, SAVE
17210 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20 20  POINT_BEGIN,.   
17220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17230 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
17240 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d 3e  >nStatement+db->
17250 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  nSavepoint);.   
17260 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
17270 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
17280 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
17290 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f 2a  #endif..      /*
172a0 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73 61   Create a new sa
172b0 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75 72  vepoint structur
172c0 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65 77  e. */.      pNew
172d0 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
172e0 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66  ocRaw(db, sizeof
172f0 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e 61 6d  (Savepoint)+nNam
17300 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20  e+1);.      if( 
17310 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20  pNew ){.        
17320 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20 28 63  pNew->zName = (c
17330 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d 3b 0a  har *)&pNew[1];.
17340 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79 28 70          memcpy(p
17350 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  New->zName, zNam
17360 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20  e, nName+1);.   
17370 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20   .        /* If 
17380 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
17390 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
173a0 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61 73 20  en mark this as 
173b0 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20 20 20  a special.      
173c0 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74 69 6f    ** "transactio
173d0 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20 2a 2f  n savepoint". */
173e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 64 62 2d  .        if( db-
173f0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20  >autoCommit ){. 
17400 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75 74           db->aut
17410 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20  oCommit = 0;.   
17420 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
17430 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
17440 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  t = 1;.        }
17450 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
17460 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2b 2b  db->nSavepoint++
17470 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17480 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
17490 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
174a0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
174b0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
174c0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
174d0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
174e0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
174f0 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
17500 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
17510 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
17520 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
17530 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
17540 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
17550 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
17560 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
17570 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
17580 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
17590 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
175a0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
175b0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
175c0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
175d0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
175e0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
175f0 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
17600 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
17610 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
17620 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
17630 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
17640 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
17650 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
17660 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
17670 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
17680 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
17690 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
176a0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
176b0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
176c0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
176d0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
176e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
176f0 72 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20  ror(p, "no such 
17700 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
17710 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
17720 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
17730 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
17740 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17750 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
17760 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17770 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
17780 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
17790 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
177a0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
177b0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
177c0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
177d0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
177e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
177f0 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e  beError(p, "cann
17800 6f 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70  ot release savep
17810 6f 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20  oint - ".       
17820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17830 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e     "SQL statemen
17840 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29  ts in progress")
17850 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  ;.      rc = SQL
17860 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65  ITE_BUSY;.    }e
17870 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  lse{..      /* D
17880 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
17890 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20   or not this is 
178a0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61  a transaction sa
178b0 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a  vepoint. If so,.
178c0 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69        ** and thi
178d0 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63  s is a RELEASE c
178e0 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65  ommand, then the
178f0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
17900 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69  tion .      ** i
17910 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20  s committed. .  
17920 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74      */.      int
17930 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d   isTransaction =
17940 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65   pSavepoint->pNe
17950 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54  xt==0 && db->isT
17960 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17970 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69  int;.      if( i
17980 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20  sTransaction && 
17990 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
179a0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
179b0 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74   if( (rc = sqlit
179c0 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c  e3VdbeCheckFk(p,
179d0 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   1))!=SQLITE_OK 
179e0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  ){.          got
179f0 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
17a00 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
17a10 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
17a20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28  = 1;.        if(
17a30 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
17a40 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
17a50 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d   ){.          p-
17a60 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
17a70 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20  - aOp);.        
17a80 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17a90 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
17aa0 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c  p->rc = rc = SQL
17ab0 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20  ITE_BUSY;.      
17ac0 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
17ad0 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a  turn;.        }.
17ae0 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72          db->isTr
17af0 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
17b00 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  nt = 0;.        
17b10 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20  rc = p->rc;.    
17b20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
17b30 20 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61   int isSchemaCha
17b40 6e 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61  nge;.        iSa
17b50 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53  vepoint = db->nS
17b60 61 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65  avepoint - iSave
17b70 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20  point - 1;.     
17b80 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50     if( p1==SAVEP
17b90 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b  OINT_ROLLBACK ){
17ba0 0a 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68  .          isSch
17bb0 65 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d  emaChange = (db-
17bc0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
17bd0 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d  InternChanges)!=
17be0 30 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  0;.          for
17bf0 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44  (ii=0; ii<db->nD
17c00 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20  b; ii++){.      
17c10 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
17c20 65 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75  e3BtreeTripAllCu
17c30 72 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69  rsors(db->aDb[ii
17c40 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20  ].pBt,.         
17c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
17c70 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42  LITE_ABORT_ROLLB
17c80 41 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ACK,.           
17c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63              isSc
17cb0 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a  hemaChange==0);.
17cc0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20              if( 
17cd0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
17ce0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17cf0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
17d00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
17d10 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73  se{.          is
17d20 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30  SchemaChange = 0
17d30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17d40 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69      for(ii=0; ii
17d50 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b  <db->nDb; ii++){
17d60 0a 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20  .          rc = 
17d70 73 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65  sqlite3BtreeSave
17d80 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69  point(db->aDb[ii
17d90 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65  ].pBt, p1, iSave
17da0 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20  point);.        
17db0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17dc0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
17dd0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
17de0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17df0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17e00 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73  }.        if( is
17e10 53 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a  SchemaChange ){.
17e20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
17e30 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
17e40 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
17e50 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
17e60 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
17e70 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b  fConnection(db);
17e80 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66  .          db->f
17e90 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67  lags = (db->flag
17ea0 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72  s | SQLITE_Inter
17eb0 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20  nChanges);.     
17ec0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a     }.      }.  .
17ed0 20 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c        /* Regardl
17ee0 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74  ess of whether t
17ef0 68 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45  his is a RELEASE
17f00 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65   or ROLLBACK, de
17f10 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20  stroy all .     
17f20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e   ** savepoints n
17f30 65 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20  ested inside of 
17f40 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65  the savepoint be
17f50 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e  ing operated on.
17f60 20 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28   */.      while(
17f70 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21   db->pSavepoint!
17f80 3d 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  =pSavepoint ){. 
17f90 20 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62         pTmp = db
17fa0 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ->pSavepoint;.  
17fb0 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70        db->pSavep
17fc0 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65  oint = pTmp->pNe
17fd0 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  xt;.        sqli
17fe0 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54  te3DbFree(db, pT
17ff0 6d 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  mp);.        db-
18000 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
18010 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
18020 20 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45   If it is a RELE
18030 41 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f  ASE, then destro
18040 79 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  y the savepoint 
18050 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f  being operated o
18060 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e  n .      ** too.
18070 20 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c   If it is a ROLL
18080 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65  BACK TO, then se
18090 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
180a0 64 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20  deferred .      
180b0 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ** constraint vi
180c0 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74  olations present
180d0 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
180e0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74   to the value st
180f0 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68  ored.      ** wh
18100 65 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  en the savepoint
18110 20 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a   was created.  *
18120 2f 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d  /.      if( p1==
18130 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
18140 45 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  E ){.        ass
18150 65 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d  ert( pSavepoint=
18160 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20  =db->pSavepoint 
18170 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70  );.        db->p
18180 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76  Savepoint = pSav
18190 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20  epoint->pNext;. 
181a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
181b0 46 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f  Free(db, pSavepo
181c0 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66  int);.        if
181d0 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
181e0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62   ){.          db
181f0 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a  ->nSavepoint--;.
18200 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
18210 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
18220 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  b->nDeferredCons
18230 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e   = pSavepoint->n
18240 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
18250 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
18260 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61  redImmCons = pSa
18270 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72  vepoint->nDeferr
18280 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20  edImmCons;.     
18290 20 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69   }..      if( !i
182a0 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20  sTransaction || 
182b0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f  p1==SAVEPOINT_RO
182c0 4c 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20  LLBACK ){.      
182d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
182e0 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
182f0 70 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b  p1, iSavepoint);
18300 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
18310 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18320 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18330 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
18340 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b    }.  }..  break
18350 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
18360 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32  AutoCommit P1 P2
18370 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74   * * *.**.** Set
18380 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 75   the database au
18390 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74  to-commit flag t
183a0 6f 20 50 31 20 28 31 20 6f 72 20 30 29 2e 20 49  o P1 (1 or 0). I
183b0 66 20 50 32 20 69 73 20 74 72 75 65 2c 20 72 6f  f P2 is true, ro
183c0 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63  ll.** back any c
183d0 75 72 72 65 6e 74 6c 79 20 61 63 74 69 76 65 20  urrently active 
183e0 62 74 72 65 65 20 74 72 61 6e 73 61 63 74 69 6f  btree transactio
183f0 6e 73 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ns. If there are
18400 20 61 6e 79 20 61 63 74 69 76 65 0a 2a 2a 20 56   any active.** V
18410 4d 73 20 28 61 70 61 72 74 20 66 72 6f 6d 20 74  Ms (apart from t
18420 68 69 73 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61  his one), then a
18430 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e   ROLLBACK fails.
18440 20 20 41 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73    A COMMIT fails
18450 20 69 66 0a 2a 2a 20 74 68 65 72 65 20 61 72 65   if.** there are
18460 20 61 63 74 69 76 65 20 77 72 69 74 69 6e 67 20   active writing 
18470 56 4d 73 20 6f 72 20 61 63 74 69 76 65 20 56 4d  VMs or active VM
18480 73 20 74 68 61 74 20 75 73 65 20 73 68 61 72 65  s that use share
18490 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54  d cache..**.** T
184a0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
184b0 63 61 75 73 65 73 20 74 68 65 20 56 4d 20 74 6f  causes the VM to
184c0 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f   halt..*/.case O
184d0 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a  P_AutoCommit: {.
184e0 20 20 69 6e 74 20 64 65 73 69 72 65 64 41 75 74    int desiredAut
184f0 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69  oCommit;.  int i
18500 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20  Rollback;.  int 
18510 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73  turnOnAC;..  des
18520 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d  iredAutoCommit =
18530 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c   pOp->p1;.  iRol
18540 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b  lback = pOp->p2;
18550 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65  .  turnOnAC = de
18560 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20  siredAutoCommit 
18570 26 26 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && !db->autoComm
18580 69 74 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  it;.  assert( de
18590 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
185a0 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
185b0 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
185c0 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
185d0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
185e0 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
185f0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
18600 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
18610 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
18620 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
18630 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
18640 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
18650 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26    if( turnOnAC &
18660 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20  & !iRollback && 
18670 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30  db->nVdbeWrite>0
18680 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68   ){.    /* If th
18690 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69  is instruction i
186a0 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d  mplements a COMM
186b0 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73  IT and other VMs
186c0 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20   are writing.   
186d0 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72   ** return an er
186e0 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74  ror indicating t
186f0 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
18700 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
18710 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
18720 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
18730 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
18740 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
18750 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
18760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53                "S
18770 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
18780 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
18790 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
187a0 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
187b0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
187c0 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
187d0 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
187e0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
187f0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
18800 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
18810 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
18820 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
18830 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
18840 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
18850 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
18860 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
18870 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
18880 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
18890 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
188a0 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
188b0 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
188c0 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
188d0 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
188e0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d  utoCommit;.    }
188f0 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
18900 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c  VdbeHalt(p)==SQL
18910 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20 20  ITE_BUSY ){.    
18920 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
18930 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
18940 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
18950 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69 72 65   = (u8)(1-desire
18960 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20  dAutoCommit);.  
18970 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
18980 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18990 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65      goto vdbe_re
189a0 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20  turn;.    }.    
189b0 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61  assert( db->nSta
189c0 74 65 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20  tement==0 );.   
189d0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76   sqlite3CloseSav
189e0 65 70 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20  epoints(db);.   
189f0 20 69 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49   if( p->rc==SQLI
18a00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
18a10 63 20 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b  c = SQLITE_DONE;
18a20 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
18a30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
18a40 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  ROR;.    }.    g
18a50 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
18a60 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
18a70 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70  lite3VdbeError(p
18a80 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65 73 69  ,.        (!desi
18a90 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22  redAutoCommit)?"
18aa0 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61 20 74  cannot start a t
18ab0 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74 68 69  ransaction withi
18ac0 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
18ad0 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52 6f 6c  :(.        (iRol
18ae0 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72  lback)?"cannot r
18af0 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61  ollback - no tra
18b00 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69  nsaction is acti
18b10 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20 20 20  ve":.           
18b20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20          "cannot 
18b30 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e  commit - no tran
18b40 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
18b50 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20 20 0a  e"));.         .
18b60 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
18b70 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62 72 65  ERROR;.  }.  bre
18b80 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
18b90 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20 50 31  : Transaction P1
18ba0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
18bb0 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61 6e 73  ** Begin a trans
18bc0 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61 62 61  action on databa
18bd0 73 65 20 50 31 20 69 66 20 61 20 74 72 61 6e 73  se P1 if a trans
18be0 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 61 6c  action is not al
18bf0 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76 65 2e  ready.** active.
18c00 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 6e  .** If P2 is non
18c10 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 77 72  -zero, then a wr
18c20 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  ite-transaction 
18c30 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72 20 69  is started, or i
18c40 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74 72 61  f a .** read-tra
18c50 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c 72 65  nsaction is alre
18c60 61 64 79 20 61 63 74 69 76 65 2c 20 69 74 20 69  ady active, it i
18c70 73 20 75 70 67 72 61 64 65 64 20 74 6f 20 61 20  s upgraded to a 
18c80 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
18c90 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 7a  n..** If P2 is z
18ca0 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65 61 64  ero, then a read
18cb0 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20  -transaction is 
18cc0 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50  started..**.** P
18cd0 31 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f  1 is the index o
18ce0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  f the database f
18cf0 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ile on which the
18d00 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 0a   transaction is.
18d10 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49 6e 64  ** started.  Ind
18d20 65 78 20 30 20 69 73 20 74 68 65 20 6d 61 69 6e  ex 0 is the main
18d30 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61   database file a
18d40 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20 74 68  nd index 1 is th
18d50 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64 20 66  e.** file used f
18d60 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  or temporary tab
18d70 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20 6f 66  les.  Indices of
18d80 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65 20 75   2 or more are u
18d90 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74 61 63  sed for.** attac
18da0 68 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a  hed databases..*
18db0 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74 65 2d  *.** If a write-
18dc0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
18dd0 74 61 72 74 65 64 20 61 6e 64 20 74 68 65 20 56  tarted and the V
18de0 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f 75 72  dbe.usesStmtJour
18df0 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a 20 74  nal flag is.** t
18e00 72 75 65 20 28 74 68 69 73 20 66 6c 61 67 20 69  rue (this flag i
18e10 73 20 73 65 74 20 69 66 20 74 68 65 20 56 64 62  s set if the Vdb
18e20 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d 6f 72  e may modify mor
18e30 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77 20 61  e than one row a
18e40 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f 77 20  nd may.** throw 
18e50 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69  an ABORT excepti
18e60 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65 6e 74  on), a statement
18e70 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
18e80 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64 2e   also be opened.
18e90 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69 66 69  .** More specifi
18ea0 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65 6d 65  cally, a stateme
18eb0 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
18ec0 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74 68 65  s opened iff the
18ed0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
18ee0 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65  nection is curre
18ef0 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75 74 6f  ntly not in auto
18f00 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f 72 20  commit mode, or 
18f10 69 66 20 74 68 65 72 65 20 61 72 65 20 6f 74 68  if there are oth
18f20 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73 74 61  er.** active sta
18f30 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61 74 65  tements. A state
18f40 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18f50 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68 61 6e   allows the chan
18f60 67 65 73 20 6d 61 64 65 20 62 79 20 74 68 69 73  ges made by this
18f70 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65 20 72  .** VDBE to be r
18f80 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74 65 72  olled back after
18f90 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68 6f 75   an error withou
18fa0 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f 6c 6c  t having to roll
18fb0 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65 6e 74   back the.** ent
18fc0 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ire transaction.
18fd0 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69 73 20   If no error is 
18fe0 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74 68 65  encountered, the
18ff0 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19000 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61  action.** will a
19010 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6d  utomatically com
19020 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56 44 42  mit when the VDB
19030 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49  E halts..**.** I
19040 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74 68 69  f P5!=0 then thi
19050 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20 63 68  s opcode also ch
19060 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d 61 20  ecks the schema 
19070 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74 20 50  cookie against P
19080 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73 63 68  3.** and the sch
19090 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  ema generation c
190a0 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74 20 50  ounter against P
190b0 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b 69 65  4..** The cookie
190c0 20 63 68 61 6e 67 65 73 20 69 74 73 20 76 61 6c   changes its val
190d0 75 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  ue whenever the 
190e0 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
190f0 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68 69 73  changes..** This
19100 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 75 73   operation is us
19110 65 64 20 74 6f 20 64 65 74 65 63 74 20 77 68 65  ed to detect whe
19120 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f 6b 69  n that the cooki
19130 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2a  e has changed.**
19140 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 63 75   and that the cu
19150 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 6e 65  rrent process ne
19160 65 64 73 20 74 6f 20 72 65 72 65 61 64 20 74 68  eds to reread th
19170 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20 74 68  e schema.  If th
19180 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b  e schema.** cook
19190 69 65 20 69 6e 20 50 33 20 64 69 66 66 65 72 73  ie in P3 differs
191a0 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65 6d 61   from the schema
191b0 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65 20 64   cookie in the d
191c0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 20 6f  atabase header o
191d0 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63 68 65  r.** if the sche
191e0 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f  ma generation co
191f0 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69 66 66  unter in P4 diff
19200 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63 75 72  ers from the cur
19210 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61 74 69  rent.** generati
19220 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68 65 6e  on counter, then
19230 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48 45 4d   an SQLITE_SCHEM
19240 41 20 65 72 72 6f 72 20 69 73 20 72 61 69 73 65  A error is raise
19250 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f 6e 0a  d and execution.
19260 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65 20 73  ** halts.  The s
19270 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 77 72  qlite3_step() wr
19280 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d  apper function m
19290 69 67 68 74 20 74 68 65 6e 20 72 65 70 72 65 70  ight then reprep
192a0 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61 74 65  are the.** state
192b0 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e 20 69  ment and rerun i
192c0 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  t from the begin
192d0 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ning..*/.case OP
192e0 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a  _Transaction: {.
192f0 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20    Btree *pBt;.  
19300 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74  int iMeta;.  int
19310 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65 72 74   iGen;..  assert
19320 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
19330 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
19340 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f  eadOnly==0 || pO
19350 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 61 73  p->p2==0 );.  as
19360 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
19370 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
19380 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
19390 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
193a0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
193b0 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d  1) );.  if( pOp-
193c0 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c 61 67  >p2 && (db->flag
193d0 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65 72 79  s & SQLITE_Query
193e0 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20 20 20  Only)!=0 ){.    
193f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45 41 44  rc = SQLITE_READ
19400 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f 20 61  ONLY;.    goto a
19410 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
19420 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d 20 64  r;.  }.  pBt = d
19430 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
19440 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42 74 20  pBt;..  if( pBt 
19450 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
19460 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72 61  te3BtreeBeginTra
19470 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70 32 29  ns(pBt, pOp->p2)
19480 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
19490 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f  rc==SQLITE_BUSY_
194a0 53 4e 41 50 53 48 4f 54 20 29 3b 0a 20 20 20 20  SNAPSHOT );.    
194b0 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
194c0 4c 49 54 45 5f 42 55 53 59 5f 52 45 43 4f 56 45  LITE_BUSY_RECOVE
194d0 52 59 20 29 3b 0a 20 20 20 20 69 66 28 20 28 72  RY );.    if( (r
194e0 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
194f0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70 2d  BUSY ){.      p-
19500 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  >pc = (int)(pOp 
19510 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 70 2d  - aOp);.      p-
19520 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 20 20  >rc = rc;.      
19530 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
19540 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
19550 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
19560 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
19570 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19580 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70      }..    if( p
19590 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65  Op->p2 && p->use
195a0 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20  sStmtJournal .  
195b0 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43     && (db->autoC
195c0 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
195d0 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20  nVdbeRead>1) .  
195e0 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72    ){.      asser
195f0 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  t( sqlite3BtreeI
19600 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b  sInTrans(pBt) );
19610 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53  .      if( p->iS
19620 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20  tatement==0 ){. 
19630 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64         assert( d
19640 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30  b->nStatement>=0
19650 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69   && db->nSavepoi
19660 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20  nt>=0 );.       
19670 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
19680 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69  +; .        p->i
19690 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e  Statement = db->
196a0 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d  nSavepoint + db-
196b0 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20  >nStatement;.   
196c0 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d     }..      rc =
196d0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
196e0 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f  point(db, SAVEPO
196f0 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53  INT_BEGIN, p->iS
19700 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20  tatement-1);.   
19710 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
19720 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
19730 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
19740 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20  eBeginStmt(pBt, 
19750 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a  p->iStatement);.
19760 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
19770 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72  * Store the curr
19780 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ent value of the
19790 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
197a0 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74  s deferred const
197b0 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63  raint.      ** c
197c0 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73  ounter. If the s
197d0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
197e0 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65  tion needs to be
197f0 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20   rolled back,.  
19800 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65      ** the value
19810 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72   of this counter
19820 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73   needs to be res
19830 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20  tored too.  */. 
19840 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66       p->nStmtDef
19850 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65  Cons = db->nDefe
19860 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20  rredCons;.      
19870 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f  p->nStmtDefImmCo
19880 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72  ns = db->nDeferr
19890 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d  edImmCons;.    }
198a0 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20  ..    /* Gather 
198b0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
198c0 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68  on number for ch
198d0 65 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49  ecking:.    ** I
198e0 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
198f0 3a 20 52 2d 33 32 31 39 35 2d 31 39 34 36 35 20  : R-32195-19465 
19900 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  The schema versi
19910 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 53 51  on is used by SQ
19920 4c 69 74 65 0a 20 20 20 20 2a 2a 20 65 61 63 68  Lite.    ** each
19930 20 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73   time a query is
19940 20 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73   executed to ens
19950 75 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ure that the int
19960 65 72 6e 61 6c 20 63 61 63 68 65 20 6f 66 20 74  ernal cache of t
19970 68 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61  he.    ** schema
19980 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70 69   used when compi
19990 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75 65  ling the SQL que
199a0 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20 73  ry matches the s
199b0 63 68 65 6d 61 20 6f 66 20 74 68 65 0a 20 20 20  chema of the.   
199c0 20 2a 2a 20 64 61 74 61 62 61 73 65 20 61 67 61   ** database aga
199d0 69 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63  inst which the c
199e0 6f 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73  ompiled query is
199f0 20 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74   actually execut
19a00 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  ed..    */.    s
19a10 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
19a20 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
19a30 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
19a40 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
19a50 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
19a60 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
19a70 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
19a80 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
19a90 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
19aa0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
19ab0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
19ac0 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
19ad0 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
19ae0 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
19af0 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
19b00 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
19b10 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19b20 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
19b30 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
19b40 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
19b50 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
19b60 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
19b70 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
19b80 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
19b90 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19ba0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
19bb0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
19bc0 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
19bd0 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
19be0 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
19bf0 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
19c00 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
19c10 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
19c20 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19c30 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
19c40 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
19c50 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
19c60 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
19c70 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
19c80 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
19c90 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
19ca0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
19cb0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
19cc0 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
19cd0 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
19ce0 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
19cf0 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
19d00 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
19d10 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
19d20 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
19d30 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
19d40 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
19d50 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
19d60 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
19d70 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
19d80 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
19d90 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
19da0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
19db0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
19dc0 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
19dd0 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
19de0 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
19df0 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
19e00 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
19e10 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
19e20 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
19e30 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
19e40 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
19e50 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
19e60 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
19e70 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
19e80 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
19e90 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
19ea0 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
19eb0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
19ec0 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
19ed0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19ee0 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
19ef0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19f00 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
19f10 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19f20 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
19f30 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
19f40 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
19f50 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
19f60 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
19f70 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
19f80 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
19f90 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
19fa0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
19fb0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
19fc0 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
19fd0 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
19fe0 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
19ff0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
1a000 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
1a010 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
1a020 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
1a030 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
1a040 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
1a050 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
1a060 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
1a070 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
1a080 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
1a090 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
1a0a0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
1a0b0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
1a0c0 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
1a0d0 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
1a0e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
1a0f0 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
1a100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1a110 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
1a120 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44 62  iMeta;.  int iDb
1a130 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b  ;.  int iCookie;
1a140 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1a150 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69 44  IsReader );.  iD
1a160 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  b = pOp->p1;.  i
1a170 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33  Cookie = pOp->p3
1a180 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1a190 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54 52  >p3<SQLITE_N_BTR
1a1a0 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73 73  EE_META );.  ass
1a1b0 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69  ert( iDb>=0 && i
1a1c0 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  Db<db->nDb );.  
1a1d0 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b  assert( db->aDb[
1a1e0 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a 20  iDb].pBt!=0 );. 
1a1f0 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1a200 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1a210 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71 6c  , iDb) );..  sql
1a220 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61  ite3BtreeGetMeta
1a230 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
1a240 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33 32  t, iCookie, (u32
1a250 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70 4f   *)&iMeta);.  pO
1a260 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
1a270 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70  ase(p, pOp);.  p
1a280 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
1a290 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1a2a0 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
1a2b0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
1a2c0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
1a2d0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
1a2e0 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
1a2f0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
1a300 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
1a310 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
1a320 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
1a330 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
1a340 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
1a350 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1a360 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
1a370 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
1a380 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
1a390 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
1a3a0 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
1a3b0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
1a3c0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
1a3d0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
1a3e0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
1a3f0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
1a400 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
1a410 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
1a420 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
1a430 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
1a440 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
1a450 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
1a460 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
1a470 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
1a480 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
1a490 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
1a4a0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
1a4b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1a4c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
1a4d0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1a4e0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1a4f0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
1a500 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
1a510 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
1a520 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1a530 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
1a540 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
1a550 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a560 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
1a570 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
1a580 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
1a590 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1a5a0 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
1a5b0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
1a5c0 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
1a5d0 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
1a5e0 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
1a5f0 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
1a600 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
1a610 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
1a620 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
1a630 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
1a640 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1a650 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
1a660 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
1a670 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
1a680 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
1a690 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
1a6a0 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
1a6b0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
1a6c0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
1a6d0 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
1a6e0 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
1a6f0 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
1a700 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
1a710 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1a720 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
1a730 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
1a740 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
1a750 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
1a760 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
1a770 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
1a780 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
1a790 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
1a7a0 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
1a7b0 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
1a7c0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
1a7d0 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
1a7e0 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
1a7f0 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
1a800 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
1a810 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
1a820 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
1a830 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
1a840 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1a850 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
1a860 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
1a870 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
1a880 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
1a890 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
1a8a0 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
1a8b0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
1a8c0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
1a8d0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
1a8e0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
1a8f0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
1a900 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
1a910 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
1a920 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
1a930 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
1a940 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
1a950 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
1a960 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
1a970 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
1a980 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
1a990 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
1a9a0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
1a9b0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
1a9c0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
1a9d0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
1a9e0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
1a9f0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
1aa00 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
1aa10 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
1aa20 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
1aa30 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
1aa40 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
1aa50 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
1aa60 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
1aa70 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
1aa80 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
1aa90 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
1aaa0 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
1aab0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
1aac0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
1aad0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
1aae0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
1aaf0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
1ab00 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
1ab10 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
1ab20 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
1ab30 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
1ab40 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1ab50 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
1ab60 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
1ab70 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
1ab80 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
1ab90 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
1aba0 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
1abb0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
1abc0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1abd0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
1abe0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
1abf0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
1ac00 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
1ac10 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
1ac20 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
1ac30 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
1ac40 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
1ac50 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1ac60 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
1ac70 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
1ac80 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
1ac90 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
1aca0 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
1acb0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
1acc0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
1acd0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1ace0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1acf0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1ad00 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1ad10 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1ad20 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1ad30 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1ad40 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1ad50 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1ad60 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1ad70 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1ad80 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1ad90 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1ada0 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1adb0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1adc0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1add0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1ade0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1adf0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1ae00 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1ae10 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
1ae20 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1ae30 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1ae40 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1ae50 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1ae60 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1ae70 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1ae80 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1ae90 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1aea0 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1aeb0 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
1aec0 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1aed0 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1aee0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1aef0 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1af00 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
1af10 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
1af20 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
1af30 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1af40 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1af50 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1af60 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1af70 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1af80 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1af90 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1afa0 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1afb0 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1afc0 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
1afd0 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
1afe0 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1aff0 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1b000 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1b010 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1b020 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
1b030 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1b040 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1b050 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
1b060 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
1b070 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
1b080 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
1b090 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
1b0a0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1b0b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b0c0 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1b0d0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1b0e0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1b0f0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1b100 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1b110 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1b120 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1b130 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1b140 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
1b150 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1b160 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1b170 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1b180 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1b190 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1b1a0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1b1b0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1b1c0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1b1d0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1b1e0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1b1f0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1b200 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1b210 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1b220 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1b230 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1b240 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1b250 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1b260 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1b270 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1b280 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1b290 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1b2a0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1b2b0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1b2c0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1b2d0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1b2e0 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1b2f0 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1b300 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1b310 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1b320 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1b330 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1b340 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1b350 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1b360 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1b370 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1b380 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1b390 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1b3a0 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1b3b0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1b3c0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1b3d0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1b3e0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1b3f0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1b400 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1b410 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1b420 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1b430 64 78 3a 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65  dx: {.  int nFie
1b440 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  ld;.  KeyInfo *p
1b450 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70  KeyInfo;.  int p
1b460 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  2;.  int iDb;.  
1b470 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20 20 42 74  int wrFlag;.  Bt
1b480 72 65 65 20 2a 70 58 3b 0a 20 20 56 64 62 65 43  ree *pX;.  VdbeC
1b490 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44  ursor *pCur;.  D
1b4a0 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73 73 65 72  b *pDb;..  asser
1b4b0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
1b4c0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47   pOp->p5==OPFLAG
1b4d0 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61 73 73  _SEEKEQ );.  ass
1b4e0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1b4f0 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1b500 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73    pCur = p->apCs
1b510 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  r[pOp->p1];.  if
1b520 28 20 70 43 75 72 20 26 26 20 70 43 75 72 2d 3e  ( pCur && pCur->
1b530 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70  pgnoRoot==(u32)p
1b540 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 61 73  Op->p2 ){.    as
1b550 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44 62 3d  sert( pCur->iDb=
1b560 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20 20 20  =pOp->p3 );     
1b570 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64 20 62   /* Guaranteed b
1b580 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  y the code gener
1b590 61 74 6f 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f  ator */.    goto
1b5a0 20 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74   open_cursor_set
1b5b0 5f 68 69 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a  _hints;.  }.  /*
1b5c0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   If the cursor i
1b5d0 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
1b5e0 6f 70 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20  open or is open 
1b5f0 6f 6e 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20  on a different. 
1b600 20 2a 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20   ** index, then 
1b610 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  fall through int
1b620 6f 20 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f  o OP_OpenRead to
1b630 20 66 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20   force a reopen 
1b640 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  */.case OP_OpenR
1b650 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1b660 6e 57 72 69 74 65 3a 0a 0a 20 20 61 73 73 65 72  nWrite:..  asser
1b670 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
1b680 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20  OP_OpenWrite || 
1b690 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1b6a0 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1b6b0 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1b6c0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
1b6d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1b6e0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e  >opcode==OP_Open
1b6f0 52 65 61 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  Read || pOp->opc
1b700 6f 64 65 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64  ode==OP_ReopenId
1b710 78 0a 20 20 20 20 20 20 20 20 20 20 7c 7c 20 70  x.          || p
1b720 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
1b730 0a 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69 72  ..  if( p->expir
1b740 65 64 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  ed ){.    rc = S
1b750 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c  QLITE_ABORT_ROLL
1b760 42 41 43 4b 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BACK;.    break;
1b770 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1b780 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1b790 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1b7a0 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1b7b0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1b7c0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1b7d0 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1b7e0 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1b7f0 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1b800 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1b810 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1b820 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1b830 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1b840 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1b850 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1b860 0a 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46  .    assert( OPF
1b870 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42  LAG_FORDELETE==B
1b880 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29  TREE_FORDELETE )
1b890 3b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42  ;.    wrFlag = B
1b8a0 54 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f  TREE_WRCSR | (pO
1b8b0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46  p->p5 & OPFLAG_F
1b8c0 4f 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61  ORDELETE);.    a
1b8d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
1b8e0 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
1b8f0 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
1b900 20 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d   if( pDb->pSchem
1b910 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c  a->file_format <
1b920 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
1b930 46 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20  Format ){.      
1b940 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1b950 6f 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63  ormat = pDb->pSc
1b960 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61  hema->file_forma
1b970 74 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  t;.    }.  }else
1b980 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30  {.    wrFlag = 0
1b990 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1b9a0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49  >p5 & OPFLAG_P2I
1b9b0 53 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65  SREG ){.    asse
1b9c0 72 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20  rt( p2>0 );.    
1b9d0 61 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e  assert( p2<=(p->
1b9e0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
1b9f0 20 29 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26   );.    pIn2 = &
1ba00 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73  aMem[p2];.    as
1ba10 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
1ba20 28 70 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73  (pIn2) );.    as
1ba30 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61  sert( (pIn2->fla
1ba40 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
1ba50 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   );.    sqlite3V
1ba60 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
1ba70 28 70 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d  (pIn2);.    p2 =
1ba80 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b   (int)pIn2->u.i;
1ba90 0a 20 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76  .    /* The p2 v
1baa0 61 6c 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65  alue always come
1bab0 73 20 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f  s from a prior O
1bac0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1bad0 63 6f 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20  code and.    ** 
1bae0 74 68 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c  that opcode will
1baf0 20 61 6c 77 61 79 73 20 73 65 74 20 74 68 65 20   always set the 
1bb00 70 32 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72  p2 value to 2 or
1bb10 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61   more or else fa
1bb20 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68  il..    ** If th
1bb30 65 72 65 20 77 65 72 65 20 61 20 66 61 69 6c 75  ere were a failu
1bb40 72 65 2c 20 74 68 65 20 70 72 65 70 61 72 65 64  re, the prepared
1bb50 20 73 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64   statement would
1bb60 20 68 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20   have halted.   
1bb70 20 2a 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68   ** before reach
1bb80 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63  ing this instruc
1bb90 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 69 66 28  tion. */.    if(
1bba0 20 4e 45 56 45 52 28 70 32 3c 32 29 20 29 20 7b   NEVER(p2<2) ) {
1bbb0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
1bbc0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b  TE_CORRUPT_BKPT;
1bbd0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
1bbe0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1bbf0 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
1bc00 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
1bc10 4b 45 59 49 4e 46 4f 20 29 7b 0a 20 20 20 20 70  KEYINFO ){.    p
1bc20 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1bc30 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  4.pKeyInfo;.    
1bc40 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
1bc50 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1bc60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1bc70 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29  eyInfo->db==db )
1bc80 3b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70  ;.    nField = p
1bc90 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2b  KeyInfo->nField+
1bca0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 58 46 69 65 6c  pKeyInfo->nXFiel
1bcb0 64 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  d;.  }else if( p
1bcc0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1bcd0 4e 54 33 32 20 29 7b 0a 20 20 20 20 6e 46 69 65  NT32 ){.    nFie
1bce0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1bcf0 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f    }.  assert( pO
1bd00 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1bd10 73 65 72 74 28 20 6e 46 69 65 6c 64 3e 3d 30 20  sert( nField>=0 
1bd20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
1bd30 46 69 65 6c 64 3d 3d 30 20 29 3b 20 20 2f 2a 20  Field==0 );  /* 
1bd40 54 61 62 6c 65 20 77 69 74 68 20 49 4e 54 45 47  Table with INTEG
1bd50 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 61  ER PRIMARY KEY a
1bd60 6e 64 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20  nd nothing else 
1bd70 2a 2f 0a 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f  */.  pCur = allo
1bd80 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1bd90 70 2d 3e 70 31 2c 20 6e 46 69 65 6c 64 2c 20 69  p->p1, nField, i
1bda0 44 62 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  Db, CURTYPE_BTRE
1bdb0 45 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d  E);.  if( pCur==
1bdc0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1bdd0 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
1bde0 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73   = 1;.  pCur->is
1bdf0 4f 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70  Ordered = 1;.  p
1be00 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20  Cur->pgnoRoot = 
1be10 70 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74  p2;.  rc = sqlit
1be20 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58  e3BtreeCursor(pX
1be30 2c 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b  , p2, wrFlag, pK
1be40 65 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63  eyInfo, pCur->uc
1be50 2e 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75  .pCursor);.  pCu
1be60 72 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  r->pKeyInfo = pK
1be70 65 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74  eyInfo;.  /* Set
1be80 20 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e   the VdbeCursor.
1be90 69 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65  isTable variable
1bea0 2e 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69  . Previous versi
1beb0 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69  ons of.  ** SQLi
1bec0 74 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b  te used to check
1bed0 20 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67   if the root-pag
1bee0 65 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e  e flags were san
1bef0 65 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a  e at this point.
1bf00 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20    ** and report 
1bf10 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
1bf20 69 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65  ion if they were
1bf30 20 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63   not, but this c
1bf40 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69  heck has.  ** si
1bf50 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74  nce moved into t
1bf60 68 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20  he btree layer. 
1bf70 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73   */  .  pCur->is
1bf80 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74  Table = pOp->p4t
1bf90 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b  ype!=P4_KEYINFO;
1bfa0 0a 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65  ..open_cursor_se
1bfb0 74 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72  t_hints:.  asser
1bfc0 74 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  t( OPFLAG_BULKCS
1bfd0 52 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  R==BTREE_BULKLOA
1bfe0 44 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  D );.  assert( O
1bff0 50 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54  PFLAG_SEEKEQ==BT
1c000 52 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20  REE_SEEK_EQ );. 
1c010 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
1c020 70 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  p5 & OPFLAG_BULK
1c030 43 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51  CSR );.#ifdef SQ
1c040 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53  LITE_ENABLE_CURS
1c050 4f 52 5f 48 49 4e 54 0a 20 20 74 65 73 74 63 61  OR_HINT.  testca
1c060 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  se( pOp->p2 & OP
1c070 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23  FLAG_SEEKEQ );.#
1c080 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42  endif.  sqlite3B
1c090 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c  treeCursorHintFl
1c0a0 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75  ags(pCur->uc.pCu
1c0b0 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  rsor,.          
1c0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c0d0 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
1c0e0 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c  (OPFLAG_BULKCSR|
1c0f0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29  OPFLAG_SEEKEQ)))
1c100 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c110 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68   Opcode: OpenEph
1c120 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50  emeral P1 P2 * P
1c130 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1c140 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a  : nColumn=P2.**.
1c150 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75  ** Open a new cu
1c160 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61  rsor P1 to a tra
1c170 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a  nsient table..**
1c180 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   The cursor is a
1c190 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61  lways opened rea
1c1a0 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20  d/write even if 
1c1b0 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74  .** the main dat
1c1c0 61 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e  abase is read-on
1c1d0 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72  ly.  The ephemer
1c1e0 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64  al.** table is d
1c1f0 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63  eleted automatic
1c200 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75  ally when the cu
1c210 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a  rsor is closed..
1c220 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20  **.** P2 is the 
1c230 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c240 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72  s in the ephemer
1c250 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65  al table..** The
1c260 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74   cursor points t
1c270 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20  o a BTree table 
1c280 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20  if P4==0 and to 
1c290 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a  a BTree index.**
1c2a0 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e   if P4 is not 0.
1c2b0 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e    If P4 is not N
1c2c0 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74  ULL, it points t
1c2d0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  o a KeyInfo stru
1c2e0 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65  cture.** that de
1c2f0 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74  fines the format
1c300 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20   of keys in the 
1c310 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  index..**.** The
1c320 20 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61   P5 parameter ca
1c330 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74  n be a mask of t
1c340 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73  he BTREE_* flags
1c350 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62   defined.** in b
1c360 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66  tree.h.  These f
1c370 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70  lags control asp
1c380 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72  ects of the oper
1c390 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20  ation of.** the 
1c3a0 62 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45  btree.  The BTRE
1c3b0 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61  E_OMIT_JOURNAL a
1c3c0 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20  nd BTREE_SINGLE 
1c3d0 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64  flags are.** add
1c3e0 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  ed automatically
1c3f0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
1c400 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31  OpenAutoindex P1
1c410 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
1c420 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d  nopsis: nColumn=
1c430 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P2.**.** This op
1c440 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73  code works the s
1c450 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70  ame as OP_OpenEp
1c460 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73  hemeral.  It has
1c470 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20   a.** different 
1c480 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75  name to distingu
1c490 69 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61  ish its use.  Ta
1c4a0 62 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  bles created usi
1c4b0 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70  ng.** by this op
1c4c0 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1c4d0 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61  d for automatica
1c4e0 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e  lly created tran
1c4f0 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73  sient.** indices
1c500 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61   in joins..*/.ca
1c510 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e  se OP_OpenAutoin
1c520 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70  dex: .case OP_Op
1c530 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20  enEphemeral: {. 
1c540 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78   VdbeCursor *pCx
1c550 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65  ;.  KeyInfo *pKe
1c560 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63  yInfo;..  static
1c570 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c   const int vfsFl
1c580 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c  ags = .      SQL
1c590 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49  ITE_OPEN_READWRI
1c5a0 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54  TE |.      SQLIT
1c5b0 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a  E_OPEN_CREATE |.
1c5c0 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1c5d0 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20  N_EXCLUSIVE |.  
1c5e0 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1c5f0 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a  DELETEONCLOSE |.
1c600 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1c610 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a  N_TRANSIENT_DB;.
1c620 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c630 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1c640 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1c650 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1c660 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1c670 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1c680 43 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a  CURTYPE_BTREE);.
1c690 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1c6a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1c6b0 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1c6c0 20 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72    pCx->isEphemer
1c6d0 61 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73  al = 1;.  rc = s
1c6e0 71 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28  qlite3BtreeOpen(
1c6f0 64 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c  db->pVfs, 0, db,
1c700 20 26 70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20   &pCx->pBt, .   
1c710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c720 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1c730 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1c740 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1c750 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1c760 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1c770 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1c780 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1c790 61 6e 73 28 70 43 78 2d 3e 70 42 74 2c 20 31 29  ans(pCx->pBt, 1)
1c7a0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d  ;.  }.  if( rc==
1c7b0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1c7c0 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69 65   /* If a transie
1c7d0 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71 75  nt index is requ
1c7e0 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74 20  ired, create it 
1c7f0 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a  by calling.    *
1c800 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72  * sqlite3BtreeCr
1c810 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74 68  eateTable() with
1c820 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b   the BTREE_BLOBK
1c830 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a 20  EY flag before. 
1c840 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74     ** opening it
1c850 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74  . If a transient
1c860 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69 72   table is requir
1c870 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65  ed, just use the
1c880 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69  .    ** automati
1c890 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 61  cally created ta
1c8a0 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70 61  ble with root-pa
1c8b0 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e  ge 1 (an BLOB_IN
1c8c0 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20 20  TKEY table)..   
1c8d0 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4b 65   */.    if( (pKe
1c8e0 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e  yInfo = pOp->p4.
1c8f0 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a  pKeyInfo)!=0 ){.
1c900 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a        int pgno;.
1c910 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
1c920 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45  p->p4type==P4_KE
1c930 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20 72  YINFO );.      r
1c940 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c950 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78 2d  CreateTable(pCx-
1c960 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52  >pBt, &pgno, BTR
1c970 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70  EE_BLOBKEY | pOp
1c980 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20 69 66  ->p5); .      if
1c990 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1c9a0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1c9b0 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f  t( pgno==MASTER_
1c9c0 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20 20 20  ROOT+1 );.      
1c9d0 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e    assert( pKeyIn
1c9e0 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1c9f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4b        assert( pK
1ca00 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1ca10 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20 20 20  (db) );.        
1ca20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20  pCx->pKeyInfo = 
1ca30 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20  pKeyInfo;.      
1ca40 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1ca50 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1ca60 42 74 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45 5f  Bt, pgno, BTREE_
1ca70 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20  WRCSR,.         
1ca80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca90 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f 2c         pKeyInfo,
1caa0 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1cab0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1cac0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1cad0 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1cae0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1caf0 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1cb00 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1cb10 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52 2c 0a  T, BTREE_WRCSR,.
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
1cb40 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f 72   pCx->uc.pCursor
1cb50 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73  );.      pCx->is
1cb60 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d  Table = 1;.    }
1cb70 0a 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72  .  }.  pCx->isOr
1cb80 64 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35  dered = (pOp->p5
1cb90 21 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45  !=BTREE_UNORDERE
1cba0 44 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  D);.  break;.}..
1cbb0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
1cbc0 72 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  rOpen P1 P2 P3 P
1cbd0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1cbe0 70 63 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65  pcode works like
1cbf0 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61   OP_OpenEphemera
1cc00 6c 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  l except that it
1cc10 20 6f 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e   opens.** a tran
1cc20 73 69 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74  sient index that
1cc30 20 69 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79   is specifically
1cc40 20 64 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72   designed to sor
1cc50 74 20 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65  t large.** table
1cc60 73 20 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72  s using an exter
1cc70 6e 61 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61  nal merge-sort a
1cc80 6c 67 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20  lgorithm..**.** 
1cc90 49 66 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69  If argument P3 i
1cca0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
1ccb0 20 69 74 20 69 6e 64 69 63 61 74 65 73 20 74 68   it indicates th
1ccc0 61 74 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61  at the sorter ma
1ccd0 79 0a 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74  y.** assume that
1cce0 20 61 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63   a stable sort c
1ccf0 6f 6e 73 69 64 65 72 69 6e 67 20 74 68 65 20 66  onsidering the f
1cd00 69 72 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f  irst P3 fields o
1cd10 66 20 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73  f each.** key is
1cd20 20 73 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70   sufficient to p
1cd30 72 6f 64 75 63 65 20 74 68 65 20 72 65 71 75 69  roduce the requi
1cd40 72 65 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a  red results..*/.
1cd50 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70  case OP_SorterOp
1cd60 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  en: {.  VdbeCurs
1cd70 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1cd80 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1cd90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1cda0 3e 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p2>=0 );.  pCx 
1cdb0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1cdc0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1cdd0 2d 3e 70 32 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p2, -1, CURTYP
1cde0 45 5f 53 4f 52 54 45 52 29 3b 0a 20 20 69 66 28  E_SORTER);.  if(
1cdf0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1ce00 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b  o_mem;.  pCx->pK
1ce10 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1ce20 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73  .pKeyInfo;.  ass
1ce30 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e  ert( pCx->pKeyIn
1ce40 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20  fo->db==db );.  
1ce50 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65  assert( pCx->pKe
1ce60 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28  yInfo->enc==ENC(
1ce70 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  db) );.  rc = sq
1ce80 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 49  lite3VdbeSorterI
1ce90 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33 2c  nit(db, pOp->p3,
1cea0 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a   pCx);.  break;.
1ceb0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1cec0 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32  quenceTest P1 P2
1ced0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1cee0 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50  is: if( cursor[P
1cef0 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20  1].ctr++ ) pc = 
1cf00 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  P2.**.** P1 is a
1cf10 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20   sorter cursor. 
1cf20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  If the sequence 
1cf30 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65  counter is curre
1cf40 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a  ntly zero, jump.
1cf50 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64  ** to P2. Regard
1cf60 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20  less of whether 
1cf70 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20  or not the jump 
1cf80 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d  is taken, increm
1cf90 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73  ent the.** the s
1cfa0 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a  equence value..*
1cfb0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
1cfc0 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65  ceTest: {.  Vdbe
1cfd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73  Cursor *pC;.  as
1cfe0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1cff0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1d000 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
1d010 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1d020 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
1d030 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
1d040 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1d050 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67  t++)==0 ){.    g
1d060 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
1d070 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
1d080 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50  /* Opcode: OpenP
1d090 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a  seudo P1 P2 P3 *
1d0a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1d0b0 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b  P3 columns in r[
1d0c0 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61  P2].**.** Open a
1d0d0 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74   new cursor that
1d0e0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b   points to a fak
1d0f0 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
1d100 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a  tains a single.*
1d110 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20  * row of data.  
1d120 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74  The content of t
1d130 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74  hat one row is t
1d140 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65  he content of me
1d150 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72  mory.** register
1d160 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77   P2.  In other w
1d170 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20  ords, cursor P1 
1d180 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73  becomes an alias
1d190 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d   for the .** MEM
1d1a0 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f  _Blob content co
1d1b0 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73  ntained in regis
1d1c0 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20  ter P2..**.** A 
1d1d0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65  pseudo-table cre
1d1e0 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63  ated by this opc
1d1f0 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68  ode is used to h
1d200 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20  old a single.** 
1d210 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20  row output from 
1d220 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68  the sorter so th
1d230 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62  at the row can b
1d240 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74  e decomposed int
1d250 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20  o.** individual 
1d260 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68  columns using th
1d270 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f  e OP_Column opco
1d280 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75  de.  The OP_Colu
1d290 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  mn opcode.** is 
1d2a0 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20  the only cursor 
1d2b0 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b  opcode that work
1d2c0 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d  s with a pseudo-
1d2d0 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20  table..**.** P3 
1d2e0 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  is the number of
1d2f0 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72   fields in the r
1d300 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c  ecords that will
1d310 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a   be stored by.**
1d320 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c   the pseudo-tabl
1d330 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70  e..*/.case OP_Op
1d340 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64  enPseudo: {.  Vd
1d350 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1d360 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1d370 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1d380 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a  ( pOp->p3>=0 );.
1d390 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1d3a0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1d3b0 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20  1, pOp->p3, -1, 
1d3c0 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b  CURTYPE_PSEUDO);
1d3d0 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1d3e0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1d3f0 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  Cx->nullRow = 1;
1d400 0a 20 20 70 43 78 2d 3e 75 63 2e 70 73 65 75 64  .  pCx->uc.pseud
1d410 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d  oTableReg = pOp-
1d420 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61  >p2;.  pCx->isTa
1d430 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72  ble = 1;.  asser
1d440 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  t( pOp->p5==0 );
1d450 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1d460 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31  Opcode: Close P1
1d470 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43   * * * *.**.** C
1d480 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72  lose a cursor pr
1d490 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20  eviously opened 
1d4a0 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73  as P1.  If P1 is
1d4b0 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c   not.** currentl
1d4c0 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73  y open, this ins
1d4d0 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f  truction is a no
1d4e0 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  -op..*/.case OP_
1d4f0 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72  Close: {.  asser
1d500 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
1d510 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
1d520 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  sor );.  sqlite3
1d530 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1d540 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  , p->apCsr[pOp->
1d550 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72  p1]);.  p->apCsr
1d560 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20  [pOp->p1] = 0;. 
1d570 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65   break;.}..#ifde
1d580 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
1d590 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1d5a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75  ./* Opcode: Colu
1d5b0 6d 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50  mnsUsed P1 * * P
1d5c0 34 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4 *.**.** This o
1d5d0 70 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c  pcode (which onl
1d5e0 79 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69  y exists if SQLi
1d5f0 74 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20  te was compiled 
1d600 77 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45  with.** SQLITE_E
1d610 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45  NABLE_COLUMN_USE
1d620 44 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69  D_MASK) identifi
1d630 65 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73  es which columns
1d640 20 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65   of the.** table
1d650 20 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75   or index for cu
1d660 72 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64  rsor P1 are used
1d670 2e 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69  .  P4 is a 64-bi
1d680 74 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34  t integer.** (P4
1d690 5f 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68  _INT64) in which
1d6a0 20 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69   the first 63 bi
1d6b0 74 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65  ts are one for e
1d6c0 61 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69  ach of the.** fi
1d6d0 72 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f  rst 63 columns o
1d6e0 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
1d6f0 6e 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63  ndex that are ac
1d700 74 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62  tually used.** b
1d710 79 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54  y the cursor.  T
1d720 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1d730 74 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20  t is set if any 
1d740 63 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20  column after.** 
1d750 74 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64  the 64th is used
1d760 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c  ..*/.case OP_Col
1d770 75 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64  umnsUsed: {.  Vd
1d780 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
1d790 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
1d7a0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
1d7b0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
1d7c0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
1d7d0 0a 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20  .  pC->maskUsed 
1d7e0 3d 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34  = *(u64*)pOp->p4
1d7f0 2e 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a  .pI64;.  break;.
1d800 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63  }.#endif../* Opc
1d810 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50  ode: SeekGE P1 P
1d820 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
1d830 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
1d840 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72  P4].**.** If cur
1d850 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f  sor P1 refers to
1d860 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42   an SQL table (B
1d870 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20  -Tree that uses 
1d880 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a  integer keys), .
1d890 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  ** use the value
1d8a0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20   in register P3 
1d8b0 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20  as the key.  If 
1d8c0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d8d0 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1d8e0 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1d8f0 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1d900 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1d910 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1d920 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1d930 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1d940 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1d950 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1d960 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1d970 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1d980 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1d990 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1d9a0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
1d9b0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1d9c0 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1d9d0 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20  rds .** greater 
1d9e0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d9f0 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1da00 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1da10 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1da20 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f  .** If the curso
1da30 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20  r P1 was opened 
1da40 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47  using the OPFLAG
1da50 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68  _SEEKEQ flag, th
1da60 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64  en this.** opcod
1da70 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61  e will always la
1da80 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74  nd on a record t
1da90 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61  hat equally equa
1daa0 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a  ls the key, or.*
1dab0 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65  * else jump imme
1dac0 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
1dad0 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20  When the cursor 
1dae0 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  is OPFLAG_SEEKEQ
1daf0 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  , this.** opcode
1db00 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65   must be followe
1db10 64 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70  d by an IdxLE op
1db20 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61  code with the sa
1db30 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a  me arguments..**
1db40 20 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64   The IdxLE opcod
1db50 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65  e will be skippe
1db60 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65  d if this opcode
1db70 20 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74   succeeds, but t
1db80 68 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f  he.** IdxLE opco
1db90 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20  de will be used 
1dba0 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f  on subsequent lo
1dbb0 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a  op iterations..*
1dbc0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1dbd0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1dbe0 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1dbf0 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
1dc00 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1dc10 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
1dc20 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
1dc30 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1dc40 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1dc50 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1dc60 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
1dc70 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1dc80 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1dc90 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47  d, SeekLt, SeekG
1dca0 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  t, SeekLe.*/./* 
1dcb0 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50  Opcode: SeekGT P
1dcc0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1dcd0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1dce0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1dcf0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1dd00 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1dd10 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1dd20 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1dd30 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1dd40 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1dd50 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1dd60 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1dd70 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1dd80 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1dd90 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1dda0 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1ddb0 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1ddc0 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1ddd0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1dde0 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1ddf0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1de00 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1de10 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73  s to the smalles
1de20 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1de30 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
1de40 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1de50 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1de60 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20  records greater 
1de70 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1de80 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1de90 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1dea0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1deb0 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1dec0 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1ded0 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1dee0 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a  forward order,.*
1def0 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e  * from the begin
1df00 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1df10 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1df20 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1df30 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1df40 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1df50 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1df60 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1df70 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1df80 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1df90 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1dfa0 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50  eekLT P1 P2 P3 P
1dfb0 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 * .** Synopsis
1dfc0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1dfd0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1dfe0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1dff0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1e000 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1e010 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1e020 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1e030 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1e040 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1e050 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1e060 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1e070 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1e080 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1e090 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1e0a0 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1e0b0 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1e0c0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1e0d0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1e0e0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1e0f0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1e100 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1e110 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1e120 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
1e130 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65  ue. If there are
1e140 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73   no records less
1e150 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1e160 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1e170 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1e180 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1e190 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1e1a0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1e1b0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1e1c0 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a   reverse order,.
1e1d0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20  ** from the end 
1e1e0 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e  toward the begin
1e1f0 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20  ning.  In other 
1e200 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1e210 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1e220 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20  ed to use Prev, 
1e230 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  not Next..**.** 
1e240 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1e250 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47   NotFound, SeekG
1e260 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1e270 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1e280 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20  SeekLE P1 P2 P3 
1e290 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1e2a0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1e2b0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1e2c0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1e2d0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1e2e0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1e2f0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1e300 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1e310 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1e320 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1e330 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1e340 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1e350 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1e360 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1e370 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1e380 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1e390 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1e3a0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1e3b0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1e3c0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69  sor P1 so that i
1e3d0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1e3e0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1e3f0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1e400 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e410 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1e420 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1e430 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20  ecords .** less 
1e440 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1e450 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1e460 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1e470 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1e480 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e490 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1e4a0 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1e4b0 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20  move in reverse 
1e4c0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1e4d0 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68  he end toward th
1e4e0 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e  e beginning.  In
1e4f0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1e500 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1e510 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1e520 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e   Prev, not Next.
1e530 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75  .**.** If the cu
1e540 72 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e  rsor P1 was open
1e550 65 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46  ed using the OPF
1e560 4c 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c  LAG_SEEKEQ flag,
1e570 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70   then this.** op
1e580 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73  code will always
1e590 20 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72   land on a recor
1e5a0 64 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65  d that equally e
1e5b0 71 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f  quals the key, o
1e5c0 72 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69  r.** else jump i
1e5d0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
1e5e0 2e 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73  .  When the curs
1e5f0 6f 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45  or is OPFLAG_SEE
1e600 4b 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63  KEQ, this.** opc
1e610 6f 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c  ode must be foll
1e620 6f 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45  owed by an IdxGE
1e630 20 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65   opcode with the
1e640 20 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e   same arguments.
1e650 0a 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70  .** The IdxGE op
1e660 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69  code will be ski
1e670 70 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63  pped if this opc
1e680 6f 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75  ode succeeds, bu
1e690 74 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f  t the.** IdxGE o
1e6a0 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73  pcode will be us
1e6b0 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74  ed on subsequent
1e6c0 20 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73   loop iterations
1e6d0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1e6e0 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1e6f0 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1e700 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1e710 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1e720 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e730 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1e740 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1e750 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1e760 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1e770 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1e780 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1e790 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1e7a0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1e7b0 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
1e7c0 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20    /* Comparison 
1e7d0 72 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20  result */.  int 
1e7e0 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  oc;            /
1e7f0 2a 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64  * Opcode */.  Vd
1e800 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
1e810 20 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74   /* The cursor t
1e820 6f 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61  o seek */.  Unpa
1e830 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f  ckedRecord r;  /
1e840 2a 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65  * The key to see
1e850 6b 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  k for */.  int n
1e860 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a  Field;        /*
1e870 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d   Number of colum
1e880 6e 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20  ns or fields in 
1e890 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34  the key */.  i64
1e8a0 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20   iKey;          
1e8b0 2f 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20  /* The rowid we 
1e8c0 61 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a  are to seek to *
1e8d0 2f 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20  /.  int eqOnly; 
1e8e0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69         /* Only i
1e8f0 6e 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20  nterested in == 
1e900 72 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73  results */..  as
1e910 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
1e920 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
1e930 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
1e940 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29  rt( pOp->p2!=0 )
1e950 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1e960 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1e970 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
1e980 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
1e990 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1e9a0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
1e9b0 28 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f  ( OP_SeekLE == O
1e9c0 50 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20  P_SeekLT+1 );.  
1e9d0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1e9e0 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32  E == OP_SeekLT+2
1e9f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1ea00 5f 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65  _SeekGT == OP_Se
1ea10 65 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65  ekLT+3 );.  asse
1ea20 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
1ea30 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
1ea40 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
1ea50 20 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e   );.  oc = pOp->
1ea60 6f 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79  opcode;.  eqOnly
1ea70 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c   = 0;.  pC->null
1ea80 52 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20  Row = 0;.#ifdef 
1ea90 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1eaa0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
1eab0 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
1eac0 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
1ead0 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  le ){.    /* The
1eae0 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66   BTREE_SEEK_EQ f
1eaf0 6c 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20  lag is only set 
1eb00 6f 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73  on index cursors
1eb10 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
1eb20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
1eb30 6f 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63  orHasHint(pC->uc
1eb40 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f  .pCursor, BTREE_
1eb50 53 45 45 4b 5f 45 51 29 3d 3d 30 20 29 3b 0a 0a  SEEK_EQ)==0 );..
1eb60 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75 74      /* The input
1eb70 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69 67   value in P3 mig
1eb80 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79 70  ht be of any typ
1eb90 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61 6c  e: integer, real
1eba0 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a 2a  , string,.    **
1ebb0 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20   blob, or NULL. 
1ebc0 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74 6f   But it needs to
1ebd0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20 62   be an integer b
1ebe0 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f 0a  efore we can do.
1ebf0 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b 2c      ** the seek,
1ec00 20 73 6f 20 63 6f 6e 76 65 72 74 20 69 74 2e 20   so convert it. 
1ec10 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
1ec20 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1ec30 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1ec40 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  gs & (MEM_Int|ME
1ec50 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
1ec60 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
1ec70 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
1ec80 66 66 69 6e 69 74 79 28 70 49 6e 33 2c 20 30 29  ffinity(pIn3, 0)
1ec90 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4b 65 79  ;.    }.    iKey
1eca0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
1ecb0 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 0a 20  tValue(pIn3);.. 
1ecc0 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1ecd0 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1ece0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1ecf0 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1ed00 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1ed10 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1ed20 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1ed30 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1ed40 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1ed50 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1ed60 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1ed70 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1ed80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1ed90 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
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 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1edc0 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1edd0 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1ede0 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1edf0 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1ee00 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1ee10 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1ee20 20 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63         VdbeBranc
1ee30 68 54 61 6b 65 6e 28 31 2c 32 29 3b 20 67 6f 74  hTaken(1,2); got
1ee40 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
1ee50 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
1ee60 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49     }..      /* I
1ee70 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d 61 74  f the approximat
1ee80 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61 72 67  ion iKey is larg
1ee90 65 72 20 74 68 61 6e 20 74 68 65 20 61 63 74 75  er than the actu
1eea0 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68 0a 20  al real search. 
1eeb0 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75       ** term, su
1eec0 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f 72 20  bstitute >= for 
1eed0 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20  > and < for <=. 
1eee0 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65 61 72  e.g. if the sear
1eef0 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a  ch term.      **
1ef00 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68 65 20   is 4.9 and the 
1ef10 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78 69 6d  integer approxim
1ef20 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a  ation 5:.      *
1ef30 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  *.      **      
1ef40 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20 20 20    (x >  4.9)    
1ef50 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35 29 0a  ->     (x >= 5).
1ef60 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20        **        
1ef70 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e  (x <= 4.9)    ->
1ef80 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a 20 20       (x <  5).  
1ef90 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
1efa0 20 70 49 6e 33 2d 3e 75 2e 72 3c 28 64 6f 75 62   pIn3->u.r<(doub
1efb0 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1efc0 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1efd0 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1efe0 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1eff0 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1f000 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1f010 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1f020 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1f030 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1f040 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1f050 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1f060 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1f070 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1f080 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1f090 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1f0a0 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1f0b0 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1f0c0 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1f0d0 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1f0e0 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1f0f0 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1f100 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1f110 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1f120 70 49 6e 33 2d 3e 75 2e 72 3e 28 64 6f 75 62 6c  pIn3->u.r>(doubl
1f130 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20  e)iKey ){.      
1f140 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1f150 6b 4c 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b  kLE==(OP_SeekLT+
1f160 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  1) );.        as
1f170 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d  sert( OP_SeekGT=
1f180 3d 28 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29  =(OP_SeekGE+1) )
1f190 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1f1a0 28 20 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30  ( (OP_SeekLT & 0
1f1b0 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b  x0001)==(OP_Seek
1f1c0 47 45 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a  GE & 0x0001) );.
1f1d0 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63 20          if( (oc 
1f1e0 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53  & 0x0001)==(OP_S
1f1f0 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20  eekLT & 0x0001) 
1f200 29 20 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a  ) oc++;.      }.
1f210 20 20 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20      } .    rc = 
1f220 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1f230 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
1f240 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75  c.pCursor, 0, (u
1f250 36 34 29 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  64)iKey, 0, &res
1f260 29 3b 0a 20 20 20 20 70 43 2d 3e 6d 6f 76 65 74  );.    pC->movet
1f270 6f 54 61 72 67 65 74 20 3d 20 69 4b 65 79 3b 20  oTarget = iKey; 
1f280 20 2f 2a 20 55 73 65 64 20 62 79 20 4f 50 5f 44   /* Used by OP_D
1f290 65 6c 65 74 65 20 2a 2f 0a 20 20 20 20 69 66 28  elete */.    if(
1f2a0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1f2b0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
1f2c0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1f2d0 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1f2e0 20 20 20 20 2f 2a 20 46 6f 72 20 61 20 63 75 72      /* For a cur
1f2f0 73 6f 72 20 77 69 74 68 20 74 68 65 20 42 54 52  sor with the BTR
1f300 45 45 5f 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c  EE_SEEK_EQ hint,
1f310 20 6f 6e 6c 79 20 74 68 65 20 4f 50 5f 53 65 65   only the OP_See
1f320 6b 47 45 20 61 6e 64 0a 20 20 20 20 2a 2a 20 4f  kGE and.    ** O
1f330 50 5f 53 65 65 6b 4c 45 20 6f 70 63 6f 64 65 73  P_SeekLE opcodes
1f340 20 61 72 65 20 61 6c 6c 6f 77 65 64 2c 20 61 6e   are allowed, an
1f350 64 20 74 68 65 73 65 20 6d 75 73 74 20 62 65 20  d these must be 
1f360 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
1f370 6f 77 65 64 0a 20 20 20 20 2a 2a 20 62 79 20 61  owed.    ** by a
1f380 6e 20 4f 50 5f 49 64 78 47 54 20 6f 72 20 4f 50  n OP_IdxGT or OP
1f390 5f 49 64 78 4c 54 20 6f 70 63 6f 64 65 2c 20 72  _IdxLT opcode, r
1f3a0 65 73 70 65 63 74 69 76 65 6c 79 2c 20 77 69 74  espectively, wit
1f3b0 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 2e 0a  h the same key..
1f3c0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 73      */.    if( s
1f3d0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f3e0 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
1f3f0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
1f400 45 45 4b 5f 45 51 29 20 29 7b 0a 20 20 20 20 20  EEK_EQ) ){.     
1f410 20 65 71 4f 6e 6c 79 20 3d 20 31 3b 0a 20 20 20   eqOnly = 1;.   
1f420 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1f430 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65 6b 47  opcode==OP_SeekG
1f440 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  E || pOp->opcode
1f450 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b 0a 20  ==OP_SeekLE );. 
1f460 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f470 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
1f480 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
1f490 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
1f4a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
1f4b0 20 70 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b   pOp[1].p1==pOp[
1f4c0 30 5d 2e 70 31 20 29 3b 0a 20 20 20 20 20 20 61  0].p1 );.      a
1f4d0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 32  ssert( pOp[1].p2
1f4e0 3d 3d 70 4f 70 5b 30 5d 2e 70 32 20 29 3b 0a 20  ==pOp[0].p2 );. 
1f4f0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
1f500 5b 31 5d 2e 70 33 3d 3d 70 4f 70 5b 30 5d 2e 70  [1].p3==pOp[0].p
1f510 33 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  3 );.      asser
1f520 74 28 20 70 4f 70 5b 31 5d 2e 70 34 2e 69 3d 3d  t( pOp[1].p4.i==
1f530 70 4f 70 5b 30 5d 2e 70 34 2e 69 20 29 3b 0a 20  pOp[0].p4.i );. 
1f540 20 20 20 7d 0a 0a 20 20 20 20 6e 46 69 65 6c 64     }..    nField
1f550 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
1f560 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1f570 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1f580 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e  );.    assert( n
1f590 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72  Field>0 );.    r
1f5a0 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e  .pKeyInfo = pC->
1f5b0 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e  pKeyInfo;.    r.
1f5c0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46  nField = (u16)nF
1f5d0 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68  ield;..    /* Th
1f5e0 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63  e next line of c
1f5f0 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20  ode computes as 
1f600 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61  follows, only fa
1f610 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69  ster:.    **   i
1f620 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54  f( oc==OP_SeekGT
1f630 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   || oc==OP_SeekL
1f640 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  E ){.    **     
1f650 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d  r.default_rc = -
1f660 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73  1;.    **   }els
1f670 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e  e{.    **     r.
1f680 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b  default_rc = +1;
1f690 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20  .    **   }.    
1f6a0 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  */.    r.default
1f6b0 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20  _rc = ((1 & (oc 
1f6c0 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20  - OP_SeekLT)) ? 
1f6d0 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73  -1 : +1);.    as
1f6e0 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1f6f0 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kGT || r.default
1f700 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1f710 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1f720 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekLE || r.defaul
1f730 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20  t_rc==-1 );.    
1f740 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1f750 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75  eekGE || r.defau
1f760 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20  lt_rc==+1 );.   
1f770 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1f780 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61  SeekLT || r.defa
1f790 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20  ult_rc==+1 );.. 
1f7a0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65     r.aMem = &aMe
1f7b0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64  m[pOp->p3];.#ifd
1f7c0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1f7d0 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72      { int i; for
1f7e0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
1f7f0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
1f800 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
1f810 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
1f820 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  f.    ExpandBlob
1f830 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 2e  (r.aMem);.    r.
1f840 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20 20 20  eqSeen = 0;.    
1f850 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1f860 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1f870 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
1f880 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
1f890 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1f8a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1f8b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1f8c0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1f8d0 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20 26 26     if( eqOnly &&
1f8e0 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29 7b 0a   r.eqSeen==0 ){.
1f8f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 65        assert( re
1f900 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 67 6f  s!=0 );.      go
1f910 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e  to seek_not_foun
1f920 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70  d;.    }.  }.  p
1f930 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
1f940 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63  o = 0;.  pC->cac
1f950 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
1f960 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20 53  _STALE;.#ifdef S
1f970 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c  QLITE_TEST.  sql
1f980 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e  ite3_search_coun
1f990 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  t++;.#endif.  if
1f9a0 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc>=OP_SeekGE 
1f9b0 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63 3d 3d  ){  assert( oc==
1f9c0 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f 63 3d  OP_SeekGE || oc=
1f9d0 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a 20 20  =OP_SeekGT );.  
1f9e0 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c 20 28    if( res<0 || (
1f9f0 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50  res==0 && oc==OP
1fa00 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20 20 20  _SeekGT) ){.    
1fa10 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20    res = 0;.     
1fa20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1fa30 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e 70 43  eeNext(pC->uc.pC
1fa40 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1fa50 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1fa60 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1fa70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1fa80 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1fa90 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
1faa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1fab0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1fac0 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
1fad0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
1fae0 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1faf0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1fb00 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1fb10 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1fb20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1fb30 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43 75 72  ious(pC->uc.pCur
1fb40 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1fb50 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1fb60 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1fb70 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1fb80 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1fb90 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62 65 20  /* res might be 
1fba0 6e 65 67 61 74 69 76 65 20 62 65 63 61 75 73 65  negative because
1fbb0 20 74 68 65 20 74 61 62 6c 65 20 69 73 20 65 6d   the table is em
1fbc0 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20  pty.  Check to. 
1fbd0 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66 20 74       ** see if t
1fbe0 68 69 73 20 69 73 20 74 68 65 20 63 61 73 65 2e  his is the case.
1fbf0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
1fc00 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42 74 72  res = sqlite3Btr
1fc10 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70 43 75  eeEof(pC->uc.pCu
1fc20 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
1fc30 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e 64 3a  .seek_not_found:
1fc40 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1fc50 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65 42 72  p2>0 );.  VdbeBr
1fc60 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
1fc70 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
1fc80 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f  {.    goto jump_
1fc90 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  to_p2;.  }else i
1fca0 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20 20 20  f( eqOnly ){.   
1fcb0 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e   assert( pOp[1].
1fcc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54  opcode==OP_IdxLT
1fcd0 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64   || pOp[1].opcod
1fce0 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
1fcf0 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53 6b 69     pOp++; /* Ski
1fd00 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74 20 6f  p the OP_IdxLt o
1fd10 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61 74 20  r OP_IdxGT that 
1fd20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d 0a 20  follows */.  }. 
1fd30 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fd40 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50 32  code: Seek P1 P2
1fd50 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
1fd60 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50 32  is:  intkey=r[P2
1fd70 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 6e  ].**.** P1 is an
1fd80 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72 73   open table curs
1fd90 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20 72  or and P2 is a r
1fda0 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20 41  owid integer.  A
1fdb0 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50 31  rrange.** for P1
1fdc0 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61 74   to move so that
1fdd0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1fde0 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62 79  e rowid given by
1fdf0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1fe00 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64 65  is actually a de
1fe10 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f  ferred seek.  No
1fe20 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68  thing actually h
1fe30 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20  appens until.** 
1fe40 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73  the cursor is us
1fe50 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63  ed to read a rec
1fe60 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20  ord.  That way, 
1fe70 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f  if no reads.** o
1fe80 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73  ccur, no unneces
1fe90 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73  sary I/O happens
1fea0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  ..*/.case OP_See
1feb0 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20 2a  k: {    /* in2 *
1fec0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
1fed0 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  pC;..  assert( p
1fee0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
1fef0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
1ff00 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
1ff10 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
1ff20 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
1ff30 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
1ff40 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
1ff50 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72  BTREE );.  asser
1ff60 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
1ff70 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
1ff80 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b  ( pC->isTable );
1ff90 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
1ffa0 20 30 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   0;.  pIn2 = &aM
1ffb0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
1ffc0 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1ffd0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
1ffe0 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 70  Value(pIn2);.  p
1fff0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
20000 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  o = 1;.  break;.
20010 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  }.  ../* Opcode:
20020 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20   Found P1 P2 P3 
20030 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
20040 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
20050 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68  *.** If P4==0 th
20060 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68  en register P3 h
20070 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73  olds a blob cons
20080 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52  tructed by MakeR
20090 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34  ecord.  If.** P4
200a0 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72  >0 then register
200b0 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74   P3 is the first
200c0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
200d0 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e   that form an un
200e0 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64  packed.** record
200f0 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50  ..**.** Cursor P
20100 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
20110 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
20120 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
20130 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
20140 2a 20 69 73 20 61 20 70 72 65 66 69 78 20 6f 66  * is a prefix of
20150 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31   any entry in P1
20160 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20   then a jump is 
20170 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a  made to P2 and.*
20180 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69  * P1 is left poi
20190 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d 61 74  nting at the mat
201a0 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a  ching entry..**.
201b0 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f  ** This operatio
201c0 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  n leaves the cur
201d0 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20 77  sor in a state w
201e0 68 65 72 65 20 69 74 20 63 61 6e 20 62 65 0a 2a  here it can be.*
201f0 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 74 68  * advanced in th
20200 65 20 66 6f 72 77 61 72 64 20 64 69 72 65 63 74  e forward direct
20210 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74 20 69  ion.  The Next i
20220 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20  nstruction will 
20230 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74  work,.** but not
20240 20 74 68 65 20 50 72 65 76 20 69 6e 73 74 72 75   the Prev instru
20250 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ction..**.** See
20260 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c   also: NotFound,
20270 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74   NoConflict, Not
20280 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a  Exists. SeekGe.*
20290 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  /./* Opcode: Not
202a0 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33 20 50  Found P1 P2 P3 P
202b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
202c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
202d0 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65  .** If P4==0 the
202e0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f  n register P3 ho
202f0 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74  lds a blob const
20300 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65  ructed by MakeRe
20310 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e  cord.  If.** P4>
20320 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
20330 50 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20  P3 is the first 
20340 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
20350 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70  that form an unp
20360 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e  acked.** record.
20370 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50  .** .** Cursor P
20380 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78  1 is on an index
20390 20 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20   btree.  If the 
203a0 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65  record identifie
203b0 64 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a  d by P3 and P4.*
203c0 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65  * is not the pre
203d0 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79  fix of any entry
203e0 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75   in P1 then a ju
203f0 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32  mp is made to P2
20400 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65  .  If P1 .** doe
20410 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74  s contain an ent
20420 72 79 20 77 68 6f 73 65 20 70 72 65 66 69 78 20  ry whose prefix 
20430 6d 61 74 63 68 65 73 20 74 68 65 20 50 33 2f 50  matches the P3/P
20440 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f  4 record then co
20450 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74  ntrol.** falls t
20460 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
20470 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  xt instruction a
20480 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f  nd P1 is left po
20490 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a  inting at the.**
204a0 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e   matching entry.
204b0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72  .**.** This oper
204c0 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65  ation leaves the
204d0 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61   cursor in a sta
204e0 74 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e  te where it cann
204f0 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  ot be.** advance
20500 64 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65  d in either dire
20510 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ction.  In other
20520 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74   words, the Next
20530 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63   and Prev.** opc
20540 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b  odes do not work
20550 20 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72   after this oper
20560 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ation..**.** See
20570 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
20580 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c  tExists, NoConfl
20590 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ict.*/./* Opcode
205a0 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20  : NoConflict P1 
205b0 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
205c0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
205d0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
205e0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
205f0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20600 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20610 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20620 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20630 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20640 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20650 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20660 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
20670 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
20680 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20690 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
206a0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
206b0 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
206c0 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e  nd P4.** contain
206d0 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65  s any NULL value
206e0 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  , jump immediate
206f0 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c  ly to P2.  If al
20700 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a  l terms of the.*
20710 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74  * record are not
20720 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65  -NULL then a che
20730 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65  ck is done to de
20740 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72  termine if any r
20750 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20  ow in the.** P1 
20760 69 6e 64 65 78 20 62 74 72 65 65 20 68 61 73 20  index btree has 
20770 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70  a matching key p
20780 72 65 66 69 78 2e 20 20 49 66 20 74 68 65 72 65  refix.  If there
20790 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c   are no matches,
207a0 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61   jump.** immedia
207b0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
207c0 74 68 65 72 65 20 69 73 20 61 20 6d 61 74 63 68  there is a match
207d0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61  , fall through a
207e0 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a  nd leave the P1.
207f0 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69  ** cursor pointi
20800 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69  ng to the matchi
20810 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68  ng row..**.** Th
20820 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d  is opcode is sim
20830 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f  ilar to OP_NotFo
20840 75 6e 64 20 77 69 74 68 20 74 68 65 20 65 78 63  und with the exc
20850 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65  eptions that the
20860 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c  .** branch is al
20870 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e  ways taken if an
20880 79 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 65  y part of the se
20890 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69  arch key input i
208a0 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68  s NULL..**.** Th
208b0 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
208c0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
208d0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
208e0 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
208f0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
20900 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
20910 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20920 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
20930 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
20940 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
20950 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
20960 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
20970 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e  tFound, Found, N
20980 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65  otExists.*/.case
20990 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20   OP_NoConflict: 
209a0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
209b0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46   */.case OP_NotF
209c0 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a  ound:       /* j
209d0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
209e0 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20   OP_Found: {    
209f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
20a00 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64   */.  int alread
20a10 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 74  yExists;.  int t
20a20 61 6b 65 4a 75 6d 70 3b 0a 20 20 69 6e 74 20 69  akeJump;.  int i
20a30 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  i;.  VdbeCursor 
20a40 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
20a50 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20    char *pFree;. 
20a60 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20   UnpackedRecord 
20a70 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61  *pIdxKey;.  Unpa
20a80 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20  ckedRecord r;.  
20a90 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f  char aTempRec[RO
20aa0 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61  UND8(sizeof(Unpa
20ab0 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73  ckedRecord)) + s
20ac0 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37  izeof(Mem)*4 + 7
20ad0 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ];..#ifdef SQLIT
20ae0 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70  E_TEST.  if( pOp
20af0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43  ->opcode!=OP_NoC
20b00 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65  onflict ) sqlite
20b10 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b  3_found_count++;
20b20 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72  .#endif..  asser
20b30 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
20b40 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
20b50 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
20b60 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
20b70 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d  _INT32 );.  pC =
20b80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
20b90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
20ba0 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51  !=0 );.#ifdef SQ
20bb0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
20bc0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
20bd0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20  pcode;.#endif.  
20be0 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
20bf0 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
20c00 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
20c10 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
20c20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
20c30 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20  .pCursor!=0 );. 
20c40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
20c50 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46 72  able==0 );.  pFr
20c60 65 65 20 3d 20 30 3b 0a 20 20 69 66 28 20 70 4f  ee = 0;.  if( pO
20c70 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
20c80 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
20c90 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
20ca0 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
20cb0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
20cc0 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20  .aMem = pIn3;.  
20cd0 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72    for(ii=0; ii<r
20ce0 2e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  .nField; ii++){.
20cf0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
20d00 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
20d10 5b 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45  [ii]) );.      E
20d20 78 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65  xpandBlob(&r.aMe
20d30 6d 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53  m[ii]);.#ifdef S
20d40 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20  QLITE_DEBUG.    
20d50 20 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53    if( ii ) REGIS
20d60 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
20d70 33 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69  3+ii, &r.aMem[ii
20d80 5d 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d  ]);.#endif.    }
20d90 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26  .    pIdxKey = &
20da0 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  r;.  }else{.    
20db0 70 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65  pIdxKey = sqlite
20dc0 33 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b  3VdbeAllocUnpack
20dd0 65 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20  edRecord(.      
20de0 20 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20    pC->pKeyInfo, 
20df0 61 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66  aTempRec, sizeof
20e00 28 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72  (aTempRec), &pFr
20e10 65 65 0a 20 20 20 20 29 3b 0a 20 20 20 20 69 66  ee.    );.    if
20e20 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
20e30 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
20e40 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
20e50 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
20e60 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
20e70 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c 69  (pIn3);.    sqli
20e80 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70  te3VdbeRecordUnp
20e90 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  ack(pC->pKeyInfo
20ea0 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d  , pIn3->n, pIn3-
20eb0 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20  >z, pIdxKey);.  
20ec0 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66  }.  pIdxKey->def
20ed0 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 74  ault_rc = 0;.  t
20ee0 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20 69  akeJump = 0;.  i
20ef0 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
20f00 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b  OP_NoConflict ){
20f10 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20  .    /* For the 
20f20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70  OP_NoConflict op
20f30 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a  code, take the j
20f40 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68  ump if any of th
20f50 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66  e.    ** input f
20f60 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20  ields are NULL, 
20f70 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69  since any key wi
20f80 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e  th a NULL will n
20f90 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69  ot.    ** confli
20fa0 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69  ct */.    for(ii
20fb0 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d 3e  =0; ii<pIdxKey->
20fc0 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
20fd0 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79       if( pIdxKey
20fe0 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  ->aMem[ii].flags
20ff0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
21000 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70 20         takeJump 
21010 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72 65  = 1;.        bre
21020 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ak;.      }.    
21030 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  }.  }.  rc = sql
21040 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
21050 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70  npacked(pC->uc.p
21060 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c  Cursor, pIdxKey,
21070 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
21080 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
21090 2c 20 70 46 72 65 65 29 3b 0a 20 20 69 66 28 20  , pFree);.  if( 
210a0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
210b0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
210c0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
210d0 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64   = res;.  alread
210e0 79 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d  yExists = (res==
210f0 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  0);.  pC->nullRo
21100 77 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69  w = 1-alreadyExi
21110 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  sts;.  pC->defer
21120 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21130 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
21140 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
21150 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21160 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20  e==OP_Found ){. 
21170 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21180 65 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73  en(alreadyExists
21190 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20  !=0,2);.    if( 
211a0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
211b0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
211c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
211d0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61  beBranchTaken(ta
211e0 6b 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45  keJump||alreadyE
211f0 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20  xists==0,2);.   
21200 20 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c   if( takeJump ||
21210 20 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20   !alreadyExists 
21220 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
21230 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
21240 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  }../* Opcode: No
21250 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
21260 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
21270 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
21280 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
21290 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
212a0 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
212b0 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
212c0 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
212d0 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
212e0 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
212f0 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
21300 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
21310 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
21320 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
21330 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c  tely to P2.  Or,
21340 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
21350 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  se an.** SQLITE_
21360 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49  CORRUPT error. I
21370 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69  f P1 does contai
21380 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
21390 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
213a0 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
213b0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
213c0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
213d0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
213e0 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
213f0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
21400 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
21410 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
21420 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
21430 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
21440 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
21450 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
21460 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
21470 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
21480 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
21490 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
214a0 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
214b0 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
214c0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
214d0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
214e0 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
214f0 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
21500 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
21510 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
21520 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
21530 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
21540 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65  Conflict.*/.case
21550 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
21560 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
21570 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
21580 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
21590 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
215a0 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
215b0 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
215c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
215d0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
215e0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
215f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
21600 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
21610 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
21620 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
21630 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
21640 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
21650 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
21660 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30    pC->seekOp = 0
21670 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
21680 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
21690 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
216a0 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
216b0 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 72  E_BTREE );.  pCr
216c0 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72  sr = pC->uc.pCur
216d0 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  sor;.  assert( p
216e0 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 65 73  Crsr!=0 );.  res
216f0 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70   = 0;.  iKey = p
21700 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d  In3->u.i;.  rc =
21710 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76   sqlite3BtreeMov
21720 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73  etoUnpacked(pCrs
21730 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26  r, 0, iKey, 0, &
21740 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
21750 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
21760 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d   res==0 );.  pC-
21770 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20  >movetoTarget = 
21780 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64 20 62  iKey;  /* Used b
21790 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20  y OP_Delete */. 
217a0 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
217b0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
217c0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
217d0 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  E;.  pC->deferre
217e0 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56  dMoveto = 0;.  V
217f0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
21800 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e  es!=0,2);.  pC->
21810 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73  seekResult = res
21820 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20 29  ;.  if( res!=0 )
21830 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  {.    assert( rc
21840 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
21850 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
21860 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
21870 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
21880 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
21890 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f        goto jump_
218a0 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d  to_p2;.    }.  }
218b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
218c0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
218d0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
218e0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
218f0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
21900 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
21910 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
21920 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
21930 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
21940 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
21950 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
21960 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
21970 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
21980 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
21990 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
219a0 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
219b0 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
219c0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
219d0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
219e0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
219f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
21a00 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
21a10 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
21a20 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  ( p->apCsr[pOp->
21a30 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  p1]!=0 );.  asse
21a40 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
21a50 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 21  ->p1]->eCurType!
21a60 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b  =CURTYPE_VTAB );
21a70 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72  .  pOut = out2Pr
21a80 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29  erelease(p, pOp)
21a90 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
21aa0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
21ab0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
21ac0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
21ad0 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
21ae0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
21af0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
21b00 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
21b10 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
21b20 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
21b30 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
21b40 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
21b50 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
21b60 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
21b70 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
21b80 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
21b90 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
21ba0 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
21bb0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
21bc0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
21bd0 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
21be0 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
21bf0 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
21c00 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
21c10 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
21c20 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
21c30 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
21c40 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
21c50 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
21c60 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
21c70 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
21c80 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
21c90 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
21ca0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
21cb0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
21cc0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
21cd0 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
21ce0 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
21cf0 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
21d00 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
21d10 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
21d20 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
21d30 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
21d40 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
21d50 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
21d60 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
21d70 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
21d80 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
21d90 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
21da0 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
21db0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
21dc0 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20   */.  i64 v;    
21dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21de0 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f  The new rowid */
21df0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
21e00 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  C;        /* Cur
21e10 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20  sor of table to 
21e20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69  get the new rowi
21e30 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20  d */.  int res; 
21e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
21e50 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71   Result of an sq
21e60 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 29  lite3BtreeLast()
21e70 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20   */.  int cnt;  
21e80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21e90 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74  Counter to limit
21ea0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73   the number of s
21eb0 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d  earches */.  Mem
21ec0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
21ed0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
21ee0 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20  holding largest 
21ef0 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e  rowid for AUTOIN
21f00 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62  CREMENT */.  Vdb
21f10 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
21f20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d      /* Root fram
21f30 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20  e of VDBE */..  
21f40 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30  v = 0;.  res = 0
21f50 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
21f60 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
21f70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
21f80 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
21f90 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
21fa0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21fb0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21fc0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
21fd0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
21fe0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
21ff0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
22000 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
22010 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f 2a  =0 );.  {.    /*
22020 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20   The next rowid 
22030 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  or record number
22040 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d   (different term
22050 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20  s for the same. 
22060 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20     ** thing) is 
22070 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77  obtained in a tw
22080 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d  o-step algorithm
22090 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
220a0 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70 74  First we attempt
220b0 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72   to find the lar
220c0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
220d0 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a  wid and add one.
220e0 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20      ** to that. 
220f0 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72 67   But if the larg
22100 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77  est existing row
22110 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74 68  id is already th
22120 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a  e maximum.    **
22130 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65   positive intege
22140 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66 61  r, we have to fa
22150 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
22160 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20  e second.    ** 
22170 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c  probabilistic al
22180 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20  gorithm.    **. 
22190 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64     ** The second
221a0 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f   algorithm is to
221b0 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20   select a rowid 
221c0 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65  at random and se
221d0 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61  e if.    ** it a
221e0 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69 6e  lready exists in
221f0 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20   the table.  If 
22200 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
22210 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a  t, we have.    *
22220 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49 66  * succeeded.  If
22230 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69   the random rowi
22240 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65  d does exist, we
22250 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e   select a new on
22260 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79  e.    ** and try
22270 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30   again, up to 10
22280 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a  0 times..    */.
22290 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
222a0 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64  isTable );..#ifd
222b0 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f  ef SQLITE_32BIT_
222c0 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65  ROWID.#   define
222d0 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66   MAX_ROWID 0x7ff
222e0 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20  fffff.#else.    
222f0 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72  /* Some compiler
22300 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74  s complain about
22310 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68   constants of th
22320 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66  e form 0x7ffffff
22330 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a  fffffffff..    *
22340 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69  * Others complai
22350 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66 66  n about 0x7fffff
22360 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20  fffffffffffLL.  
22370 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
22380 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a  cro seems.    **
22390 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20   to provide the 
223a0 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d  constant while m
223b0 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c  aking all compil
223c0 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a  ers happy..    *
223d0 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58  /.#   define MAX
223e0 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20 28  _ROWID  (i64)( (
223f0 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66 66  ((u64)0x7fffffff
22400 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78  )<<32) | (u64)0x
22410 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69  ffffffff ).#endi
22420 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e  f..    if( !pC->
22430 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29  useRandomRowid )
22440 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
22450 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
22460 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72  ->uc.pCursor, &r
22470 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
22480 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c!=SQLITE_OK ){.
22490 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
224a0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
224b0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
224c0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20  f( res ){.      
224d0 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49 4d    v = 1;   /* IM
224e0 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37 34  P: R-61914-48074
224f0 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   */.      }else{
22500 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
22510 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
22520 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e 75  sorIsValid(pC->u
22530 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  c.pCursor) );.  
22540 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
22550 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
22560 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
22570 76 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  v);.        asse
22580 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
22590 4b 20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74  K );   /* Cannot
225a0 20 66 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20   fail following 
225b0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
225c0 20 20 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41         if( v>=MA
225d0 58 5f 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20  X_ROWID ){.     
225e0 20 20 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64       pC->useRand
225f0 6f 6d 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20  omRowid = 1;.   
22600 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
22610 20 20 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20        v++;   /* 
22620 49 4d 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39  IMP: R-29538-349
22630 38 37 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  87 */.        }.
22640 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23        }.    }..#
22650 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
22660 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
22670 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  .    if( pOp->p3
22680 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73   ){.      /* Ass
22690 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61  ert that P3 is a
226a0 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65   valid memory ce
226b0 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ll. */.      ass
226c0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29  ert( pOp->p3>0 )
226d0 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70  ;.      if( p->p
226e0 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  Frame ){.       
226f0 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
22700 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
22710 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
22720 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
22730 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
22740 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
22750 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
22760 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
22770 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70  sert( pOp->p3<=p
22780 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20  Frame->nMem );. 
22790 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70         pMem = &p
227a0 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d  Frame->aMem[pOp-
227b0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73  >p3];.      }els
227c0 65 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73  e{.        /* As
227d0 73 65 72 74 20 74 68 61 74 20 50 33 20 69 73 20  sert that P3 is 
227e0 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63  a valid memory c
227f0 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20  ell. */.        
22800 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
22810 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
22820 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
22830 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
22840 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20  p->p3];.        
22850 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
22860 28 70 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  (p, pMem);.     
22870 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
22880 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d   memIsValid(pMem
22890 29 20 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49  ) );..      REGI
228a0 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
228b0 70 33 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20  p3, pMem);.     
228c0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49   sqlite3VdbeMemI
228d0 6e 74 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b  ntegerify(pMem);
228e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
228f0 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pMem->flags & ME
22900 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a  M_Int)!=0 );  /*
22910 20 6d 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61   mem(P3) holds a
22920 6e 20 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20  n integer */.   
22930 20 20 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69     if( pMem->u.i
22940 3d 3d 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70  ==MAX_ROWID || p
22950 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
22960 64 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  d ){.        rc 
22970 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20  = SQLITE_FULL;  
22980 20 2f 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35   /* IMP: R-12275
22990 2d 36 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20  -61338 */.      
229a0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
229b0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
229c0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70   }.      if( v<p
229d0 4d 65 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20  Mem->u.i+1 ){.  
229e0 20 20 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e        v = pMem->
229f0 75 2e 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d  u.i + 1;.      }
22a00 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69  .      pMem->u.i
22a10 20 3d 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64   = v;.    }.#end
22a20 69 66 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75  if.    if( pC->u
22a30 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b  seRandomRowid ){
22a40 0a 20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d  .      /* IMPLEM
22a50 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30  ENTATION-OF: R-0
22a60 37 36 37 37 2d 34 31 38 38 31 20 49 66 20 74 68  7677-41881 If th
22a70 65 20 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20  e largest ROWID 
22a80 69 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a  is equal to the.
22a90 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74        ** largest
22aa0 20 70 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65   possible intege
22ab0 72 20 28 39 32 32 33 33 37 32 30 33 36 38 35 34  r (9223372036854
22ac0 37 37 35 38 30 37 29 20 74 68 65 6e 20 74 68 65  775807) then the
22ad0 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20   database.      
22ae0 2a 2a 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73  ** engine starts
22af0 20 70 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76   picking positiv
22b00 65 20 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49  e candidate ROWI
22b10 44 73 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74  Ds at random unt
22b20 69 6c 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66  il.      ** it f
22b30 69 6e 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73  inds one that is
22b40 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
22b50 75 73 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61  used. */.      a
22b60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d  ssert( pOp->p3==
22b70 30 20 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e  0 );  /* We cann
22b80 6f 74 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20  ot be in random 
22b90 72 6f 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68  rowid mode if th
22ba0 69 73 20 69 73 0a 20 20 20 20 20 20 20 20 20 20  is is.          
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22bc0 20 20 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43     ** an AUTOINC
22bd0 52 45 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f  REMENT table. */
22be0 0a 20 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a  .      cnt = 0;.
22bf0 20 20 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20        do{.      
22c00 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d    sqlite3_random
22c10 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20  ness(sizeof(v), 
22c20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26  &v);.        v &
22c30 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
22c40 3b 20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72  ; v++;  /* Ensur
22c50 65 20 74 68 61 74 20 76 20 69 73 20 67 72 65 61  e that v is grea
22c60 74 65 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f  ter than zero */
22c70 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20  .      }while(  
22c80 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74  ((rc = sqlite3Bt
22c90 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
22ca0 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
22cb0 2c 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20  , 0, (u64)v,.   
22cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c                0,
22cf0 20 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f   &res))==SQLITE_
22d00 4f 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  OK).            
22d10 26 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20  && (res==0).    
22d20 20 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e          && (++cn
22d30 74 3c 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69  t<100));.      i
22d40 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
22d50 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   && res==0 ){.  
22d60 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
22d70 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50  E_FULL;   /* IMP
22d80 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20  : R-38219-53002 
22d90 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  */.        goto 
22da0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
22db0 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  or;.      }.    
22dc0 20 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b    assert( v>0 );
22dd0 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32    /* EV: R-40812
22de0 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a  -03570 */.    }.
22df0 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64      pC->deferred
22e00 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20  Moveto = 0;.    
22e10 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
22e20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
22e30 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
22e40 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
22e50 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
22e60 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
22e70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e  .** Synopsis: in
22e80 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d  tkey=r[P3] data=
22e90 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74  r[P2].**.** Writ
22ea0 65 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20  e an entry into 
22eb0 74 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72  the table of cur
22ec0 73 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65  sor P1.  A new e
22ed0 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74  ntry is.** creat
22ee0 65 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  ed if it doesn't
22ef0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f   already exist o
22f00 72 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61  r the data for a
22f10 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e  n existing.** en
22f20 74 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74  try is overwritt
22f30 65 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73  en.  The data is
22f40 20 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42   the value MEM_B
22f50 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65  lob stored in re
22f60 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72  gister.** number
22f70 20 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20   P2. The key is 
22f80 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
22f90 65 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d  er P3. The key m
22fa0 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f  ust.** be a MEM_
22fb0 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  Int..**.** If th
22fc0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
22fd0 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73   flag of P5 is s
22fe0 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
22ff0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73   change count is
23000 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20  .** incremented 
23010 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
23020 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
23030 4c 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f  LASTROWID flag o
23040 66 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20  f P5 is set,.** 
23050 74 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74  then rowid is st
23060 6f 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75  ored for subsequ
23070 65 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68  ent return by th
23080 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73  e.** sqlite3_las
23090 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
230a0 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72   function (other
230b0 77 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64  wise it is unmod
230c0 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66  ified)..**.** If
230d0 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53   the OPFLAG_USES
230e0 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f  EEKRESULT flag o
230f0 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
23100 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66  if the result of
23110 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20 73 65 65  .** the last see
23120 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28 4f 50 5f  k operation (OP_
23130 4e 6f 74 45 78 69 73 74 73 29 20 77 61 73 20 61  NotExists) was a
23140 20 73 75 63 63 65 73 73 2c 20 74 68 65 6e 20 74   success, then t
23150 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  his.** operation
23160 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74 65 6d 70   will not attemp
23170 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 61 70  t to find the ap
23180 70 72 6f 70 72 69 61 74 65 20 72 6f 77 20 62 65  propriate row be
23190 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a 20 74 68  fore doing.** th
231a0 65 20 69 6e 73 65 72 74 20 62 75 74 20 77 69 6c  e insert but wil
231b0 6c 20 69 6e 73 74 65 61 64 20 6f 76 65 72 77 72  l instead overwr
231c0 69 74 65 20 74 68 65 20 72 6f 77 20 74 68 61 74  ite the row that
231d0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
231e0 2a 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  * currently poin
231f0 74 69 6e 67 20 74 6f 2e 20 20 50 72 65 73 75 6d  ting to.  Presum
23200 61 62 6c 79 2c 20 74 68 65 20 70 72 69 6f 72 20  ably, the prior 
23210 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
23220 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c 72 65 61  ode.** has alrea
23230 64 79 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  dy positioned th
23240 65 20 63 75 72 73 6f 72 20 63 6f 72 72 65 63 74  e cursor correct
23250 6c 79 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20  ly.  This is an 
23260 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20  optimization.** 
23270 74 68 61 74 20 62 6f 6f 73 74 73 20 70 65 72 66  that boosts perf
23280 6f 72 6d 61 6e 63 65 20 62 79 20 61 76 6f 69 64  ormance by avoid
23290 69 6e 67 20 72 65 64 75 6e 64 61 6e 74 20 73 65  ing redundant se
232a0 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  eks..**.** If th
232b0 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54  e OPFLAG_ISUPDAT
232c0 45 20 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74  E flag is set, t
232d0 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20  hen this opcode 
232e0 69 73 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a  is part of an.**
232f0 20 55 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f   UPDATE operatio
23300 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 20 28 69  n.  Otherwise (i
23310 66 20 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c  f the flag is cl
23320 65 61 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f  ear) then this o
23330 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74  pcode.** is part
23340 20 6f 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70   of an INSERT op
23350 65 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69  eration.  The di
23360 66 66 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79  fference is only
23370 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a   important to.**
23380 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b   the update hook
23390 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65  ..**.** Paramete
233a0 72 20 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74  r P4 may point t
233b0 6f 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61  o a string conta
233c0 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c 65 2d  ining the table-
233d0 6e 61 6d 65 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20  name, or.** may 
233e0 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
233f0 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e  s not NULL, then
23400 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
23410 20 0a 2a 2a 20 28 73 71 6c 69 74 65 33 2e 78 55   .** (sqlite3.xU
23420 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
23430 73 20 69 6e 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77  s invoked follow
23440 69 6e 67 20 61 20 73 75 63 63 65 73 73 66 75 6c  ing a successful
23450 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28   insert..**.** (
23460 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66  WARNING/TODO: If
23470 20 50 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d   P1 is a pseudo-
23480 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73  cursor and P2 is
23490 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20   dynamically.** 
234a0 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20  allocated, then 
234b0 6f 77 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20  ownership of P2 
234c0 69 73 20 74 72 61 6e 73 66 65 72 72 65 64 20 74  is transferred t
234d0 6f 20 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72  o the pseudo-cur
234e0 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73  sor.** and regis
234f0 74 65 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65  ter P2 becomes e
23500 70 68 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68  phemeral.  If th
23510 65 20 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e  e cursor is chan
23520 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75  ged, the.** valu
23530 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 32  e of register P2
23540 20 77 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67   will then chang
23550 65 2e 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68  e.  Make sure th
23560 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63  is does not.** c
23570 61 75 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d  ause any problem
23580 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  s.).**.** This i
23590 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20  nstruction only 
235a0 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e  works on tables.
235b0 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74    The equivalent
235c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20   instruction.** 
235d0 66 6f 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f  for indices is O
235e0 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a  P_IdxInsert..*/.
235f0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72  /* Opcode: Inser
23600 74 49 6e 74 20 50 31 20 50 32 20 50 33 20 50 34  tInt P1 P2 P3 P4
23610 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
23620 20 20 69 6e 74 6b 65 79 3d 50 33 20 64 61 74 61    intkey=P3 data
23630 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69  =r[P2].**.** Thi
23640 73 20 77 6f 72 6b 73 20 65 78 61 63 74 6c 79 20  s works exactly 
23650 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72 74 20 65  like OP_Insert e
23660 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6b  xcept that the k
23670 65 79 20 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74  ey is the.** int
23680 65 67 65 72 20 76 61 6c 75 65 20 50 33 2c 20 6e  eger value P3, n
23690 6f 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ot the value of 
236a0 74 68 65 20 69 6e 74 65 67 65 72 20 73 74 6f 72  the integer stor
236b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
236c0 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  3..*/.case OP_In
236d0 73 65 72 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49  sert: .case OP_I
236e0 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65  nsertInt: {.  Me
236f0 6d 20 2a 70 44 61 74 61 3b 20 20 20 20 20 20 20  m *pData;       
23700 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64  /* MEM cell hold
23710 69 6e 67 20 64 61 74 61 20 66 6f 72 20 74 68 65  ing data for the
23720 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
23730 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20  serted */.  Mem 
23740 2a 70 4b 65 79 3b 20 20 20 20 20 20 20 20 2f 2a  *pKey;        /*
23750 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e   MEM cell holdin
23760 67 20 6b 65 79 20 20 66 6f 72 20 74 68 65 20 72  g key  for the r
23770 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34 20 69  ecord */.  i64 i
23780 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
23790 54 68 65 20 69 6e 74 65 67 65 72 20 52 4f 57 49  The integer ROWI
237a0 44 20 6f 72 20 6b 65 79 20 66 6f 72 20 74 68 65  D or key for the
237b0 20 72 65 63 6f 72 64 20 74 6f 20 62 65 20 69 6e   record to be in
237c0 73 65 72 74 65 64 20 2a 2f 0a 20 20 56 64 62 65  serted */.  Vdbe
237d0 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 2f 2a  Cursor *pC;   /*
237e0 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62 6c 65   Cursor to table
237f0 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e 73 65   into which inse
23800 72 74 20 69 73 20 77 72 69 74 74 65 6e 20 2a 2f  rt is written */
23810 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20  .  int nZero;   
23820 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23830 66 20 7a 65 72 6f 2d 62 79 74 65 73 20 74 6f 20  f zero-bytes to 
23840 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69 6e 74 20  append */.  int 
23850 73 65 65 6b 52 65 73 75 6c 74 3b 20 20 20 2f 2a  seekResult;   /*
23860 20 52 65 73 75 6c 74 20 6f 66 20 70 72 69 6f 72   Result of prior
23870 20 73 65 65 6b 20 6f 72 20 30 20 69 66 20 6e 6f   seek or 0 if no
23880 20 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66   USESEEKRESULT f
23890 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  lag */.  const c
238a0 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a 20 64 61  har *zDb;  /* da
238b0 74 61 62 61 73 65 20 6e 61 6d 65 20 2d 20 75 73  tabase name - us
238c0 65 64 20 62 79 20 74 68 65 20 75 70 64 61 74 65  ed by the update
238d0 20 68 6f 6f 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74   hook */.  const
238e0 20 63 68 61 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20   char *zTbl; /* 
238f0 54 61 62 6c 65 20 6e 61 6d 65 20 2d 20 75 73 65  Table name - use
23900 64 20 62 79 20 74 68 65 20 6f 70 64 61 74 65 20  d by the opdate 
23910 68 6f 6f 6b 20 2a 2f 0a 20 20 69 6e 74 20 6f 70  hook */.  int op
23920 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f  ;           /* O
23930 70 63 6f 64 65 20 66 6f 72 20 75 70 64 61 74 65  pcode for update
23940 20 68 6f 6f 6b 3a 20 53 51 4c 49 54 45 5f 55 50   hook: SQLITE_UP
23950 44 41 54 45 20 6f 72 20 53 51 4c 49 54 45 5f 49  DATE or SQLITE_I
23960 4e 53 45 52 54 20 2a 2f 0a 0a 20 20 70 44 61 74  NSERT */..  pDat
23970 61 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  a = &aMem[pOp->p
23980 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  2];.  assert( pO
23990 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
239a0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
239b0 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
239c0 73 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b  sValid(pData) );
239d0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
239e0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
239f0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
23a00 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
23a10 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
23a20 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
23a30 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
23a40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
23a50 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
23a60 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
23a70 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b  pOp->p2, pData);
23a80 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  ..  if( pOp->opc
23a90 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29  ode==OP_Insert )
23aa0 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d  {.    pKey = &aM
23ab0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
23ac0 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66   assert( pKey->f
23ad0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
23ae0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65  ;.    assert( me
23af0 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29  mIsValid(pKey) )
23b00 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
23b10 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b  RACE(pOp->p3, pK
23b20 65 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ey);.    iKey = 
23b30 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c  pKey->u.i;.  }el
23b40 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
23b50 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
23b60 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20  InsertInt );.   
23b70 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b   iKey = pOp->p3;
23b80 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d  .  }..  if( pOp-
23b90 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48  >p5 & OPFLAG_NCH
23ba0 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67  ANGE ) p->nChang
23bb0 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  e++;.  if( pOp->
23bc0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54  p5 & OPFLAG_LAST
23bd0 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74  ROWID ) db->last
23be0 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69  Rowid = lastRowi
23bf0 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20  d = iKey;.  if( 
23c00 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
23c10 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70  EM_Null ){.    p
23c20 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20  Data->z = 0;.   
23c30 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20   pData->n = 0;. 
23c40 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
23c50 72 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  rt( pData->flags
23c60 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d   & (MEM_Blob|MEM
23c70 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73  _Str) );.  }.  s
23c80 65 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f  eekResult = ((pO
23c90 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
23ca0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
23cb0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
23cc0 20 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61   0);.  if( pData
23cd0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
23ce0 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20  ro ){.    nZero 
23cf0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
23d00 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e  ;.  }else{.    n
23d10 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  Zero = 0;.  }.  
23d20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23d30 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
23d40 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
23d50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23d60 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
23d70 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
23d80 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
23d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23da0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
23db0 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65  G_APPEND)!=0, se
23dc0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
23dd0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23de0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
23df0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
23e00 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49  E_STALE;..  /* I
23e10 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65  nvoke the update
23e20 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65  -hook if require
23e30 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d  d. */.  if( rc==
23e40 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d  SQLITE_OK && db-
23e50 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
23e60 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
23e70 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61  .    zDb = db->a
23e80 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d  Db[pC->iDb].zNam
23e90 65 3b 0a 20 20 20 20 7a 54 62 6c 20 3d 20 70 4f  e;.    zTbl = pO
23ea0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 6f 70 20  p->p4.z;.    op 
23eb0 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50  = ((pOp->p5 & OP
23ec0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 3f  FLAG_ISUPDATE) ?
23ed0 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 3a   SQLITE_UPDATE :
23ee0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 29 3b   SQLITE_INSERT);
23ef0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23f00 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
23f10 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  db->xUpdateCallb
23f20 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74 65 41  ack(db->pUpdateA
23f30 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 7a 54 62  rg, op, zDb, zTb
23f40 6c 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  l, iKey);.    as
23f50 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30  sert( pC->iDb>=0
23f60 20 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   );.  }.  break;
23f70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
23f80 65 6c 65 74 65 20 50 31 20 50 32 20 2a 20 50 34  elete P1 P2 * P4
23f90 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P5.**.** Delete
23fa0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 20 77   the record at w
23fb0 68 69 63 68 20 74 68 65 20 50 31 20 63 75 72 73  hich the P1 curs
23fc0 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  or is currently 
23fd0 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  pointing..**.** 
23fe0 49 66 20 74 68 65 20 50 35 20 70 61 72 61 6d 65  If the P5 parame
23ff0 74 65 72 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  ter is non-zero,
24000 20 74 68 65 20 63 75 72 73 6f 72 20 77 69 6c 6c   the cursor will
24010 20 62 65 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e   be left pointin
24020 67 20 61 74 20 0a 2a 2a 20 65 69 74 68 65 72 20  g at .** either 
24030 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65 20  the next or the 
24040 70 72 65 76 69 6f 75 73 20 72 65 63 6f 72 64 20  previous record 
24050 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 49 66  in the table. If
24060 20 69 74 20 69 73 20 6c 65 66 74 20 0a 2a 2a 20   it is left .** 
24070 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
24080 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
24090 6e 20 74 68 65 20 6e 65 78 74 20 4e 65 78 74 20  n the next Next 
240a0 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c 6c  instruction will
240b0 20 62 65 20 61 20 0a 2a 2a 20 6e 6f 2d 6f 70 2e   be a .** no-op.
240c0 20 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e   As a result, in
240d0 20 74 68 69 73 20 63 61 73 65 20 69 74 20 69 73   this case it is
240e0 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 20 61 20   OK to delete a 
240f0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
24100 69 6e 20 61 0a 2a 2a 20 4e 65 78 74 20 6c 6f 6f  in a.** Next loo
24110 70 2e 20 49 66 20 50 35 20 69 73 20 7a 65 72 6f  p. If P5 is zero
24120 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f  , then the curso
24130 72 20 69 73 20 6c 65 66 74 20 69 6e 20 61 6e 20  r is left in an 
24140 75 6e 64 65 66 69 6e 65 64 20 73 74 61 74 65 2e  undefined state.
24150 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
24160 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
24170 67 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20  g of P2 is set, 
24180 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
24190 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
241a0 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
241b0 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
241c0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
241d0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
241e0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
241f0 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
24200 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
24210 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
24220 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20   not NULL, then 
24230 69 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  it is the name o
24240 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
24250 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69   P1 is.** pointi
24260 6e 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61  ng to.  The upda
24270 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20  te hook will be 
24280 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65  invoked, if it e
24290 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20  xists..** If P4 
242a0 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e  is not NULL then
242b0 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
242c0 75 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f  ust have been po
242d0 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e  sitioned.** usin
242e0 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72  g OP_NotFound pr
242f0 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20  ior to invoking 
24300 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a  this opcode..*/.
24310 63 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20  case OP_Delete: 
24320 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
24330 70 43 3b 0a 20 20 75 38 20 68 61 73 55 70 64 61  pC;.  u8 hasUpda
24340 74 65 43 61 6c 6c 62 61 63 6b 3b 0a 0a 20 20 61  teCallback;..  a
24350 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24360 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24370 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24380 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24390 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
243a0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
243b0 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
243c0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
243d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
243e0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
243f0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
24400 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
24410 29 3b 0a 0a 20 20 68 61 73 55 70 64 61 74 65 43  );..  hasUpdateC
24420 61 6c 6c 62 61 63 6b 20 3d 20 64 62 2d 3e 78 55  allback = db->xU
24430 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26  pdateCallback &&
24440 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43   pOp->p4.z && pC
24450 2d 3e 69 73 54 61 62 6c 65 3b 0a 20 20 69 66 28  ->isTable;.  if(
24460 20 70 4f 70 2d 3e 70 35 20 26 26 20 68 61 73 55   pOp->p5 && hasU
24470 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 29 7b  pdateCallback ){
24480 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
24490 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75 63 2e  eKeySize(pC->uc.
244a0 70 43 75 72 73 6f 72 2c 20 26 70 43 2d 3e 6d 6f  pCursor, &pC->mo
244b0 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20 7d  vetoTarget);.  }
244c0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
244d0 44 45 42 55 47 0a 20 20 2f 2a 20 54 68 65 20 73  DEBUG.  /* The s
244e0 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 74 68  eek operation th
244f0 61 74 20 70 6f 73 69 74 69 6f 6e 65 64 20 74 68  at positioned th
24500 65 20 63 75 72 73 6f 72 20 70 72 69 6f 72 20 74  e cursor prior t
24510 6f 20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c  o OP_Delete will
24520 0a 20 20 2a 2a 20 68 61 76 65 20 61 6c 73 6f 20  .  ** have also 
24530 73 65 74 20 74 68 65 20 70 43 2d 3e 6d 6f 76 65  set the pC->move
24540 74 6f 54 61 72 67 65 74 20 66 69 65 6c 64 20 74  toTarget field t
24550 6f 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  o the rowid of t
24560 68 65 20 72 6f 77 20 74 68 61 74 0a 20 20 2a 2a  he row that.  **
24570 20 69 73 20 62 65 69 6e 67 20 64 65 6c 65 74 65   is being delete
24580 64 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  d */.  if( pOp->
24590 70 34 2e 7a 20 26 26 20 70 43 2d 3e 69 73 54 61  p4.z && pC->isTa
245a0 62 6c 65 20 26 26 20 70 4f 70 2d 3e 70 35 3d 3d  ble && pOp->p5==
245b0 30 20 29 7b 0a 20 20 20 20 69 36 34 20 69 4b 65  0 ){.    i64 iKe
245c0 79 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  y = 0;.    sqlit
245d0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
245e0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
245f0 69 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72  iKey);.    asser
24600 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  t( pC->movetoTar
24610 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20 0a 20 20  get==iKey ); .  
24620 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20 72 63 20  }.#endif. .  rc 
24630 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 65  = sqlite3BtreeDe
24640 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  lete(pC->uc.pCur
24650 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  sor, pOp->p5);. 
24660 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
24670 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
24680 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65  .  /* Invoke the
24690 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20   update-hook if 
246a0 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69  required. */.  i
246b0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
246c0 20 26 26 20 68 61 73 55 70 64 61 74 65 43 61 6c   && hasUpdateCal
246d0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 64 62 2d  lback ){.    db-
246e0 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  >xUpdateCallback
246f0 28 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c  (db->pUpdateArg,
24700 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c 0a   SQLITE_DELETE,.
24710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24720 20 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b          db->aDb[
24730 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20  pC->iDb].zName, 
24740 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 43 2d 3e 6d  pOp->p4.z, pC->m
24750 6f 76 65 74 6f 54 61 72 67 65 74 29 3b 0a 20 20  ovetoTarget);.  
24760 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
24770 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66  b>=0 );.  }.  if
24780 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c  ( pOp->p2 & OPFL
24790 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e  AG_NCHANGE ) p->
247a0 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65  nChange++;.  bre
247b0 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ak;.}./* Opcode:
247c0 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20   ResetCount * * 
247d0 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
247e0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68 61  value of the cha
247f0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 63  nge counter is c
24800 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61 74  opied to the dat
24810 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20  abase handle.** 
24820 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 28  change counter (
24830 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62 73  returned by subs
24840 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20  equent calls to 
24850 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
24860 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20  ))..** Then the 
24870 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68 61  VMs internal cha
24880 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73 65  nge counter rese
24890 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73  ts to 0..** This
248a0 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
248b0 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f  ger programs..*/
248c0 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43 6f  .case OP_ResetCo
248d0 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  unt: {.  sqlite3
248e0 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28 64  VdbeSetChanges(d
248f0 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a  b, p->nChange);.
24900 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30    p->nChange = 0
24910 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
24920 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 43   Opcode: SorterC
24930 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20  ompare P1 P2 P3 
24940 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P4.** Synopsis: 
24950 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72 69   if key(P1)!=tri
24960 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f  m(r[P3],P4) goto
24970 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
24980 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
24990 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
249a0 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72 65  n compares a pre
249b0 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65  fix of the.** re
249c0 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65 67  cord blob in reg
249d0 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73 74  ister P3 against
249e0 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65   a prefix of the
249f0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
24a00 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73 6f  the sorter curso
24a10 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  r currently poin
24a20 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65  ts to.  Only the
24a30 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64 73   first P4 fields
24a40 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64  .** of r[P3] and
24a50 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63 6f   the sorter reco
24a60 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64 2e  rd are compared.
24a70 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
24a80 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74 65   P3 or the sorte
24a90 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c  r contains a NUL
24aa0 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69  L in one of thei
24ab0 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a  r significant.**
24ac0 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75   fields (not cou
24ad0 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69 65  nting the P4 fie
24ae0 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20 77  lds at the end w
24af0 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65 64  hich are ignored
24b00 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f  ) then.** the co
24b10 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73 75  mparison is assu
24b20 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c 2e  med to be equal.
24b30 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f  .**.** Fall thro
24b40 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73 74  ugh to next inst
24b50 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20 74  ruction if the t
24b60 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70 61  wo records compa
24b70 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65  re equal to.** e
24b80 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70  ach other.  Jump
24b90 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20 61   to P2 if they a
24ba0 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f  re different..*/
24bb0 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 43  .case OP_SorterC
24bc0 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62 65  ompare: {.  Vdbe
24bd0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
24be0 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65  t res;.  int nKe
24bf0 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d  yCol;..  pC = p-
24c00 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
24c10 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
24c20 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73 73  ter(pC) );.  ass
24c30 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
24c40 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
24c50 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
24c60 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c  ->p3];.  nKeyCol
24c70 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
24c80 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  res = 0;.  rc = 
24c90 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
24ca0 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49 6e  rCompare(pC, pIn
24cb0 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73  3, nKeyCol, &res
24cc0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
24cd0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
24ce0 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f    if( res ) goto
24cf0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
24d00 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63  reak;.};../* Opc
24d10 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74 61 20  ode: SorterData 
24d20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
24d30 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
24d40 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
24d50 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
24d60 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 6f  2 the current so
24d70 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73 6f  rter data for so
24d80 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e 0a  rter cursor P1..
24d90 2a 2a 20 54 68 65 6e 20 63 6c 65 61 72 20 74 68  ** Then clear th
24da0 65 20 63 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20  e column header 
24db0 63 61 63 68 65 20 6f 6e 20 63 75 72 73 6f 72 20  cache on cursor 
24dc0 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P3..**.** This o
24dd0 70 63 6f 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  pcode is normall
24de0 79 20 75 73 65 20 74 6f 20 6d 6f 76 65 20 61 20  y use to move a 
24df0 72 65 63 6f 72 64 20 6f 75 74 20 6f 66 20 74 68  record out of th
24e00 65 20 73 6f 72 74 65 72 20 61 6e 64 20 69 6e 74  e sorter and int
24e10 6f 0a 2a 2a 20 61 20 72 65 67 69 73 74 65 72 20  o.** a register 
24e20 74 68 61 74 20 69 73 20 74 68 65 20 73 6f 75 72  that is the sour
24e30 63 65 20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d  ce for a pseudo-
24e40 74 61 62 6c 65 20 63 75 72 73 6f 72 20 63 72 65  table cursor cre
24e50 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70  ated using.** Op
24e60 65 6e 50 73 65 75 64 6f 2e 20 20 54 68 61 74 20  enPseudo.  That 
24e70 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72  pseudo-table cur
24e80 73 6f 72 20 69 73 20 74 68 65 20 6f 6e 65 20 74  sor is the one t
24e90 68 61 74 20 69 73 20 69 64 65 6e 74 69 66 69 65  hat is identifie
24ea0 64 20 62 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65  d by.** paramete
24eb0 72 20 50 33 2e 20 20 43 6c 65 61 72 69 6e 67 20  r P3.  Clearing 
24ec0 74 68 65 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61  the P3 column ca
24ed0 63 68 65 20 61 73 20 70 61 72 74 20 6f 66 20 74  che as part of t
24ee0 68 69 73 20 6f 70 63 6f 64 65 20 73 61 76 65 73  his opcode saves
24ef0 0a 2a 2a 20 75 73 20 66 72 6f 6d 20 68 61 76 69  .** us from havi
24f00 6e 67 20 74 6f 20 69 73 73 75 65 20 61 20 73 65  ng to issue a se
24f10 70 61 72 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69  parate NullRow i
24f20 6e 73 74 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c  nstruction to cl
24f30 65 61 72 20 74 68 61 74 20 63 61 63 68 65 2e 0a  ear that cache..
24f40 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
24f50 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  rData: {.  VdbeC
24f60 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f  ursor *pC;..  pO
24f70 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
24f80 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  p2];.  pC = p->a
24f90 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24fa0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
24fb0 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d 20  r(pC) );.  rc = 
24fc0 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
24fd0 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75 74  rRowkey(pC, pOut
24fe0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 21  );.  assert( rc!
24ff0 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70  =SQLITE_OK || (p
25000 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  Out->flags & MEM
25010 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 61 73 73 65  _Blob) );.  asse
25020 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25030 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25040 72 73 6f 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43  rsor );.  p->apC
25050 73 72 5b 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63  sr[pOp->p3]->cac
25060 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
25070 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b  _STALE;.  break;
25080 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
25090 6f 77 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a  owData P1 P2 * *
250a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
250b0 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a  r[P2]=data.**.**
250c0 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69   Write into regi
250d0 73 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70  ster P2 the comp
250e0 6c 65 74 65 20 72 6f 77 20 64 61 74 61 20 66 6f  lete row data fo
250f0 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
25100 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65  There is no inte
25110 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68  rpretation of th
25120 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20  e data.  .** It 
25130 69 73 20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f  is just copied o
25140 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69 73  nto the P2 regis
25150 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a  ter exactly as .
25160 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69  ** it is found i
25170 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
25180 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ile..**.** If th
25190 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74  e P1 cursor must
251a0 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20   be pointing to 
251b0 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74  a valid row (not
251c0 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20   a NULL row).** 
251d0 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  of a real table,
251e0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
251f0 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ble..*/./* Opcod
25200 65 3a 20 52 6f 77 4b 65 79 20 50 31 20 50 32 20  e: RowKey P1 P2 
25210 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
25220 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a  s: r[P2]=key.**.
25230 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65  ** Write into re
25240 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63 6f  gister P2 the co
25250 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65 79 20 66  mplete row key f
25260 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
25270 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69 6e 74   There is no int
25280 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
25290 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68  he data.  .** Th
252a0 65 20 6b 65 79 20 69 73 20 63 6f 70 69 65 64 20  e key is copied 
252b0 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65 67 69  onto the P2 regi
252c0 73 74 65 72 20 65 78 61 63 74 6c 79 20 61 73 20  ster exactly as 
252d0 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e 64 20  .** it is found 
252e0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
252f0 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  file..**.** If t
25300 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
25310 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f  t be pointing to
25320 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f   a valid row (no
25330 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a  t a NULL row).**
25340 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62 6c 65   of a real table
25350 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
25360 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
25370 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50  _RowKey:.case OP
25380 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20 56 64  _RowData: {.  Vd
25390 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
253a0 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
253b0 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69 36 34 20  .  u32 n;.  i64 
253c0 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26  n64;..  pOut = &
253d0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
253e0 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
253f0 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f  e(p, pOut);..  /
25400 2a 20 4e 6f 74 65 20 74 68 61 74 20 52 6f 77 4b  * Note that RowK
25410 65 79 20 61 6e 64 20 52 6f 77 44 61 74 61 20 61  ey and RowData a
25420 72 65 20 72 65 61 6c 6c 79 20 65 78 61 63 74 6c  re really exactl
25430 79 20 74 68 65 20 73 61 6d 65 20 69 6e 73 74 72  y the same instr
25440 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65  uction */.  asse
25450 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25460 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25470 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25480 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
254a0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
254b0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
254c0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
254d0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
254e0 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73  (pC)==0 );.  ass
254f0 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
25500 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21   || pOp->opcode!
25510 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20  =OP_RowData );. 
25520 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
25530 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  able==0 || pOp->
25540 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44 61  opcode==OP_RowDa
25550 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
25560 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29  pC->nullRow==0 )
25570 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25580 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  uc.pCursor!=0 );
25590 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75  .  pCrsr = pC->u
255a0 63 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a  c.pCursor;..  /*
255b0 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20 61   The OP_RowKey a
255c0 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f 70  nd OP_RowData op
255d0 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f 6c  codes always fol
255e0 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  low OP_NotExists
255f0 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77 69   or.  ** OP_Rewi
25600 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68 20  nd/Op_Next with 
25610 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 69  no intervening i
25620 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61 74  nstructions that
25630 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61 74   might invalidat
25640 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73 6f  e.  ** the curso
25650 72 2e 20 20 49 66 20 74 68 69 73 20 77 68 65 72  r.  If this wher
25660 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c 20  e not the case, 
25670 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  on of the follow
25680 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20 20  ing assert()s.  
25690 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20 20  ** would fail.  
256a0 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65 72  Should this ever
256b0 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73 65   change (because
256c0 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20 74   of changes in t
256d0 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65 6e  he code.  ** gen
256e0 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68 65  erator) then the
256f0 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74 6f   fix would be to
25700 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20 74   insert a call t
25710 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64  o.  ** sqlite3Vd
25720 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29  beCursorMoveto()
25730 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
25740 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
25750 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  eto==0 );.  asse
25760 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
25770 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43  CursorIsValid(pC
25780 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20 2f  rsr) );.#if 0  /
25790 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20 64  * Not required d
257a0 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f  ue to the previo
257b0 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20 73  us to assert() s
257c0 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20 72  tatements */.  r
257d0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
257e0 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b  ursorMoveto(pC);
257f0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
25800 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
25810 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
25820 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70 43  #endif..  if( pC
25830 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
25840 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43 2d      assert( !pC-
25850 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20  >isTable );.    
25860 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73  VVA_ONLY(rc =) s
25870 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69  qlite3BtreeKeySi
25880 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29 3b  ze(pCrsr, &n64);
25890 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d  .    assert( rc=
258a0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20  =SQLITE_OK );   
258b0 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
258c0 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
258d0 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
258e0 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62 2d  .    if( n64>db-
258f0 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
25900 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
25910 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62        goto too_b
25920 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e 20  ig;.    }.    n 
25930 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d 65  = (u32)n64;.  }e
25940 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  lse{.    VVA_ONL
25950 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
25960 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72  treeDataSize(pCr
25970 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73 73  sr, &n);.    ass
25980 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
25990 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74 61  OK );    /* Data
259a0 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
259b0 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e 3e  il */.    if( n>
259c0 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b  (u32)db->aLimit[
259d0 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e  SQLITE_LIMIT_LEN
259e0 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67 6f  GTH] ){.      go
259f0 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
25a00 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65  }.  }.  testcase
25a10 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20  ( n==0 );.  if( 
25a20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
25a30 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
25a40 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29 7b  t, MAX(n,32)) ){
25a50 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
25a60 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e 20  ;.  }.  pOut->n 
25a70 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  = n;.  MemSetTyp
25a80 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
25a90 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43 2d  Blob);.  if( pC-
25aa0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20  >isTable==0 ){. 
25ab0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
25ac0 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20 30  treeKey(pCrsr, 0
25ad0 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
25ae0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20 3d   }else{.    rc =
25af0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
25b00 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70  a(pCrsr, 0, n, p
25b10 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20 70  Out->z);.  }.  p
25b20 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54  Out->enc = SQLIT
25b30 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20 63  E_UTF8;  /* In c
25b40 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73 20  ase the blob is 
25b50 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65 78  ever cast to tex
25b60 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d 41  t */.  UPDATE_MA
25b70 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
25b80 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
25b90 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74  CE(pOp->p2, pOut
25ba0 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
25bb0 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64 20  * Opcode: Rowid 
25bc0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
25bd0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
25be0 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  owid.**.** Store
25bf0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 20   in register P2 
25c00 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68  an integer which
25c10 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20 74   is the key of t
25c20 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
25c30 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75 72  hat.** P1 is cur
25c40 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f 2e  rently point to.
25c50 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62 65  .**.** P1 can be
25c60 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69 6e   either an ordin
25c70 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20 76  ary table or a v
25c80 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20 54  irtual table.  T
25c90 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  here used to.** 
25ca0 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f 50  be a separate OP
25cb0 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20 66  _VRowid opcode f
25cc0 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72 74  or use with virt
25cd0 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74 20  ual tables, but 
25ce0 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63 6f  this.** one opco
25cf0 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f 72  de now works for
25d00 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70 65   both table type
25d10 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  s..*/.case OP_Ro
25d20 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20  wid: {          
25d30 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
25d40 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
25d50 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20 73  pC;.  i64 v;.  s
25d60 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
25d70 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69  ab;.  const sqli
25d80 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
25d90 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f  ule;..  pOut = o
25da0 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
25db0 20 70 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28   pOp);.  assert(
25dc0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
25dd0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
25de0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
25df0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
25e00 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
25e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
25e20 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
25e30 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
25e40 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 69 66 28  nullRow );.  if(
25e50 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a   pC->nullRow ){.
25e60 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
25e70 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
25e80 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73 65 20 69  break;.  }else i
25e90 66 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  f( pC->deferredM
25ea0 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20 76 20 3d  oveto ){.    v =
25eb0 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25ec0 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  t;.#ifndef SQLIT
25ed0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
25ee0 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  BLE.  }else if( 
25ef0 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
25f00 52 54 59 50 45 5f 56 54 41 42 20 29 7b 0a 20 20  RTYPE_VTAB ){.  
25f10 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63    assert( pC->uc
25f20 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a 20 20 20  .pVCur!=0 );.   
25f30 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 75 63 2e   pVtab = pC->uc.
25f40 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
25f50 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
25f60 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20  b->pModule;.    
25f70 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d  assert( pModule-
25f80 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20 20 72  >xRowid );.    r
25f90 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f  c = pModule->xRo
25fa0 77 69 64 28 70 43 2d 3e 75 63 2e 70 56 43 75 72  wid(pC->uc.pVCur
25fb0 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
25fc0 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
25fd0 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
25fe0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
25ff0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
26000 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
26010 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26020 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26030 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73 65  TREE );.    asse
26040 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
26050 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72 63 20  or!=0 );.    rc 
26060 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
26070 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b 0a  sorRestore(pC);.
26080 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
26090 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
260a0 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20 70 43  rror;.    if( pC
260b0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
260c0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
260d0 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20   MEM_Null;.     
260e0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
260f0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
26100 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 75  reeKeySize(pC->u
26110 63 2e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  c.pCursor, &v);.
26120 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
26130 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a  SQLITE_OK );  /*
26140 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75   Always so becau
26150 73 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74  se of CursorRest
26160 6f 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20  ore() above */. 
26170 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
26180 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   v;.  break;.}..
26190 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52  /* Opcode: NullR
261a0 6f 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ow P1 * * * *.**
261b0 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72  .** Move the cur
261c0 73 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c  sor P1 to a null
261d0 20 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f   row.  Any OP_Co
261e0 6c 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a  lumn operations.
261f0 2a 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68  ** that occur wh
26200 69 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69  ile the cursor i
26210 73 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f  s on the null ro
26220 77 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a  w will always.**
26230 20 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a   write a NULL..*
26240 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f  /.case OP_NullRo
26250 77 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  w: {.  VdbeCurso
26260 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
26270 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
26280 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
26290 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
262a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
262b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
262c0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
262d0 20 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 1;.  pC->cach
262e0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
262f0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d  STALE;.  if( pC-
26300 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
26310 50 45 5f 42 54 52 45 45 20 29 7b 0a 20 20 20 20  PE_BTREE ){.    
26320 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
26330 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20  Cursor!=0 );.   
26340 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
26350 61 72 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e  arCursor(pC->uc.
26360 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
26370 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
26380 6f 64 65 3a 20 4c 61 73 74 20 50 31 20 50 32 20  ode: Last P1 P2 
26390 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65  P3 * *.**.** The
263a0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
263b0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
263c0 20 6f 72 20 50 72 65 76 20 69 6e 73 74 72 75 63   or Prev instruc
263d0 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
263e0 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
263f0 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20  e last entry in 
26400 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62  the database tab
26410 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20  le or index..** 
26420 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  If the table or 
26430 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 61  index is empty a
26440 6e 64 20 50 32 3e 30 2c 20 74 68 65 6e 20 6a 75  nd P2>0, then ju
26450 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
26460 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 50 32 20 69  o P2..** If P2 i
26470 73 20 30 20 6f 72 20 69 66 20 74 68 65 20 74 61  s 0 or if the ta
26480 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
26490 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c 20  not empty, fall 
264a0 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68  through.** to th
264b0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74  e following inst
264c0 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54  ruction..**.** T
264d0 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
264e0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
264f0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
26500 69 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72  in reverse order
26510 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e  ,.** from the en
26520 64 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67  d toward the beg
26530 69 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65  inning.  In othe
26540 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
26550 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
26560 75 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76  ured to use Prev
26570 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2f 0a 63  , not Next..*/.c
26580 61 73 65 20 4f 50 5f 4c 61 73 74 3a 20 7b 20 20  ase OP_Last: {  
26590 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
265a0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
265b0 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
265c0 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b  Crsr;.  int res;
265d0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
265e0 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
265f0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
26600 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
26610 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
26620 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
26630 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
26640 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
26650 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
26660 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
26670 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73    res = 0;.  ass
26680 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b  ert( pCrsr!=0 );
26690 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
266a0 74 72 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20  treeLast(pCrsr, 
266b0 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  &res);.  pC->nul
266c0 6c 52 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a  lRow = (u8)res;.
266d0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
266e0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
266f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
26700 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d  CHE_STALE;.  pC-
26710 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f  >seekResult = pO
26720 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51  p->p3;.#ifdef SQ
26730 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
26740 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73  >seekOp = OP_Las
26750 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  t;.#endif.  if( 
26760 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20 20 20  pOp->p2>0 ){.   
26770 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
26780 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  (res!=0,2);.    
26790 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a  if( res ) goto j
267a0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
267b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
267c0 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50  pcode: Sort P1 P
267d0 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  2 * * *.**.** Th
267e0 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65  is opcode does e
267f0 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20  xactly the same 
26800 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69  thing as OP_Rewi
26810 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a  nd except that.*
26820 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20  * it increments 
26830 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20  an undocumented 
26840 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20  global variable 
26850 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
26860 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20  ..**.** Sorting 
26870 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20  is accomplished 
26880 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72  by writing recor
26890 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e  ds into a sortin
268a0 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e  g index,.** then
268b0 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20   rewinding that 
268c0 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e  index and playin
268d0 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62  g it back from b
268e0 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65  eginning to.** e
268f0 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20  nd.  We use the 
26900 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69  OP_Sort opcode i
26910 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77  nstead of OP_Rew
26920 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a  ind to do the.**
26930 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68   rewinding so th
26940 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  at the global va
26950 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69  riable will be i
26960 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a  ncremented and.*
26970 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73  * regression tes
26980 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65  ts can determine
26990 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
269a0 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73  the optimizer is
269b0 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70  .** correctly op
269c0 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72  timizing out sor
269d0 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ts..*/.case OP_S
269e0 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a  orterSort:    /*
269f0 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
26a00 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20  _Sort: {        
26a10 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65  /* jump */.#ifde
26a20 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
26a30 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75  sqlite3_sort_cou
26a40 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f  nt++;.  sqlite3_
26a50 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a  search_count--;.
26a60 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75  #endif.  p->aCou
26a70 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
26a80 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a  STATUS_SORT]++;.
26a90 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
26aa0 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64  h into OP_Rewind
26ab0 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a   */.}./* Opcode:
26ac0 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20   Rewind P1 P2 * 
26ad0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65  * *.**.** The ne
26ae0 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f  xt use of the Ro
26af0 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72  wid or Column or
26b00 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
26b10 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c  n for P1 .** wil
26b20 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66  l refer to the f
26b30 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68  irst entry in th
26b40 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
26b50 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66   or index..** If
26b60 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
26b70 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75  dex is empty, ju
26b80 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
26b90 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20  o P2..** If the 
26ba0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
26bb0 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c  s not empty, fal
26bc0 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
26bd0 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69   following .** i
26be0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
26bf0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
26c00 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
26c10 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f  configured to mo
26c20 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72  ve in forward or
26c30 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  der,.** from the
26c40 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72   beginning towar
26c50 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
26c60 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
26c70 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
26c80 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
26c90 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
26ca0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64  /.case OP_Rewind
26cb0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
26cc0 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
26cd0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
26ce0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
26cf0 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28   res;..  assert(
26d00 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26d10 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26d20 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26d30 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26d40 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26d50 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26d60 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26d70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
26d80 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20  rSort) );.  res 
26d90 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 1;.#ifdef SQLI
26da0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
26db0 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e  eekOp = OP_Rewin
26dc0 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20  d;.#endif.  if( 
26dd0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a  isSorter(pC) ){.
26de0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26df0 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64  VdbeSorterRewind
26e00 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65  (pC, &res);.  }e
26e10 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
26e20 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
26e30 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
26e40 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e      pCrsr = pC->
26e50 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20  uc.pCursor;.    
26e60 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
26e70 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
26e80 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73  3BtreeFirst(pCrs
26e90 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43  r, &res);.    pC
26ea0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
26eb0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
26ec0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
26ed0 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70  E_STALE;.  }.  p
26ee0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75 38  C->nullRow = (u8
26ef0 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74 28 20  )res;.  assert( 
26f00 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70  pOp->p2>0 && pOp
26f10 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20  ->p2<p->nOp );. 
26f20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
26f30 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
26f40 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
26f50 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
26f60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
26f70 4e 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34  Next P1 P2 P3 P4
26f80 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63   P5.**.** Advanc
26f90 65 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74  e cursor P1 so t
26fa0 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  hat it points to
26fb0 20 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61   the next key/da
26fc0 74 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a  ta pair in its.*
26fd0 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
26fe0 2e 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20  .  If there are 
26ff0 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75  no more key/valu
27000 65 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c  e pairs then fal
27010 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20  l through.** to 
27020 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e  the following in
27030 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20  struction.  But 
27040 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64  if the cursor ad
27050 76 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73  vance was succes
27060 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d  sful,.** jump im
27070 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
27080 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20  .**.** The Next 
27090 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76  opcode is only v
270a0 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61  alid following a
270b0 6e 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  n SeekGT, SeekGE
270c0 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e  , or.** OP_Rewin
270d0 64 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f  d opcode used to
270e0 20 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75   position the cu
270f0 72 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e  rsor.  Next is n
27100 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f  ot allowed.** to
27110 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20   follow SeekLT, 
27120 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61  SeekLE, or OP_La
27130 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  st..**.** The P1
27140 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20   cursor must be 
27150 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65  for a real table
27160 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74  , not a pseudo-t
27170 61 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68  able.  P1 must h
27180 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e  ave.** been open
27190 65 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73  ed prior to this
271a0 20 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70   opcode or the p
271b0 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66  rogram will segf
271c0 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ault..**.** The 
271d0 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69  P3 value is a hi
271e0 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20  nt to the btree 
271f0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20  implementation. 
27200 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a  If P3==1, that.*
27210 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e  * means P1 is an
27220 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74   SQL index and t
27230 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63  hat this instruc
27240 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20  tion could have 
27250 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20  been.** omitted 
27260 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61  if that index ha
27270 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20  d been unique.  
27280 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e  P3 is usually 0.
27290 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79    P3 is.** alway
272a0 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e  s either 0 or 1.
272b0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77  .**.** P4 is alw
272c0 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41  ays of type P4_A
272d0 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63  DVANCE. The func
272e0 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69  tion pointer poi
272f0 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65  nts to.** sqlite
27300 33 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a  3BtreeNext()..**
27310 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73  .** If P5 is pos
27320 69 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75  itive and the ju
27330 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65  mp is taken, the
27340 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a  n event counter.
27350 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69  ** number P5-1 i
27360 6e 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  n the prepared s
27370 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72  tatement is incr
27380 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  emented..**.** S
27390 65 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e  ee also: Prev, N
273a0 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20  extIfOpen.*/./* 
273b0 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70  Opcode: NextIfOp
273c0 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  en P1 P2 P3 P4 P
273d0 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  5.**.** This opc
273e0 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ode works just l
273f0 69 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20  ike Next except 
27400 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50  that if cursor P
27410 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e  1 is not.** open
27420 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f   it behaves a no
27430 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  -op..*/./* Opcod
27440 65 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33  e: Prev P1 P2 P3
27450 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63   P4 P5.**.** Bac
27460 6b 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73  k up cursor P1 s
27470 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
27480 20 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73   to the previous
27490 20 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69   key/data pair i
274a0 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f  n its.** table o
274b0 72 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65  r index.  If the
274c0 72 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75  re is no previou
274d0 73 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  s key/value pair
274e0 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  s then fall thro
274f0 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f  ugh.** to the fo
27500 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74  llowing instruct
27510 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65  ion.  But if the
27520 20 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77   cursor backup w
27530 61 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a  as successful,.*
27540 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65  * jump immediate
27550 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a  ly to P2..**.**.
27560 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
27570 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
27580 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
27590 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72  ekLT, SeekLE, or
275a0 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f  .** OP_Last opco
275b0 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74  de used to posit
275c0 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20  ion the cursor. 
275d0 20 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c   Prev is not all
275e0 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f  owed.** to follo
275f0 77 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  w SeekGT, SeekGE
27600 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a  , or OP_Rewind..
27610 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
27620 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
27630 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
27640 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
27650 2e 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e  .  If P1 is.** n
27660 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65  ot open then the
27670 20 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64   behavior is und
27680 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  efined..**.** Th
27690 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20  e P3 value is a 
276a0 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65  hint to the btre
276b0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
276c0 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74  . If P3==1, that
276d0 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20  .** means P1 is 
276e0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64  an SQL index and
276f0 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72   that this instr
27700 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76  uction could hav
27710 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65  e been.** omitte
27720 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20  d if that index 
27730 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e  had been unique.
27740 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20    P3 is usually 
27750 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77  0.  P3 is.** alw
27760 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20  ays either 0 or 
27770 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
27780 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34  lways of type P4
27790 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75  _ADVANCE. The fu
277a0 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70  nction pointer p
277b0 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69  oints to.** sqli
277c0 74 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73  te3BtreePrevious
277d0 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ()..**.** If P5 
277e0 69 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20  is positive and 
277f0 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65  the jump is take
27800 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f  n, then event co
27810 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  unter.** number 
27820 50 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70  P5-1 in the prep
27830 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69  ared statement i
27840 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a  s incremented..*
27850 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65  /./* Opcode: Pre
27860 76 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  vIfOpen P1 P2 P3
27870 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
27880 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
27890 75 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78  ust like Prev ex
278a0 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
278b0 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
278c0 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
278d0 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73   a no-op..*/.cas
278e0 65 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a  e OP_SorterNext:
278f0 20 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20   {  /* jump */. 
27900 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
27910 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70  .  int res;..  p
27920 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27930 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27940 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b   isSorter(pC) );
27950 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63  .  res = 0;.  rc
27960 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f   = sqlite3VdbeSo
27970 72 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c  rterNext(db, pC,
27980 20 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e   &res);.  goto n
27990 65 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f  ext_tail;.case O
279a0 50 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20  P_PrevIfOpen:   
279b0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
279c0 20 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20   OP_NextIfOpen: 
279d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
279e0 69 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  if( p->apCsr[pOp
279f0 2d 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b  ->p1]==0 ) break
27a00 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
27a10 75 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  ugh */.case OP_P
27a20 72 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  rev:          /*
27a30 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
27a40 5f 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20  _Next:          
27a50 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
27a60 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27a70 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27a80 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
27a90 74 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79  t( pOp->p5<Array
27aa0 53 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72  Size(p->aCounter
27ab0 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
27ac0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27ad0 20 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a   res = pOp->p3;.
27ae0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
27af0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
27b00 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
27b10 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27b20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27b30 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27b40 20 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20   assert( res==0 
27b50 7c 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43  || (res==1 && pC
27b60 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b  ->isTable==0) );
27b70 0a 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73  .  testcase( res
27b80 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==1 );.  assert(
27b90 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
27ba0 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Next || pOp->p4
27bb0 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
27bc0 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20  e3BtreeNext );. 
27bd0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
27be0 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c  code!=OP_Prev ||
27bf0 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
27c00 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
27c10 72 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73  revious );.  ass
27c20 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
27c30 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20  !=OP_NextIfOpen 
27c40 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61  || pOp->p4.xAdva
27c50 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65  nce==sqlite3Btre
27c60 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72  eNext );.  asser
27c70 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
27c80 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c  OP_PrevIfOpen ||
27c90 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
27ca0 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50  e==sqlite3BtreeP
27cb0 72 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20  revious);..  /* 
27cc0 54 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20  The Next opcode 
27cd0 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
27ce0 65 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47  er SeekGT, SeekG
27cf0 45 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20  E, and Rewind.. 
27d00 20 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63   ** The Prev opc
27d10 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ode is only used
27d20 20 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53   after SeekLT, S
27d30 65 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e  eekLE, and Last.
27d40 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
27d50 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
27d60 78 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  xt || pOp->opcod
27d70 65 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e  e!=OP_NextIfOpen
27d80 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
27d90 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54  eekOp==OP_SeekGT
27da0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
27db0 4f 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20  OP_SeekGE.      
27dc0 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
27dd0 4f 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d  OP_Rewind || pC-
27de0 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e  >seekOp==OP_Foun
27df0 64 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  d);.  assert( pO
27e00 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
27e10 65 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  ev || pOp->opcod
27e20 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e  e!=OP_PrevIfOpen
27e30 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73  .       || pC->s
27e40 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54  eekOp==OP_SeekLT
27e50 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
27e60 4f 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20  OP_SeekLE.      
27e70 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d   || pC->seekOp==
27e80 4f 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63  OP_Last );..  rc
27e90 20 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61   = pOp->p4.xAdva
27ea0 6e 63 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  nce(pC->uc.pCurs
27eb0 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78 74 5f  or, &res);.next_
27ec0 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61 63 68  tail:.  pC->cach
27ed0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
27ee0 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42 72 61  STALE;.  VdbeBra
27ef0 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d 30 2c  nchTaken(res==0,
27f00 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d 30  2);.  if( res==0
27f10 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c   ){.    pC->null
27f20 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70 2d 3e  Row = 0;.    p->
27f30 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35  aCounter[pOp->p5
27f40 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  ]++;.#ifdef SQLI
27f50 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69  TE_TEST.    sqli
27f60 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74  te3_search_count
27f70 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 67  ++;.#endif.    g
27f80 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61  oto jump_to_p2_a
27f90 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
27fa0 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b  errupt;.  }else{
27fb0 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  .    pC->nullRow
27fc0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f   = 1;.  }.  goto
27fd0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
27fe0 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  rupt;.}../* Opco
27ff0 64 65 3a 20 49 64 78 49 6e 73 65 72 74 20 50 31  de: IdxInsert P1
28000 20 50 32 20 50 33 20 2a 20 50 35 0a 2a 2a 20 53   P2 P3 * P5.** S
28010 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
28020 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65  2].**.** Registe
28030 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20 53 51  r P2 holds an SQ
28040 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61 64 65  L index key made
28050 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61   using the.** Ma
28060 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72 75 63  keRecord instruc
28070 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f 70 63  tions.  This opc
28080 6f 64 65 20 77 72 69 74 65 73 20 74 68 61 74 20  ode writes that 
28090 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20  key.** into the 
280a0 69 6e 64 65 78 20 50 31 2e 20 20 44 61 74 61 20  index P1.  Data 
280b0 66 6f 72 20 74 68 65 20 65 6e 74 72 79 20 69 73  for the entry is
280c0 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69   nil..**.** P3 i
280d0 73 20 61 20 66 6c 61 67 20 74 68 61 74 20 70 72  s a flag that pr
280e0 6f 76 69 64 65 73 20 61 20 68 69 6e 74 20 74 6f  ovides a hint to
280f0 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79 65   the b-tree laye
28100 72 20 74 68 61 74 20 74 68 69 73 0a 2a 2a 20 69  r that this.** i
28110 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79 20  nsert is likely 
28120 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 2e  to be an append.
28130 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
28140 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
28150 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  NGE bit set, the
28160 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f 75  n the change cou
28170 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72 65  nter is.** incre
28180 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20 69  mented by this i
28190 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20  nstruction.  If 
281a0 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
281b0 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c  GE bit is clear,
281c0 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68 61  .** then the cha
281d0 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20 75  nge counter is u
281e0 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a 20  nchanged..**.** 
281f0 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f 50  If P5 has the OP
28200 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55  FLAG_USESEEKRESU
28210 4c 54 20 62 69 74 20 73 65 74 2c 20 74 68 65 6e  LT bit set, then
28220 20 74 68 65 20 63 75 72 73 6f 72 20 6d 75 73 74   the cursor must
28230 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74 20 64 6f   have.** just do
28240 6e 65 20 61 20 73 65 65 6b 20 74 6f 20 74 68 65  ne a seek to the
28250 20 73 70 6f 74 20 77 68 65 72 65 20 74 68 65 20   spot where the 
28260 6e 65 77 20 65 6e 74 72 79 20 69 73 20 74 6f 20  new entry is to 
28270 62 65 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 20  be inserted..** 
28280 54 68 69 73 20 66 6c 61 67 20 61 76 6f 69 64 73  This flag avoids
28290 20 64 6f 69 6e 67 20 61 6e 20 65 78 74 72 61 20   doing an extra 
282a0 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  seek..**.** This
282b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c   instruction onl
282c0 79 20 77 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69  y works for indi
282d0 63 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  ces.  The equiva
282e0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
282f0 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65 73 20 69  .** for tables i
28300 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a  s OP_Insert..*/.
28310 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e  case OP_SorterIn
28320 73 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69  sert:       /* i
28330 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  n2 */.case OP_Id
28340 78 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20  xInsert: {      
28350 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64    /* in2 */.  Vd
28360 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
28370 69 6e 74 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73  int nKey;.  cons
28380 74 20 63 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20  t char *zKey;.. 
28390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
283a0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
283b0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
283c0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
283d0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
283e0 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
283f0 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43 29  rt( isSorter(pC)
28400 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  ==(pOp->opcode==
28410 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29  OP_SorterInsert)
28420 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d   );.  pIn2 = &aM
28430 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61  em[pOp->p2];.  a
28440 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61  ssert( pIn2->fla
28450 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b  gs & MEM_Blob );
28460 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
28470 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
28480 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
28490 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
284a0 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
284b0 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  BTREE || pOp->op
284c0 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
284d0 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72  nsert );.  asser
284e0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
284f0 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  0 );.  rc = Expa
28500 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20  ndBlob(pIn2);.  
28510 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
28520 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70  K ){.    if( pOp
28530 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
28540 74 65 72 49 6e 73 65 72 74 20 29 7b 0a 20 20 20  terInsert ){.   
28550 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
28560 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28 70  dbeSorterWrite(p
28570 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65  C, pIn2);.    }e
28580 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20  lse{.      nKey 
28590 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20  = pIn2->n;.     
285a0 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b   zKey = pIn2->z;
285b0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
285c0 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
285d0 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 7a  C->uc.pCursor, z
285e0 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22 2c 20 30  Key, nKey, "", 0
285f0 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c 20 0a 20  , 0, pOp->p3, . 
28600 20 20 20 20 20 20 20 20 20 28 28 70 4f 70 2d 3e           ((pOp->
28610 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45 53  p5 & OPFLAG_USES
28620 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43 2d  EEKRESULT) ? pC-
28630 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30 29  >seekResult : 0)
28640 0a 20 20 20 20 20 20 20 20 20 20 29 3b 0a 20 20  .          );.  
28650 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
28660 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
28670 30 20 29 3b 0a 20 20 20 20 20 20 70 43 2d 3e 63  0 );.      pC->c
28680 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
28690 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 7d 0a  HE_STALE;.    }.
286a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
286b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65  /* Opcode: IdxDe
286c0 6c 65 74 65 20 50 31 20 50 32 20 50 33 20 2a 20  lete P1 P2 P3 * 
286d0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
286e0 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a  ey=r[P2@P3].**.*
286f0 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  * The content of
28700 20 50 33 20 72 65 67 69 73 74 65 72 73 20 73 74   P3 registers st
28710 61 72 74 69 6e 67 20 61 74 20 72 65 67 69 73 74  arting at regist
28720 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e  er P2 form.** an
28730 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
28740 6b 65 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65  key. This opcode
28750 20 72 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e   removes that en
28760 74 72 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a  try from the .**
28770 20 69 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79   index opened by
28780 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63   cursor P1..*/.c
28790 61 73 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65  ase OP_IdxDelete
287a0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
287b0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
287c0 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
287d0 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  es;.  UnpackedRe
287e0 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72  cord r;..  asser
287f0 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
28800 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
28810 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70  2>0 && pOp->p2+p
28820 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
28830 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
28840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28850 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
28860 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
28870 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
28880 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
28890 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
288a0 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
288b0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
288c0 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20  EE );.  pCrsr = 
288d0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  pC->uc.pCursor;.
288e0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
288f0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
28900 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20  pOp->p5==0 );.  
28910 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
28920 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
28930 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
28940 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61 75 6c  ->p3;.  r.defaul
28950 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e 61 4d  t_rc = 0;.  r.aM
28960 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
28970 70 32 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p2];.#ifdef SQLI
28980 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
28990 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
289a0 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
289b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
289c0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
289d0 7d 0a 23 65 6e 64 69 66 0a 20 20 72 63 20 3d 20  }.#endif.  rc = 
289e0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
289f0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72  toUnpacked(pCrsr
28a00 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
28a10 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
28a20 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d 3d 30  ITE_OK && res==0
28a30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
28a40 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65 28  ite3BtreeDelete(
28a50 70 43 72 73 72 2c 20 30 29 3b 0a 20 20 7d 0a 20  pCrsr, 0);.  }. 
28a60 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
28a70 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
28a80 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
28a90 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
28aa0 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  E;.  break;.}../
28ab0 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 52 6f 77  * Opcode: IdxRow
28ac0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
28ad0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28ae0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 57 72  ]=rowid.**.** Wr
28af0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
28b00 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20  r P2 an integer 
28b10 77 68 69 63 68 20 69 73 20 74 68 65 20 6c 61 73  which is the las
28b20 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 72  t entry in the r
28b30 65 63 6f 72 64 20 61 74 0a 2a 2a 20 74 68 65 20  ecord at.** the 
28b40 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  end of the index
28b50 20 6b 65 79 20 70 6f 69 6e 74 65 64 20 74 6f 20   key pointed to 
28b60 62 79 20 63 75 72 73 6f 72 20 50 31 2e 20 20 54  by cursor P1.  T
28b70 68 69 73 20 69 6e 74 65 67 65 72 20 73 68 6f 75  his integer shou
28b80 6c 64 20 62 65 0a 2a 2a 20 74 68 65 20 72 6f 77  ld be.** the row
28b90 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
28ba0 65 6e 74 72 79 20 74 6f 20 77 68 69 63 68 20 74  entry to which t
28bb0 68 69 73 20 69 6e 64 65 78 20 65 6e 74 72 79 20  his index entry 
28bc0 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 53 65  points..**.** Se
28bd0 65 20 61 6c 73 6f 3a 20 52 6f 77 69 64 2c 20 4d  e also: Rowid, M
28be0 61 6b 65 52 65 63 6f 72 64 2e 0a 2a 2f 0a 63 61  akeRecord..*/.ca
28bf0 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64 3a 20  se OP_IdxRowid: 
28c00 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  {              /
28c10 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 43 75  * out2 */.  BtCu
28c20 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56  rsor *pCrsr;.  V
28c30 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28c40 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 70   i64 rowid;..  p
28c50 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
28c60 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
28c70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
28c80 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
28c90 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
28ca0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
28cb0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28cc0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
28cd0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
28ce0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
28cf0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
28d00 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  uc.pCursor;.  as
28d10 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
28d20 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
28d30 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 61 73  = MEM_Null;.  as
28d40 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
28d50 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
28d60 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
28d70 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20 2f 2a  veto==0 );..  /*
28d80 20 73 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f   sqlite3VbeCurso
28d90 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f  rRestore() can o
28da0 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68 65 20  nly fail if the 
28db0 72 65 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20  record has been 
28dc0 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74  deleted.  ** out
28dd0 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20   from under the 
28de0 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69  cursor.  That wi
28df0 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65 6e 64  ll never happend
28e00 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64   for an IdxRowid
28e10 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20 68 65  .  ** opcode, he
28e20 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28 29 20  nce the NEVER() 
28e30 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68 65 63  arround the chec
28e40 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72 6e 20  k of the return 
28e50 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 72 63  value..  */.  rc
28e60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
28e70 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29 3b  rsorRestore(pC);
28e80 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21  .  if( NEVER(rc!
28e90 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f  =SQLITE_OK) ) go
28ea0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
28eb0 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70  error;..  if( !p
28ec0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20  C->nullRow ){.  
28ed0 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a    rowid = 0;  /*
28ee0 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
28ef0 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
28f00 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
28f10 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
28f20 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62  3VdbeIdxRowid(db
28f30 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69 64 29  , pCrsr, &rowid)
28f40 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51  ;.    if( rc!=SQ
28f50 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
28f60 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
28f70 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  to_error;.    }.
28f80 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
28f90 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75 74 2d  rowid;.    pOut-
28fa0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
28fb0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
28fc0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
28fd0 47 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  GE P1 P2 P3 P4 P
28fe0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
28ff0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
29000 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
29010 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
29020 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
29030 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
29040 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
29050 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
29060 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74   KEY.  Compare t
29070 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67  his key value ag
29080 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20  ainst the index 
29090 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63  .** that P1 is c
290a0 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e  urrently pointin
290b0 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74  g to, ignoring t
290c0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
290d0 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c  r ROWID .** fiel
290e0 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  ds at the end..*
290f0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69  *.** If the P1 i
29100 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72  ndex entry is gr
29110 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
29120 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
29130 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d  alue.** then jum
29140 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77  p to P2.  Otherw
29150 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ise fall through
29160 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73   to the next ins
29170 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20  truction..*/./* 
29180 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31  Opcode: IdxGT P1
29190 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
291a0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
291b0 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65  P3@P4].**.** The
291c0 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c   P4 register val
291d0 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ues beginning wi
291e0 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e  th P3 form an un
291f0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a  packed index .**
29200 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20   key that omits 
29210 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e  the PRIMARY KEY.
29220 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
29230 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
29240 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74   the index .** t
29250 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
29260 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
29270 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
29280 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57  IMARY KEY or ROW
29290 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74  ID .** fields at
292a0 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20   the end..**.** 
292b0 49 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20  If the P1 index 
292c0 65 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72  entry is greater
292d0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
292e0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
292f0 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
29300 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
29310 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
29320 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
29330 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20  pcode: IdxLT P1 
29340 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
29350 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
29360 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
29370 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
29380 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
29390 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
293a0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
293b0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
293c0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
293d0 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
293e0 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
293f0 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
29400 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
29410 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
29420 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
29430 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
29440 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
29450 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
29460 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
29470 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
29480 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76  s than the key v
29490 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74  alue then jump t
294a0 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69  o P2..** Otherwi
294b0 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
294c0 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
294d0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
294e0 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20  pcode: IdxLE P1 
294f0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
29500 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
29510 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
29520 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
29530 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
29540 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
29550 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
29560 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
29570 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f  he PRIMARY KEY o
29580 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72  r ROWID.  Compar
29590 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
295a0 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20   against.** the 
295b0 69 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73  index that P1 is
295c0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
295d0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
295e0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
295f0 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20   or.** ROWID on 
29600 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a  the P1 index..**
29610 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
29620 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73  dex entry is les
29630 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
29640 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65  to the key value
29650 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f   then jump.** to
29660 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66   P2. Otherwise f
29670 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
29680 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
29690 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
296a0 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20  IdxLE:          
296b0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
296c0 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20  OP_IdxGT:       
296d0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
296e0 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20  se OP_IdxLT:    
296f0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
29700 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20  .case OP_IdxGE: 
29710 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70   {       /* jump
29720 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
29730 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
29740 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
29750 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  d r;..  assert( 
29760 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
29770 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
29780 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
29790 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
297a0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
297b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
297c0 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73  sOrdered );.  as
297d0 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79  sert( pC->eCurTy
297e0 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45  pe==CURTYPE_BTRE
297f0 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  E );.  assert( p
29800 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30  C->uc.pCursor!=0
29810 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
29820 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
29830 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
29840 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
29850 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73  p->p5==1 );.  as
29860 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
29870 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
29880 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
29890 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e  ->pKeyInfo;.  r.
298a0 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f  nField = (u16)pO
298b0 70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70  p->p4.i;.  if( p
298c0 4f 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64  Op->opcode<OP_Id
298d0 78 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72  xLT ){.    asser
298e0 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
298f0 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d  OP_IdxLE || pOp-
29900 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47  >opcode==OP_IdxG
29910 54 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75  T );.    r.defau
29920 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65  lt_rc = -1;.  }e
29930 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
29940 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
29950 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _IdxGE || pOp->o
29960 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
29970 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74  );.    r.default
29980 5f 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  _rc = 0;.  }.  r
29990 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f  .aMem = &aMem[pO
299a0 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53  p->p3];.#ifdef S
299b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20  QLITE_DEBUG.  { 
299c0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
299d0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
299e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
299f0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
29a00 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65  ); }.#endif.  re
29a10 73 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  s = 0;  /* Not n
29a20 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65  eeded.  Only use
29a30 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77  d to silence a w
29a40 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20  arning. */.  rc 
29a50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78  = sqlite3VdbeIdx
29a60 4b 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70  KeyCompare(db, p
29a70 43 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20  C, &r, &res);.  
29a80 61 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c  assert( (OP_IdxL
29a90 45 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26  E&1)==(OP_IdxLT&
29aa0 31 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26  1) && (OP_IdxGE&
29ab0 31 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29  1)==(OP_IdxGT&1)
29ac0 20 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e   );.  if( (pOp->
29ad0 6f 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49  opcode&1)==(OP_I
29ae0 64 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61  dxLT&1) ){.    a
29af0 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
29b00 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20  de==OP_IdxLE || 
29b10 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
29b20 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxLT );.    res
29b30 20 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65   = -res;.  }else
29b40 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
29b50 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
29b60 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
29b70 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a  de==OP_IdxGT );.
29b80 20 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20      res++;.  }. 
29b90 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
29ba0 28 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28  (res>0,2);.  if(
29bb0 20 72 65 73 3e 30 20 29 20 67 6f 74 6f 20 6a 75   res>0 ) goto ju
29bc0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61  mp_to_p2;.  brea
29bd0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
29be0 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20 50   Destroy P1 P2 P
29bf0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  3 * *.**.** Dele
29c00 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61 74  te an entire dat
29c10 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
29c20 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20  ndex whose root 
29c30 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74 61  page in the data
29c40 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73 20  base.** file is 
29c50 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a  given by P1..**.
29c60 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
29c70 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73 20  ng destroyed is 
29c80 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
29c90 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33 3d  base file if P3=
29ca0 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d 31  =0.  If.** P3==1
29cb0 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
29cc0 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20 69  to be clear is i
29cd0 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
29ce0 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a 2a  database file.**
29cf0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
29d00 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63 72   store tables cr
29d10 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41 54  eate using CREAT
29d20 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42 4c  E TEMPORARY TABL
29d30 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54 4f  E..**.** If AUTO
29d40 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c 65  VACUUM is enable
29d50 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f 73  d then it is pos
29d60 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74 68  sible that anoth
29d70 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  er root page.** 
29d80 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20 69  might be moved i
29d90 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64 65  nto the newly de
29da0 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65 20  leted root page 
29db0 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
29dc0 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61 67   all.** root pag
29dd0 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61 74  es contiguous at
29de0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f   the beginning o
29df0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20  f the database. 
29e00 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20 76   The former.** v
29e10 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f 74  alue of the root
29e20 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65 64   page that moved
29e30 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65 66   - its value bef
29e40 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63 63  ore the move occ
29e50 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73 74  urred -.** is st
29e60 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
29e70 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67 65   P2.  If no page
29e80 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77 61   .** movement wa
29e90 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63 61  s required (beca
29ea0 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62 65  use the table be
29eb0 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73 20  ing dropped was 
29ec0 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65 20  already .** the 
29ed0 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65 20  last one in the 
29ee0 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20 61  database) then a
29ef0 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20   zero is stored 
29f00 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
29f10 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55 4d  ** If AUTOVACUUM
29f20 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68 65   is disabled the
29f30 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
29f40 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
29f50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  2..**.** See als
29f60 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73 65  o: Clear.*/.case
29f70 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20 20   OP_Destroy: {  
29f80 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
29f90 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e  int iMoved;.  in
29fa0 74 20 69 44 62 3b 0a 0a 20 20 61 73 73 65 72 74  t iDb;..  assert
29fb0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
29fc0 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
29fd0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
29fe0 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  Op);.  pOut->fla
29ff0 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
2a000 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 52 65   if( db->nVdbeRe
2a010 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65 73 74 72  ad > db->nVDestr
2a020 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72 63 20 3d  oy+1 ){.    rc =
2a030 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a   SQLITE_LOCKED;.
2a040 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69      p->errorActi
2a050 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20  on = OE_Abort;. 
2a060 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2a070 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2a080 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2a090 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2a0a0 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2a0b0 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2a0c0 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2a0d0 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2a0e0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2a0f0 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2a100 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2a110 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2a120 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2a130 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2a140 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2a150 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 23 69  u.i = iMoved;.#i
2a160 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2a170 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 20  T_AUTOVACUUM.   
2a180 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2a190 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21 3d 30 20  OK && iMoved!=0 
2a1a0 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
2a1b0 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 64 62  RootPageMoved(db
2a1c0 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64 2c 20 70  , iDb, iMoved, p
2a1d0 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 20 20 2f  Op->p1);.      /
2a1e0 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74 72 6f 79  * All OP_Destroy
2a1f0 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f 63 63 75   operations occu
2a200 72 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 62 74  r on the same bt
2a210 72 65 65 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ree */.      ass
2a220 65 72 74 28 20 72 65 73 65 74 53 63 68 65 6d 61  ert( resetSchema
2a230 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c 20 72 65  OnFault==0 || re
2a240 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
2a250 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20 20 20 20  ==iDb+1 );.     
2a260 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2a270 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a 20 20 20  ult = iDb+1;.   
2a280 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
2a290 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a2a0 6f 64 65 3a 20 43 6c 65 61 72 20 50 31 20 50 32  ode: Clear P1 P2
2a2b0 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65   P3.**.** Delete
2a2c0 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 6f 66   all contents of
2a2d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
2a2e0 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f  ble or index who
2a2f0 73 65 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20  se root page.** 
2a300 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a310 66 69 6c 65 20 69 73 20 67 69 76 65 6e 20 62 79  file is given by
2a320 20 50 31 2e 20 20 42 75 74 2c 20 75 6e 6c 69 6b   P1.  But, unlik
2a330 65 20 44 65 73 74 72 6f 79 2c 20 64 6f 20 6e 6f  e Destroy, do no
2a340 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74 68 65 20  t.** remove the 
2a350 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 66  table or index f
2a360 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73 65  rom the database
2a370 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   file..**.** The
2a380 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65   table being cle
2a390 61 72 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69  ar is in the mai
2a3a0 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
2a3b0 69 66 20 50 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a  if P2==0.  If.**
2a3c0 20 50 32 3d 3d 31 20 74 68 65 6e 20 74 68 65 20   P2==1 then the 
2a3d0 74 61 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61  table to be clea
2a3e0 72 20 69 73 20 69 6e 20 74 68 65 20 61 75 78 69  r is in the auxi
2a3f0 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2a400 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75  ile.** that is u
2a410 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62  sed to store tab
2a420 6c 65 73 20 63 72 65 61 74 65 20 75 73 69 6e 67  les create using
2a430 20 43 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52   CREATE TEMPORAR
2a440 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49  Y TABLE..**.** I
2a450 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 69  f the P3 value i
2a460 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2a470 20 74 68 65 20 74 61 62 6c 65 20 72 65 66 65 72   the table refer
2a480 72 65 64 20 74 6f 20 6d 75 73 74 20 62 65 20 61  red to must be a
2a490 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74 61 62 6c  n.** intkey tabl
2a4a0 65 20 28 61 6e 20 53 51 4c 20 74 61 62 6c 65 2c  e (an SQL table,
2a4b0 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78 29 2e 20   not an index). 
2a4c0 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
2a4d0 20 72 6f 77 20 63 68 61 6e 67 65 20 0a 2a 2a 20   row change .** 
2a4e0 63 6f 75 6e 74 20 69 73 20 69 6e 63 72 65 6d 65  count is increme
2a4f0 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62  nted by the numb
2a500 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68  er of rows in th
2a510 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c  e table being cl
2a520 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66 20 50 33  eared. .** If P3
2a530 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
2a540 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20   zero, then the 
2a550 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69 6e 20  value stored in 
2a560 72 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  register P3 is.*
2a570 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d 65 6e 74  * also increment
2a580 65 64 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72  ed by the number
2a590 20 6f 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20   of rows in the 
2a5a0 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61  table being clea
2a5b0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  red..**.** See a
2a5c0 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a 2a 2f 0a  lso: Destroy.*/.
2a5d0 63 61 73 65 20 4f 50 5f 43 6c 65 61 72 3a 20 7b  case OP_Clear: {
2a5e0 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 0a  .  int nChange;.
2a5f0 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d 20 30 3b   .  nChange = 0;
2a600 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2a610 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 61  adOnly==0 );.  a
2a620 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2a630 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2a640 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20 20 72 63  pOp->p2) );.  rc
2a650 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
2a660 6c 65 61 72 54 61 62 6c 65 28 0a 20 20 20 20 20  learTable(.     
2a670 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 32   db->aDb[pOp->p2
2a680 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c 20  ].pBt, pOp->p1, 
2a690 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e 43 68 61  (pOp->p3 ? &nCha
2a6a0 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b 0a 20 20  nge : 0).  );.  
2a6b0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
2a6c0 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d     p->nChange +=
2a6d0 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 69 66   nChange;.    if
2a6e0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
2a6f0 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
2a700 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f  IsValid(&aMem[pO
2a710 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
2a720 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2a730 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  e(p, &aMem[pOp->
2a740 70 33 5d 29 3b 0a 20 20 20 20 20 20 61 4d 65 6d  p3]);.      aMem
2a750 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d  [pOp->p3].u.i +=
2a760 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20 20 7d 0a   nChange;.    }.
2a770 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2a780 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
2a790 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20  Sorter P1 * * * 
2a7a0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2a7b0 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d  ll contents from
2a7c0 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
2a7d0 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a  able or sorter.*
2a7e0 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f  * that is open o
2a7f0 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a  n cursor P1..**.
2a800 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  ** This opcode o
2a810 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75  nly works for cu
2a820 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73  rsors used for s
2a830 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70  orting and.** op
2a840 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65  ened with OP_Ope
2a850 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50  nEphemeral or OP
2a860 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a  _SorterOpen..*/.
2a870 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72  case OP_ResetSor
2a880 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ter: {.  VdbeCur
2a890 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73  sor *pC;. .  ass
2a8a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2a8b0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2a8c0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2a8d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2a8e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2a8f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  =0 );.  if( isSo
2a900 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
2a910 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2a920 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75  rReset(db, pC->u
2a930 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65  c.pSorter);.  }e
2a940 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2a950 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2a960 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2a970 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2a980 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
2a990 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2a9a0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
2a9b0 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2a9c0 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72  ursor);.  }.  br
2a9d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a9e0 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50  e: CreateTable P
2a9f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2aa00 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
2aa10 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
2aa20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74  Allocate a new t
2aa30 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e  able in the main
2aa40 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
2aa50 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
2aa60 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
2aa70 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2aa80 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
2aa90 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
2aaa0 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
2aab0 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
2aac0 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
2aad0 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
2aae0 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  * register P2.**
2aaf0 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e  .** The differen
2ab00 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62  ce between a tab
2ab10 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20  le and an index 
2ab20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c  is this:  A tabl
2ab30 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61  e must.** have a
2ab40 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20   4-byte integer 
2ab50 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65  key and can have
2ab60 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e   arbitrary data.
2ab70 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61    An index.** ha
2ab80 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b  s an arbitrary k
2ab90 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a  ey but no data..
2aba0 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
2abb0 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f  CreateIndex.*/./
2abc0 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65  * Opcode: Create
2abd0 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20  Index P1 P2 * * 
2abe0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2abf0 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31  [P2]=root iDb=P1
2ac00 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20  .**.** Allocate 
2ac10 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74  a new index in t
2ac20 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2ac30 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f   file if P1==0 o
2ac40 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69  r in the.** auxi
2ac50 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66  liary database f
2ac60 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20  ile if P1==1 or 
2ac70 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64  in an attached d
2ac80 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31  atabase if.** P1
2ac90 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72  >1.  Write the r
2aca0 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20  oot page number 
2acb0 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65  of the new table
2acc0 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65   into.** registe
2acd0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2ace0 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e  documentation on
2acf0 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20   OP_CreateTable 
2ad00 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
2ad10 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
2ad20 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64  ase OP_CreateInd
2ad30 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ex:            /
2ad40 2a 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f  * out2 */.case O
2ad50 50 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b  P_CreateTable: {
2ad60 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
2ad70 32 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b  2 */.  int pgno;
2ad80 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20  .  int flags;.  
2ad90 44 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74  Db *pDb;..  pOut
2ada0 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
2adb0 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e  e(p, pOp);.  pgn
2adc0 6f 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  o = 0;.  assert(
2add0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
2ade0 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
2adf0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2ae00 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2ae10 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
2ae20 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
2ae30 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
2ae40 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f  Db = &db->aDb[pO
2ae50 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2ae60 28 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b  ( pDb->pBt!=0 );
2ae70 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2ae80 64 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62  de==OP_CreateTab
2ae90 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61  le ){.    /* fla
2aea0 67 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45  gs = BTREE_INTKE
2aeb0 59 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20  Y; */.    flags 
2aec0 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a  = BTREE_INTKEY;.
2aed0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61    }else{.    fla
2aee0 67 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b  gs = BTREE_BLOBK
2aef0 45 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  EY;.  }.  rc = s
2af00 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
2af10 65 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c  eTable(pDb->pBt,
2af20 20 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a   &pgno, flags);.
2af30 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67    pOut->u.i = pg
2af40 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  no;.  break;.}..
2af50 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65  /* Opcode: Parse
2af60 53 63 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34  Schema P1 * * P4
2af70 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e   *.**.** Read an
2af80 64 20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72  d parse all entr
2af90 69 65 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c  ies from the SQL
2afa0 49 54 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65  ITE_MASTER table
2afb0 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 0a   of database P1.
2afc0 2a 2a 20 74 68 61 74 20 6d 61 74 63 68 20 74 68  ** that match th
2afd0 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 50  e WHERE clause P
2afe0 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  4. .**.** This o
2aff0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
2b000 65 20 70 61 72 73 65 72 20 74 6f 20 63 72 65 61  e parser to crea
2b010 74 65 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c  te a new virtual
2b020 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65   machine,.** the
2b030 6e 20 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76  n runs the new v
2b040 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20  irtual machine. 
2b050 20 49 74 20 69 73 20 74 68 75 73 20 61 20 72 65   It is thus a re
2b060 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e  -entrant opcode.
2b070 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73  .*/.case OP_Pars
2b080 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74  eSchema: {.  int
2b090 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68   iDb;.  const ch
2b0a0 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63  ar *zMaster;.  c
2b0b0 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69  har *zSql;.  Ini
2b0c0 74 44 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a  tData initData;.
2b0d0 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72  .  /* Any prepar
2b0e0 65 64 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61  ed statement tha
2b0f0 74 20 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f  t invokes this o
2b100 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20  pcode will hold 
2b110 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20  mutexes.  ** on 
2b120 65 76 65 72 79 20 62 74 72 65 65 2e 20 20 54 68  every btree.  Th
2b130 69 73 20 69 73 20 61 20 70 72 65 72 65 71 75 69  is is a prerequi
2b140 73 69 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  site for invokin
2b150 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49  g .  ** sqlite3I
2b160 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20  nitCallback().. 
2b170 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
2b180 45 5f 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44  E_DEBUG.  for(iD
2b190 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62  b=0; iDb<db->nDb
2b1a0 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73  ; iDb++){.    as
2b1b0 73 65 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20  sert( iDb==1 || 
2b1c0 73 71 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64  sqlite3BtreeHold
2b1d0 73 4d 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69  sMutex(db->aDb[i
2b1e0 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a  Db].pBt) );.  }.
2b1f0 23 65 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20  #endif..  iDb = 
2b200 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72  pOp->p1;.  asser
2b210 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62  t( iDb>=0 && iDb
2b220 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
2b230 73 65 72 74 28 20 44 62 48 61 73 50 72 6f 70 65  sert( DbHasPrope
2b240 72 74 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f  rty(db, iDb, DB_
2b250 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b  SchemaLoaded) );
2b260 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65  .  /* Used to be
2b270 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a   a conditional *
2b280 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20  / {.    zMaster 
2b290 3d 20 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69  = SCHEMA_TABLE(i
2b2a0 44 62 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  Db);.    initDat
2b2b0 61 2e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69  a.db = db;.    i
2b2c0 6e 69 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f  nitData.iDb = pO
2b2d0 70 2d 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44  p->p1;.    initD
2b2e0 61 74 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26  ata.pzErrMsg = &
2b2f0 70 2d 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20  p->zErrMsg;.    
2b300 7a 53 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50  zSql = sqlite3MP
2b310 72 69 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20  rintf(db,.      
2b320 20 22 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72   "SELECT name, r
2b330 6f 6f 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f  ootpage, sql FRO
2b340 4d 20 27 25 71 27 2e 25 73 20 57 48 45 52 45 20  M '%q'.%s WHERE 
2b350 25 73 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69  %s ORDER BY rowi
2b360 64 22 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61  d",.       db->a
2b370 44 62 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a  Db[iDb].zName, z
2b380 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
2b390 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
2b3a0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
2b3b0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
2b3c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
2b3d0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69   assert( db->ini
2b3e0 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20  t.busy==0 );.   
2b3f0 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79     db->init.busy
2b400 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74   = 1;.      init
2b410 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45  Data.rc = SQLITE
2b420 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72  _OK;.      asser
2b430 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  t( !db->mallocFa
2b440 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63  iled );.      rc
2b450 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28   = sqlite3_exec(
2b460 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65  db, zSql, sqlite
2b470 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26  3InitCallback, &
2b480 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20  initData, 0);.  
2b490 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
2b4a0 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69  TE_OK ) rc = ini
2b4b0 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20  tData.rc;.      
2b4c0 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2b4d0 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64  , zSql);.      d
2b4e0 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30  b->init.busy = 0
2b4f0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
2b500 28 20 72 63 20 29 20 73 71 6c 69 74 65 33 52 65  ( rc ) sqlite3Re
2b510 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
2b520 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20  onnection(db);. 
2b530 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
2b540 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74  NOMEM ){.    got
2b550 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20  o no_mem;.  }.  
2b560 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20  break;  .}..#if 
2b570 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2b580 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a  OMIT_ANALYZE)./*
2b590 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61   Opcode: LoadAna
2b5a0 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a  lysis P1 * * * *
2b5b0 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20  .**.** Read the 
2b5c0 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62  sqlite_stat1 tab
2b5d0 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  le for database 
2b5e0 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20  P1 and load the 
2b5f0 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68  content.** of th
2b600 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68  at table into th
2b610 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78  e internal index
2b620 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68   hash table.  Th
2b630 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a  is will cause.**
2b640 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f   the analysis to
2b650 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 72   be used when pr
2b660 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73  eparing all subs
2b670 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a  equent queries..
2b680 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41  */.case OP_LoadA
2b690 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73  nalysis: {.  ass
2b6a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2b6b0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2b6c0 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  Db );.  rc = sql
2b6d0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2b6e0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  (db, pOp->p1);. 
2b6f0 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64   break;  .}.#end
2b700 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
2b710 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
2b720 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  ZE) */../* Opcod
2b730 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20  e: DropTable P1 
2b740 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2b750 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2b760 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2b770 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2b780 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2b790 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20  the table named 
2b7a0 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2b7b0 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2b7c0 65 64 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  ed after a table
2b7d0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2b7e0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2b7f0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2b800 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2b810 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2b820 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2b830 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2b840 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2b850 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2b860 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2b870 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20  P_DropTable: {. 
2b880 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2b890 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c  dDeleteTable(db,
2b8a0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2b8b0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2b8c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2b8d0 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34  pIndex P1 * * P4
2b8e0 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20   *.**.** Remove 
2b8f0 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e  the internal (in
2b900 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74  -memory) data st
2b910 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65  ructures that de
2b920 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e  scribe.** the in
2b930 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  dex named P4 in 
2b940 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2b950 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2b960 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69  er an index.** i
2b970 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64  s dropped from d
2b980 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44  isk (using the D
2b990 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a  estroy opcode).*
2b9a0 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  * in order to ke
2b9b0 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ep the internal 
2b9c0 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2b9d0 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2b9e0 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2b9f0 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2ba00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2ba10 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74  Index: {.  sqlit
2ba20 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2ba30 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e  eIndex(db, pOp->
2ba40 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  p1, pOp->p4.z);.
2ba50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2ba60 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67  pcode: DropTrigg
2ba70 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  er P1 * * P4 *.*
2ba80 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2ba90 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2baa0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2bab0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2bac0 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65  be.** the trigge
2bad0 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  r named P4 in da
2bae0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2baf0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2bb00 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73   a trigger.** is
2bb10 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69   dropped from di
2bb20 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65  sk (using the De
2bb30 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e  stroy opcode) in
2bb40 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a   order to keep .
2bb50 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ** the internal 
2bb60 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f  representation o
2bb70 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20  f the.** schema 
2bb80 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20  consistent with 
2bb90 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e  what is on disk.
2bba0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70  .*/.case OP_Drop
2bbb0 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c  Trigger: {.  sql
2bbc0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2bbd0 65 74 65 54 72 69 67 67 65 72 28 64 62 2c 20 70  eteTrigger(db, p
2bbe0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2bbf0 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2bc00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2bc10 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2bc20 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  HECK./* Opcode: 
2bc30 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31 20 50  IntegrityCk P1 P
2bc40 32 20 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20  2 P3 * P5.**.** 
2bc50 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f  Do an analysis o
2bc60 66 20 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20  f the currently 
2bc70 6f 70 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20  open database.  
2bc80 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69  Store in.** regi
2bc90 73 74 65 72 20 50 31 20 74 68 65 20 74 65 78 74  ster P1 the text
2bca0 20 6f 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   of an error mes
2bcb0 73 61 67 65 20 64 65 73 63 72 69 62 69 6e 67 20  sage describing 
2bcc0 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a  any problems..**
2bcd0 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20   If no problems 
2bce0 61 72 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65  are found, store
2bcf0 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73   a NULL in regis
2bd00 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  ter P1..**.** Th
2bd10 65 20 72 65 67 69 73 74 65 72 20 50 33 20 63 6f  e register P3 co
2bd20 6e 74 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d  ntains the maxim
2bd30 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c  um number of all
2bd40 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20  owed errors..** 
2bd50 41 74 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20  At most reg(P3) 
2bd60 65 72 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72  errors will be r
2bd70 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f  eported..** In o
2bd80 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
2bd90 61 6e 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61  analysis stops a
2bda0 73 20 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31  s soon as reg(P1
2bdb0 29 20 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a  ) errors are .**
2bdc0 20 73 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20   seen.  Reg(P1) 
2bdd0 69 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20  is updated with 
2bde0 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72  the number of er
2bdf0 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a  rors remaining..
2be00 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70  **.** The root p
2be10 61 67 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61  age numbers of a
2be20 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65  ll tables in the
2be30 20 64 61 74 61 62 61 73 65 20 61 72 65 20 69 6e   database are in
2be40 74 65 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20  teger.** stored 
2be50 69 6e 20 72 65 67 28 50 31 29 2c 20 72 65 67 28  in reg(P1), reg(
2be60 50 31 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29  P1+1), reg(P1+2)
2be70 2c 20 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72  , ....  There ar
2be80 65 20 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74  e P2 tables.** t
2be90 6f 74 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  otal..**.** If P
2bea0 35 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  5 is not zero, t
2beb0 68 65 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65  he check is done
2bec0 20 6f 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   on the auxiliar
2bed0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69  y database.** fi
2bee0 6c 65 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e  le, not the main
2bef0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a   database file..
2bf00 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
2bf10 65 20 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70  e is used to imp
2bf20 6c 65 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67  lement the integ
2bf30 72 69 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d  rity_check pragm
2bf40 61 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e  a..*/.case OP_In
2bf50 74 65 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69  tegrityCk: {.  i
2bf60 6e 74 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f  nt nRoot;      /
2bf70 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  * Number of tabl
2bf80 65 73 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e  es to check.  (N
2bf90 75 6d 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61  umber of root pa
2bfa0 67 65 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a  ges.) */.  int *
2bfb0 61 52 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72  aRoot;     /* Ar
2bfc0 72 61 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20  ray of rootpage 
2bfd0 6e 75 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c  numbers for tabl
2bfe0 65 73 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64  es to be checked
2bff0 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20   */.  int j;    
2c000 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
2c010 75 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e  unter */.  int n
2c020 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75  Err;       /* Nu
2c030 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72  mber of errors r
2c040 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61  eported */.  cha
2c050 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20  r *z;        /* 
2c060 54 65 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f  Text of the erro
2c070 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65  r report */.  Me
2c080 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a  m *pnErr;     /*
2c090 20 52 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e   Register keepin
2c0a0 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72  g track of error
2c0b0 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a  s remaining */..
2c0c0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
2c0d0 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f  Reader );.  nRoo
2c0e0 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61  t = pOp->p2;.  a
2c0f0 73 73 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29  ssert( nRoot>0 )
2c100 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69  ;.  aRoot = sqli
2c110 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64  te3DbMallocRaw(d
2c120 62 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28  b, sizeof(int)*(
2c130 6e 52 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66  nRoot+1) );.  if
2c140 28 20 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74  ( aRoot==0 ) got
2c150 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65  o no_mem;.  asse
2c160 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2c170 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2c180 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
2c190 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65  ;.  pnErr = &aMe
2c1a0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
2c1b0 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c  sert( (pnErr->fl
2c1c0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
2c1d0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
2c1e0 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28  pnErr->flags & (
2c1f0 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
2c200 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20  ))==0 );.  pIn1 
2c210 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2c220 3b 0a 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e  ;.  for(j=0; j<n
2c230 52 6f 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  Root; j++){.    
2c240 61 52 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29  aRoot[j] = (int)
2c250 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
2c260 6c 75 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20  lue(&pIn1[j]);. 
2c270 20 7d 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20   }.  aRoot[j] = 
2c280 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  0;.  assert( pOp
2c290 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2c2a0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2c2b0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2c2c0 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2c2d0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2c2e0 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2c2f0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2c300 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2c310 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c330 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2c340 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
2c350 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
2c360 2c 20 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72  , aRoot);.  pnEr
2c370 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a  r->u.i -= nErr;.
2c380 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2c390 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20  SetNull(pIn1);. 
2c3a0 20 69 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a   if( nErr==0 ){.
2c3b0 20 20 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30      assert( z==0
2c3c0 20 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   );.  }else if( 
2c3d0 7a 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f  z==0 ){.    goto
2c3e0 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65   no_mem;.  }else
2c3f0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2c400 65 4d 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c  eMemSetStr(pIn1,
2c410 20 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55   z, -1, SQLITE_U
2c420 54 46 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65  TF8, sqlite3_fre
2c430 65 29 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45  e);.  }.  UPDATE
2c440 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49  _MAX_BLOBSIZE(pI
2c450 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
2c460 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
2c470 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn1, encoding)
2c480 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2c490 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2c4a0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2c4b0 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  CK */../* Opcode
2c4c0 3a 20 52 6f 77 53 65 74 41 64 64 20 50 31 20 50  : RowSetAdd P1 P
2c4d0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2c4e0 73 69 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29  sis:  rowset(P1)
2c4f0 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73  =r[P2].**.** Ins
2c500 65 72 74 20 74 68 65 20 69 6e 74 65 67 65 72 20  ert the integer 
2c510 76 61 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65  value held by re
2c520 67 69 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61  gister P2 into a
2c530 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a   boolean index.*
2c540 2a 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74  * held in regist
2c550 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  er P1..**.** An 
2c560 61 73 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20  assertion fails 
2c570 69 66 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20  if P2 is not an 
2c580 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65  integer..*/.case
2c590 20 4f 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b   OP_RowSetAdd: {
2c5a0 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69         /* in1, i
2c5b0 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n2 */.  pIn1 = &
2c5c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2c5d0 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
2c5e0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
2c5f0 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26  ( (pIn2->flags &
2c600 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a   MEM_Int)!=0 );.
2c610 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2c620 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2c630 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
2c640 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
2c650 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
2c660 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2c670 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2c680 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2c690 20 7d 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53   }.  sqlite3RowS
2c6a0 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2c6b0 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e  .pRowSet, pIn2->
2c6c0 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
2c6d0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
2c6e0 53 65 74 52 65 61 64 20 50 31 20 50 32 20 50 33  SetRead P1 P2 P3
2c6f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2c700 3a 20 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28  :  r[P3]=rowset(
2c710 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63  P1).**.** Extrac
2c720 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  t the smallest v
2c730 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61  alue from boolea
2c740 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70  n index P1 and p
2c750 75 74 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  ut that value in
2c760 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
2c770 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65  3.  Or, if boole
2c780 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73 20 69  an index P1 is i
2c790 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20  nitially empty, 
2c7a0 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68  leave P3.** unch
2c7b0 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74  anged and jump t
2c7c0 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
2c7d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2c7e0 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20  SetRead: {      
2c7f0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f   /* jump, in1, o
2c800 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c  ut3 */.  i64 val
2c810 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2c820 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
2c830 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2c840 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2c850 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f  .   || sqlite3Ro
2c860 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75  wSetNext(pIn1->u
2c870 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d  .pRowSet, &val)=
2c880 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54  =0.  ){.    /* T
2c890 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  he boolean index
2c8a0 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20   is empty */.   
2c8b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2c8c0 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20  etNull(pIn1);.  
2c8d0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
2c8e0 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f 74 6f  n(1,2);.    goto
2c8f0 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f   jump_to_p2_and_
2c900 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2c910 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  upt;.  }else{.  
2c920 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73    /* A value was
2c930 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65   pulled from the
2c940 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 56 64   index */.    Vd
2c950 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
2c960 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  2);.    sqlite3V
2c970 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 26  dbeMemSetInt64(&
2c980 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76  aMem[pOp->p3], v
2c990 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20  al);.  }.  goto 
2c9a0 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
2c9b0 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  upt;.}../* Opcod
2c9c0 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31  e: RowSetTest P1
2c9d0 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e   P2 P3 P4.** Syn
2c9e0 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20  opsis: if r[P3] 
2c9f0 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f  in rowset(P1) go
2ca00 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2ca10 73 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d  ster P3 is assum
2ca20 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d  ed to hold a 64-
2ca30 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
2ca40 65 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50  e. If register P
2ca50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  1.** contains a 
2ca60 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e  RowSet object an
2ca70 64 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62  d that RowSet ob
2ca80 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a  ject contains.**
2ca90 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20   the value held 
2caa0 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72  in P3, jump to r
2cab0 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65  egister P2. Othe
2cac0 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68  rwise, insert th
2cad0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20  e.** integer in 
2cae0 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53  P3 into the RowS
2caf0 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20  et and continue 
2cb00 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78  on to the.** nex
2cb10 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  t opcode..**.** 
2cb20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63  The RowSet objec
2cb30 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66  t is optimized f
2cb40 6f 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72  or the case wher
2cb50 65 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74  e successive set
2cb60 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  s.** of integers
2cb70 2c 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74  , where each set
2cb80 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70   contains no dup
2cb90 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65  licates. Each se
2cba0 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69  t.** of values i
2cbb0 73 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  s identified by 
2cbc0 61 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75  a unique P4 valu
2cbd0 65 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74  e. The first set
2cbe0 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34  .** must have P4
2cbf0 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73  ==0, the final s
2cc00 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75  et P4=-1.  P4 mu
2cc10 73 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20  st be either -1 
2cc20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69  or.** non-negati
2cc30 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67  ve.  For non-neg
2cc40 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20  ative values of 
2cc50 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65  P4 only the lowe
2cc60 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20  r 4.** bits are 
2cc70 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a  significant..**.
2cc80 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f  ** This allows o
2cc90 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61  ptimizations: (a
2cca0 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65  ) when P4==0 the
2ccb0 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2ccc0 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77   test.** the row
2ccd0 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50  set object for P
2cce0 33 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72  3, as it is guar
2ccf0 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f  anteed not to co
2cd00 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29  ntain it,.** (b)
2cd10 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65   when P4==-1 the
2cd20 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f  re is no need to
2cd30 20 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75   insert the valu
2cd40 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a  e, as it will.**
2cd50 20 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64   never be tested
2cd60 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68   for, and (c) wh
2cd70 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20  en a value that 
2cd80 69 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  is part of set X
2cd90 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c   is.** inserted,
2cda0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65   there is no nee
2cdb0 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73  d to search to s
2cdc0 65 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76  ee if the same v
2cdd0 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76  alue was.** prev
2cde0 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20  iously inserted 
2cdf0 61 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58  as part of set X
2ce00 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73   (only if it was
2ce10 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69   previously.** i
2ce20 6e 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20  nserted as part 
2ce30 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65  of some other se
2ce40 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  t)..*/.case OP_R
2ce50 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20  owSetTest: {    
2ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce70 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69   /* jump, in1, i
2ce80 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74  n3 */.  int iSet
2ce90 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a  ;.  int exists;.
2cea0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2ceb0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
2cec0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
2ced0 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d  ];.  iSet = pOp-
2cee0 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28  >p4.i;.  assert(
2cef0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d   pIn3->flags&MEM
2cf00 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66  _Int );..  /* If
2cf10 20 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69   there is anythi
2cf20 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20  ng other than a 
2cf30 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e  rowset object in
2cf40 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c   memory cell P1,
2cf50 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20  .  ** delete it 
2cf60 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69  now and initiali
2cf70 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d  ze P1 with an em
2cf80 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a  pty rowset.  */.
2cf90 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
2cfa0 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29  gs & MEM_RowSet)
2cfb0 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ==0 ){.    sqlit
2cfc0 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53  e3VdbeMemSetRowS
2cfd0 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66  et(pIn1);.    if
2cfe0 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
2cff0 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20   MEM_RowSet)==0 
2d000 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
2d010 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f   }..  assert( pO
2d020 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2d030 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T32 );.  assert(
2d040 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65   iSet==-1 || iSe
2d050 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53  t>=0 );.  if( iS
2d060 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73  et ){.    exists
2d070 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74   = sqlite3RowSet
2d080 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f  Test(pIn1->u.pRo
2d090 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33  wSet, iSet, pIn3
2d0a0 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65  ->u.i);.    Vdbe
2d0b0 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73  BranchTaken(exis
2d0c0 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  ts!=0,2);.    if
2d0d0 28 20 65 78 69 73 74 73 20 29 20 67 6f 74 6f 20  ( exists ) goto 
2d0e0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
2d0f0 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20 29 7b    if( iSet>=0 ){
2d100 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f 77 53  .    sqlite3RowS
2d110 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75  etInsert(pIn1->u
2d120 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e  .pRowSet, pIn3->
2d130 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  u.i);.  }.  brea
2d140 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2d150 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
2d160 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  ER../* Opcode: P
2d170 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50 33 20  rogram P1 P2 P3 
2d180 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63  P4 P5.**.** Exec
2d190 75 74 65 20 74 68 65 20 74 72 69 67 67 65 72 20  ute the trigger 
2d1a0 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64 20 61  program passed a
2d1b0 73 20 50 34 20 28 74 79 70 65 20 50 34 5f 53 55  s P4 (type P4_SU
2d1c0 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a  BPROGRAM). .**.*
2d1d0 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P1 contains th
2d1e0 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65  e address of the
2d1f0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
2d200 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 66  t contains the f
2d210 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20  irst memory .** 
2d220 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72 61 79  cell in an array
2d230 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used 
2d240 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  as arguments to 
2d250 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e  the sub-program.
2d260 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73   P2 .** contains
2d270 20 74 68 65 20 61 64 64 72 65 73 73 20 74 6f 20   the address to 
2d280 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65 20 73  jump to if the s
2d290 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72 6f 77  ub-program throw
2d2a0 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20  s an IGNORE .** 
2d2b0 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e 67 20  exception using 
2d2c0 74 68 65 20 52 41 49 53 45 28 29 20 66 75 6e 63  the RAISE() func
2d2d0 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72 20 50  tion. Register P
2d2e0 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  3 contains the a
2d2f0 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20  ddress .** of a 
2d300 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74  memory cell in t
2d310 68 69 73 20 28 74 68 65 20 70 61 72 65 6e 74 29  his (the parent)
2d320 20 56 4d 20 74 68 61 74 20 69 73 20 75 73 65 64   VM that is used
2d330 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74 68 65   to allocate the
2d340 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75   .** memory requ
2d350 69 72 65 64 20 62 79 20 74 68 65 20 73 75 62 2d  ired by the sub-
2d360 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d 65 2e  vdbe at runtime.
2d370 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
2d380 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 56 4d  ointer to the VM
2d390 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
2d3a0 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
2d3b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
2d3c0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72  non-zero, then r
2d3d0 65 63 75 72 73 69 76 65 20 70 72 6f 67 72 61 6d  ecursive program
2d3e0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73 20 65   invocation is e
2d3f0 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  nabled..*/.case 
2d400 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20  OP_Program: {   
2d410 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2d420 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20    int nMem;     
2d430 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
2d440 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65  ber of memory re
2d450 67 69 73 74 65 72 73 20 66 6f 72 20 73 75 62 2d  gisters for sub-
2d460 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74  program */.  int
2d470 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20 20   nByte;         
2d480 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
2d490 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20 72   runtime space r
2d4a0 65 71 75 69 72 65 64 20 66 6f 72 20 73 75 62 2d  equired for sub-
2d4b0 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d  program */.  Mem
2d4c0 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20 20 20   *pRt;          
2d4d0 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
2d4e0 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e   to allocate run
2d4f0 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a 20 20  time space */.  
2d500 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20  Mem *pMem;      
2d510 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
2d520 74 6f 20 69 74 65 72 61 74 65 20 74 68 72 6f 75  to iterate throu
2d530 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  gh memory cells 
2d540 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20  */.  Mem *pEnd; 
2d550 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2d560 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  Last memory cell
2d570 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20 2a 2f   in new array */
2d580 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
2d590 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65  rame;      /* Ne
2d5a0 77 20 76 64 62 65 20 66 72 61 6d 65 20 74 6f 20  w vdbe frame to 
2d5b0 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20  execute in */.  
2d5c0 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f  SubProgram *pPro
2d5d0 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70  gram;   /* Sub-p
2d5e0 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63 75 74  rogram to execut
2d5f0 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20  e */.  void *t; 
2d600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2d610 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79  * Token identify
2d620 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a  ing trigger */..
2d630 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70    pProgram = pOp
2d640 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20  ->p4.pProgram;. 
2d650 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70   pRt = &aMem[pOp
2d660 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p3];.  assert(
2d670 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30   pProgram->nOp>0
2d680 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74   );.  .  /* If t
2d690 68 65 20 70 35 20 66 6c 61 67 20 69 73 20 63 6c  he p5 flag is cl
2d6a0 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75 72 73  ear, then recurs
2d6b0 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
2d6c0 66 20 74 72 69 67 67 65 72 73 20 69 73 20 0a 20  f triggers is . 
2d6d0 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66 6f 72   ** disabled for
2d6e0 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d 70 61   backwards compa
2d6f0 74 69 62 69 6c 69 74 79 20 28 70 35 20 69 73 20  tibility (p5 is 
2d700 73 65 74 20 69 66 20 74 68 69 73 20 73 75 62 2d  set if this sub-
2d710 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20  program.  ** is 
2d720 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67 65 72  really a trigger
2d730 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67 6e 20  , not a foreign 
2d740 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20  key action, and 
2d750 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20 20 2a  the flag set.  *
2d760 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20 62 79  * and cleared by
2d770 20 74 68 65 20 22 50 52 41 47 4d 41 20 72 65 63   the "PRAGMA rec
2d780 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22  ursive_triggers"
2d790 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61   command is clea
2d7a0 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  r)..  ** .  ** I
2d7b0 74 20 69 73 20 72 65 63 75 72 73 69 76 65 20 69  t is recursive i
2d7c0 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69  nvocation of tri
2d7d0 67 67 65 72 73 2c 20 61 74 20 74 68 65 20 53 51  ggers, at the SQ
2d7e0 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20 69 73  L level, that is
2d7f0 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e   .  ** disabled.
2d800 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73 20 61   In some cases a
2d810 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
2d820 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d 6f 72  may generate mor
2d830 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a  e than one .  **
2d840 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69 66 20   SubProgram (if 
2d850 74 68 65 20 74 72 69 67 67 65 72 20 6d 61 79 20  the trigger may 
2d860 62 65 20 65 78 65 63 75 74 65 64 20 77 69 74 68  be executed with
2d870 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 64   more than one d
2d880 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f  ifferent .  ** O
2d890 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72  N CONFLICT algor
2d8a0 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67 72 61  ithm). SubProgra
2d8b0 6d 20 73 74 72 75 63 74 75 72 65 73 20 61 73 73  m structures ass
2d8c0 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 0a 20  ociated with a. 
2d8d0 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69 67 67   ** single trigg
2d8e0 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68 65 20  er all have the 
2d8f0 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72 20 74  same value for t
2d900 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f  he SubProgram.to
2d910 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69 61 62  ken .  ** variab
2d920 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  le.  */.  if( pO
2d930 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74 20 3d  p->p5 ){.    t =
2d940 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e   pProgram->token
2d950 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65  ;.    for(pFrame
2d960 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
2d970 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f  me && pFrame->to
2d980 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70  ken!=t; pFrame=p
2d990 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2d9a0 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d 65 20  .    if( pFrame 
2d9b0 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20  ) break;.  }..  
2d9c0 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64  if( p->nFrame>=d
2d9d0 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
2d9e0 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52 5f 44  _LIMIT_TRIGGER_D
2d9f0 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72 63 20  EPTH] ){.    rc 
2da00 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
2da10 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
2da20 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d 61 6e  rror(p, "too man
2da30 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
2da40 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
2da50 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2da60 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
2da70 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
2da80 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
2da90 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
2daa0 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
2dab0 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
2dac0 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
2dad0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
2dae0 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
2daf0 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
2db00 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
2db10 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
2db20 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
2db30 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
2db40 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
2db50 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
2db60 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
2db70 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
2db80 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
2db90 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
2dba0 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
2dbb0 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
2dbc0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
2dbd0 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
2dbe0 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
2dbf0 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
2dc00 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
2dc10 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
2dc20 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
2dc30 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
2dc40 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
2dc50 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
2dc60 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
2dc70 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
2dc80 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
2dc90 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
2dca0 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
2dcb0 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
2dcc0 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
2dcd0 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
2dce0 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2dcf0 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52  r;.    nByte = R
2dd00 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
2dd10 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20  eFrame)).       
2dd20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20         + nMem * 
2dd30 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20  sizeof(Mem).    
2dd40 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2dd50 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a  gram->nCsr * siz
2dd60 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a  eof(VdbeCursor *
2dd70 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2dd80 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  + pProgram->nOnc
2dd90 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a  e * sizeof(u8);.
2dda0 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
2ddb0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
2ddc0 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
2ddd0 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
2dde0 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2ddf0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
2de00 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2de10 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
2de20 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
2de30 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
2de40 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2de50 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
2de60 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
2de70 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
2de80 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
2de90 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
2dea0 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
2deb0 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e 74  Frame->pc = (int
2dec0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
2ded0 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d    pFrame->aMem =
2dee0 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46   p->aMem;.    pF
2def0 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e  rame->nMem = p->
2df00 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65  nMem;.    pFrame
2df10 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70 43  ->apCsr = p->apC
2df20 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  sr;.    pFrame->
2df30 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75  nCursor = p->nCu
2df40 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  rsor;.    pFrame
2df50 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a  ->aOp = p->aOp;.
2df60 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20      pFrame->nOp 
2df70 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46  = p->nOp;.    pF
2df80 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50  rame->token = pP
2df90 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
2dfa0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65     pFrame->aOnce
2dfb0 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46  Flag = p->aOnceF
2dfc0 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  lag;.    pFrame-
2dfd0 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e  >nOnceFlag = p->
2dfe0 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66 64 65  nOnceFlag;.#ifde
2dff0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2e000 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a  STMT_SCANSTATUS.
2e010 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e 45 78      pFrame->anEx
2e020 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63 3b 0a  ec = p->anExec;.
2e030 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45 6e 64  #endif..    pEnd
2e040 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d   = &VdbeFrameMem
2e050 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d  (pFrame)[pFrame-
2e060 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20  >nChildMem];.   
2e070 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72   for(pMem=VdbeFr
2e080 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20  ameMem(pFrame); 
2e090 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d  pMem!=pEnd; pMem
2e0a0 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d  ++){.      pMem-
2e0b0 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64  >flags = MEM_Und
2e0c0 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d  efined;.      pM
2e0d0 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20  em->db = db;.   
2e0e0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
2e0f0 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e  pFrame = pRt->u.
2e100 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65  pFrame;.    asse
2e110 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d  rt( pProgram->nM
2e120 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  em+pProgram->nCs
2e130 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
2e140 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65  dMem );.    asse
2e150 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  rt( pProgram->nC
2e160 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2e170 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73  ldCsr );.    ass
2e180 65 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d  ert( (int)(pOp -
2e190 20 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70   aOp)==pFrame->p
2e1a0 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
2e1b0 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
2e1c0 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
2e1d0 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
2e1e0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
2e1f0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
2e200 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
2e210 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46 72 61 6d  nChange;.  pFram
2e220 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20 3d 20 70  e->nDbChange = p
2e230 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20  ->db->nChange;. 
2e240 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b   p->nChange = 0;
2e250 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70  .  p->pFrame = p
2e260 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d  Frame;.  p->aMem
2e270 20 3d 20 61 4d 65 6d 20 3d 20 26 56 64 62 65 46   = aMem = &VdbeF
2e280 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b  rameMem(pFrame)[
2e290 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d  -1];.  p->nMem =
2e2a0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2e2b0 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72  em;.  p->nCursor
2e2c0 20 3d 20 28 75 31 36 29 70 46 72 61 6d 65 2d 3e   = (u16)pFrame->
2e2d0 6e 43 68 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e  nChildCsr;.  p->
2e2e0 61 70 43 73 72 20 3d 20 28 56 64 62 65 43 75 72  apCsr = (VdbeCur
2e2f0 73 6f 72 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e  sor **)&aMem[p->
2e300 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f  nMem+1];.  p->aO
2e310 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f 67 72  p = aOp = pProgr
2e320 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f  am->aOp;.  p->nO
2e330 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f  p = pProgram->nO
2e340 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61  p;.  p->aOnceFla
2e350 67 20 3d 20 28 75 38 20 2a 29 26 70 2d 3e 61 70  g = (u8 *)&p->ap
2e360 43 73 72 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b  Csr[p->nCursor];
2e370 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20  .  p->nOnceFlag 
2e380 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  = pProgram->nOnc
2e390 65 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e;.#ifdef SQLITE
2e3a0 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
2e3b0 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61 6e 45  NSTATUS.  p->anE
2e3c0 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a  xec = 0;.#endif.
2e3d0 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d 31 5d    pOp = &aOp[-1]
2e3e0 3b 0a 20 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f  ;.  memset(p->aO
2e3f0 6e 63 65 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e  nceFlag, 0, p->n
2e400 4f 6e 63 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72  OnceFlag);..  br
2e410 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2e420 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32 20 2a  e: Param P1 P2 *
2e430 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   * *.**.** This 
2e440 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65  opcode is only e
2e450 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 73  ver present in s
2e460 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c  ub-programs call
2e470 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f  ed via the .** O
2e480 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72 75  P_Program instru
2e490 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61  ction. Copy a va
2e4a0 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20 73 74  lue currently st
2e4b0 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79  ored in a memory
2e4c0 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65   .** cell of the
2e4d0 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74   calling (parent
2e4e0 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20  ) frame to cell 
2e4f0 50 32 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  P2 in the curren
2e500 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64  t frames .** add
2e510 72 65 73 73 20 73 70 61 63 65 2e 20 54 68 69 73  ress space. This
2e520 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69 67   is used by trig
2e530 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74 6f 20  ger programs to 
2e540 61 63 63 65 73 73 20 74 68 65 20 6e 65 77 2e 2a  access the new.*
2e550 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76   .** and old.* v
2e560 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  alues..**.** The
2e570 20 61 64 64 72 65 73 73 20 6f 66 20 74 68 65 20   address of the 
2e580 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61 72 65  cell in the pare
2e590 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65 74 65  nt frame is dete
2e5a0 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69 6e 67  rmined by adding
2e5b0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
2e5c0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2e5d0 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66   to the value of
2e5e0 20 74 68 65 20 50 31 20 61 72 67 75 6d 65 6e 74   the P1 argument
2e5f0 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69   to the.** calli
2e600 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e  ng OP_Program in
2e610 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2e620 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20  se OP_Param: {  
2e630 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2e640 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2e650 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20 2a  *pFrame;.  Mem *
2e660 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  pIn;.  pOut = ou
2e670 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
2e680 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65 20 3d  pOp);.  pFrame =
2e690 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
2e6a0 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
2e6b0 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
2e6c0 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
2e6d0 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
2e6e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
2e6f0 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
2e700 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
2e710 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
2e720 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2e730 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2e740 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2e750 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2e760 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
2e770 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
2e780 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2e790 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32  s: fkctr[P1]+=P2
2e7a0 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
2e7b0 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
2e7c0 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
2e7d0 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
2e7e0 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
2e7f0 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2e800 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
2e810 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
2e820 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
2e830 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
2e840 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
2e850 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
2e860 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
2e870 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
2e880 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
2e890 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2e8a0 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2e8b0 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2e8c0 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
2e8d0 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
2e8e0 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
2e8f0 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
2e900 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2e910 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f  redImmCons += pO
2e920 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  p->p2;.  }else i
2e930 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2e940 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
2e950 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2e960 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
2e970 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
2e980 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
2e990 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2e9a0 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
2e9b0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2e9c0 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b  opsis: if fkctr[
2e9d0 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  P1]==0 goto P2.*
2e9e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2e9f0 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
2ea00 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2ea10 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
2ea20 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
2ea30 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
2ea40 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2ea50 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2ea60 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2ea70 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
2ea80 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
2ea90 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2eaa0 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
2eab0 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
2eac0 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
2ead0 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
2eae0 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
2eaf0 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
2eb00 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2eb10 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
2eb20 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
2eb30 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2eb40 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
2eb50 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2eb60 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
2eb70 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2eb80 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
2eb90 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
2eba0 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
2ebb0 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
2ebc0 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
2ebd0 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  p1 ){.    VdbeBr
2ebe0 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44  anchTaken(db->nD
2ebf0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2ec00 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2ec10 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
2ec20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
2ec30 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2ec40 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2ec50 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75  ons==0 ) goto ju
2ec60 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
2ec70 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  e{.    VdbeBranc
2ec80 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e  hTaken(p->nFkCon
2ec90 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62  straint==0 && db
2eca0 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
2ecb0 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69  ns==0, 2);.    i
2ecc0 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61  f( p->nFkConstra
2ecd0 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44  int==0 && db->nD
2ece0 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d  eferredImmCons==
2ecf0 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f  0 ) goto jump_to
2ed00 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
2ed10 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  ;.}.#endif /* #i
2ed20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2ed30 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f  T_FOREIGN_KEY */
2ed40 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2ed50 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
2ed60 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d  ENT./* Opcode: M
2ed70 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20  emMax P1 P2 * * 
2ed80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
2ed90 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72  [P1]=max(r[P1],r
2eda0 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69  [P2]).**.** P1 i
2edb0 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e 20  s a register in 
2edc0 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f  the root frame o
2edd0 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20 72  f this VM (the r
2ede0 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20  oot frame is.** 
2edf0 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74  different from t
2ee00 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
2ee10 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   if this instruc
2ee20 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78  tion is being ex
2ee30 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e  ecuted.** within
2ee40 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e   a sub-program).
2ee50 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   Set the value o
2ee60 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f  f register P1 to
2ee70 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
2ee80 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20  .** its current 
2ee90 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61  value and the va
2eea0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2eeb0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69  P2..**.** This i
2eec0 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77  nstruction throw
2eed0 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68  s an error if th
2eee0 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73  e memory cell is
2eef0 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a   not initially.*
2ef00 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f  * an integer..*/
2ef10 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a  .case OP_MemMax:
2ef20 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32   {        /* in2
2ef30 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20   */.  VdbeFrame 
2ef40 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70  *pFrame;.  if( p
2ef50 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20  ->pFrame ){.    
2ef60 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2ef70 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50  rame; pFrame->pP
2ef80 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46  arent; pFrame=pF
2ef90 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a  rame->pParent);.
2efa0 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61      pIn1 = &pFra
2efb0 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2efc0 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  ];.  }else{.    
2efd0 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
2efe0 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73  ->p1];.  }.  ass
2eff0 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
2f000 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74  pIn1) );.  sqlit
2f010 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2f020 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e  ify(pIn1);.  pIn
2f030 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
2f040 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  2];.  sqlite3Vdb
2f050 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
2f060 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31  In2);.  if( pIn1
2f070 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29  ->u.i<pIn2->u.i)
2f080 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20  {.    pIn1->u.i 
2f090 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d  = pIn2->u.i;.  }
2f0a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
2f0b0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
2f0c0 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  T_AUTOINCREMENT 
2f0d0 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  */../* Opcode: I
2f0e0 66 50 6f 73 20 50 31 20 50 32 20 50 33 20 2a 20  fPos P1 P2 P3 * 
2f0f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2f100 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72  f r[P1]>0 then r
2f110 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50  [P1]-=P3, goto P
2f120 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
2f130 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e   P1 must contain
2f140 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 20   an integer..** 
2f150 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  If the value of 
2f160 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 31  register P1 is 1
2f170 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73 75 62   or greater, sub
2f180 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68  tract P3 from th
2f190 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 50 31  e.** value in P1
2f1a0 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50 32 2e   and jump to P2.
2f1b0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 69 6e  .**.** If the in
2f1c0 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20 72  itial value of r
2f1d0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6c 65  egister P1 is le
2f1e0 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65 6e 20  ss than 1, then 
2f1f0 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20  the.** value is 
2f200 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 63 6f  unchanged and co
2f210 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74 68 72  ntrol passes thr
2f220 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
2f230 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
2f240 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20  .case OP_IfPos: 
2f250 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  {        /* jump
2f260 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
2f270 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2f280 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
2f290 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
2f2a0 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2f2b0 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e  aken( pIn1->u.i>
2f2c0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2f2d0 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20  1->u.i>0 ){.    
2f2e0 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70 4f 70  pIn1->u.i -= pOp
2f2f0 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f 20 6a  ->p3;.    goto j
2f300 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
2f310 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2f320 63 6f 64 65 3a 20 53 65 74 49 66 4e 6f 74 50 6f  code: SetIfNotPo
2f330 73 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  s P1 P2 P3 * *.*
2f340 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2f350 5b 50 31 5d 3c 3d 30 20 74 68 65 6e 20 72 5b 50  [P1]<=0 then r[P
2f360 32 5d 3d 50 33 0a 2a 2a 0a 2a 2a 20 52 65 67 69  2]=P3.**.** Regi
2f370 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2f380 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2f390 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2f3a0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2f3b0 69 73 20 6e 6f 74 20 70 6f 73 69 74 69 76 65 20  is not positive 
2f3c0 28 69 66 20 69 74 20 69 73 20 6c 65 73 73 20 74  (if it is less t
2f3d0 68 61 6e 20 31 29 20 74 68 65 6e 0a 2a 2a 20 73  han 1) then.** s
2f3e0 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
2f3f0 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 62  register P2 to b
2f400 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 50 33  e the integer P3
2f410 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74  ..*/.case OP_Set
2f420 49 66 4e 6f 74 50 6f 73 3a 20 7b 20 20 20 20 20  IfNotPos: {     
2f430 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a     /* in1, in2 *
2f440 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
2f450 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
2f460 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
2f470 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 69 66  &MEM_Int );.  if
2f480 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 3d 30 20 29  ( pIn1->u.i<=0 )
2f490 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 6f 75 74  {.    pOut = out
2f4a0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
2f4b0 4f 70 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  Op);.    pOut->u
2f4c0 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  .i = pOp->p3;.  
2f4d0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2f4e0 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65   Opcode: IfNotZe
2f4f0 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ro P1 P2 P3 * *.
2f500 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2f510 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b  r[P1]!=0 then r[
2f520 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]-=P3, goto P2
2f530 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2f540 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2f550 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
2f560 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
2f570 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
2f580 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65   initially nonze
2f590 72 6f 2c 20 74 68 65 6e 20 73 75 62 74 72 61 63  ro, then subtrac
2f5a0 74 20 50 33 20 66 72 6f 6d 20 74 68 65 20 76 61  t P3 from the va
2f5b0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
2f5c0 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74  P1 and.** jump t
2f5d0 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74  o P2.  If regist
2f5e0 65 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c  er P1 is initial
2f5f0 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65 20 69  ly zero, leave i
2f600 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a 2a 20 61  t unchanged.** a
2f610 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  nd fall through.
2f620 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
2f630 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  tZero: {        
2f640 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2f650 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2f660 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2f670 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2f680 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
2f690 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
2f6a0 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
2f6b0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a  f( pIn1->u.i ){.
2f6c0 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d       pIn1->u.i -
2f6d0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20  = pOp->p3;.     
2f6e0 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2f6f0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2f700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63 72  ./* Opcode: Decr
2f710 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20 2a  JumpZero P1 P2 *
2f720 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
2f730 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d 3d  : if (--r[P1])==
2f740 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2f750 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2f760 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65 72   hold an integer
2f770 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68 65  .  Decrement the
2f780 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
2f790 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a 75  er P1.** then ju
2f7a0 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  mp to P2 if the 
2f7b0 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78 61  new value is exa
2f7c0 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61  ctly zero..*/.ca
2f7d0 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65  se OP_DecrJumpZe
2f7e0 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75  ro: {      /* ju
2f7f0 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
2f800 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
2f810 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
2f820 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
2f830 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  t );.  pIn1->u.i
2f840 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  --;.  VdbeBranch
2f850 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d  Taken(pIn1->u.i=
2f860 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49  =0, 2);.  if( pI
2f870 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74  n1->u.i==0 ) got
2f880 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2f890 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
2f8a0 63 6f 64 65 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e  code: JumpZeroIn
2f8b0 63 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  cr P1 P2 * * *.*
2f8c0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28  * Synopsis: if (
2f8d0 72 5b 50 31 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f  r[P1]++)==0 ) go
2f8e0 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20  to P2.**.** The 
2f8f0 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  register P1 must
2f900 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2f910 67 65 72 2e 20 20 49 66 20 72 65 67 69 73 74 65  ger.  If registe
2f920 72 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  r P1 is initiall
2f930 79 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 6e 20  y.** zero, then 
2f940 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 6e 63  jump to P2.  Inc
2f950 72 65 6d 65 6e 74 20 72 65 67 69 73 74 65 72 20  rement register 
2f960 50 31 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  P1 regardless of
2f970 20 77 68 65 74 68 65 72 20 6f 72 0a 2a 2a 20 6e   whether or.** n
2f980 6f 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  ot the jump is t
2f990 61 6b 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  aken..*/.case OP
2f9a0 5f 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 3a 20 7b  _JumpZeroIncr: {
2f9b0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2f9c0 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
2f9d0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f9e0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
2f9f0 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29  >flags&MEM_Int )
2fa00 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2fa10 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30  ken(pIn1->u.i==0
2fa20 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  , 2);.  if( (pIn
2fa30 31 2d 3e 75 2e 69 2b 2b 29 3d 3d 30 20 29 20 67  1->u.i++)==0 ) g
2fa40 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
2fa50 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2fa60 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 30 20  pcode: AggStep0 
2fa70 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
2fa80 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2fa90 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
2faa0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
2fab0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
2fac0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
2fad0 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
2fae0 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
2faf0 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
2fb00 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
2fb10 74 68 65 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73  the FuncDef.** s
2fb20 74 72 75 63 74 75 72 65 20 74 68 61 74 20 73 70  tructure that sp
2fb30 65 63 69 66 69 65 73 20 74 68 65 20 66 75 6e 63  ecifies the func
2fb40 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20  tion.  Register 
2fb50 50 33 20 69 73 20 74 68 65 0a 2a 2a 20 61 63 63  P3 is the.** acc
2fb60 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  umulator..**.** 
2fb70 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74 73  The P5 arguments
2fb80 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d 20   are taken from 
2fb90 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 20  register P2 and 
2fba0 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f 72  its.** successor
2fbb0 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  s..*/./* Opcode:
2fbc0 20 41 67 67 53 74 65 70 20 2a 20 50 32 20 50 33   AggStep * P2 P3
2fbd0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
2fbe0 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20  is: accum=r[P3] 
2fbf0 73 74 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a  step(r[P2@P5]).*
2fc00 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65  *.** Execute the
2fc10 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66   step function f
2fc20 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e  or an aggregate.
2fc30 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f    The.** functio
2fc40 6e 20 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e  n has P5 argumen
2fc50 74 73 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f  ts.   P4 is a po
2fc60 69 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69  inter to an sqli
2fc70 74 65 33 5f 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f  te3_context.** o
2fc80 62 6a 65 63 74 20 74 68 61 74 20 69 73 20 75 73  bject that is us
2fc90 65 64 20 74 6f 20 72 75 6e 20 74 68 65 20 66 75  ed to run the fu
2fca0 6e 63 74 69 6f 6e 2e 20 20 52 65 67 69 73 74 65  nction.  Registe
2fcb0 72 20 50 33 20 69 73 0a 2a 2a 20 61 73 20 74 68  r P3 is.** as th
2fcc0 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a  e accumulator..*
2fcd0 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72 67 75  *.** The P5 argu
2fce0 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65 6e 20  ments are taken 
2fcf0 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32  from register P2
2fd00 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75 63 63   and its.** succ
2fd10 65 73 73 6f 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  essors..**.** Th
2fd20 69 73 20 6f 70 63 6f 64 65 20 69 73 20 69 6e 69  is opcode is ini
2fd30 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61 73 20  tially coded as 
2fd40 4f 50 5f 41 67 67 53 74 65 70 30 2e 20 20 4f 6e  OP_AggStep0.  On
2fd50 20 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f   first evaluatio
2fd60 6e 2c 0a 2a 2a 20 74 68 65 20 46 75 6e 63 44 65  n,.** the FuncDe
2fd70 66 20 73 74 6f 72 65 64 20 69 6e 20 50 34 20 69  f stored in P4 i
2fd80 73 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f  s converted into
2fd90 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74   an sqlite3_cont
2fda0 65 78 74 20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f  ext and.** the o
2fdb0 70 63 6f 64 65 20 69 73 20 63 68 61 6e 67 65 64  pcode is changed
2fdc0 2e 20 20 49 6e 20 74 68 69 73 20 77 61 79 2c 20  .  In this way, 
2fdd0 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
2fde0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 71 6c  on of the.** sql
2fdf0 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c  ite3_context onl
2fe00 79 20 68 61 70 70 65 6e 73 20 6f 6e 63 65 2c 20  y happens once, 
2fe10 69 6e 73 74 65 61 64 20 6f 66 20 6f 6e 20 65 61  instead of on ea
2fe20 63 68 20 63 61 6c 6c 20 74 6f 20 74 68 65 0a 2a  ch call to the.*
2fe30 2a 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 2e  * step function.
2fe40 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 53  .*/.case OP_AggS
2fe50 74 65 70 30 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  tep0: {.  int n;
2fe60 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
2fe70 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73 73  xt *pCtx;..  ass
2fe80 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2fe90 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a  ==P4_FUNCDEF );.
2fea0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
2feb0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
2fec0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
2fed0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
2fee0 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
2fef0 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
2ff00 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
2ff10 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
2ff20 75 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61  ursor)+1) );.  a
2ff30 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70  ssert( pOp->p3<p
2ff40 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70  Op->p2 || pOp->p
2ff50 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a  3>=pOp->p2+n );.
2ff60 20 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33    pCtx = sqlite3
2ff70 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20  DbMallocRaw(db, 
2ff80 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20  sizeof(*pCtx) + 
2ff90 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c  (n-1)*sizeof(sql
2ffa0 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20  ite3_value*));. 
2ffb0 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
2ffc0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
2ffd0 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20 20  tx->pMem = 0;.  
2ffe0 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
2fff0 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
30000 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
30010 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
30020 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
30030 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
30040 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
30050 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
30060 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
30070 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
30080 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70 3b  de = OP_AggStep;
30090 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
300a0 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53 74  gh into OP_AggSt
300b0 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f  ep */.}.case OP_
300c0 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74  AggStep: {.  int
300d0 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f   i;.  sqlite3_co
300e0 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20 4d  ntext *pCtx;.  M
300f0 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20  em *pMem;.  Mem 
30100 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t;..  assert( pO
30110 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55  p->p4type==P4_FU
30120 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78 20  NCCTX );.  pCtx 
30130 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a  = pOp->p4.pCtx;.
30140 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70    pMem = &aMem[p
30150 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20 49  Op->p3];..  /* I
30160 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20  f this function 
30170 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74  is inside of a t
30180 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69  rigger, the regi
30190 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d  ster array in aM
301a0 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20  em[].  ** might 
301b0 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20  change from one 
301c0 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68  evaluation to th
301d0 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78  e next.  The nex
301e0 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a  t block of code.
301f0 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73    ** checks to s
30200 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74  ee if the regist
30210 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61  er array has cha
30220 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20  nged, and if so 
30230 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61  it.  ** reinitia
30240 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61  lizes the relava
30250 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20  nt parts of the 
30260 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
30270 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28 20  object */.  if( 
30280 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70 4d  pCtx->pMem != pM
30290 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e  em ){.    pCtx->
302a0 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20 20  pMem = pMem;.   
302b0 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72 67   for(i=pCtx->arg
302c0 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20  c-1; i>=0; i--) 
302d0 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20  pCtx->argv[i] = 
302e0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d  &aMem[pOp->p2+i]
302f0 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  ;.  }..#ifdef SQ
30300 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
30310 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61 72  (i=0; i<pCtx->ar
30320 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73  gc; i++){.    as
30330 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
30340 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 20  (pCtx->argv[i]) 
30350 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
30360 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69 2c  TRACE(pOp->p2+i,
30370 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29 3b   pCtx->argv[i]);
30380 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 70  .  }.#endif..  p
30390 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c 69  Mem->n++;.  sqli
303a0 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28 26  te3VdbeMemInit(&
303b0 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  t, db, MEM_Null)
303c0 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d  ;.  pCtx->pOut =
303d0 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45 72   &t;.  pCtx->fEr
303e0 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
303f0 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 3d  pCtx->skipFlag =
30400 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46 75   0;.  (pCtx->pFu
30410 6e 63 2d 3e 78 53 74 65 70 29 28 70 43 74 78 2c  nc->xStep)(pCtx,
30420 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74 78 2d  pCtx->argc,pCtx-
30430 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50 3a 20  >argv); /* IMP: 
30440 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
30450 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72  .  if( pCtx->fEr
30460 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
30470 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f  if( pCtx->isErro
30480 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  r ){.      sqlit
30490 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
304a0 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c  %s", sqlite3_val
304b0 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a 20 20  ue_text(&t));.  
304c0 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e 69      rc = pCtx->i
304d0 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
304e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
304f0 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20 20 7d  Release(&t);.  }
30500 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
30510 28 20 74 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ( t.flags==MEM_N
30520 75 6c 6c 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28  ull );.  }.  if(
30530 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
30540 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
30550 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
30560 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20  P_CollSeq );.   
30570 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b   i = pOp[-1].p1;
30580 0a 20 20 20 20 69 66 28 20 69 20 29 20 73 71 6c  .    if( i ) sql
30590 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
305a0 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29  t64(&aMem[i], 1)
305b0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
305c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  ../* Opcode: Agg
305d0 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20 50 34  Final P1 P2 * P4
305e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
305f0 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32  accum=r[P1] N=P2
30600 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74  .**.** Execute t
30610 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e  he finalizer fun
30620 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
30630 72 65 67 61 74 65 2e 20 20 50 31 20 69 73 0a 2a  regate.  P1 is.*
30640 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63  * the memory loc
30650 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20 74 68  ation that is th
30660 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f  e accumulator fo
30670 72 20 74 68 65 20 61 67 67 72 65 67 61 74 65 2e  r the aggregate.
30680 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65  .**.** P2 is the
30690 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d   number of argum
306a0 65 6e 74 73 20 74 68 61 74 20 74 68 65 20 73 74  ents that the st
306b0 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65  ep function take
306c0 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61  s and.** P4 is a
306d0 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
306e0 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68 69 73  FuncDef for this
306f0 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20   function.  The 
30700 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69  P2.** argument i
30710 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20 74 68  s not used by th
30720 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74 20 69  is opcode.  It i
30730 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74 6f 20  s only there to 
30740 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20  disambiguate.** 
30750 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74 20 63  functions that c
30760 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e 67 20  an take varying 
30770 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67 75 6d  numbers of argum
30780 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34  ents.  The.** P4
30790 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c   argument is onl
307a0 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74 68 65  y needed for the
307b0 20 64 65 67 65 6e 65 72 61 74 65 20 63 61 73 65   degenerate case
307c0 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20 73 74   where.** the st
307d0 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20  ep function was 
307e0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 63  not previously c
307f0 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  alled..*/.case O
30800 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20  P_AggFinal: {.  
30810 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73  Mem *pMem;.  ass
30820 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
30830 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e  & pOp->p1<=(p->n
30840 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20  Mem-p->nCursor) 
30850 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65  );.  pMem = &aMe
30860 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
30870 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61  sert( (pMem->fla
30880 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c  gs & ~(MEM_Null|
30890 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b 0a  MEM_Agg))==0 );.
308a0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
308b0 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70 4d  beMemFinalize(pM
308c0 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  em, pOp->p4.pFun
308d0 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  c);.  if( rc ){.
308e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45      sqlite3VdbeE
308f0 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71  rror(p, "%s", sq
30900 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
30910 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
30920 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
30930 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
30940 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
30950 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
30960 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
30970 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
30980 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
30990 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
309a0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
309b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
309c0 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
309d0 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
309e0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
309f0 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
30a00 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
30a10 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
30a20 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
30a30 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
30a40 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
30a50 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
30a60 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
30a70 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
30a80 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
30a90 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
30aa0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
30ab0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
30ac0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
30ad0 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
30ae0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
30af0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
30b00 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
30b10 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
30b20 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
30b30 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
30b40 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
30b50 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
30b60 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
30b70 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
30b80 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
30b90 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
30ba0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
30bb0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
30bc0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
30bd0 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
30be0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
30bf0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
30c00 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
30c10 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
30c20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
30c30 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
30c40 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
30c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c60 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
30c70 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
30c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30c90 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
30ca0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
30cb0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
30cc0 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
30cd0 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
30ce0 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
30cf0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
30d00 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
30d10 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
30d20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
30d30 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
30d40 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
30d50 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
30d60 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
30d70 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
30d80 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
30d90 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
30da0 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
30db0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
30dc0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
30dd0 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
30de0 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
30df0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
30e00 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
30e10 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
30e20 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
30e30 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
30e40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
30e50 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
30e60 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
30e70 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
30e80 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
30e90 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
30ea0 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
30eb0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
30ec0 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
30ed0 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
30ee0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
30ef0 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
30f00 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
30f10 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
30f20 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
30f30 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
30f40 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
30f50 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
30f60 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
30f70 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
30f80 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
30f90 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
30fa0 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
30fb0 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
30fc0 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
30fd0 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
30fe0 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
30ff0 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
31000 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
31010 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
31020 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
31030 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
31040 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
31050 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
31060 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
31070 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
31080 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
31090 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
310a0 75 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a  ut2 */.  Btree *
310b0 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  pBt;            
310c0 20 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65           /* Btre
310d0 65 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72  e to change jour
310e0 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20  nal mode of */. 
310f0 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20   Pager *pPager; 
31100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31110 20 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69   /* Pager associ
31120 61 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f  ated with pBt */
31130 0a 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20  .  int eNew;    
31140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
31150 20 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61     /* New journa
31160 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20  l mode */.  int 
31170 65 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  eOld;           
31180 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
31190 68 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d  he old journal m
311a0 6f 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ode */.#ifndef S
311b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20  QLITE_OMIT_WAL. 
311c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69   const char *zFi
311d0 6c 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  lename;         
311e0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61   /* Name of data
311f0 62 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50  base file for pP
31200 61 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a  ager */.#endif..
31210 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
31220 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
31230 0a 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70  .  eNew = pOp->p
31240 33 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65  3;.  assert( eNe
31250 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
31260 4d 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20  MODE_DELETE .   
31270 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
31280 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
31290 52 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20  RUNCATE .       
312a0 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
312b0 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49  OURNALMODE_PERSI
312c0 53 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  ST .       || eN
312d0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
312e0 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20  LMODE_OFF.      
312f0 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
31300 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f  JOURNALMODE_MEMO
31310 52 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  RY.       || eNe
31320 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
31330 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20  MODE_WAL.       
31340 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
31350 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
31360 0a 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  .  );.  assert( 
31370 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
31380 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
31390 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
313a0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20  adOnly==0 );..  
313b0 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  pBt = db->aDb[pO
313c0 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50  p->p1].pBt;.  pP
313d0 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
313e0 72 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20  reePager(pBt);. 
313f0 20 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50   eOld = sqlite3P
31400 61 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerGetJournalMo
31410 64 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66  de(pPager);.  if
31420 28 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  ( eNew==PAGER_JO
31430 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20  URNALMODE_QUERY 
31440 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20  ) eNew = eOld;. 
31450 20 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67   if( !sqlite3Pag
31460 65 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72  erOkToChangeJour
31470 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20  nalMode(pPager) 
31480 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a  ) eNew = eOld;..
31490 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
314a0 4d 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e  MIT_WAL.  zFilen
314b0 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ame = sqlite3Pag
314c0 65 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65  erFilename(pPage
314d0 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20  r, 1);..  /* Do 
314e0 6e 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e  not allow a tran
314f0 73 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61  sition to journa
31500 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61  l_mode=WAL for a
31510 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69   database.  ** i
31520 6e 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72  n temporary stor
31530 61 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46  age or if the VF
31540 53 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f  S does not suppo
31550 72 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79  rt shared memory
31560 20 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65   .  */.  if( eNe
31570 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
31580 4d 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28  MODE_WAL.   && (
31590 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
315a0 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20  zFilename)==0   
315b0 20 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20          /* Temp 
315c0 66 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c  file */.       |
315d0 7c 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57  | !sqlite3PagerW
315e0 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67  alSupported(pPag
315f0 65 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61  er))   /* No sha
31600 72 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f  red-memory suppo
31610 72 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65  rt */.  ){.    e
31620 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a  New = eOld;.  }.
31630 0a 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f  .  if( (eNew!=eO
31640 6c 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d  ld).   && (eOld=
31650 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
31660 44 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d  DE_WAL || eNew==
31670 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
31680 45 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20  E_WAL).  ){.    
31690 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
316a0 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65  mit || db->nVdbe
316b0 52 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20  Read>1 ){.      
316c0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
316d0 52 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  R;.      sqlite3
316e0 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20  VdbeError(p,.   
316f0 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63         "cannot c
31700 68 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64  hange %s wal mod
31710 65 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20  e from within a 
31720 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20  transaction",.  
31730 20 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50          (eNew==P
31740 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
31750 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20  _WAL ? "into" : 
31760 22 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20  "out of").      
31770 29 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  );.      break;.
31780 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20 20      }else{. .   
31790 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47     if( eOld==PAG
317a0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
317b0 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  AL ){.        /*
317c0 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c 20   If leaving WAL 
317d0 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65 20  mode, close the 
317e0 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75 63  log file. If suc
317f0 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61 6c  cessful, the cal
31800 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f 20  l.        ** to 
31810 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29 20  PagerCloseWal() 
31820 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64 20  checkpoints and 
31830 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69 74  deletes the writ
31840 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20 20  e-ahead-log .   
31850 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41 6e       ** file. An
31860 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b 20   EXCLUSIVE lock 
31870 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65 6c  may still be hel
31880 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61 73  d on the databas
31890 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20 20  e file .        
318a0 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63 65  ** after a succe
318b0 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a 20  ssful return. . 
318c0 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
318d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50 61    rc = sqlite3Pa
318e0 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61 67  gerCloseWal(pPag
318f0 65 72 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  er);.        if(
31900 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
31910 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
31920 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
31930 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  alMode(pPager, e
31940 4e 65 77 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  New);.        }.
31950 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
31960 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
31970 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 20 29  NALMODE_MEMORY )
31980 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 43 61 6e  {.        /* Can
31990 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f 6e 20 64  not transition d
319a0 69 72 65 63 74 6c 79 20 66 72 6f 6d 20 4d 45 4d  irectly from MEM
319b0 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20 55 73 65  ORY to WAL.  Use
319c0 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20 20 20 20   mode OFF.      
319d0 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e 74 65 72    ** as an inter
319e0 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20 20 20 20  mediate */.     
319f0 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 53     sqlite3PagerS
31a00 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
31a10 61 67 65 72 2c 20 50 41 47 45 52 5f 4a 4f 55 52  ager, PAGER_JOUR
31a20 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b 0a 20 20  NALMODE_OFF);.  
31a30 20 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f      }.  .      /
31a40 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e 73 61 63  * Open a transac
31a50 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64 61 74 61  tion on the data
31a60 62 61 73 65 20 66 69 6c 65 2e 20 52 65 67 61 72  base file. Regar
31a70 64 6c 65 73 73 20 6f 66 20 74 68 65 20 6a 6f 75  dless of the jou
31a80 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 6d 6f  rnal.      ** mo
31a90 64 65 2c 20 74 68 69 73 20 74 72 61 6e 73 61 63  de, this transac
31aa0 74 69 6f 6e 20 61 6c 77 61 79 73 20 75 73 65 73  tion always uses
31ab0 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72   a rollback jour
31ac0 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20  nal..      */.  
31ad0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
31ae0 74 65 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e  te3BtreeIsInTran
31af0 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a 20 20 20  s(pBt)==0 );.   
31b00 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
31b10 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
31b20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
31b30 65 53 65 74 56 65 72 73 69 6f 6e 28 70 42 74 2c  eSetVersion(pBt,
31b40 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
31b50 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
31b60 32 20 3a 20 31 29 29 3b 0a 20 20 20 20 20 20 7d  2 : 1));.      }
31b70 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
31b80 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
31b90 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a 2f 0a 0a  TE_OMIT_WAL */..
31ba0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
31bb0 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d  eNew = eOld;.  }
31bc0 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  eNew = sqlite
31bd0 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c  3PagerSetJournal
31be0 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e 65  Mode(pPager, eNe
31bf0 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  w);..  pOut->fla
31c00 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
31c10 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
31c20 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28 63  ;.  pOut->z = (c
31c30 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f 75  har *)sqlite3Jou
31c40 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e 65  rnalModename(eNe
31c50 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20  w);.  pOut->n = 
31c60 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
31c70 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74  pOut->z);.  pOut
31c80 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f 55  ->enc = SQLITE_U
31c90 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  TF8;.  sqlite3Vd
31ca0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
31cb0 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29  (pOut, encoding)
31cc0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
31cd0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
31ce0 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
31cf0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
31d00 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
31d10 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
31d20 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
31d30 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
31d40 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  m * * * * *.**.*
31d50 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e 74  * Vacuum the ent
31d60 69 72 65 20 64 61 74 61 62 61 73 65 2e 20 20 54  ire database.  T
31d70 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20  his opcode will 
31d80 63 61 75 73 65 20 6f 74 68 65 72 20 76 69 72 74  cause other virt
31d90 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65 73 20  ual.** machines 
31da0 74 6f 20 62 65 20 63 72 65 61 74 65 64 20 61 6e  to be created an
31db0 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79 20 6e  d run.  It may n
31dc0 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66 72 6f  ot be called fro
31dd0 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20 74 72  m within.** a tr
31de0 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  ansaction..*/.ca
31df0 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b 0a  se OP_Vacuum: {.
31e00 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
31e10 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72 63  dOnly==0 );.  rc
31e20 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63   = sqlite3RunVac
31e30 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  uum(&p->zErrMsg,
31e40 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   db);.  break;.}
31e50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65  .#endif..#if !de
31e60 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
31e70 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a  T_AUTOVACUUM)./*
31e80 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63   Opcode: IncrVac
31e90 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  uum P1 P2 * * *.
31ea0 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20  **.** Perform a 
31eb0 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74  single step of t
31ec0 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  he incremental v
31ed0 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20  acuum procedure 
31ee0 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74  on.** the P1 dat
31ef0 61 62 61 73 65 2e 20 49 66 20 74 68 65 20 76 61  abase. If the va
31f00 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65  cuum has finishe
31f10 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  d, jump to instr
31f20 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74  uction.** P2. Ot
31f30 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68  herwise, fall th
31f40 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
31f50 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
31f60 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61  /.case OP_IncrVa
31f70 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  cuum: {        /
31f80 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65  * jump */.  Btre
31f90 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72  e *pBt;..  asser
31fa0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
31fb0 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
31fc0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62   );.  assert( Db
31fd0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
31fe0 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20  eMask, pOp->p1) 
31ff0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
32000 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
32010 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
32020 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72  Op->p1].pBt;.  r
32030 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
32040 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b  IncrVacuum(pBt);
32050 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
32060 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f  en(rc==SQLITE_DO
32070 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 3d  NE,2);.  if( rc=
32080 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 7b 0a  =SQLITE_DONE ){.
32090 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
320a0 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  OK;.    goto jum
320b0 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
320c0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
320d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78 70 69 72  /* Opcode: Expir
320e0 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  e P1 * * * *.**.
320f0 2a 2a 20 43 61 75 73 65 20 70 72 65 63 6f 6d 70  ** Cause precomp
32100 69 6c 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  iled statements 
32110 74 6f 20 65 78 70 69 72 65 2e 20 20 57 68 65 6e  to expire.  When
32120 20 61 6e 20 65 78 70 69 72 65 64 20 73 74 61 74   an expired stat
32130 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63  ement.** is exec
32140 75 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69 74  uted using sqlit
32150 65 33 5f 73 74 65 70 28 29 20 69 74 20 77 69 6c  e3_step() it wil
32160 6c 20 65 69 74 68 65 72 20 61 75 74 6f 6d 61 74  l either automat
32170 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70  ically.** reprep
32180 61 72 65 20 69 74 73 65 6c 66 20 28 69 66 20 69  are itself (if i
32190 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  t was originally
321a0 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 73   created using s
321b0 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 5f 76  qlite3_prepare_v
321c0 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69  2()).** or it wi
321d0 6c 6c 20 66 61 69 6c 20 77 69 74 68 20 53 51 4c  ll fail with SQL
321e0 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a  ITE_SCHEMA..** .
321f0 2a 2a 20 49 66 20 50 31 20 69 73 20 30 2c 20 74  ** If P1 is 0, t
32200 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73 74 61 74  hen all SQL stat
32210 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65 20 65 78  ements become ex
32220 70 69 72 65 64 2e 20 49 66 20 50 31 20 69 73 20  pired. If P1 is 
32230 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65  non-zero,.** the
32240 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75 72 72 65  n only the curre
32250 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67 20 73  ntly executing s
32260 74 61 74 65 6d 65 6e 74 20 69 73 20 65 78 70 69  tatement is expi
32270 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  red..*/.case OP_
32280 45 78 70 69 72 65 3a 20 7b 0a 20 20 69 66 28 20  Expire: {.  if( 
32290 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20  !pOp->p1 ){.    
322a0 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
322b0 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
322c0 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  db);.  }else{.  
322d0 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31    p->expired = 1
322e0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
322f0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
32300 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
32310 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61  HE./* Opcode: Ta
32320 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32 20 50 33  bleLock P1 P2 P3
32330 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
32340 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50  s: iDb=P1 root=P
32350 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a  2 write=P3.**.**
32360 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f   Obtain a lock o
32370 6e 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74  n a particular t
32380 61 62 6c 65 2e 20 54 68 69 73 20 69 6e 73 74 72  able. This instr
32390 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75  uction is only u
323a0 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  sed when.** the 
323b0 73 68 61 72 65 64 2d 63 61 63 68 65 20 66 65 61  shared-cache fea
323c0 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64 2e  ture is enabled.
323d0 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68   .**.** P1 is th
323e0 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
323f0 61 74 61 62 61 73 65 20 69 6e 20 73 71 6c 69 74  atabase in sqlit
32400 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74 68 65 20  e3.aDb[] of the 
32410 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77  database.** on w
32420 68 69 63 68 20 74 68 65 20 6c 6f 63 6b 20 69 73  hich the lock is
32430 20 61 63 71 75 69 72 65 64 2e 20 20 41 20 72 65   acquired.  A re
32440 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e  adlock is obtain
32450 65 64 20 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a  ed if P3==0 or.*
32460 2a 20 61 20 77 72 69 74 65 20 6c 6f 63 6b 20 69  * a write lock i
32470 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50  f P3==1..**.** P
32480 32 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 72  2 contains the r
32490 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74 68 65 20  oot-page of the 
324a0 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a  table to lock..*
324b0 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73  *.** P4 contains
324c0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
324d0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 61  e name of the ta
324e0 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64  ble being locked
324f0 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a  . This is only.*
32500 2a 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  * used to genera
32510 74 65 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73  te an error mess
32520 61 67 65 20 69 66 20 74 68 65 20 6c 6f 63 6b 20  age if the lock 
32530 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
32540 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54  ed..*/.case OP_T
32550 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38  ableLock: {.  u8
32560 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28   isWriteLock = (
32570 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66  u8)pOp->p3;.  if
32580 28 20 69 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c  ( isWriteLock ||
32590 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53   0==(db->flags&S
325a0 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d  QLITE_ReadUncomm
325b0 69 74 74 65 64 29 20 29 7b 0a 20 20 20 20 69 6e  itted) ){.    in
325c0 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20  t p1 = pOp->p1; 
325d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
325e0 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62  =0 && p1<db->nDb
325f0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
32600 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
32610 72 65 65 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a  reeMask, p1) );.
32620 20 20 20 20 61 73 73 65 72 74 28 20 69 73 57 72      assert( isWr
32630 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73  iteLock==0 || is
32640 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a  WriteLock==1 );.
32650 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
32660 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64  BtreeLockTable(d
32670 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20  b->aDb[p1].pBt, 
32680 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72 69 74 65  pOp->p2, isWrite
32690 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66 28 20 28  Lock);.    if( (
326a0 72 63 26 30 78 46 46 29 3d 3d 53 51 4c 49 54 45  rc&0xFF)==SQLITE
326b0 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20 20 20 20  _LOCKED ){.     
326c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d   const char *z =
326d0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20   pOp->p4.z;.    
326e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
326f0 6f 72 28 70 2c 20 22 64 61 74 61 62 61 73 65 20  or(p, "database 
32700 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a  table is locked:
32710 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d 0a   %s", z);.    }.
32720 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
32730 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32740 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48  OMIT_SHARED_CACH
32750 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
32760 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
32770 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
32780 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50  : VBegin * * * P
32790 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  4 *.**.** P4 may
327a0 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   be a pointer to
327b0 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
327c0 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73   structure. If s
327d0 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20  o, call the .** 
327e0 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f  xBegin method fo
327f0 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a  r that table..**
32800 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65  .** Also, whethe
32810 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73  r or not P4 is s
32820 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74  et, check that t
32830 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67  his is not being
32840 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20   called from.** 
32850 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63  within a callbac
32860 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  k to a virtual t
32870 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74  able xSync() met
32880 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74  hod. If it is, t
32890 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65  he error.** code
328a0 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20   will be set to 
328b0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a  SQLITE_LOCKED..*
328c0 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e  /.case OP_VBegin
328d0 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56  : {.  VTable *pV
328e0 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70  Tab;.  pVTab = p
328f0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20  Op->p4.pVtab;.  
32900 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
32910 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29  Begin(db, pVTab)
32920 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20  ;.  if( pVTab ) 
32930 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
32940 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62  tErrmsg(p, pVTab
32950 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65 61  ->pVtab);.  brea
32960 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
32970 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
32980 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e  ALTABLE */..#ifn
32990 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
329a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
329b0 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65 20  Opcode: VCreate 
329c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
329d0 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73 74  * P2 is a regist
329e0 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  er that holds th
329f0 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74  e name of a virt
32a00 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74  ual table in dat
32a10 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43 61  abase .** P1. Ca
32a20 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20 6d  ll the xCreate m
32a30 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20 74  ethod for that t
32a40 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  able..*/.case OP
32a50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d 65  _VCreate: {.  Me
32a60 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20 20  m sMem;         
32a70 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67 20   /* For storing 
32a80 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67  the record being
32a90 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f   decoded */.  co
32aa0 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b 20  nst char *zTab; 
32ab0 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
32ac0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f  virtual table */
32ad0 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d  ..  memset(&sMem
32ae0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d  , 0, sizeof(sMem
32af0 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d 20  ));.  sMem.db = 
32b00 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73 65  db;.  /* Because
32b10 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61 20   P2 is always a 
32b20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20 69  static string, i
32b30 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
32b40 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71 6c  for the.  ** sql
32b50 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79 28  ite3VdbeMemCopy(
32b60 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20 61  ) to fail */.  a
32b70 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
32b80 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
32b90 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20 61  M_Str)!=0 );.  a
32ba0 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f 70  ssert( (aMem[pOp
32bb0 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d 45  ->p2].flags & ME
32bc0 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b 0a  M_Static)!=0 );.
32bd0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
32be0 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d 2c  beMemCopy(&sMem,
32bf0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
32c00 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
32c10 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 7a  SQLITE_OK );.  z
32c20 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68 61  Tab = (const cha
32c30 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  r*)sqlite3_value
32c40 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20 20  _text(&sMem);.  
32c50 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c 20  assert( zTab || 
32c60 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
32c70 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20 29   );.  if( zTab )
32c80 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
32c90 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74 65  e3VtabCallCreate
32ca0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a 54  (db, pOp->p1, zT
32cb0 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67 29  ab, &p->zErrMsg)
32cc0 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
32cd0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
32ce0 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Mem);.  break;.}
32cf0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
32d00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
32d10 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
32d20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
32d30 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
32d40 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31 20  de: VDestroy P1 
32d50 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
32d60 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  4 is the name of
32d70 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
32d80 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
32d90 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73 74    Call the xDest
32da0 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66  roy method.** of
32db0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a   that table..*/.
32dc0 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  case OP_VDestroy
32dd0 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73 74  : {.  db->nVDest
32de0 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73 71  roy++;.  rc = sq
32df0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
32e00 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70 31  troy(db, pOp->p1
32e10 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
32e20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d 3b  db->nVDestroy--;
32e30 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
32e40 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
32e50 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
32e60 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
32e70 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
32e80 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
32e90 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
32ea0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
32eb0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
32ec0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
32ed0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
32ee0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
32ef0 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
32f00 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
32f10 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
32f20 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
32f30 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
32f40 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
32f50 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
32f60 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
32f70 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
32f80 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
32f90 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
32fa0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
32fb0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
32fc0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
32fd0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
32fe0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
32ff0 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
33000 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74  pVCur = 0;.  pVt
33010 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
33020 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
33030 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
33040 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
33050 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
33060 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
33070 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
33080 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
33090 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63  b->pModule;.  rc
330a0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65   = pModule->xOpe
330b0 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75 72 29  n(pVtab, &pVCur)
330c0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
330d0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
330e0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
330f0 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
33100 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
33110 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
33120 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
33130 2f 0a 20 20 20 20 70 56 43 75 72 2d 3e 70 56 74  /.    pVCur->pVt
33140 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
33150 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
33160 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
33170 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
33180 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
33190 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
331a0 2c 20 43 55 52 54 59 50 45 5f 56 54 41 42 29 3b  , CURTYPE_VTAB);
331b0 0a 20 20 20 20 69 66 28 20 70 43 75 72 20 29 7b  .    if( pCur ){
331c0 0a 20 20 20 20 20 20 70 43 75 72 2d 3e 75 63 2e  .      pCur->uc.
331d0 70 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20  pVCur = pVCur;. 
331e0 20 20 20 20 20 70 56 74 61 62 2d 3e 6e 52 65 66       pVtab->nRef
331f0 2b 2b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ++;.    }else{. 
33200 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d       assert( db-
33210 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
33220 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d 3e  .      pModule->
33230 78 43 6c 6f 73 65 28 70 56 43 75 72 29 3b 0a 20  xClose(pVCur);. 
33240 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d       goto no_mem
33250 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
33260 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
33270 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
33280 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
33290 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
332a0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
332b0 2a 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65  * Opcode: VFilte
332c0 72 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  r P1 P2 P3 P4 *.
332d0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c  ** Synopsis: ipl
332e0 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27  an=r[P3] zplan='
332f0 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P4'.**.** P1 is 
33300 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20  a cursor opened 
33310 75 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32  using VOpen.  P2
33320 20 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74   is an address t
33330 6f 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20  o jump to if.** 
33340 74 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73  the filtered res
33350 75 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79  ult set is empty
33360 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69  ..**.** P4 is ei
33370 74 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73  ther NULL or a s
33380 74 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67  tring that was g
33390 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20  enerated by the 
333a0 78 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65  xBestIndex.** me
333b0 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
333c0 6c 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72  le.  The interpr
333d0 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50  etation of the P
333e0 34 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74  4 string is left
333f0 0a 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c  .** to the modul
33400 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
33410 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
33420 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
33430 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f  xFilter method o
33440 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
33450 62 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a  ble specified.**
33460 20 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74   by P1.  The int
33470 65 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20  eger query plan 
33480 70 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69  parameter to xFi
33490 6c 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69  lter is stored i
334a0 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  n register.** P3
334b0 2e 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20  . Register P3+1 
334c0 73 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20  stores the argc 
334d0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20  parameter to be 
334e0 70 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a  passed to the.**
334f0 20 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e   xFilter method.
33500 20 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e   Registers P3+2.
33510 2e 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74  .P3+1+argc are t
33520 68 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74  he argc.** addit
33530 69 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73  ional parameters
33540 20 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65   which are passe
33550 64 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20  d to.** xFilter 
33560 61 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65  as argv. Registe
33570 72 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61  r P3+2 becomes a
33580 72 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73  rgv[0] when pass
33590 65 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a  ed to xFilter..*
335a0 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d  *.** A jump is m
335b0 61 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65  ade to P2 if the
335c0 20 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65   result set afte
335d0 72 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c  r filtering woul
335e0 64 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63  d be empty..*/.c
335f0 61 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20  ase OP_VFilter: 
33600 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
33610 20 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74   int nArg;.  int
33620 20 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74   iQuery;.  const
33630 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
33640 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20  *pModule;.  Mem 
33650 2a 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a  *pQuery;.  Mem *
33660 70 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33  pArgc;.  sqlite3
33670 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56  _vtab_cursor *pV
33680 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  Cur;.  sqlite3_v
33690 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64  tab *pVtab;.  Vd
336a0 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
336b0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74    int res;.  int
336c0 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72   i;.  Mem **apAr
336d0 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26  g;..  pQuery = &
336e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
336f0 20 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79   pArgc = &pQuery
33700 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d  [1];.  pCur = p-
33710 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
33720 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
33730 56 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b  Valid(pQuery) );
33740 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
33750 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72  E(pOp->p3, pQuer
33760 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  y);.  assert( pC
33770 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  ur->eCurType==CU
33780 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20  RTYPE_VTAB );.  
33790 70 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63  pVCur = pCur->uc
337a0 2e 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20  .pVCur;.  pVtab 
337b0 3d 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a  = pVCur->pVtab;.
337c0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
337d0 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
337e0 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
337f0 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
33800 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
33810 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
33820 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
33830 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
33840 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
33850 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
33860 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
33870 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
33880 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
33890 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
338a0 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20  method */.  res 
338b0 3d 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70  = 0;.  apArg = p
338c0 2d 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69  ->apArg;.  for(i
338d0 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
338e0 2b 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d  +){.    apArg[i]
338f0 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a   = &pArgc[i+1];.
33900 20 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75    }.  rc = pModu
33910 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75  le->xFilter(pVCu
33920 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
33930 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
33940 67 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  g);.  sqlite3Vta
33950 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
33960 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
33970 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
33980 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c      res = pModul
33990 65 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a  e->xEof(pVCur);.
339a0 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c    }.  pCur->null
339b0 52 6f 77 20 3d 20 30 3b 0a 20 20 56 64 62 65 42  Row = 0;.  VdbeB
339c0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
339d0 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20  0,2);.  if( res 
339e0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
339f0 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  2;.  break;.}.#e
33a00 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33a10 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33a20 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
33a30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33a40 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
33a50 20 56 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50   VColumn P1 P2 P
33a60 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
33a70 73 3a 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e  s: r[P3]=vcolumn
33a80 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  (P2).**.** Store
33a90 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
33aa0 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f  e P2-th column o
33ab0 66 0a 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20  f.** the row of 
33ac0 74 68 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c  the virtual-tabl
33ad0 65 20 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50  e that the .** P
33ae0 31 20 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e  1 cursor is poin
33af0 74 69 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67  ting to into reg
33b00 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73  ister P3..*/.cas
33b10 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a  e OP_VColumn: {.
33b20 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
33b30 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
33b40 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
33b50 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70  Module;.  Mem *p
33b60 44 65 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Dest;.  sqlite3_
33b70 63 6f 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74  context sContext
33b80 3b 0a 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  ;..  VdbeCursor 
33b90 2a 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72  *pCur = p->apCsr
33ba0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
33bb0 65 72 74 28 20 70 43 75 72 2d 3e 65 43 75 72 54  ert( pCur->eCurT
33bc0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41  ype==CURTYPE_VTA
33bd0 42 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  B );.  assert( p
33be0 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
33bf0 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
33c00 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
33c10 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
33c20 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
33c30 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
33c40 73 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d  st);.  if( pCur-
33c50 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
33c60 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
33c70 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
33c80 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
33c90 56 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e  Vtab = pCur->uc.
33ca0 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20  pVCur->pVtab;.  
33cb0 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
33cc0 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
33cd0 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  rt( pModule->xCo
33ce0 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74  lumn );.  memset
33cf0 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73  (&sContext, 0, s
33d00 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29  izeof(sContext))
33d10 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75  ;.  sContext.pOu
33d20 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d  t = pDest;.  Mem
33d30 53 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73  SetTypeFlag(pDes
33d40 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20  t, MEM_Null);.  
33d50 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
33d60 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70  olumn(pCur->uc.p
33d70 56 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c  VCur, &sContext,
33d80 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c   pOp->p2);.  sql
33d90 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
33da0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
33db0 20 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69    if( sContext.i
33dc0 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63  sError ){.    rc
33dd0 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72   = sContext.isEr
33de0 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  ror;.  }.  sqlit
33df0 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
33e00 64 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f  ding(pDest, enco
33e10 64 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45  ding);.  REGISTE
33e20 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
33e30 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54   pDest);.  UPDAT
33e40 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
33e50 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71  Dest);..  if( sq
33e60 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42  lite3VdbeMemTooB
33e70 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20  ig(pDest) ){.   
33e80 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
33e90 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
33ea0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
33eb0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
33ec0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
33ed0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
33ee0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
33ef0 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a   VNext P1 P2 * *
33f00 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65   *.**.** Advance
33f10 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50   virtual table P
33f20 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f  1 to the next ro
33f30 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20  w in its result 
33f40 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20  set and.** jump 
33f50 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
33f60 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76  2.  Or, if the v
33f70 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73  irtual table has
33f80 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20   reached.** the 
33f90 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c  end of its resul
33fa0 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c  t set, then fall
33fb0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
33fc0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
33fd0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65  ..*/.case OP_VNe
33fe0 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  xt: {   /* jump 
33ff0 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  */.  sqlite3_vta
34000 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
34010 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
34020 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
34030 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73   res;.  VdbeCurs
34040 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73  or *pCur;..  res
34050 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70   = 0;.  pCur = p
34060 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
34070 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72  ;.  assert( pCur
34080 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
34090 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66  YPE_VTAB );.  if
340a0 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20  ( pCur->nullRow 
340b0 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ){.    break;.  
340c0 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75 72  }.  pVtab = pCur
340d0 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61  ->uc.pVCur->pVta
340e0 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  b;.  pModule = p
340f0 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
34100 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65   assert( pModule
34110 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a  ->xNext );..  /*
34120 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78   Invoke the xNex
34130 74 28 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  t() method of th
34140 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20  e module. There 
34150 69 73 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68  is no way for th
34160 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e  e.  ** underlyin
34170 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  g implementation
34180 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72   to return an er
34190 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72  ror if one occur
341a0 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e  s during.  ** xN
341b0 65 78 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20  ext(). Instead, 
341c0 69 66 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  if an error occu
341d0 72 73 2c 20 74 72 75 65 20 69 73 20 72 65 74 75  rs, true is retu
341e0 72 6e 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67  rned (indicating
341f0 20 74 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61   that .  ** data
34200 20 69 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61   is available) a
34210 6e 64 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  nd the error cod
34220 65 20 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20  e returned when 
34230 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20  xColumn or.  ** 
34240 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f  some other metho
34250 64 20 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65  d is next invoke
34260 64 20 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69  d on the save vi
34270 72 74 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73  rtual table curs
34280 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20  or..  */.  rc = 
34290 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70  pModule->xNext(p
342a0 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a  Cur->uc.pVCur);.
342b0 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
342c0 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
342d0 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ab);.  if( rc==S
342e0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
342f0 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
34300 45 6f 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43  Eof(pCur->uc.pVC
34310 75 72 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42  ur);.  }.  VdbeB
34320 72 61 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c  ranchTaken(!res,
34330 32 29 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29  2);.  if( !res )
34340 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72  {.    /* If ther
34350 65 20 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20  e is data, jump 
34360 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 67 6f 74  to P2 */.    got
34370 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64  o jump_to_p2_and
34380 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72  _check_for_inter
34390 72 75 70 74 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  rupt;.  }.  goto
343a0 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72   check_for_inter
343b0 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  rupt;.}.#endif /
343c0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
343d0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
343e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
343f0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
34400 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e 61  /* Opcode: VRena
34410 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  me P1 * * P4 *.*
34420 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
34430 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
34440 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
34450 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
34460 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
34470 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
34480 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
34490 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74 68  ing xRename meth
344a0 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  od. The value.**
344b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
344c0 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65  is passed as the
344d0 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74 20   zName argument 
344e0 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20 6d  to the xRename m
344f0 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ethod..*/.case O
34500 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20 73  P_VRename: {.  s
34510 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74  qlite3_vtab *pVt
34520 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d 65  ab;.  Mem *pName
34530 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70  ;..  pVtab = pOp
34540 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61  ->p4.pVtab->pVta
34550 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61 4d  b;.  pName = &aM
34560 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
34570 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70 4d  ssert( pVtab->pM
34580 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20 29  odule->xRename )
34590 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49  ;.  assert( memI
345a0 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29 3b  sValid(pName) );
345b0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
345c0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 52  adOnly==0 );.  R
345d0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
345e0 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a 20  p->p1, pName);. 
345f0 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d 3e   assert( pName->
34600 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20  flags & MEM_Str 
34610 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
34620 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54  Name->enc==SQLIT
34630 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73 74  E_UTF8 );.  test
34640 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
34650 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  ==SQLITE_UTF16BE
34660 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
34670 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
34680 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20  TE_UTF16LE );.  
34690 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
346a0 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
346b0 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54 46  Name, SQLITE_UTF
346c0 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  8);.  if( rc==SQ
346d0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
346e0 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
346f0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
34700 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
34710 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
34720 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
34730 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69  ab);.    p->expi
34740 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 62  red = 0;.  }.  b
34750 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
34760 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
34770 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
34780 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70 64  ./* Opcode: VUpd
34790 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20  ate P1 P2 P3 P4 
347a0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
347b0 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a  data=r[P3@P2].**
347c0 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
347d0 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c  ter to a virtual
347e0 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61   table object, a
347f0 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  n sqlite3_vtab s
34800 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69  tructure..** Thi
34810 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
34820 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
34830 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f  ng xUpdate metho
34840 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a 20  d. P2 values.** 
34850 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 6d  are contiguous m
34860 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61 72  emory cells star
34870 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70 61  ting at P3 to pa
34880 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61 74  ss to the xUpdat
34890 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  e .** invocation
348a0 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20 72  . The value in r
348b0 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d 31  egister (P3+P2-1
348c0 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
348d0 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65 6c   the .** p2th el
348e0 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72 67  ement of the arg
348f0 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20 74  v array passed t
34900 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a  o xUpdate..**.**
34910 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65 74   The xUpdate met
34920 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44 45  hod will do a DE
34930 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45 52  LETE or an INSER
34940 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54 68  T or both..** Th
34950 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65 6e  e argv[0] elemen
34960 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73 70  t (which corresp
34970 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20 63  onds to memory c
34980 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74 68  ell P3).** is th
34990 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f 77  e rowid of a row
349a0 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66 20   to delete.  If 
349b0 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c 20  argv[0] is NULL 
349c0 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65  then no .** dele
349d0 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54 68  tion occurs.  Th
349e0 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65 6e  e argv[1] elemen
349f0 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  t is the rowid o
34a00 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  f the new .** ro
34a10 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 20  w.  This can be 
34a20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68 65  NULL to have the
34a30 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73   virtual table s
34a40 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a 2a  elect the new .*
34a50 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73 65  * rowid for itse
34a60 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71 75  lf.  The subsequ
34a70 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20  ent elements in 
34a80 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a 2a  the array are .*
34a90 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  * the values of 
34aa0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 6e  columns in the n
34ab0 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66  ew row..**.** If
34ac0 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20 69   P2==1 then no i
34ad0 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72 6d  nsert is perform
34ae0 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73 20  ed.  argv[0] is 
34af0 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a 20  the rowid of.** 
34b00 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65 2e  a row to delete.
34b10 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 62  .**.** P1 is a b
34b20 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66 20  oolean flag. If 
34b30 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72 75  it is set to tru
34b40 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61 74  e and the xUpdat
34b50 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75 63  e call.** is suc
34b60 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74 68  cessful, then th
34b70 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64  e value returned
34b80 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73 74   by sqlite3_last
34b90 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
34ba0 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74 68  .** is set to th
34bb0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  e value of the r
34bc0 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f 77  owid for the row
34bd0 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e 0a   just inserted..
34be0 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65 20  **.** P5 is the 
34bf0 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28 4f  error actions (O
34c00 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46 61  E_Replace, OE_Fa
34c10 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 65  il, OE_Ignore, e
34c20 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79 20  tc) to.** apply 
34c30 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20 61  in the case of a
34c40 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c   constraint fail
34c50 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72 74  ure on an insert
34c60 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63   or update..*/.c
34c70 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a 20  ase OP_VUpdate: 
34c80 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
34c90 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74   *pVtab;.  const
34ca0 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
34cb0 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20  *pModule;.  int 
34cc0 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a 20  nArg;.  int i;. 
34cd0 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72 6f   sqlite_int64 ro
34ce0 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41  wid;.  Mem **apA
34cf0 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a  rg;.  Mem *pX;..
34d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
34d10 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20 70  2==1        || p
34d20 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c 20  Op->p5==OE_Fail 
34d30 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
34d40 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20 20  _Rollback .     
34d50 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45    || pOp->p5==OE
34d60 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e 70  _Abort || pOp->p
34d70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c 20  5==OE_Ignore || 
34d80 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c  pOp->p5==OE_Repl
34d90 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65 72  ace.  );.  asser
34da0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
34db0 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20 70  0 );.  pVtab = p
34dc0 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56  Op->p4.pVtab->pV
34dd0 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61 62  tab;.  if( pVtab
34de0 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56 74  ==0 || NEVER(pVt
34df0 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29 20  ab->pModule==0) 
34e00 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
34e10 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 62  TE_LOCKED;.    b
34e20 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64  reak;.  }.  pMod
34e30 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
34e40 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70  dule;.  nArg = p
34e50 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74  Op->p2;.  assert
34e60 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
34e70 34 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  4_VTAB );.  if( 
34e80 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e  ALWAYS(pModule->
34e90 78 55 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20  xUpdate) ){.    
34ea0 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  u8 vtabOnConflic
34eb0 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f  t = db->vtabOnCo
34ec0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72  nflict;.    apAr
34ed0 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20  g = p->apArg;.  
34ee0 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70    pX = &aMem[pOp
34ef0 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69  ->p3];.    for(i
34f00 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29  =0; i<nArg; i++)
34f10 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
34f20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29  memIsValid(pX) )
34f30 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
34f40 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b  ToChange(p, pX);
34f50 0a 20 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20  .      apArg[i] 
34f60 3d 20 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b  = pX;.      pX++
34f70 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e  ;.    }.    db->
34f80 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d  vtabOnConflict =
34f90 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63   pOp->p5;.    rc
34fa0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64   = pModule->xUpd
34fb0 61 74 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c  ate(pVtab, nArg,
34fc0 20 61 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b   apArg, &rowid);
34fd0 0a 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43  .    db->vtabOnC
34fe0 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e  onflict = vtabOn
34ff0 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71  Conflict;.    sq
35000 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
35010 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
35020 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
35030 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70  ITE_OK && pOp->p
35040 31 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  1 ){.      asser
35050 74 28 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41  t( nArg>1 && apA
35060 72 67 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b  rg[0] && (apArg[
35070 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75  0]->flags&MEM_Nu
35080 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d  ll) );.      db-
35090 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
350a0 74 52 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a  tRowid = rowid;.
350b0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72      }.    if( (r
350c0 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
350d0 43 4f 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f  CONSTRAINT && pO
350e0 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f  p->p4.pVtab->bCo
350f0 6e 73 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20  nstraint ){.    
35100 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f    if( pOp->p5==O
35110 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20  E_Ignore ){.    
35120 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
35130 4f 4b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  OK;.      }else{
35140 0a 20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f  .        p->erro
35150 72 41 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d  rAction = ((pOp-
35160 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29  >p5==OE_Replace)
35170 20 3f 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f   ? OE_Abort : pO
35180 70 2d 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a  p->p5);.      }.
35190 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
351a0 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
351b0 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
351c0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
351d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
351e0 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
351f0 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ef  SQLITE_OMIT_
35200 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
35210 20 4f 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75   Opcode: Pagecou
35220 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nt P1 P2 * * *.*
35230 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
35240 75 72 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  urrent number of
35250 20 70 61 67 65 73 20 69 6e 20 64 61 74 61 62 61   pages in databa
35260 73 65 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20  se P1 to memory 
35270 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  cell P2..*/.case
35280 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b   OP_Pagecount: {
35290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
352a0 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
352b0 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
352c0 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
352d0 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72  u.i = sqlite3Btr
352e0 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d 3e 61  eeLastPage(db->a
352f0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29  Db[pOp->p1].pBt)
35300 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35310 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53  dif...#ifndef  S
35320 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
35330 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f  _PRAGMAS./* Opco
35340 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50 31 20  de: MaxPgcnt P1 
35350 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
35360 54 72 79 20 74 6f 20 73 65 74 20 74 68 65 20 6d  Try to set the m
35370 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
35380 74 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50  t for database P
35390 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  1 to the value i
353a0 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f 74 20  n P3..** Do not 
353b0 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  let the maximum 
353c0 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c 6c 20  page count fall 
353d0 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72 65 6e  below the curren
353e0 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61 6e 64  t page count and
353f0 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61 6e 67  .** do not chang
35400 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61  e the maximum pa
35410 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65 20 69  ge count value i
35420 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20 53  f P3==0..**.** S
35430 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d  tore the maximum
35440 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66 74 65   page count afte
35450 72 20 74 68 65 20 63 68 61 6e 67 65 20 69 6e 20  r the change in 
35460 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
35470 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63 6e 74  case OP_MaxPgcnt
35480 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
35490 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 75 6e 73 69  * out2 */.  unsi
354a0 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b  gned int newMax;
354b0 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a  .  Btree *pBt;..
354c0 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
354d0 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
354e0 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
354f0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
35500 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
35510 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
35520 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
35530 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
35540 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
35550 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
35560 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
35570 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
35580 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
35590 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
355a0 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
355b0 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
355c0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
355d0 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
355e0 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
355f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
35600 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
35610 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
35620 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
35630 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
35640 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
35650 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
35660 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
35670 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
35680 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
35690 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
356a0 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
356b0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
356c0 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
356d0 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
356e0 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
356f0 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
35700 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
35710 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
35720 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
35730 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
35740 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
35750 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
35760 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
35770 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
35780 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
35790 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 23 69  ;.  char *z;..#i
357a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
357b0 54 5f 54 52 41 43 45 0a 20 20 69 66 28 20 64 62  T_TRACE.  if( db
357c0 2d 3e 78 54 72 61 63 65 0a 20 20 20 26 26 20 21  ->xTrace.   && !
357d0 70 2d 3e 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20  p->doingRerun.  
357e0 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
357f0 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
35800 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
35810 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d  !=0.  ){.    z =
35820 20 73 71 6c 69 74 65 33 56 64 62 65 45 78 70 61   sqlite3VdbeExpa
35830 6e 64 53 71 6c 28 70 2c 20 7a 54 72 61 63 65 29  ndSql(p, zTrace)
35840 3b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63 65  ;.    db->xTrace
35850 28 64 62 2d 3e 70 54 72 61 63 65 41 72 67 2c 20  (db->pTraceArg, 
35860 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 44  z);.    sqlite3D
35870 62 46 72 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20  bFree(db, z);.  
35880 7d 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  }.#ifdef SQLITE_
35890 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a  USE_FCNTL_TRACE.
358a0 20 20 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d    zTrace = (pOp-
358b0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
358c0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20  z : p->zSql);.  
358d0 69 66 28 20 7a 54 72 61 63 65 20 29 7b 0a 20 20  if( zTrace ){.  
358e0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72    int i;.    for
358f0 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b  (i=0; i<db->nDb;
35900 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28   i++){.      if(
35910 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
35920 74 72 65 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20  treeMask, i)==0 
35930 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
35940 20 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63    sqlite3_file_c
35950 6f 6e 74 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61  ontrol(db, db->a
35960 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c  Db[i].zName, SQL
35970 49 54 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c  ITE_FCNTL_TRACE,
35980 20 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a   zTrace);.    }.
35990 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
359a0 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54  LITE_USE_FCNTL_T
359b0 52 41 43 45 20 2a 2f 0a 23 69 66 64 65 66 20 53  RACE */.#ifdef S
359c0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66  QLITE_DEBUG.  if
359d0 28 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  ( (db->flags & S
359e0 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 29 21  QLITE_SqlTrace)!
359f0 3d 30 0a 20 20 20 26 26 20 28 7a 54 72 61 63 65  =0.   && (zTrace
35a00 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20   = (pOp->p4.z ? 
35a10 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a  pOp->p4.z : p->z
35a20 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  Sql))!=0.  ){.  
35a30 20 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72    sqlite3DebugPr
35a40 69 6e 74 66 28 22 53 51 4c 2d 74 72 61 63 65 3a  intf("SQL-trace:
35a50 20 25 73 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b   %s\n", zTrace);
35a60 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  .  }.#endif /* S
35a70 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23  QLITE_DEBUG */.#
35a80 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
35a90 4f 4d 49 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20  OMIT_TRACE */.  
35aa0 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f  if( pOp->p2 ) go
35ab0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
35ac0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65   break;.}..#ifde
35ad0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
35ae0 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 2f 2a 20  CURSOR_HINTS./* 
35af0 4f 70 63 6f 64 65 3a 20 43 75 72 73 6f 72 48 69  Opcode: CursorHi
35b00 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  nt P1 * * P4 *.*
35b10 2a 0a 2a 2a 20 50 72 6f 76 69 64 65 20 61 20 68  *.** Provide a h
35b20 69 6e 74 20 74 6f 20 63 75 72 73 6f 72 20 50 31  int to cursor P1
35b30 20 74 68 61 74 20 69 74 20 6f 6e 6c 79 20 6e 65   that it only ne
35b40 65 64 73 20 74 6f 20 72 65 74 75 72 6e 20 72 6f  eds to return ro
35b50 77 73 20 74 68 61 74 0a 2a 2a 20 73 61 74 69 73  ws that.** satis
35b60 66 79 20 74 68 65 20 45 78 70 72 20 69 6e 20 50  fy the Expr in P
35b70 34 2e 20 20 54 4b 5f 52 45 47 49 53 54 45 52 20  4.  TK_REGISTER 
35b80 74 65 72 6d 73 20 69 6e 20 74 68 65 20 50 34 20  terms in the P4 
35b90 65 78 70 72 65 73 73 69 6f 6e 20 72 65 66 65 72  expression refer
35ba0 0a 2a 2a 20 74 6f 20 76 61 6c 75 65 73 20 63 75  .** to values cu
35bb0 72 72 65 6e 74 6c 79 20 68 65 6c 64 20 69 6e 20  rrently held in 
35bc0 72 65 67 69 73 74 65 72 73 2e 20 20 54 4b 5f 43  registers.  TK_C
35bd0 4f 4c 55 4d 4e 20 74 65 72 6d 73 20 69 6e 20 74  OLUMN terms in t
35be0 68 65 20 50 34 0a 2a 2a 20 65 78 70 72 65 73 73  he P4.** express
35bf0 69 6f 6e 20 72 65 66 65 72 20 74 6f 20 63 6f 6c  ion refer to col
35c00 75 6d 6e 73 20 69 6e 20 74 68 65 20 62 2d 74 72  umns in the b-tr
35c10 65 65 20 74 6f 20 77 68 69 63 68 20 63 75 72 73  ee to which curs
35c20 6f 72 20 50 31 20 69 73 20 70 6f 69 6e 74 69 6e  or P1 is pointin
35c30 67 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 75  g..*/.case OP_Cu
35c40 72 73 6f 72 48 69 6e 74 3a 20 7b 0a 20 20 56 64  rsorHint: {.  Vd
35c50 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
35c60 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
35c70 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
35c80 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
35c90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
35ca0 70 65 3d 3d 50 34 5f 45 58 50 52 20 29 3b 0a 20  pe==P4_EXPR );. 
35cb0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
35cc0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
35cd0 43 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  C ){.    assert(
35ce0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
35cf0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
35d00 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
35d10 43 75 72 73 6f 72 48 69 6e 74 28 70 43 2d 3e 75  CursorHint(pC->u
35d20 63 2e 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45  c.pCursor, BTREE
35d30 5f 48 49 4e 54 5f 52 41 4e 47 45 2c 0a 20 20 20  _HINT_RANGE,.   
35d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35d50 20 20 20 20 20 20 20 20 70 4f 70 2d 3e 70 34 2e          pOp->p4.
35d60 70 45 78 70 72 2c 20 61 4d 65 6d 29 3b 0a 20 20  pExpr, aMem);.  
35d70 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
35d80 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
35d90 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54  ABLE_CURSOR_HINT
35da0 53 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  S */../* Opcode:
35db0 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
35dc0 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
35dd0 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
35de0 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
35df0 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
35e00 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
35e10 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
35e20 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
35e30 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
35e40 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
35e50 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
35e60 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
35e70 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
35e80 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
35e90 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
35ea0 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
35eb0 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
35ec0 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
35ed0 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
35ee0 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
35ef0 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
35f00 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
35f10 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
35f20 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
35f30 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
35f40 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
35f50 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
35f60 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
35f70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
35f80 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
35f90 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
35fa0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
35fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35fe0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
35ff0 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
36000 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
36010 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
36020 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
36030 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
36040 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
36050 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
36060 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
36070 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
36080 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
36090 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
360a0 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
360b0 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
360c0 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
360d0 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
360e0 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
360f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
36130 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
36140 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
36150 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
36160 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71  u64 endTime = sq
36170 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20  lite3Hwtime();. 
36180 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65       if( endTime
36190 3e 73 74 61 72 74 20 29 20 70 4f 72 69 67 4f 70  >start ) pOrigOp
361a0 2d 3e 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54  ->cycles += endT
361b0 69 6d 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20  ime - start;.   
361c0 20 20 20 70 4f 72 69 67 4f 70 2d 3e 63 6e 74 2b     pOrigOp->cnt+
361d0 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  +;.    }.#endif.
361e0 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  .    /* The foll
361f0 6f 77 69 6e 67 20 63 6f 64 65 20 61 64 64 73 20  owing code adds 
36200 6e 6f 74 68 69 6e 67 20 74 6f 20 74 68 65 20 61  nothing to the a
36210 63 74 75 61 6c 20 66 75 6e 63 74 69 6f 6e 61 6c  ctual functional
36220 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 74 68  ity.    ** of th
36230 65 20 70 72 6f 67 72 61 6d 2e 20 20 49 74 20 69  e program.  It i
36240 73 20 6f 6e 6c 79 20 68 65 72 65 20 66 6f 72 20  s only here for 
36250 74 65 73 74 69 6e 67 20 61 6e 64 20 64 65 62 75  testing and debu
36260 67 67 69 6e 67 2e 0a 20 20 20 20 2a 2a 20 4f 6e  gging..    ** On
36270 20 74 68 65 20 6f 74 68 65 72 20 68 61 6e 64 2c   the other hand,
36280 20 69 74 20 64 6f 65 73 20 62 75 72 6e 20 43 50   it does burn CP
36290 55 20 63 79 63 6c 65 73 20 65 76 65 72 79 20 74  U cycles every t
362a0 69 6d 65 20 74 68 72 6f 75 67 68 0a 20 20 20 20  ime through.    
362b0 2a 2a 20 74 68 65 20 65 76 61 6c 75 61 74 6f 72  ** the evaluator
362c0 20 6c 6f 6f 70 2e 20 20 53 6f 20 77 65 20 63 61   loop.  So we ca
362d0 6e 20 6c 65 61 76 65 20 69 74 20 6f 75 74 20 77  n leave it out w
362e0 68 65 6e 20 4e 44 45 42 55 47 20 69 73 20 64 65  hen NDEBUG is de
362f0 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69  fined..    */.#i
36300 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 20  fndef NDEBUG.   
36310 20 61 73 73 65 72 74 28 20 70 4f 70 3e 3d 26 61   assert( pOp>=&a
36320 4f 70 5b 2d 31 5d 20 26 26 20 70 4f 70 3c 26 61  Op[-1] && pOp<&a
36330 4f 70 5b 70 2d 3e 6e 4f 70 2d 31 5d 20 29 3b 0a  Op[p->nOp-1] );.
36340 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
36350 45 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d  EBUG.    if( db-
36360 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
36370 56 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20  VdbeTrace ){.   
36380 20 20 20 69 66 28 20 72 63 21 3d 30 20 29 20 70     if( rc!=0 ) p
36390 72 69 6e 74 66 28 22 72 63 3d 25 64 5c 6e 22 2c  rintf("rc=%d\n",
363a0 72 63 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  rc);.      if( p
363b0 4f 72 69 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  OrigOp->opflags 
363c0 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 29 20 29  & (OPFLG_OUT2) )
363d0 7b 0a 20 20 20 20 20 20 20 20 72 65 67 69 73 74  {.        regist
363e0 65 72 54 72 61 63 65 28 70 4f 72 69 67 4f 70 2d  erTrace(pOrigOp-
363f0 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 72 69 67  >p2, &aMem[pOrig
36400 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20  Op->p2]);.      
36410 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f 72 69  }.      if( pOri
36420 67 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  gOp->opflags & O
36430 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
36440 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
36450 63 65 28 70 4f 72 69 67 4f 70 2d 3e 70 33 2c 20  ce(pOrigOp->p3, 
36460 26 61 4d 65 6d 5b 70 4f 72 69 67 4f 70 2d 3e 70  &aMem[pOrigOp->p
36470 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  3]);.      }.   
36480 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20 53 51   }.#endif  /* SQ
36490 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65  LITE_DEBUG */.#e
364a0 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55 47 20  ndif  /* NDEBUG 
364b0 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65 20 65  */.  }  /* The e
364c0 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28 3b 3b  nd of the for(;;
364d0 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f 70 73  ) loop the loops
364e0 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64 65 73   through opcodes
364f0 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77 65 20   */..  /* If we 
36500 72 65 61 63 68 20 74 68 69 73 20 70 6f 69 6e 74  reach this point
36510 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20  , it means that 
36520 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66 69 6e  execution is fin
36530 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a 2a 20  ished with.  ** 
36540 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f 6d 65  an error of some
36550 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64 62 65   kind..  */.vdbe
36560 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20 20 61  _error_halt:.  a
36570 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20 20 70  ssert( rc );.  p
36580 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74 65 73  ->rc = rc;.  tes
36590 74 63 61 73 65 28 20 73 71 6c 69 74 65 33 47 6c  tcase( sqlite3Gl
365a0 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f 67 21  obalConfig.xLog!
365b0 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  =0 );.  sqlite3_
365c0 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65 6d 65  log(rc, "stateme
365d0 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25 64 3a  nt aborts at %d:
365e0 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20 20 20   [%s] %s", .    
365f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
36600 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c  int)(pOp - aOp),
36610 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72   p->zSql, p->zEr
36620 72 4d 73 67 29 3b 0a 20 20 73 71 6c 69 74 65 33  rMsg);.  sqlite3
36630 56 64 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 69  VdbeHalt(p);.  i
36640 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 49 4f  f( rc==SQLITE_IO
36650 45 52 52 5f 4e 4f 4d 45 4d 20 29 20 64 62 2d 3e  ERR_NOMEM ) db->
36660 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
36670 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
36680 45 52 52 4f 52 3b 0a 20 20 69 66 28 20 72 65 73  ERROR;.  if( res
36690 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3e  etSchemaOnFault>
366a0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
366b0 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64  ResetOneSchema(d
366c0 62 2c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  b, resetSchemaOn
366d0 46 61 75 6c 74 2d 31 29 3b 0a 20 20 7d 0a 0a 20  Fault-1);.  }.. 
366e0 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68 65 20   /* This is the 
366f0 6f 6e 6c 79 20 77 61 79 20 6f 75 74 20 6f 66 20  only way out of 
36700 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e 20  this procedure. 
36710 20 57 65 20 68 61 76 65 20 74 6f 0a 20 20 2a 2a   We have to.  **
36720 20 72 65 6c 65 61 73 65 20 74 68 65 20 6d 75 74   release the mut
36730 65 78 65 73 20 6f 6e 20 62 74 72 65 65 73 20 74  exes on btrees t
36740 68 61 74 20 77 65 72 65 20 61 63 71 75 69 72 65  hat were acquire
36750 64 20 61 74 20 74 68 65 0a 20 20 2a 2a 20 74 6f  d at the.  ** to
36760 70 2e 20 2a 2f 0a 76 64 62 65 5f 72 65 74 75 72  p. */.vdbe_retur
36770 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77  n:.  db->lastRow
36780 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a  id = lastRowid;.
36790 20 20 74 65 73 74 63 61 73 65 28 20 6e 56 6d 53    testcase( nVmS
367a0 74 65 70 3e 30 20 29 3b 0a 20 20 70 2d 3e 61 43  tep>0 );.  p->aC
367b0 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
367c0 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
367d0 5d 20 2b 3d 20 28 69 6e 74 29 6e 56 6d 53 74 65  ] += (int)nVmSte
367e0 70 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  p;.  sqlite3Vdbe
367f0 4c 65 61 76 65 28 70 29 3b 0a 20 20 72 65 74 75  Leave(p);.  retu
36800 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a 20 4a 75 6d  rn rc;..  /* Jum
36810 70 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 73  p to here if a s
36820 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6c 61  tring or blob la
36830 72 67 65 72 20 74 68 61 6e 20 53 51 4c 49 54 45  rger than SQLITE
36840 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a 20 20 2a 2a  _MAX_LENGTH.  **
36850 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2e   is encountered.
36860 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69 67 3a 0a 20  .  */.too_big:. 
36870 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
36880 72 28 70 2c 20 22 73 74 72 69 6e 67 20 6f 72 20  r(p, "string or 
36890 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29 3b 0a  blob too big");.
368a0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 54 4f    rc = SQLITE_TO
368b0 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76 64 62  OBIG;.  goto vdb
368c0 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
368d0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
368e0 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
368f0 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f 6d 65  ails..  */.no_me
36900 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46  m:.  db->mallocF
36910 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73 71 6c  ailed = 1;.  sql
36920 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
36930 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
36940 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
36950 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
36960 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
36970 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
36980 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
36990 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
369a0 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
369b0 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
369c0 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
369d0 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
369e0 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
369f0 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
36a00 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
36a10 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
36a20 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
36a30 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
36a40 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
36a50 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
36a60 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
36a70 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
36a80 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20  3ErrStr(rc));.  
36a90 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  }.  goto vdbe_er
36aa0 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20  ror_halt;..  /* 
36ab0 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20  Jump to here if 
36ac0 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65  the sqlite3_inte
36ad0 72 72 75 70 74 28 29 20 41 50 49 20 73 65 74 73  rrupt() API sets
36ae0 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20   the interrupt. 
36af0 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61   ** flag..  */.a
36b00 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
36b10 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28  rrupt:.  assert(
36b20 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72   db->u1.isInterr
36b30 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20  upted );.  rc = 
36b40 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54  SQLITE_INTERRUPT
36b50 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a  ;.  p->rc = rc;.
36b60 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
36b70 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
36b80 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
36b90 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
36ba0 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.