/ Hex Artifact Content
Login

Artifact aae4addde348f8a8d94a907f41c4524b7e2e0529:


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 29 29  tringify(P,enc))
1510: 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e   \.     { goto n
1520: 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20  o_mem; }../*.** 
1530: 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72  An ephemeral str
1540: 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69  ing value (signi
1550: 66 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f  fied by the MEM_
1560: 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74  Ephem flag) cont
1570: 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65  ains.** a pointe
1580: 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c  r to a dynamical
1590: 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72  ly allocated str
15a0: 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f  ing where some o
15b0: 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69  ther entity.** i
15c0: 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  s responsible fo
15d0: 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  r deallocating t
15e0: 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63  hat string.  Bec
15f0: 61 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65  ause the registe
1600: 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f  r.** does not co
1610: 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67  ntrol the string
1620: 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65  , it might be de
1630: 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68  leted without th
1640: 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e  e register.** kn
1650: 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20  owing it..**.** 
1660: 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e  This routine con
1670: 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72  verts an ephemer
1680: 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  al string into a
1690: 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c   dynamically all
16a0: 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67  ocated.** string
16b0: 20 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74   that the regist
16c0: 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f  er itself contro
16d0: 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  ls.  In other wo
16e0: 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65  rds, it.** conve
16f0: 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d  rts an MEM_Ephem
1700: 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73   string into a s
1710: 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d  tring with P.z==
1720: 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64  P.zMalloc..*/.#d
1730: 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61  efine Deephemera
1740: 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28  lize(P) \.   if(
1750: 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d   ((P)->flags&MEM
1760: 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20  _Ephem)!=0 \.   
1770: 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64      && sqlite3Vd
1780: 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62  beMemMakeWriteab
1790: 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f  le(P) ){ goto no
17a0: 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72  _mem;}../* Retur
17b0: 6e 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75  n true if the cu
17c0: 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20  rsor was opened 
17d0: 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65  using the OP_Ope
17e0: 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20  nSorter opcode. 
17f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72  */.#define isSor
1800: 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70 53 6f  ter(x) ((x)->pSo
1810: 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rter!=0)../*.** 
1820: 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43 75 72  Allocate VdbeCur
1830: 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75 72 2e  sor number iCur.
1840: 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69 6e 74    Return a point
1850: 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74 75 72  er to it.  Retur
1860: 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20  n NULL.** if we 
1870: 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  run out of memor
1880: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56 64 62  y..*/.static Vdb
1890: 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74  eCursor *allocat
18a0: 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62 65 20  eCursor(.  Vdbe 
18b0: 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  *p,             
18c0: 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61 6c 20   /* The virtual 
18d0: 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74  machine */.  int
18e0: 20 69 43 75 72 2c 20 20 20 20 20 20 20 20 20 20   iCur,          
18f0: 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74     /* Index of t
1900: 68 65 20 6e 65 77 20 56 64 62 65 43 75 72 73 6f  he new VdbeCurso
1910: 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c  r */.  int nFiel
1920: 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  d,           /* 
1930: 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73  Number of fields
1940: 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   in the table or
1950: 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20   index */.  int 
1960: 69 44 62 2c 20 20 20 20 20 20 20 20 20 20 20 20  iDb,            
1970: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 74 68    /* Database th
1980: 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73  e cursor belongs
1990: 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20   to, or -1 */.  
19a0: 69 6e 74 20 69 73 42 74 72 65 65 43 75 72 73 6f  int isBtreeCurso
19b0: 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  r     /* True fo
19c0: 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c 73 65  r B-Tree.  False
19d0: 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61 62 6c   for pseudo-tabl
19e0: 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29 7b 0a  e or vtab */.){.
19f0: 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6d 65    /* Find the me
1a00: 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 77  mory cell that w
1a10: 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 73  ill be used to s
1a20: 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20 6f 66  tore the blob of
1a30: 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72 65 71   memory.  ** req
1a40: 75 69 72 65 64 20 66 6f 72 20 74 68 69 73 20 56  uired for this V
1a50: 64 62 65 43 75 72 73 6f 72 20 73 74 72 75 63 74  dbeCursor struct
1a60: 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e 76 65  ure. It is conve
1a70: 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61 20 0a  nient to use a .
1a80: 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f 72 79    ** vdbe memory
1a90: 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67 65 20   cell to manage 
1aa0: 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  the memory alloc
1ab0: 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64 20 66  ation required f
1ac0: 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65 43 75  or a.  ** VdbeCu
1ad0: 72 73 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  rsor structure f
1ae0: 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  or the following
1af0: 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a 0a 20   reasons:.  **. 
1b00: 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69 6d 65   **   * Sometime
1b10: 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 73  s cursor numbers
1b20: 20 61 72 65 20 75 73 65 64 20 66 6f 72 20 61 20   are used for a 
1b30: 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66 65 72  couple of differ
1b40: 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70 75 72  ent.  **     pur
1b50: 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62 65 20  poses in a vdbe 
1b60: 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64 69 66  program. The dif
1b70: 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69 67 68  ferent uses migh
1b80: 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a 20 20  t require.  **  
1b90: 20 20 20 64 69 66 66 65 72 65 6e 74 20 73 69 7a     different siz
1ba0: 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 2e 20  ed allocations. 
1bb0: 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70 72 6f  Memory cells pro
1bc0: 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a 20 20  vide growable.  
1bd0: 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74 69 6f  **     allocatio
1be0: 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20  ns..  **.  **   
1bf0: 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45 4e 41  * When using ENA
1c00: 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47  BLE_MEMORY_MANAG
1c10: 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20 63 65  EMENT, memory ce
1c20: 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e 0a 20  ll buffers can. 
1c30: 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65 65 64   **     be freed
1c40: 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68 65 20   lazily via the 
1c50: 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65 5f  sqlite3_release_
1c60: 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20 54 68  memory() API. Th
1c70: 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69 6e 69  is.  **     mini
1c80: 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62 65 72  mizes the number
1c90: 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c 6c 73   of malloc calls
1ca0: 20 6d 61 64 65 20 62 79 20 74 68 65 20 73 79 73   made by the sys
1cb0: 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4d  tem..  **.  ** M
1cc0: 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f 72 20  emory cells for 
1cd0: 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c 6c 6f  cursors are allo
1ce0: 63 61 74 65 64 20 61 74 20 74 68 65 20 74 6f 70  cated at the top
1cf0: 20 6f 66 20 74 68 65 20 61 64 64 72 65 73 73 0a   of the address.
1d00: 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65 6d 6f    ** space. Memo
1d10: 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d  ry cell (p->nMem
1d20: 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  ) corresponds to
1d30: 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61 63 65   cursor 0. Space
1d40: 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73 6f 72   for.  ** cursor
1d50: 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20 62 79   1 is managed by
1d60: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d   memory cell (p-
1d70: 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e 0a 20  >nMem-1), etc.. 
1d80: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20   */.  Mem *pMem 
1d90: 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e 6e 4d  = &p->aMem[p->nM
1da0: 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69 6e 74  em-iCur];..  int
1db0: 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43 75   nByte;.  VdbeCu
1dc0: 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a 20  rsor *pCx = 0;. 
1dd0: 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20 20   nByte = .      
1de0: 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
1df0: 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a 73  beCursor)) + 2*s
1e00: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
1e10: 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73 42 74  d + .      (isBt
1e20: 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69 74 65  reeCursor?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 47 72 6f 77 28 70 4d 65 6d 2c  dbeMemGrow(pMem,
1ef0: 20 6e 42 79 74 65 2c 20 30 29 20 29 7b 0a 20 20   nByte, 0) ){.  
1f00: 20 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d    p->apCsr[iCur]
1f10: 20 3d 20 70 43 78 20 3d 20 28 56 64 62 65 43 75   = pCx = (VdbeCu
1f20: 72 73 6f 72 2a 29 70 4d 65 6d 2d 3e 7a 3b 0a 20  rsor*)pMem->z;. 
1f30: 20 20 20 6d 65 6d 73 65 74 28 70 43 78 2c 20 30     memset(pCx, 0
1f40: 2c 20 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72  , sizeof(VdbeCur
1f50: 73 6f 72 29 29 3b 0a 20 20 20 20 70 43 78 2d 3e  sor));.    pCx->
1f60: 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20 20 70  iDb = iDb;.    p
1f70: 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e 46 69  Cx->nField = nFi
1f80: 65 6c 64 3b 0a 20 20 20 20 69 66 28 20 69 73 42  eld;.    if( isB
1f90: 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20 20  treeCursor ){.  
1fa0: 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f 72      pCx->pCursor
1fb0: 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a 20   = (BtCursor*). 
1fc0: 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d 3e           &pMem->
1fd0: 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28  z[ROUND8(sizeof(
1fe0: 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a 73  VdbeCursor))+2*s
1ff0: 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65 6c  izeof(u32)*nFiel
2000: 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  d];.      sqlite
2010: 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72 6f  3BtreeCursorZero
2020: 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  (pCx->pCursor);.
2030: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
2040: 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  rn pCx;.}../*.**
2050: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2060: 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20 6e  a value into a n
2070: 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e 74  umeric represent
2080: 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e 0a  ation if we can.
2090: 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75 74  ** do so without
20a0: 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61   loss of informa
20b0: 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
20c0: 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73 74  words, if the st
20d0: 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c 69  ring.** looks li
20e0: 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f 6e  ke a number, con
20f0: 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20 6e  vert it into a n
2100: 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64 6f  umber.  If it do
2110: 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20 6c  es not.** look l
2120: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c 65  ike a number, le
2130: 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a 2f  ave it alone..*/
2140: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70  .static void app
2150: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
2160: 79 28 4d 65 6d 20 2a 70 52 65 63 29 7b 0a 20 20  y(Mem *pRec){.  
2170: 64 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20  double rValue;. 
2180: 20 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75   i64 iValue;.  u
2190: 38 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e  8 enc = pRec->en
21a0: 63 3b 0a 20 20 69 66 28 20 28 70 52 65 63 2d 3e  c;.  if( (pRec->
21b0: 66 6c 61 67 73 26 4d 45 4d 5f 53 74 72 29 3d 3d  flags&MEM_Str)==
21c0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66  0 ) return;.  if
21d0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
21e0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
21f0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
2200: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
2210: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
2220: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2230: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2240: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2250: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2260: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2270: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2280: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 72 20 3d 20  {.    pRec->r = 
2290: 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52 65 63  rValue;.    pRec
22a0: 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 52  ->flags |= MEM_R
22b0: 65 61 6c 3b 0a 20 20 7d 0a 7d 0a 23 64 65 66 69  eal;.  }.}.#defi
22c0: 6e 65 20 41 70 70 6c 79 4e 75 6d 65 72 69 63 41  ne ApplyNumericA
22d0: 66 66 69 6e 69 74 79 28 58 29 20 20 5c 0a 20 20  ffinity(X)  \.  
22e0: 20 69 66 28 28 28 58 29 2d 3e 66 6c 61 67 73 26   if(((X)->flags&
22f0: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2300: 74 29 29 3d 3d 30 29 7b 61 70 70 6c 79 4e 75 6d  t))==0){applyNum
2310: 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 3b  ericAffinity(X);
2320: 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73  }../*.** Process
2330: 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ing is determine
2340: 20 62 79 20 74 68 65 20 61 66 66 69 6e 69 74 79   by the affinity
2350: 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a 0a 2a   parameter:.**.*
2360: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54  * SQLITE_AFF_INT
2370: 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f  EGER:.** SQLITE_
2380: 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53 51 4c  AFF_REAL:.** SQL
2390: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 3a  ITE_AFF_NUMERIC:
23a0: 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20 63 6f  .**    Try to co
23b0: 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 6e  nvert pRec to an
23c0: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
23d0: 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a 2a 2a  ntation or a .**
23e0: 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69      floating-poi
23f0: 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f  nt representatio
2400: 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65 72 20  n if an integer 
2410: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 0a 2a  representation.*
2420: 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f 73 73  *    is not poss
2430: 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68 61 74  ible.  Note that
2440: 20 74 68 65 20 69 6e 74 65 67 65 72 20 72 65 70   the integer rep
2450: 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 0a 2a  resentation is.*
2460: 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72 65 66  *    always pref
2470: 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66 20 74  erred, even if t
2480: 68 65 20 61 66 66 69 6e 69 74 79 20 69 73 20 52  he affinity is R
2490: 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a 2a 20  EAL, because.** 
24a0: 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65     an integer re
24b0: 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73 20  presentation is 
24c0: 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66 69 63  more space effic
24d0: 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2a  ient on disk..**
24e0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
24f0: 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e 76 65  EXT:.**    Conve
2500: 72 74 20 70 52 65 63 20 74 6f 20 61 20 74 65 78  rt pRec to a tex
2510: 74 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  t representation
2520: 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  ..**.** SQLITE_A
2530: 46 46 5f 4e 4f 4e 45 3a 0a 2a 2a 20 20 20 20 4e  FF_NONE:.**    N
2540: 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73 20 75  o-op.  pRec is u
2550: 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73 74 61  nchanged..*/.sta
2560: 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79 41 66  tic void applyAf
2570: 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20 2a 70  finity(.  Mem *p
2580: 52 65 63 2c 20 20 20 20 20 20 20 20 20 20 2f 2a  Rec,          /*
2590: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 61 70   The value to ap
25a0: 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74 6f 20  ply affinity to 
25b0: 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
25c0: 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ty,      /* The 
25d0: 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
25e0: 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38 20 65  pplied */.  u8 e
25f0: 6e 63 20 20 20 20 20 20 20 20 20 20 20 20 20 20  nc              
2600: 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65 78 74  /* Use this text
2610: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29 7b 0a   encoding */.){.
2620: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d    if( affinity==
2630: 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20  SQLITE_AFF_TEXT 
2640: 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  ){.    /* Only a
2650: 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76 65  ttempt the conve
2660: 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69 66  rsion to TEXT if
2670: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
2680: 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20 20  eger or real.   
2690: 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74 69   ** representati
26a0: 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55 4c  on (blob and NUL
26b0: 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f 6e  L do not get con
26c0: 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20 73  verted) but no s
26d0: 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 70  tring.    ** rep
26e0: 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20 20  resentation..   
26f0: 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28   */.    if( 0==(
2700: 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pRec->flags&MEM_
2710: 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e 66  Str) && (pRec->f
2720: 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c 4d  lags&(MEM_Real|M
2730: 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20 20  EM_Int)) ){.    
2740: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2750: 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c 20  Stringify(pRec, 
2760: 65 6e 63 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  enc);.    }.    
2770: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2780: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2790: 74 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  t);.  }else if( 
27a0: 61 66 66 69 6e 69 74 79 21 3d 53 51 4c 49 54 45  affinity!=SQLITE
27b0: 5f 41 46 46 5f 4e 4f 4e 45 20 29 7b 0a 20 20 20  _AFF_NONE ){.   
27c0: 20 61 73 73 65 72 74 28 20 61 66 66 69 6e 69 74   assert( affinit
27d0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  y==SQLITE_AFF_IN
27e0: 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e 69 74  TEGER || affinit
27f0: 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  y==SQLITE_AFF_RE
2800: 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  AL.             
2810: 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c  || affinity==SQL
2820: 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20  ITE_AFF_NUMERIC 
2830: 29 3b 0a 20 20 20 20 41 70 70 6c 79 4e 75 6d 65  );.    ApplyNume
2840: 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65 63  ricAffinity(pRec
2850: 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d  );.    if( pRec-
2860: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61  >flags & MEM_Rea
2870: 6c 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  l ){.      sqlit
2880: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2890: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
28a0: 20 7d 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20   }.  }.}../*.** 
28b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 74  Try to convert t
28c0: 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75 6e  he type of a fun
28d0: 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f  ction argument o
28e0: 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d  r a result colum
28f0: 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65  n.** into a nume
2900: 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74 69  ric representati
2910: 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72 20  on.  Use either 
2920: 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c 20  INTEGER or REAL 
2930: 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73 20  whichever.** is 
2940: 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42 75  appropriate.  Bu
2950: 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f  t only do the co
2960: 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20 69  nversion if it i
2970: 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68 6f  s possible witho
2980: 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e  ut.** loss of in
2990: 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65  formation and re
29a0: 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65 64  turn the revised
29b0: 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72 67   type of the arg
29c0: 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  ument..*/.int sq
29d0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65  lite3_value_nume
29e0: 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65 33  ric_type(sqlite3
29f0: 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20  _value *pVal){. 
2a00: 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71 6c   int eType = sql
2a10: 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28  ite3_value_type(
2a20: 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54 79  pVal);.  if( eTy
2a30: 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54 20  pe==SQLITE_TEXT 
2a40: 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d  ){.    Mem *pMem
2a50: 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20   = (Mem*)pVal;. 
2a60: 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
2a70: 66 66 69 6e 69 74 79 28 70 4d 65 6d 29 3b 0a 20  ffinity(pMem);. 
2a80: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2a90: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2aa0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2ab0: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2ac0: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2ad0: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2ae0: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2af0: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2b00: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2b10: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2b20: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2b30: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2b40: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2b50: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2b60: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2b70: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2b80: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2b90: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2ba0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2bb0: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65  /*.** Return the
2bc0: 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20 66 6f   numeric type fo
2bd0: 72 20 70 4d 65 6d 2c 20 65 69 74 68 65 72 20 4d  r pMem, either M
2be0: 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d 5f 52 65  EM_Int or MEM_Re
2bf0: 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72 0a 2a 2a  al or both or.**
2c00: 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a 2a 20 55   none.  .**.** U
2c10: 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75 6d 65 72  nlike applyNumer
2c20: 69 63 41 66 66 69 6e 69 74 79 28 29 2c 20 74 68  icAffinity(), th
2c30: 69 73 20 72 6f 75 74 69 6e 65 20 64 6f 65 73 20  is routine does 
2c40: 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d 65 6d 2d  not modify pMem-
2c50: 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75 74 20 69  >flags..** But i
2c60: 74 20 64 6f 65 73 20 73 65 74 20 70 4d 65 6d 2d  t does set pMem-
2c70: 3e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  >r and pMem->u.i
2c80: 20 61 70 70 72 6f 70 72 69 61 74 65 6c 79 2e 0a   appropriately..
2c90: 2a 2f 0a 73 74 61 74 69 63 20 75 31 36 20 6e 75  */.static u16 nu
2ca0: 6d 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70  mericType(Mem *p
2cb0: 4d 65 6d 29 7b 0a 20 20 69 66 28 20 70 4d 65 6d  Mem){.  if( pMem
2cc0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2cd0: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 20 29 7b 0a  nt|MEM_Real) ){.
2ce0: 20 20 20 20 72 65 74 75 72 6e 20 70 4d 65 6d 2d      return pMem-
2cf0: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
2d00: 74 7c 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 7d  t|MEM_Real);.  }
2d10: 0a 20 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61  .  if( pMem->fla
2d20: 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2d30: 4d 5f 42 6c 6f 62 29 20 29 7b 0a 20 20 20 20 69  M_Blob) ){.    i
2d40: 66 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70  f( sqlite3AtoF(p
2d50: 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 72  Mem->z, &pMem->r
2d60: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
2d70: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
2d80: 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 20 20    return 0;.    
2d90: 7d 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  }.    if( sqlite
2da0: 33 41 74 6f 69 36 34 28 70 4d 65 6d 2d 3e 7a 2c  3Atoi64(pMem->z,
2db0: 20 26 70 4d 65 6d 2d 3e 75 2e 69 2c 20 70 4d 65   &pMem->u.i, pMe
2dc0: 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29  m->n, pMem->enc)
2dd0: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
2de0: 20 20 20 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f       return MEM_
2df0: 49 6e 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  Int;.    }.    r
2e00: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
2e10: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 30 3b 0a    }.  return 0;.
2e20: 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
2e30: 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 57 72 69  _DEBUG./*.** Wri
2e40: 74 65 20 61 20 6e 69 63 65 20 73 74 72 69 6e 67  te a nice string
2e50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2e60: 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  of the contents 
2e70: 6f 66 20 63 65 6c 6c 20 70 4d 65 6d 0a 2a 2a 20  of cell pMem.** 
2e80: 69 6e 74 6f 20 62 75 66 66 65 72 20 7a 42 75 66  into buffer zBuf
2e90: 2c 20 6c 65 6e 67 74 68 20 6e 42 75 66 2e 0a 2a  , length nBuf..*
2ea0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  /.void sqlite3Vd
2eb0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
2ec0: 28 4d 65 6d 20 2a 70 4d 65 6d 2c 20 63 68 61 72  (Mem *pMem, char
2ed0: 20 2a 7a 42 75 66 29 7b 0a 20 20 63 68 61 72 20   *zBuf){.  char 
2ee0: 2a 7a 43 73 72 20 3d 20 7a 42 75 66 3b 0a 20 20  *zCsr = zBuf;.  
2ef0: 69 6e 74 20 66 20 3d 20 70 4d 65 6d 2d 3e 66 6c  int f = pMem->fl
2f00: 61 67 73 3b 0a 0a 20 20 73 74 61 74 69 63 20 63  ags;..  static c
2f10: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
2f20: 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 22   encnames[] = {"
2f30: 28 58 29 22 2c 20 22 28 38 29 22 2c 20 22 28 31  (X)", "(8)", "(1
2f40: 36 4c 45 29 22 2c 20 22 28 31 36 42 45 29 22 7d  6LE)", "(16BE)"}
2f50: 3b 0a 0a 20 20 69 66 28 20 66 26 4d 45 4d 5f 42  ;..  if( f&MEM_B
2f60: 6c 6f 62 20 29 7b 0a 20 20 20 20 69 6e 74 20 69  lob ){.    int i
2f70: 3b 0a 20 20 20 20 63 68 61 72 20 63 3b 0a 20 20  ;.    char c;.  
2f80: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
2f90: 6e 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  n ){.      c = '
2fa0: 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  z';.      assert
2fb0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74  ( (f & (MEM_Stat
2fc0: 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d  ic|MEM_Ephem))==
2fd0: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  0 );.    }else i
2fe0: 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74 69  f( f & MEM_Stati
2ff0: 63 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20 27  c ){.      c = '
3000: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3010: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3020: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3030: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3040: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3050: 0a 20 20 20 20 20 20 63 20 3d 20 27 65 27 3b 0a  .      c = 'e';.
3060: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3070: 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d   & (MEM_Static|M
3080: 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20  EM_Dyn))==0 );. 
3090: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
30a0: 63 20 3d 20 27 73 27 3b 0a 20 20 20 20 7d 0a 0a  c = 's';.    }..
30b0: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
30c0: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
30d0: 22 25 63 22 2c 20 63 29 3b 0a 20 20 20 20 7a 43  "%c", c);.    zC
30e0: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
30f0: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
3100: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3110: 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25 64  f(100, zCsr, "%d
3120: 5b 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20  [", pMem->n);.  
3130: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
3140: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
3150: 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
3160: 31 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b  16 && i<pMem->n;
3170: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 73 71 6c   i++){.      sql
3180: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3190: 30 2c 20 7a 43 73 72 2c 20 22 25 30 32 58 22 2c  0, zCsr, "%02X",
31a0: 20 28 28 69 6e 74 29 70 4d 65 6d 2d 3e 7a 5b 69   ((int)pMem->z[i
31b0: 5d 20 26 20 30 78 46 46 29 29 3b 0a 20 20 20 20  ] & 0xFF));.    
31c0: 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65    zCsr += sqlite
31d0: 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b  3Strlen30(zCsr);
31e0: 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69  .    }.    for(i
31f0: 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d  =0; i<16 && i<pM
3200: 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20  em->n; i++){.   
3210: 20 20 20 63 68 61 72 20 7a 20 3d 20 70 4d 65 6d     char z = pMem
3220: 2d 3e 7a 5b 69 5d 3b 0a 20 20 20 20 20 20 69 66  ->z[i];.      if
3230: 28 20 7a 3c 33 32 20 7c 7c 20 7a 3e 31 32 36 20  ( z<32 || z>126 
3240: 29 20 2a 7a 43 73 72 2b 2b 20 3d 20 27 2e 27 3b  ) *zCsr++ = '.';
3250: 0a 20 20 20 20 20 20 65 6c 73 65 20 2a 7a 43 73  .      else *zCs
3260: 72 2b 2b 20 3d 20 7a 3b 0a 20 20 20 20 7d 0a 0a  r++ = z;.    }..
3270: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3280: 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20  intf(100, zCsr, 
3290: 22 5d 25 73 22 2c 20 65 6e 63 6e 61 6d 65 73 5b  "]%s", encnames[
32a0: 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20  pMem->enc]);.   
32b0: 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33   zCsr += sqlite3
32c0: 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a  Strlen30(zCsr);.
32d0: 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f      if( f & MEM_
32e0: 5a 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71  Zero ){.      sq
32f0: 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31  lite3_snprintf(1
3300: 30 30 2c 20 7a 43 73 72 2c 22 2b 25 64 7a 22 2c  00, zCsr,"+%dz",
3310: 70 4d 65 6d 2d 3e 75 2e 6e 5a 65 72 6f 29 3b 0a  pMem->u.nZero);.
3320: 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71        zCsr += sq
3330: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
3340: 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 2a  sr);.    }.    *
3350: 7a 43 73 72 20 3d 20 27 5c 30 27 3b 0a 20 20 7d  zCsr = '\0';.  }
3360: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3370: 5f 53 74 72 20 29 7b 0a 20 20 20 20 69 6e 74 20  _Str ){.    int 
3380: 6a 2c 20 6b 3b 0a 20 20 20 20 7a 42 75 66 5b 30  j, k;.    zBuf[0
3390: 5d 20 3d 20 27 20 27 3b 0a 20 20 20 20 69 66 28  ] = ' ';.    if(
33a0: 20 66 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a   f & MEM_Dyn ){.
33b0: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
33c0: 27 7a 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'z';.      asser
33d0: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
33e0: 74 69 63 7c 4d 45 4d 5f 45 70 68 65 6d 29 29 3d  tic|MEM_Ephem))=
33f0: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20  =0 );.    }else 
3400: 69 66 28 20 66 20 26 20 4d 45 4d 5f 53 74 61 74  if( f & MEM_Stat
3410: 69 63 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66  ic ){.      zBuf
3420: 5b 31 5d 20 3d 20 27 74 27 3b 0a 20 20 20 20 20  [1] = 't';.     
3430: 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d   assert( (f & (M
3440: 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d  EM_Dyn|MEM_Ephem
3450: 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  ))==0 );.    }el
3460: 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45  se if( f & MEM_E
3470: 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 7a 42  phem ){.      zB
3480: 75 66 5b 31 5d 20 3d 20 27 65 27 3b 0a 20 20 20  uf[1] = 'e';.   
3490: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
34a0: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
34b0: 44 79 6e 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20  Dyn))==0 );.    
34c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 7a 42 75  }else{.      zBu
34d0: 66 5b 31 5d 20 3d 20 27 73 27 3b 0a 20 20 20 20  f[1] = 's';.    
34e0: 7d 0a 20 20 20 20 6b 20 3d 20 32 3b 0a 20 20 20  }.    k = 2;.   
34f0: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3500: 66 28 31 30 30 2c 20 26 7a 42 75 66 5b 6b 5d 2c  f(100, &zBuf[k],
3510: 20 22 25 64 22 2c 20 70 4d 65 6d 2d 3e 6e 29 3b   "%d", pMem->n);
3520: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3530: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3540: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3550: 2b 5d 20 3d 20 27 5b 27 3b 0a 20 20 20 20 66 6f  +] = '[';.    fo
3560: 72 28 6a 3d 30 3b 20 6a 3c 31 35 20 26 26 20 6a  r(j=0; j<15 && j
3570: 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a 2b 2b 29 7b 0a  <pMem->n; j++){.
3580: 20 20 20 20 20 20 75 38 20 63 20 3d 20 70 4d 65        u8 c = pMe
3590: 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20 20 20 20 20 69  m->z[j];.      i
35a0: 66 28 20 63 3e 3d 30 78 32 30 20 26 26 20 63 3c  f( c>=0x20 && c<
35b0: 30 78 37 66 20 29 7b 0a 20 20 20 20 20 20 20 20  0x7f ){.        
35c0: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 63 3b 0a 20  zBuf[k++] = c;. 
35d0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
35e0: 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20      zBuf[k++] = 
35f0: 27 2e 27 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  '.';.      }.   
3600: 20 7d 0a 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d   }.    zBuf[k++]
3610: 20 3d 20 27 5d 27 3b 0a 20 20 20 20 73 71 6c 69   = ']';.    sqli
3620: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3630: 2c 26 7a 42 75 66 5b 6b 5d 2c 20 65 6e 63 6e 61  ,&zBuf[k], encna
3640: 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29 3b  mes[pMem->enc]);
3650: 0a 20 20 20 20 6b 20 2b 3d 20 73 71 6c 69 74 65  .    k += sqlite
3660: 33 53 74 72 6c 65 6e 33 30 28 26 7a 42 75 66 5b  3Strlen30(&zBuf[
3670: 6b 5d 29 3b 0a 20 20 20 20 7a 42 75 66 5b 6b 2b  k]);.    zBuf[k+
3680: 2b 5d 20 3d 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65  +] = 0;.  }.}.#e
3690: 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
36a0: 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
36b0: 50 72 69 6e 74 20 74 68 65 20 76 61 6c 75 65 20  Print the value 
36c0: 6f 66 20 61 20 72 65 67 69 73 74 65 72 20 66 6f  of a register fo
36d0: 72 20 74 72 61 63 69 6e 67 20 70 75 72 70 6f 73  r tracing purpos
36e0: 65 73 3a 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f  es:.*/.static vo
36f0: 69 64 20 6d 65 6d 54 72 61 63 65 50 72 69 6e 74  id memTracePrint
3700: 28 4d 65 6d 20 2a 70 29 7b 0a 20 20 69 66 28 20  (Mem *p){.  if( 
3710: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 55  p->flags & MEM_U
3720: 6e 64 65 66 69 6e 65 64 20 29 7b 0a 20 20 20 20  ndefined ){.    
3730: 70 72 69 6e 74 66 28 22 20 75 6e 64 65 66 69 6e  printf(" undefin
3740: 65 64 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  ed");.  }else if
3750: 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ( p->flags & MEM
3760: 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 72 69  _Null ){.    pri
3770: 6e 74 66 28 22 20 4e 55 4c 4c 22 29 3b 0a 20 20  ntf(" NULL");.  
3780: 7d 65 6c 73 65 20 69 66 28 20 28 70 2d 3e 66 6c  }else if( (p->fl
3790: 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d  ags & (MEM_Int|M
37a0: 45 4d 5f 53 74 72 29 29 3d 3d 28 4d 45 4d 5f 49  EM_Str))==(MEM_I
37b0: 6e 74 7c 4d 45 4d 5f 53 74 72 29 20 29 7b 0a 20  nt|MEM_Str) ){. 
37c0: 20 20 20 70 72 69 6e 74 66 28 22 20 73 69 3a 25     printf(" si:%
37d0: 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a 20  lld", p->u.i);. 
37e0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
37f0: 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b  ags & MEM_Int ){
3800: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 69 3a  .    printf(" i:
3810: 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e 69 29 3b 0a  %lld", p->u.i);.
3820: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
3830: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
3840: 4e 54 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  NT.  }else if( p
3850: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
3860: 61 6c 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  al ){.    printf
3870: 28 22 20 72 3a 25 67 22 2c 20 70 2d 3e 72 29 3b  (" r:%g", p->r);
3880: 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73 65 20  .#endif.  }else 
3890: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
38a0: 45 4d 5f 52 6f 77 53 65 74 20 29 7b 0a 20 20 20  EM_RowSet ){.   
38b0: 20 70 72 69 6e 74 66 28 22 20 28 72 6f 77 73 65   printf(" (rowse
38c0: 74 29 22 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  t)");.  }else{. 
38d0: 20 20 20 63 68 61 72 20 7a 42 75 66 5b 32 30 30     char zBuf[200
38e0: 5d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ];.    sqlite3Vd
38f0: 62 65 4d 65 6d 50 72 65 74 74 79 50 72 69 6e 74  beMemPrettyPrint
3900: 28 70 2c 20 7a 42 75 66 29 3b 0a 20 20 20 20 70  (p, zBuf);.    p
3910: 72 69 6e 74 66 28 22 20 25 73 22 2c 20 7a 42 75  rintf(" %s", zBu
3920: 66 29 3b 0a 20 20 7d 0a 7d 0a 73 74 61 74 69 63  f);.  }.}.static
3930: 20 76 6f 69 64 20 72 65 67 69 73 74 65 72 54 72   void registerTr
3940: 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20 4d 65  ace(int iReg, Me
3950: 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74 66 28  m *p){.  printf(
3960: 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20 69 52  "REG[%d] = ", iR
3970: 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63 65 50  eg);.  memTraceP
3980: 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69 6e 74  rint(p);.  print
3990: 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e 64 69  f("\n");.}.#endi
39a0: 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
39b0: 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69 6e 65  _DEBUG.#  define
39c0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
39d0: 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c 61 67  R,M) if(db->flag
39e0: 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  s&SQLITE_VdbeTra
39f0: 63 65 29 72 65 67 69 73 74 65 72 54 72 61 63 65  ce)registerTrace
3a00: 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 20 64  (R,M).#else.#  d
3a10: 65 66 69 6e 65 20 52 45 47 49 53 54 45 52 5f 54  efine REGISTER_T
3a20: 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64 69 66  RACE(R,M).#endif
3a30: 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  ...#ifdef VDBE_P
3a40: 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a 20 68  ROFILE../* .** h
3a50: 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69 6e 73  wtime.h contains
3a60: 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62 6c 65   inline assemble
3a70: 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70 6c 65  r code for imple
3a80: 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69 67 68  menting .** high
3a90: 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74 69 6d  -performance tim
3aa0: 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a 2a 2f  ing routines..*/
3ab0: 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74 69 6d  .#include "hwtim
3ac0: 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a 23 69  e.h"..#endif..#i
3ad0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f 2a 0a  fndef NDEBUG./*.
3ae0: 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  ** This function
3af0: 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65 64 20   is only called 
3b00: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e 20 61  from within an a
3b10: 73 73 65 72 74 28 29 20 65 78 70 72 65 73 73 69  ssert() expressi
3b20: 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63 6b 73  on. It.** checks
3b30: 20 74 68 61 74 20 74 68 65 20 73 71 6c 69 74 65   that the sqlite
3b40: 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e 20 76  3.nTransaction v
3b50: 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72 72 65  ariable is corre
3b60: 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a 20 74  ctly set to.** t
3b70: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  he number of non
3b80: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
3b90: 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e 74 6c  epoints currentl
3ba0: 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c 69 6e  y in the .** lin
3bb0: 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e  ked list startin
3bc0: 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70 53 61  g at sqlite3.pSa
3bd0: 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a 2a 20  vepoint..** .** 
3be0: 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  Usage:.**.**    
3bf0: 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
3c00: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
3c10: 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e   );.*/.static in
3c20: 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74  t checkSavepoint
3c30: 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20 2a 64  Count(sqlite3 *d
3c40: 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20 30 3b  b){.  int n = 0;
3c50: 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 3b  .  Savepoint *p;
3c60: 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70 53 61  .  for(p=db->pSa
3c70: 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d 70 2d  vepoint; p; p=p-
3c80: 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20 20 61  >pNext) n++;.  a
3c90: 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d 3e 6e  ssert( n==(db->n
3ca0: 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
3cb0: 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
3cc0: 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72 65 74  epoint) );.  ret
3cd0: 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69 66 0a  urn 1;.}.#endif.
3ce0: 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ../*.** Execute 
3cf0: 61 73 20 6d 75 63 68 20 6f 66 20 61 20 56 44 42  as much of a VDB
3d00: 45 20 70 72 6f 67 72 61 6d 20 61 73 20 77 65 20  E program as we 
3d10: 63 61 6e 2e 0a 2a 2a 20 54 68 69 73 20 69 73 20  can..** This is 
3d20: 74 68 65 20 63 6f 72 65 20 6f 66 20 73 71 6c 69  the core of sqli
3d30: 74 65 33 5f 73 74 65 70 28 29 2e 20 20 0a 2a 2f  te3_step().  .*/
3d40: 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65  .int sqlite3Vdbe
3d50: 45 78 65 63 28 0a 20 20 56 64 62 65 20 2a 70 20  Exec(.  Vdbe *p 
3d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3d70: 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 2a     /* The VDBE *
3d80: 2f 0a 29 7b 0a 20 20 69 6e 74 20 70 63 3d 30 3b  /.){.  int pc=0;
3d90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3da0: 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 61 6d    /* The program
3db0: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4f 70   counter */.  Op
3dc0: 20 2a 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20   *aOp = p->aOp; 
3dd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
3de0: 20 6f 66 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20   of p->aOp */.  
3df0: 4f 70 20 2a 70 4f 70 3b 20 20 20 20 20 20 20 20  Op *pOp;        
3e00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75             /* Cu
3e10: 72 72 65 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20  rrent operation 
3e20: 2a 2f 0a 20 20 69 6e 74 20 72 63 20 3d 20 53 51  */.  int rc = SQ
3e30: 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20 20 20 20  LITE_OK;        
3e40: 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75  /* Value to retu
3e50: 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  rn */.  sqlite3 
3e60: 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20 20 20 20  *db = p->db;    
3e70: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
3e80: 73 65 20 2a 2f 0a 20 20 75 38 20 72 65 73 65 74  se */.  u8 reset
3e90: 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d 20  SchemaOnFault = 
3ea0: 30 3b 20 2f 2a 20 52 65 73 65 74 20 73 63 68 65  0; /* Reset sche
3eb0: 6d 61 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ma after an erro
3ec0: 72 20 69 66 20 70 6f 73 69 74 69 76 65 20 2a 2f  r if positive */
3ed0: 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e 67 20 3d  .  u8 encoding =
3ee0: 20 45 4e 43 28 64 62 29 3b 20 20 20 20 20 2f 2a   ENC(db);     /*
3ef0: 20 54 68 65 20 64 61 74 61 62 61 73 65 20 65 6e   The database en
3f00: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20  coding */.  int 
3f10: 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b 20 20 20  iCompare = 0;   
3f20: 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
3f30: 20 6f 66 20 6c 61 73 74 20 4f 50 5f 43 6f 6d 70   of last OP_Comp
3f40: 61 72 65 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f  are operation */
3f50: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 56 6d 53  .  unsigned nVmS
3f60: 74 65 70 20 3d 20 30 3b 20 20 20 20 20 20 2f 2a  tep = 0;      /*
3f70: 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
3f80: 61 6c 20 6d 61 63 68 69 6e 65 20 73 74 65 70 73  al machine steps
3f90: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
3fa0: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
3fb0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 75 6e 73 69  _CALLBACK.  unsi
3fc0: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4c 69  gned nProgressLi
3fd0: 6d 69 74 20 3d 20 30 3b 2f 2a 20 49 6e 76 6f 6b  mit = 0;/* Invok
3fe0: 65 20 78 50 72 6f 67 72 65 73 73 28 29 20 77 68  e xProgress() wh
3ff0: 65 6e 20 6e 56 6d 53 74 65 70 20 72 65 61 63 68  en nVmStep reach
4000: 65 73 20 74 68 69 73 20 2a 2f 0a 23 65 6e 64 69  es this */.#endi
4010: 66 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 20 3d 20  f.  Mem *aMem = 
4020: 70 2d 3e 61 4d 65 6d 3b 20 20 20 20 20 20 20 2f  p->aMem;       /
4030: 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4d 65  * Copy of p->aMe
4040: 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 31  m */.  Mem *pIn1
4050: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20   = 0;           
4060: 20 20 2f 2a 20 31 73 74 20 69 6e 70 75 74 20 6f    /* 1st input o
4070: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20  perand */.  Mem 
4080: 2a 70 49 6e 32 20 3d 20 30 3b 20 20 20 20 20 20  *pIn2 = 0;      
4090: 20 20 20 20 20 20 20 2f 2a 20 32 6e 64 20 69 6e         /* 2nd in
40a0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20  put operand */. 
40b0: 20 4d 65 6d 20 2a 70 49 6e 33 20 3d 20 30 3b 20   Mem *pIn3 = 0; 
40c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 33              /* 3
40d0: 72 64 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64  rd input operand
40e0: 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4f 75 74 20   */.  Mem *pOut 
40f0: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20  = 0;            
4100: 20 2f 2a 20 4f 75 74 70 75 74 20 6f 70 65 72 61   /* Output opera
4110: 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 50 65  nd */.  int *aPe
4120: 72 6d 75 74 65 20 3d 20 30 3b 20 20 20 20 20 20  rmute = 0;      
4130: 20 20 20 2f 2a 20 50 65 72 6d 75 74 61 74 69 6f     /* Permutatio
4140: 6e 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  n of columns for
4150: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 2a 2f 0a 20   OP_Compare */. 
4160: 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64 20 3d   i64 lastRowid =
4170: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 20   db->lastRowid; 
4180: 20 2f 2a 20 53 61 76 65 64 20 76 61 6c 75 65 20   /* Saved value 
4190: 6f 66 20 74 68 65 20 6c 61 73 74 20 69 6e 73 65  of the last inse
41a0: 72 74 20 52 4f 57 49 44 20 2a 2f 0a 23 69 66 64  rt ROWID */.#ifd
41b0: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
41c0: 20 20 75 36 34 20 73 74 61 72 74 3b 20 20 20 20    u64 start;    
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
41e0: 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75 6e 74 20  CPU clock count 
41f0: 61 74 20 73 74 61 72 74 20 6f 66 20 6f 70 63 6f  at start of opco
4200: 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 2f  de */.#endif.  /
4210: 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54 41 43 4b  *** INSERT STACK
4220: 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a 2a 2a 2f   UNION HERE ***/
4230: 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 6d  ..  assert( p->m
4240: 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
4250: 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73 71 6c 69  _RUN );  /* sqli
4260: 74 65 33 5f 73 74 65 70 28 29 20 76 65 72 69 66  te3_step() verif
4270: 69 65 73 20 74 68 69 73 20 2a 2f 0a 20 20 73 71  ies this */.  sq
4280: 6c 69 74 65 33 56 64 62 65 45 6e 74 65 72 28 70  lite3VdbeEnter(p
4290: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  );.  if( p->rc==
42a0: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a  SQLITE_NOMEM ){.
42b0: 20 20 20 20 2f 2a 20 54 68 69 73 20 68 61 70 70      /* This happ
42c0: 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28  ens if a malloc(
42d0: 29 20 69 6e 73 69 64 65 20 61 20 63 61 6c 6c 20  ) inside a call 
42e0: 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  to sqlite3_colum
42f0: 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20 20 20 20  n_text() or.    
4300: 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ** sqlite3_colum
4310: 6e 5f 74 65 78 74 31 36 28 29 20 66 61 69 6c 65  n_text16() faile
4320: 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20  d.  */.    goto 
4330: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 61 73  no_mem;.  }.  as
4340: 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d 53 51 4c  sert( p->rc==SQL
4350: 49 54 45 5f 4f 4b 20 7c 7c 20 70 2d 3e 72 63 3d  ITE_OK || p->rc=
4360: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4370: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4380: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4390: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
43a0: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
43b0: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
43c0: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
43d0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
43e0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
43f0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4400: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4410: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4420: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4430: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4440: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4450: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4460: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4470: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4480: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4490: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
44a0: 72 65 73 73 20 29 7b 0a 20 20 20 20 61 73 73 65  ress ){.    asse
44b0: 72 74 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f  rt( 0 < db->nPro
44c0: 67 72 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20  gressOps );.    
44d0: 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d  nProgressLimit =
44e0: 20 28 75 6e 73 69 67 6e 65 64 29 70 2d 3e 61 43   (unsigned)p->aC
44f0: 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54  ounter[SQLITE_ST
4500: 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50  MTSTATUS_VM_STEP
4510: 5d 3b 0a 20 20 20 20 69 66 28 20 6e 50 72 6f 67  ];.    if( nProg
4520: 72 65 73 73 4c 69 6d 69 74 3d 3d 30 20 29 7b 0a  ressLimit==0 ){.
4530: 20 20 20 20 20 20 6e 50 72 6f 67 72 65 73 73 4c        nProgressL
4540: 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50 72 6f 67  imit = db->nProg
4550: 72 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 65 6c  ressOps;.    }el
4560: 73 65 7b 0a 20 20 20 20 20 20 6e 50 72 6f 67 72  se{.      nProgr
4570: 65 73 73 4c 69 6d 69 74 20 25 3d 20 28 75 6e 73  essLimit %= (uns
4580: 69 67 6e 65 64 29 64 62 2d 3e 6e 50 72 6f 67 72  igned)db->nProgr
4590: 65 73 73 4f 70 73 3b 0a 20 20 20 20 7d 0a 20 20  essOps;.    }.  
45a0: 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  }.#endif.#ifdef 
45b0: 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 73  SQLITE_DEBUG.  s
45c0: 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67  qlite3BeginBenig
45d0: 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66 28  nMalloc();.  if(
45e0: 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26 20   p->pc==0.   && 
45f0: 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20  (p->db->flags & 
4600: 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  (SQLITE_VdbeList
4610: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 45  ing|SQLITE_VdbeE
4620: 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  QP|SQLITE_VdbeTr
4630: 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20  ace))!=0.  ){.  
4640: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e 74    int i;.    int
4650: 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20 73   once = 1;.    s
4660: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 53  qlite3VdbePrintS
4670: 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20 70  ql(p);.    if( p
4680: 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51  ->db->flags & SQ
4690: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
46a0: 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74 66   ){.      printf
46b0: 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20 4c  ("VDBE Program L
46c0: 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20  isting:\n");.   
46d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d     for(i=0; i<p-
46e0: 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nOp; i++){.    
46f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
4700: 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 69  rintOp(stdout, i
4710: 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20 20  , &aOp[i]);.    
4720: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66    }.    }.    if
4730: 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26  ( p->db->flags &
4740: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
4750: 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  ){.      for(i=0
4760: 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29  ; i<p->nOp; i++)
4770: 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61 4f  {.        if( aO
4780: 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  p[i].opcode==OP_
4790: 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20 20  Explain ){.     
47a0: 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29 20       if( once ) 
47b0: 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75 65  printf("VDBE Que
47c0: 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20  ry Plan:\n");.  
47d0: 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28 22          printf("
47e0: 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70 34  %s\n", aOp[i].p4
47f0: 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6f  .z);.          o
4800: 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  nce = 0;.       
4810: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
4820: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4830: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4840: 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69 6e  dbeTrace )  prin
4850: 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a 5c  tf("VDBE Trace:\
4860: 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  n");.  }.  sqlit
4870: 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
4880: 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66 6f  c();.#endif.  fo
4890: 72 28 70 63 3d 70 2d 3e 70 63 3b 20 72 63 3d 3d  r(pc=p->pc; rc==
48a0: 53 51 4c 49 54 45 5f 4f 4b 3b 20 70 63 2b 2b 29  SQLITE_OK; pc++)
48b0: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63  {.    assert( pc
48c0: 3e 3d 30 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  >=0 && pc<p->nOp
48d0: 20 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e   );.    if( db->
48e0: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67  mallocFailed ) g
48f0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 23 69 66 64  oto no_mem;.#ifd
4900: 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
4910: 20 20 20 20 73 74 61 72 74 20 3d 20 73 71 6c 69      start = sqli
4920: 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23 65 6e  te3Hwtime();.#en
4930: 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65 70 2b  dif.    nVmStep+
4940: 2b 3b 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f  +;.    pOp = &aO
4950: 70 5b 70 63 5d 3b 0a 0a 20 20 20 20 2f 2a 20 4f  p[pc];..    /* O
4960: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
4970: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
4980: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
4990: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
49a0: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
49b0: 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
49c0: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
49d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
49e0: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
49f0: 2c 20 70 63 2c 20 70 4f 70 29 3b 0a 20 20 20 20  , pc, pOp);.    
4a00: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a  }.#endif.      .
4a10: 0a 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f  .    /* Check to
4a20: 20 73 65 65 20 69 66 20 77 65 20 6e 65 65 64 20   see if we need 
4a30: 74 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69  to simulate an i
4a40: 6e 74 65 72 72 75 70 74 2e 20 20 54 68 69 73 20  nterrupt.  This 
4a50: 6f 6e 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20  only happens.   
4a60: 20 2a 2a 20 69 66 20 77 65 20 68 61 76 65 20 61   ** if we have a
4a70: 20 73 70 65 63 69 61 6c 20 74 65 73 74 20 62 75   special test bu
4a80: 69 6c 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64  ild..    */.#ifd
4a90: 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
4aa0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4ab0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30  nterrupt_count>0
4ac0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
4ad0: 33 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e  3_interrupt_coun
4ae0: 74 2d 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73  t--;.      if( s
4af0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4b00: 5f 63 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20  _count==0 ){.   
4b10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74       sqlite3_int
4b20: 65 72 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20  errupt(db);.    
4b30: 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66    }.    }.#endif
4b40: 0a 0a 20 20 20 20 2f 2a 20 4f 6e 20 61 6e 79 20  ..    /* On any 
4b50: 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
4b60: 22 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65  "out2-prerelease
4b70: 22 20 74 61 67 2c 20 66 72 65 65 20 61 6e 79 0a  " tag, free any.
4b80: 20 20 20 20 2a 2a 20 65 78 74 65 72 6e 61 6c 20      ** external 
4b90: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 6f 75 74 20  allocations out 
4ba0: 6f 66 20 6d 65 6d 5b 70 32 5d 20 61 6e 64 20 73  of mem[p2] and s
4bb0: 65 74 20 6d 65 6d 5b 70 32 5d 20 74 6f 20 62 65  et mem[p2] to be
4bc0: 0a 20 20 20 20 2a 2a 20 61 6e 20 75 6e 64 65 66  .    ** an undef
4bd0: 69 6e 65 64 20 69 6e 74 65 67 65 72 2e 20 20 4f  ined integer.  O
4be0: 70 63 6f 64 65 73 20 77 69 6c 6c 20 65 69 74 68  pcodes will eith
4bf0: 65 72 20 66 69 6c 6c 20 69 6e 20 74 68 65 20 69  er fill in the i
4c00: 6e 74 65 67 65 72 0a 20 20 20 20 2a 2a 20 76 61  nteger.    ** va
4c10: 6c 75 65 20 6f 72 20 63 6f 6e 76 65 72 74 20 6d  lue or convert m
4c20: 65 6d 5b 70 32 5d 20 74 6f 20 61 20 64 69 66 66  em[p2] to a diff
4c30: 65 72 65 6e 74 20 74 79 70 65 2e 0a 20 20 20 20  erent type..    
4c40: 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  */.    assert( p
4c50: 4f 70 2d 3e 6f 70 66 6c 61 67 73 3d 3d 73 71 6c  Op->opflags==sql
4c60: 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
4c70: 74 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 20  ty[pOp->opcode] 
4c80: 29 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  );.    if( pOp->
4c90: 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f  opflags & OPFLG_
4ca0: 4f 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 20  OUT2_PRERELEASE 
4cb0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
4cc0: 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20   pOp->p2>0 );.  
4cd0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
4ce0: 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p2<=(p->nMem-p-
4cf0: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
4d00: 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b     pOut = &aMem[
4d10: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 20 20  pOp->p2];.      
4d20: 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
4d30: 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
4d40: 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
4d50: 70 4f 75 74 29 3b 0a 20 20 20 20 20 20 70 4f 75  pOut);.      pOu
4d60: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
4d70: 6e 74 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f  nt;.    }..    /
4d80: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
4d90: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
4da0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
4db0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69  LITE_DEBUG.    i
4dc0: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
4dd0: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
4de0: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
4df0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
4e00: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4e10: 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
4e20: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4e30: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
4e40: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
4e50: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
4e60: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
4e70: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
4e80: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
4e90: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p1]) );.      R
4ea0: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
4eb0: 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p1, &aMem[pOp
4ec0: 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p1]);.    }.  
4ed0: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
4ee0: 61 67 73 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  ags & OPFLG_IN2)
4ef0: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  !=0 ){.      ass
4f00: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
4f10: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4f20: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
4f30: 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
4f40: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
4f50: 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
4f60: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
4f70: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
4f80: 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
4f90: 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70  variants(&aMem[p
4fa0: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
4fb0: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
4fc0: 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b  (pOp->p2, &aMem[
4fd0: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
4fe0: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
4ff0: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 49  pflags & OPFLG_I
5000: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5010: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
5020: 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  0 );.      asser
5030: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
5040: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
5050: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
5060: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
5070: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5080: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
5090: 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65  lite3VdbeCheckMe
50a0: 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65  mInvariants(&aMe
50b0: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
50c0: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
50d0: 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d  ACE(pOp->p3, &aM
50e0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
50f0: 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70    }.    if( (pOp
5100: 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c  ->opflags & OPFL
5110: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
5120: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5130: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p2>0 );.      a
5140: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d  ssert( pOp->p2<=
5150: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5160: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65  sor) );.      me
5170: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5180: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
5190: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
51a0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
51b0: 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30 20   OPFLG_OUT3)!=0 
51c0: 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
51d0: 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
51e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
51f0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
5200: 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20  >nCursor) );.   
5210: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
5220: 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f 70  nge(p, &aMem[pOp
5230: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ->p3]);.    }.#e
5240: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
5250: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
5260: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
5270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
52b0: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
52c0: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
52d0: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
52e0: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
52f0: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
5300: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
5310: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
5320: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
5330: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
5340: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
5350: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
5360: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
5370: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
5380: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
5390: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
53a0: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
53b0: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
53c0: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
53d0: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
53e0: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
53f0: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
5400: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
5410: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
5420: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
5430: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
5440: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
5450: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
5460: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
5470: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
5480: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
5490: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
54a0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
54b0: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
54c0: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
54d0: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
54e0: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
54f0: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
5500: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
5510: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
5520: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
5530: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
5540: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
5550: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
5560: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
5570: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
5580: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
5590: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
55a0: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
55b0: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
55c0: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
55d0: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
55e0: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
55f0: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
5600: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
5610: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
5620: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
5630: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
5640: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
5650: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
5660: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
5670: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
5680: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
5690: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
56a0: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
56b0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
56c0: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
56d0: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
56e0: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
56f0: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
5700: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
5710: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
5720: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
5730: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
5740: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
5750: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
5760: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
5770: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
5780: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
5790: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
57a0: 20 6f 75 74 32 5f 70 72 65 72 65 6c 65 61 73 65   out2_prerelease
57b0: 2c 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53  , out2, out3.  S
57c0: 65 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f  ee.** the mkopco
57d0: 64 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66  deh.awk script f
57e0: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
57f0: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  formation..**.**
5800: 20 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61   Documentation a
5810: 62 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65  bout VDBE opcode
5820: 73 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62  s is generated b
5830: 79 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20  y scanning this 
5840: 66 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65  file.** for line
5850: 73 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69  s of that contai
5860: 6e 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68  n "Opcode:".  Th
5870: 61 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20  at line and all 
5880: 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f  subsequent.** co
5890: 6d 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20  mment lines are 
58a0: 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65  used in the gene
58b0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  ration of the op
58c0: 63 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65  code.html docume
58d0: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e  ntation.** file.
58e0: 0a 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a  .**.** SUMMARY:.
58f0: 2a 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74  **.**     Format
5900: 74 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e  ting is importan
5910: 74 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61  t to scripts tha
5920: 74 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65  t scan this file
5930: 2e 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20  ..**     Do not 
5940: 64 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65  deviate from the
5950: 20 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c   formatting styl
5960: 65 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75  e currently in u
5970: 73 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a  se..**.*********
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59c0: 2a 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ****/../* Opcode
59d0: 3a 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a  :  Goto * P2 * *
59e0: 20 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f   *.**.** An unco
59f0: 6e 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74  nditional jump t
5a00: 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a  o address P2..**
5a10: 20 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   The next instru
5a20: 63 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77  ction executed w
5a30: 69 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f  ill be .** the o
5a40: 6e 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66  ne at index P2 f
5a50: 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  rom the beginnin
5a60: 67 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67  g of.** the prog
5a70: 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ram..**.** The P
5a80: 31 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e  1 parameter is n
5a90: 6f 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64  ot actually used
5aa0: 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e   by this opcode.
5ab0: 20 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a    However, it.**
5ac0: 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65   is sometimes se
5ad0: 74 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f  t to 1 instead o
5ae0: 66 20 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f  f 0 as a hint to
5af0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e   the command-lin
5b00: 65 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20  e shell.** that 
5b10: 74 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65  this Goto is the
5b20: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
5b30: 70 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c  p and that the l
5b40: 69 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77  ines from P2 dow
5b50: 6e 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72  n.** to the curr
5b60: 65 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20  ent line should 
5b70: 62 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20  be indented for 
5b80: 45 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a  EXPLAIN output..
5b90: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a  */.case OP_Goto:
5ba0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
5bb0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 70 63 20 3d  * jump */.  pc =
5bc0: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 0a 20   pOp->p2 - 1;.. 
5bd0: 20 2f 2a 20 4f 70 63 6f 64 65 73 20 74 68 61 74   /* Opcodes that
5be0: 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
5bf0: 20 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f   bottom of a loo
5c00: 70 20 28 4f 50 5f 4e 65 78 74 2c 20 4f 50 5f 50  p (OP_Next, OP_P
5c10: 72 65 76 2c 0a 20 20 2a 2a 20 4f 50 5f 56 4e 65  rev,.  ** OP_VNe
5c20: 78 74 2c 20 4f 50 5f 52 6f 77 53 65 74 4e 65 78  xt, OP_RowSetNex
5c30: 74 2c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4e  t, or OP_SorterN
5c40: 65 78 74 29 20 61 6c 6c 20 6a 75 6d 70 20 68 65  ext) all jump he
5c50: 72 65 20 75 70 6f 6e 0a 20 20 2a 2a 20 63 6f 6d  re upon.  ** com
5c60: 70 6c 65 74 69 6f 6e 2e 20 20 43 68 65 63 6b 20  pletion.  Check 
5c70: 74 6f 20 73 65 65 20 69 66 20 73 71 6c 69 74 65  to see if sqlite
5c80: 33 5f 69 6e 74 65 72 72 75 70 74 28 29 20 68 61  3_interrupt() ha
5c90: 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 0a 20 20  s been called.  
5ca0: 2a 2a 20 6f 72 20 69 66 20 74 68 65 20 70 72 6f  ** or if the pro
5cb0: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 6e  gress callback n
5cc0: 65 65 64 73 20 74 6f 20 62 65 20 69 6e 76 6f 6b  eeds to be invok
5cd0: 65 64 2e 20 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ed. .  **.  ** T
5ce0: 68 69 73 20 63 6f 64 65 20 75 73 65 73 20 75 6e  his code uses un
5cf0: 73 74 72 75 63 74 75 72 65 64 20 22 67 6f 74 6f  structured "goto
5d00: 22 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  " statements and
5d10: 20 64 6f 65 73 20 6e 6f 74 20 6c 6f 6f 6b 20 63   does not look c
5d20: 6c 65 61 6e 2e 0a 20 20 2a 2a 20 42 75 74 20 74  lean..  ** But t
5d30: 68 61 74 20 69 73 20 6e 6f 74 20 64 75 65 20 74  hat is not due t
5d40: 6f 20 73 6c 6f 70 70 79 20 63 6f 64 69 6e 67 20  o sloppy coding 
5d50: 68 61 62 69 74 73 2e 20 54 68 65 20 63 6f 64 65  habits. The code
5d60: 20 69 73 20 77 72 69 74 74 65 6e 20 74 68 69 73   is written this
5d70: 0a 20 20 2a 2a 20 77 61 79 20 66 6f 72 20 70 65  .  ** way for pe
5d80: 72 66 6f 72 6d 61 6e 63 65 2c 20 74 6f 20 61 76  rformance, to av
5d90: 6f 69 64 20 68 61 76 69 6e 67 20 74 6f 20 72 75  oid having to ru
5da0: 6e 20 74 68 65 20 69 6e 74 65 72 72 75 70 74 20  n the interrupt 
5db0: 61 6e 64 20 70 72 6f 67 72 65 73 73 0a 20 20 2a  and progress.  *
5dc0: 2a 20 63 68 65 63 6b 73 20 6f 6e 20 65 76 65 72  * checks on ever
5dd0: 79 20 6f 70 63 6f 64 65 2e 20 20 54 68 69 73 20  y opcode.  This 
5de0: 68 65 6c 70 73 20 73 71 6c 69 74 65 33 5f 73 74  helps sqlite3_st
5df0: 65 70 28 29 20 74 6f 20 72 75 6e 20 61 62 6f 75  ep() to run abou
5e00: 74 20 31 2e 35 25 0a 20 20 2a 2a 20 66 61 73 74  t 1.5%.  ** fast
5e10: 65 72 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20  er according to 
5e20: 22 76 61 6c 67 72 69 6e 64 20 2d 2d 74 6f 6f 6c  "valgrind --tool
5e30: 3d 63 61 63 68 65 67 72 69 6e 64 22 20 2a 2f 0a  =cachegrind" */.
5e40: 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72  check_for_interr
5e50: 75 70 74 3a 0a 20 20 69 66 28 20 64 62 2d 3e 75  upt:.  if( db->u
5e60: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
5e70: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
5e80: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 23  _to_interrupt;.#
5e90: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5ea0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
5eb0: 42 41 43 4b 0a 20 20 2f 2a 20 43 61 6c 6c 20 74  BACK.  /* Call t
5ec0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
5ed0: 62 61 63 6b 20 69 66 20 69 74 20 69 73 20 63 6f  back if it is co
5ee0: 6e 66 69 67 75 72 65 64 20 61 6e 64 20 74 68 65  nfigured and the
5ef0: 20 72 65 71 75 69 72 65 64 20 6e 75 6d 62 65 72   required number
5f00: 0a 20 20 2a 2a 20 6f 66 20 56 44 42 45 20 6f 70  .  ** of VDBE op
5f10: 73 20 68 61 76 65 20 62 65 65 6e 20 65 78 65 63  s have been exec
5f20: 75 74 65 64 20 28 65 69 74 68 65 72 20 73 69 6e  uted (either sin
5f30: 63 65 20 74 68 69 73 20 69 6e 76 6f 63 61 74 69  ce this invocati
5f40: 6f 6e 20 6f 66 0a 20 20 2a 2a 20 73 71 6c 69 74  on of.  ** sqlit
5f50: 65 33 56 64 62 65 45 78 65 63 28 29 20 6f 72 20  e3VdbeExec() or 
5f60: 73 69 6e 63 65 20 6c 61 73 74 20 74 69 6d 65 20  since last time 
5f70: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
5f80: 6c 62 61 63 6b 20 77 61 73 20 63 61 6c 6c 65 64  lback was called
5f90: 29 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 70  )..  ** If the p
5fa0: 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b  rogress callback
5fb0: 20 72 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72   returns non-zer
5fc0: 6f 2c 20 65 78 69 74 20 74 68 65 20 76 69 72 74  o, exit the virt
5fd0: 75 61 6c 20 6d 61 63 68 69 6e 65 20 77 69 74 68  ual machine with
5fe0: 0a 20 20 2a 2a 20 61 20 72 65 74 75 72 6e 20 63  .  ** a return c
5ff0: 6f 64 65 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  ode SQLITE_ABORT
6000: 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ..  */.  if( db-
6010: 3e 78 50 72 6f 67 72 65 73 73 21 3d 30 20 26 26  >xProgress!=0 &&
6020: 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72   nVmStep>=nProgr
6030: 65 73 73 4c 69 6d 69 74 20 29 7b 0a 20 20 20 20  essLimit ){.    
6040: 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 50 72 6f  assert( db->nPro
6050: 67 72 65 73 73 4f 70 73 21 3d 30 20 29 3b 0a 20  gressOps!=0 );. 
6060: 20 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69     nProgressLimi
6070: 74 20 3d 20 6e 56 6d 53 74 65 70 20 2b 20 64 62  t = nVmStep + db
6080: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20 2d  ->nProgressOps -
6090: 20 28 6e 56 6d 53 74 65 70 25 64 62 2d 3e 6e 50   (nVmStep%db->nP
60a0: 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20 20 20  rogressOps);.   
60b0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
60c0: 73 73 28 64 62 2d 3e 70 50 72 6f 67 72 65 73 73  ss(db->pProgress
60d0: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 72 63  Arg) ){.      rc
60e0: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52   = SQLITE_INTERR
60f0: 55 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  UPT;.      goto 
6100: 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b  vdbe_error_halt;
6110: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
6120: 66 0a 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  f.  .  break;.}.
6130: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73  ./* Opcode:  Gos
6140: 75 62 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  ub P1 P2 * * *.*
6150: 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63  *.** Write the c
6160: 75 72 72 65 6e 74 20 61 64 64 72 65 73 73 20 6f  urrent address o
6170: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 31 0a  nto register P1.
6180: 2a 2a 20 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70  ** and then jump
6190: 20 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 0a   to address P2..
61a0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 73 75 62  */.case OP_Gosub
61b0: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
61c0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
61d0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
61e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
61f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6200: 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
6210: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6220: 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
6230: 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b 0a  mic(pIn1)==0 );.
6240: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
6250: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ge(p, pIn1);.  p
6260: 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  In1->flags = MEM
6270: 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  _Int;.  pIn1->u.
6280: 69 20 3d 20 70 63 3b 0a 20 20 52 45 47 49 53 54  i = pc;.  REGIST
6290: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31  ER_TRACE(pOp->p1
62a0: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63 20 3d 20  , pIn1);.  pc = 
62b0: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 62  pOp->p2 - 1;.  b
62c0: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
62d0: 64 65 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a  de:  Return P1 *
62e0: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d   * * *.**.** Jum
62f0: 70 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  p to the next in
6300: 73 74 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20  struction after 
6310: 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72  the address in r
6320: 65 67 69 73 74 65 72 20 50 31 2e 20 20 41 66 74  egister P1.  Aft
6330: 65 72 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20  er.** the jump, 
6340: 72 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f  register P1 beco
6350: 6d 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a  mes undefined..*
6360: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e  /.case OP_Return
6370: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6380: 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d   in1 */.  pIn1 =
6390: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
63a0: 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d  .  assert( pIn1-
63b0: 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20  >flags==MEM_Int 
63c0: 29 3b 0a 20 20 70 63 20 3d 20 28 69 6e 74 29 70  );.  pc = (int)p
63d0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
63e0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
63f0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6400: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6410: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
6420: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
6430: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
6440: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
6450: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
6460: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
6470: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
6480: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
6490: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
64a0: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
64b0: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
64c0: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
64d0: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
64e0: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
64f0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6500: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
6510: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
6520: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
6530: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
6540: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
6550: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6560: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6570: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
6580: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
6590: 73 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74  sor) );.  assert
65a0: 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20  ( pOp->p2>=0 && 
65b0: 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
65c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
65d0: 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
65e0: 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f  3<p->nOp );.  pO
65f0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
6600: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21  p1];.  assert( !
6610: 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70  VdbeMemDynamic(p
6620: 4f 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  Out) );.  pOut->
6630: 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20  u.i = pOp->p3 - 
6640: 31 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  1;.  pOut->flags
6650: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66   = MEM_Int;.  if
6660: 28 20 70 4f 70 2d 3e 70 32 20 29 20 70 63 20 3d  ( pOp->p2 ) pc =
6670: 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
6680: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
6690: 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69  ode:  EndCorouti
66a0: 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ne P1 * * * *.**
66b0: 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74  .** The instruct
66c0: 69 6f 6e 20 61 74 20 74 68 65 20 61 64 64 72 65  ion at the addre
66d0: 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ss in register P
66e0: 31 20 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a  1 is a Yield..**
66f0: 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20   Jump to the P2 
6700: 70 61 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61  parameter of tha
6710: 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65  t Yield..** Afte
6720: 72 20 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69  r the jump, regi
6730: 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20  ster P1 becomes 
6740: 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
6750: 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43   See also: InitC
6760: 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65  oroutine.*/.case
6770: 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65   OP_EndCoroutine
6780: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
6790: 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70   in1 */.  VdbeOp
67a0: 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e   *pCaller;.  pIn
67b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
67c0: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
67d0: 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  n1->flags==MEM_I
67e0: 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
67f0: 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20  pIn1->u.i>=0 && 
6800: 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70  pIn1->u.i<p->nOp
6810: 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20   );.  pCaller = 
6820: 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b  &aOp[pIn1->u.i];
6830: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6840: 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59  er->opcode==OP_Y
6850: 69 65 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74  ield );.  assert
6860: 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30  ( pCaller->p2>=0
6870: 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c   && pCaller->p2<
6880: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 63 20 3d  p->nOp );.  pc =
6890: 20 70 43 61 6c 6c 65 72 2d 3e 70 32 20 2d 20 31   pCaller->p2 - 1
68a0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
68b0: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
68c0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
68d0: 4f 70 63 6f 64 65 3a 20 20 59 69 65 6c 64 20 50  Opcode:  Yield P
68e0: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
68f0: 20 53 77 61 70 20 74 68 65 20 70 72 6f 67 72 61   Swap the progra
6900: 6d 20 63 6f 75 6e 74 65 72 20 77 69 74 68 20 74  m counter with t
6910: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
6920: 73 74 65 72 20 50 31 2e 20 20 54 68 69 73 0a 2a  ster P1.  This.*
6930: 2a 20 68 61 73 20 74 68 65 20 65 66 66 65 63 74  * has the effect
6940: 20 6f 66 20 79 69 65 6c 64 69 6e 67 20 74 6f 20   of yielding to 
6950: 61 20 63 6f 72 6f 75 74 69 6e 65 2e 0a 2a 2a 0a  a coroutine..**.
6960: 2a 2a 20 49 66 20 74 68 65 20 63 6f 72 6f 75 74  ** If the corout
6970: 69 6e 65 20 74 68 61 74 20 69 73 20 6c 61 75 6e  ine that is laun
6980: 63 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  ched by this ins
6990: 74 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69  truction ends wi
69a0: 74 68 0a 2a 2a 20 59 69 65 6c 64 20 6f 72 20 52  th.** Yield or R
69b0: 65 74 75 72 6e 20 74 68 65 6e 20 63 6f 6e 74 69  eturn then conti
69c0: 6e 75 65 20 74 6f 20 74 68 65 20 6e 65 78 74 20  nue to the next 
69d0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42 75  instruction.  Bu
69e0: 74 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 72 6f  t if.** the coro
69f0: 75 74 69 6e 65 20 6c 61 75 6e 63 68 65 64 20 62  utine launched b
6a00: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6a10: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6a20: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 2c 20 74 68  EndCoroutine, th
6a30: 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 20 72 61  en jump to P2 ra
6a40: 74 68 65 72 20 74 68 61 6e 20 63 6f 6e 74 69 6e  ther than contin
6a50: 75 69 6e 67 20 77 69 74 68 20 74 68 65 0a 2a 2a  uing with the.**
6a60: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
6a70: 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  n..**.** See als
6a80: 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65  o: InitCoroutine
6a90: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 59 69 65 6c  .*/.case OP_Yiel
6aa0: 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  d: {            
6ab0: 2f 2a 20 69 6e 31 2c 20 6a 75 6d 70 20 2a 2f 0a  /* in1, jump */.
6ac0: 20 20 69 6e 74 20 70 63 44 65 73 74 3b 0a 20 20    int pcDest;.  
6ad0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6ae0: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6af0: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
6b00: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 70 49  pIn1)==0 );.  pI
6b10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6b20: 49 6e 74 3b 0a 20 20 70 63 44 65 73 74 20 3d 20  Int;.  pcDest = 
6b30: 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69 3b 0a  (int)pIn1->u.i;.
6b40: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
6b50: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6b60: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6b70: 29 3b 0a 20 20 70 63 20 3d 20 70 63 44 65 73 74  );.  pc = pcDest
6b80: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
6b90: 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66   Opcode:  HaltIf
6ba0: 4e 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50  Null  P1 P2 P3 P
6bb0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
6bc0: 3a 20 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c  :  if r[P3]=null
6bd0: 20 68 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63   halt.**.** Chec
6be0: 6b 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  k the value in r
6bf0: 65 67 69 73 74 65 72 20 50 33 2e 20 20 49 66 20  egister P3.  If 
6c00: 69 74 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  it is NULL then 
6c10: 48 61 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61  Halt using.** pa
6c20: 72 61 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20  rameter P1, P2, 
6c30: 61 6e 64 20 50 34 20 61 73 20 69 66 20 74 68 69  and P4 as if thi
6c40: 73 20 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e  s were a Halt in
6c50: 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74  struction.  If t
6c60: 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72  he.** value in r
6c70: 65 67 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f  egister P3 is no
6c80: 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69  t NULL, then thi
6c90: 73 20 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e  s routine is a n
6ca0: 6f 2d 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20  o-op..** The P5 
6cb0: 70 61 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64  parameter should
6cc0: 20 62 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f   be 1..*/.case O
6cd0: 50 5f 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20  P_HaltIfNull: { 
6ce0: 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
6cf0: 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
6d00: 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70  p->p3];.  if( (p
6d10: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
6d20: 5f 4e 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61  _Null)==0 ) brea
6d30: 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  k;.  /* Fall thr
6d40: 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c  ough into OP_Hal
6d50: 74 20 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  t */.}../* Opcod
6d60: 65 3a 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a  e:  Halt P1 P2 *
6d70: 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69   P4 P5.**.** Exi
6d80: 74 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20  t immediately.  
6d90: 41 6c 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73  All open cursors
6da0: 2c 20 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64  , etc are closed
6db0: 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  .** automaticall
6dc0: 79 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  y..**.** P1 is t
6dd0: 68 65 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72  he result code r
6de0: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
6df0: 65 33 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74  e3_exec(), sqlit
6e00: 65 33 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f  e3_reset(),.** o
6e10: 72 20 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69  r sqlite3_finali
6e20: 7a 65 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72  ze().  For a nor
6e30: 6d 61 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73  mal halt, this s
6e40: 68 6f 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f  hould be SQLITE_
6e50: 4f 4b 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65  OK (0)..** For e
6e60: 72 72 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65  rrors, it can be
6e70: 20 73 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75   some other valu
6e80: 65 2e 20 20 49 66 20 50 31 21 3d 30 20 74 68 65  e.  If P1!=0 the
6e90: 6e 20 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d  n P2 will determ
6ea0: 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f  ine.** whether o
6eb0: 72 20 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63  r not to rollbac
6ec0: 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72  k the current tr
6ed0: 61 6e 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e  ansaction.  Do n
6ee0: 6f 74 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69  ot rollback.** i
6ef0: 66 20 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44  f P2==OE_Fail. D
6f00: 6f 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69  o the rollback i
6f10: 66 20 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63  f P2==OE_Rollbac
6f20: 6b 2e 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62  k.  If P2==OE_Ab
6f30: 6f 72 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63  ort,.** then bac
6f40: 6b 20 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65  k out all change
6f50: 73 20 74 68 61 74 20 68 61 76 65 20 6f 63 63 75  s that have occu
6f60: 72 72 65 64 20 64 75 72 69 6e 67 20 74 68 69 73  rred during this
6f70: 20 65 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68   execution of th
6f80: 65 0a 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64  e.** VDBE, but d
6f90: 6f 20 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74  o not rollback t
6fa0: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20  he transaction. 
6fb0: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
6fc0: 6e 6f 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74  not null then it
6fd0: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73   is an error mes
6fe0: 73 61 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a  sage string..**.
6ff0: 2a 2a 20 50 35 20 69 73 20 61 20 76 61 6c 75 65  ** P5 is a value
7000: 20 62 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34   between 0 and 4
7010: 2c 20 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61  , inclusive, tha
7020: 74 20 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50  t modifies the P
7030: 34 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20  4 string..**.** 
7040: 20 20 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67     0:  (no chang
7050: 65 29 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54  e).**    1:  NOT
7060: 20 4e 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20   NULL contraint 
7070: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7080: 20 32 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73   2:  UNIQUE cons
7090: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
70a0: 34 0a 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43  4.**    3:  CHEC
70b0: 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  K constraint fai
70c0: 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a  led: P4.**    4:
70d0: 20 20 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f    FOREIGN KEY co
70e0: 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  nstraint failed:
70f0: 20 50 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20   P4.**.** If P5 
7100: 69 73 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20  is not zero and 
7110: 50 34 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e  P4 is NULL, then
7120: 20 65 76 65 72 79 74 68 69 6e 67 20 61 66 74 65   everything afte
7130: 72 20 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20  r the ":" is.** 
7140: 6f 6d 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54  omitted..**.** T
7150: 68 65 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69  here is an impli
7160: 65 64 20 22 48 61 6c 74 20 30 20 30 20 30 22 20  ed "Halt 0 0 0" 
7170: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65  instruction inse
7180: 72 74 65 64 20 61 74 20 74 68 65 20 76 65 72 79  rted at the very
7190: 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79   end of.** every
71a0: 20 70 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20   program.  So a 
71b0: 6a 75 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61  jump past the la
71c0: 73 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  st instruction o
71d0: 66 20 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a  f the program.**
71e0: 20 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20   is the same as 
71f0: 65 78 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a  executing Halt..
7200: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a  */.case OP_Halt:
7210: 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20   {.  const char 
7220: 2a 7a 54 79 70 65 3b 0a 20 20 63 6f 6e 73 74 20  *zType;.  const 
7230: 63 68 61 72 20 2a 7a 4c 6f 67 46 6d 74 3b 0a 0a  char *zLogFmt;..
7240: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d 3d 53    if( pOp->p1==S
7250: 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 2d 3e 70  QLITE_OK && p->p
7260: 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Frame ){.    /* 
7270: 48 61 6c 74 20 74 68 65 20 73 75 62 2d 70 72 6f  Halt the sub-pro
7280: 67 72 61 6d 2e 20 52 65 74 75 72 6e 20 63 6f 6e  gram. Return con
7290: 74 72 6f 6c 20 74 6f 20 74 68 65 20 70 61 72 65  trol to the pare
72a0: 6e 74 20 66 72 61 6d 65 2e 20 2a 2f 0a 20 20 20  nt frame. */.   
72b0: 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61   VdbeFrame *pFra
72c0: 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a  me = p->pFrame;.
72d0: 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d 20      p->pFrame = 
72e0: 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b  pFrame->pParent;
72f0: 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d  .    p->nFrame--
7300: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7310: 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
7320: 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 20  p->nChange);.   
7330: 20 70 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   pc = sqlite3Vdb
7340: 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28 70 46  eFrameRestore(pF
7350: 72 61 6d 65 29 3b 0a 20 20 20 20 6c 61 73 74 52  rame);.    lastR
7360: 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52  owid = db->lastR
7370: 6f 77 69 64 3b 0a 20 20 20 20 69 66 28 20 70 4f  owid;.    if( pO
7380: 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p2==OE_Ignore
7390: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73   ){.      /* Ins
73a0: 74 72 75 63 74 69 6f 6e 20 70 63 20 69 73 20 74  truction pc is t
73b0: 68 65 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68  he OP_Program th
73c0: 61 74 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73  at invoked the s
73d0: 75 62 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20  ub-program .    
73e0: 20 20 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62    ** currently b
73f0: 65 69 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20  eing halted. If 
7400: 74 68 65 20 70 32 20 69 6e 73 74 72 75 63 74 69  the p2 instructi
7410: 6f 6e 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61  on of this OP_Ha
7420: 6c 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74  lt.      ** inst
7430: 72 75 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74  ruction is set t
7440: 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65  o OE_Ignore, the
7450: 6e 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  n the sub-progra
7460: 6d 20 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20  m is throwing.  
7470: 20 20 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45      ** an IGNORE
7480: 20 65 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74   exception. In t
7490: 68 69 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f  his case jump to
74a0: 20 74 68 65 20 61 64 64 72 65 73 73 20 73 70 65   the address spe
74b0: 63 69 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20  cified.      ** 
74c0: 61 73 20 74 68 65 20 70 32 20 6f 66 20 74 68 65  as the p2 of the
74d0: 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
74e0: 72 61 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70  ram.  */.      p
74f0: 63 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 5d 2e 70  c = p->aOp[pc].p
7500: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7510: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7520: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7530: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7540: 20 20 70 2d 3e 72 63 20 3d 20 70 4f 70 2d 3e 70    p->rc = pOp->p
7550: 31 3b 0a 20 20 70 2d 3e 65 72 72 6f 72 41 63 74  1;.  p->errorAct
7560: 69 6f 6e 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70  ion = (u8)pOp->p
7570: 32 3b 0a 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b  2;.  p->pc = pc;
7580: 0a 20 20 69 66 28 20 70 2d 3e 72 63 20 29 7b 0a  .  if( p->rc ){.
7590: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
75a0: 29 7b 0a 20 20 20 20 20 20 73 74 61 74 69 63 20  ){.      static 
75b0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 20 63 6f 6e  const char * con
75c0: 73 74 20 61 7a 54 79 70 65 5b 5d 20 3d 20 7b 20  st azType[] = { 
75d0: 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20 22 55 4e 49  "NOT NULL", "UNI
75e0: 51 55 45 22 2c 20 22 43 48 45 43 4b 22 2c 0a 20  QUE", "CHECK",. 
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7610: 20 20 20 20 20 20 20 20 20 20 20 20 22 46 4f 52              "FOR
7620: 45 49 47 4e 20 4b 45 59 22 20 7d 3b 0a 20 20 20  EIGN KEY" };.   
7630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
7640: 70 35 3e 3d 31 20 26 26 20 70 4f 70 2d 3e 70 35  p5>=1 && pOp->p5
7650: 3c 3d 34 20 29 3b 0a 20 20 20 20 20 20 74 65 73  <=4 );.      tes
7660: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
7670: 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  1 );.      testc
7680: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 32 20  ase( pOp->p5==2 
7690: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
76a0: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20 29 3b  e( pOp->p5==3 );
76b0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
76c0: 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b 0a 20   pOp->p5==4 );. 
76d0: 20 20 20 20 20 7a 54 79 70 65 20 3d 20 61 7a 54       zType = azT
76e0: 79 70 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 3b 0a  ype[pOp->p5-1];.
76f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7700: 20 7a 54 79 70 65 20 3d 20 30 3b 0a 20 20 20 20   zType = 0;.    
7710: 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20 7a 54  }.    assert( zT
7720: 79 70 65 21 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  ype!=0 || pOp->p
7730: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 20 20 7a 4c  4.z!=0 );.    zL
7740: 6f 67 46 6d 74 20 3d 20 22 61 62 6f 72 74 20 61  ogFmt = "abort a
7750: 74 20 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73  t %d in [%s]: %s
7760: 22 3b 0a 20 20 20 20 69 66 28 20 7a 54 79 70 65  ";.    if( zType
7770: 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b   && pOp->p4.z ){
7780: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
7790: 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
77a0: 4d 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e  Msg, db, "%s con
77b0: 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20  straint failed: 
77c0: 25 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20  %s", .          
77d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7a 54 79               zTy
77e0: 70 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  pe, pOp->p4.z);.
77f0: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f      }else if( pO
7800: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7810: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7820: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7830: 62 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e 70 34  b, "%s", pOp->p4
7840: 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  .z);.    }else{.
7850: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
7860: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
7870: 73 67 2c 20 64 62 2c 20 22 25 73 20 63 6f 6e 73  sg, db, "%s cons
7880: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 22 2c 20  traint failed", 
7890: 7a 54 79 70 65 29 3b 0a 20 20 20 20 7d 0a 20 20  zType);.    }.  
78a0: 20 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f    sqlite3_log(pO
78b0: 70 2d 3e 70 31 2c 20 7a 4c 6f 67 46 6d 74 2c 20  p->p1, zLogFmt, 
78c0: 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d 3e  pc, p->zSql, p->
78d0: 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
78e0: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
78f0: 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73 65 72  Halt(p);.  asser
7900: 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  t( rc==SQLITE_BU
7910: 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45  SY || rc==SQLITE
7920: 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54  _OK || rc==SQLIT
7930: 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69 66 28  E_ERROR );.  if(
7940: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
7950: 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20 3d 20   ){.    p->rc = 
7960: 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
7970: 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
7980: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
7990: 45 5f 4f 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30  E_OK || (p->rc&0
79a0: 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e  xff)==SQLITE_CON
79b0: 53 54 52 41 49 4e 54 20 29 3b 0a 20 20 20 20 61  STRAINT );.    a
79c0: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
79d0: 45 5f 4f 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  E_OK || db->nDef
79e0: 65 72 72 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64  erredCons>0 || d
79f0: 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
7a00: 6f 6e 73 3e 30 20 29 3b 0a 20 20 20 20 72 63 20  ons>0 );.    rc 
7a10: 3d 20 70 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45  = p->rc ? SQLITE
7a20: 5f 45 52 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f  _ERROR : SQLITE_
7a30: 44 4f 4e 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f  DONE;.  }.  goto
7a40: 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a   vdbe_return;.}.
7a50: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65  ./* Opcode: Inte
7a60: 67 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ger P1 P2 * * *.
7a70: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
7a80: 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20  2]=P1.**.** The 
7a90: 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76  32-bit integer v
7aa0: 61 6c 75 65 20 50 31 20 69 73 20 77 72 69 74 74  alue P1 is writt
7ab0: 65 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  en into register
7ac0: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
7ad0: 49 6e 74 65 67 65 72 3a 20 7b 20 20 20 20 20 20  Integer: {      
7ae0: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
7af0: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7b00: 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  >u.i = pOp->p1;.
7b10: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
7b20: 70 63 6f 64 65 3a 20 49 6e 74 36 34 20 2a 20 50  pcode: Int64 * P
7b30: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
7b40: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
7b50: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
7b60: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
7b70: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e 0a   integer value..
7b80: 2a 2a 20 57 72 69 74 65 20 74 68 61 74 20 76 61  ** Write that va
7b90: 6c 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  lue into registe
7ba0: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
7bb0: 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20 20 20 20  _Int64: {       
7bc0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
7bd0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65  elease */.  asse
7be0: 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36 34  rt( pOp->p4.pI64
7bf0: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  !=0 );.  pOut->u
7c00: 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 49  .i = *pOp->p4.pI
7c10: 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  64;.  break;.}..
7c20: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
7c30: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
7c40: 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  NT./* Opcode: Re
7c50: 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a  al * P2 * P4 *.*
7c60: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
7c70: 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  ]=P4.**.** P4 is
7c80: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
7c90: 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67 20  64-bit floating 
7ca0: 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a 20  point value..** 
7cb0: 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75 65  Write that value
7cc0: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
7cd0: 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  2..*/.case OP_Re
7ce0: 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  al: {           
7cf0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 46   /* same as TK_F
7d00: 4c 4f 41 54 2c 20 6f 75 74 32 2d 70 72 65 72 65  LOAT, out2-prere
7d10: 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74 2d  lease */.  pOut-
7d20: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61  >flags = MEM_Rea
7d30: 6c 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71  l;.  assert( !sq
7d40: 6c 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d  lite3IsNaN(*pOp-
7d50: 3e 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20  >p4.pReal) );.  
7d60: 70 4f 75 74 2d 3e 72 20 3d 20 2a 70 4f 70 2d 3e  pOut->r = *pOp->
7d70: 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65 61  p4.pReal;.  brea
7d80: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
7d90: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38 20  Opcode: String8 
7da0: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
7db0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27  ynopsis: r[P2]='
7dc0: 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P4'.**.** P4 poi
7dd0: 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65 72  nts to a nul ter
7de0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
7df0: 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f 64  ring. This opcod
7e00: 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65 64  e is transformed
7e10: 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72 69   .** into a Stri
7e20: 6e 67 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  ng before it is 
7e30: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
7e40: 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75   first time.  Du
7e50: 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61  ring.** this tra
7e60: 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  nsformation, the
7e70: 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e   length of strin
7e80: 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64  g P4 is computed
7e90: 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61   and stored.** a
7ea0: 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74  s the P1 paramet
7eb0: 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  er..*/.case OP_S
7ec0: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
7ed0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
7ee0: 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65  STRING, out2-pre
7ef0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
7f00: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
7f10: 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  0 );.  pOp->opco
7f20: 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a  de = OP_String;.
7f30: 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69    pOp->p1 = sqli
7f40: 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d  te3Strlen30(pOp-
7f50: 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66  >p4.z);..#ifndef
7f60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46   SQLITE_OMIT_UTF
7f70: 31 36 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e  16.  if( encodin
7f80: 67 21 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29  g!=SQLITE_UTF8 )
7f90: 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
7fa0: 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28  e3VdbeMemSetStr(
7fb0: 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c  pOut, pOp->p4.z,
7fc0: 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38   -1, SQLITE_UTF8
7fd0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
7fe0: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51  ;.    if( rc==SQ
7ff0: 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f  LITE_TOOBIG ) go
8000: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
8010: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73  if( SQLITE_OK!=s
8020: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
8030: 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65  Encoding(pOut, e
8040: 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20  ncoding) ) goto 
8050: 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65  no_mem;.    asse
8060: 72 74 28 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f  rt( pOut->zMallo
8070: 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20  c==pOut->z );.  
8080: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
8090: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d  mDynamic(pOut)==
80a0: 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a  0 );.    pOut->z
80b0: 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20  Malloc = 0;.    
80c0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d  pOut->flags |= M
80d0: 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20 20 20 69  EM_Static;.    i
80e0: 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  f( pOp->p4type==
80f0: 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20  P4_DYNAMIC ){.  
8100: 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
8110: 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  e(db, pOp->p4.z)
8120: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d  ;.    }.    pOp-
8130: 3e 70 34 74 79 70 65 20 3d 20 50 34 5f 44 59 4e  >p4type = P4_DYN
8140: 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70  AMIC;.    pOp->p
8150: 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20  4.z = pOut->z;. 
8160: 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75     pOp->p1 = pOu
8170: 74 2d 3e 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t->n;.  }.#endif
8180: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64  .  if( pOp->p1>d
8190: 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45  b->aLimit[SQLITE
81a0: 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29  _LIMIT_LENGTH] )
81b0: 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
81c0: 69 67 3b 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c  ig;.  }.  /* Fal
81d0: 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
81e0: 20 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53   next case, OP_S
81f0: 74 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a  tring */.}.  ./*
8200: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20   Opcode: String 
8210: 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
8220: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8230: 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a  'P4' (len=P1).**
8240: 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20 76  .** The string v
8250: 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67 74  alue P4 of lengt
8260: 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73 20  h P1 (bytes) is 
8270: 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
8280: 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  er P2..*/.case O
8290: 50 5f 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20  P_String: {     
82a0: 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
82b0: 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73  release */.  ass
82c0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d  ert( pOp->p4.z!=
82d0: 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  0 );.  pOut->fla
82e0: 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  gs = MEM_Str|MEM
82f0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d  _Static|MEM_Term
8300: 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f  ;.  pOut->z = pO
8310: 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d  p->p4.z;.  pOut-
8320: 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  >n = pOp->p1;.  
8330: 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f  pOut->enc = enco
8340: 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d  ding;.  UPDATE_M
8350: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
8360: 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
8370: 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50  * Opcode: Null P
8380: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
8390: 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e  ynopsis:  r[P2..
83a0: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
83b0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
83c0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
83d0: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
83e0: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
83f0: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
8400: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8410: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8420: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8430: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8440: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8450: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8460: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
8470: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
8480: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
8490: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
84a0: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
84b0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
84c0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
84d0: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
84e0: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
84f0: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
8500: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
8510: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
8520: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
8530: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
8540: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
8550: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
8560: 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
8570: 6e 74 20 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75  nt cnt;.  u16 nu
8580: 6c 6c 46 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20  llFlag;.  cnt = 
8590: 70 4f 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b  pOp->p3-pOp->p2;
85a0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
85b0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
85c0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
85d0: 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c  ut->flags = null
85e0: 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f  Flag = pOp->p1 ?
85f0: 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43   (MEM_Null|MEM_C
8600: 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75  leared) : MEM_Nu
8610: 6c 6c 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e 74  ll;.  while( cnt
8620: 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b  >0 ){.    pOut++
8630: 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f  ;.    memAboutTo
8640: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
8650: 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65 6c 65  .    VdbeMemRele
8660: 61 73 65 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ase(pOut);.    p
8670: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8680: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8690: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
86a0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
86b0: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
86c0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
86d0: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
86e0: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
86f0: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8700: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8710: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8720: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8730: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8740: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8750: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8760: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8770: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8780: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8790: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
87a0: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
87b0: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
87c0: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
87d0: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
87e0: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
87f0: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8800: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8810: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8820: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8830: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8840: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8850: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8860: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8870: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8880: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8890: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
88a0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
88b0: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
88c0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
88d0: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
88e0: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
88f0: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8900: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8910: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8920: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8930: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8940: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8950: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8960: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8970: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8980: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
8990: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
89a0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
89b0: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
89c0: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
89d0: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
89e0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
89f0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
8a00: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
8a10: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
8a20: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
8a30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8a40: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
8a50: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
8a60: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
8a70: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
8a80: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
8a90: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
8aa0: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
8ab0: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
8ac0: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
8ad0: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
8ae0: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
8af0: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
8b00: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
8b10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
8b20: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
8b30: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8b40: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
8b50: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
8b60: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
8b70: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
8b80: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
8b90: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
8ba0: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
8bb0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
8bc0: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
8bd0: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
8be0: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
8bf0: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
8c00: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
8c10: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
8c20: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
8c30: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
8c40: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
8c50: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
8c60: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
8c70: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
8c80: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
8c90: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
8ca0: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
8cb0: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
8cc0: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
8cd0: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
8ce0: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
8cf0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
8d00: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
8d10: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
8d20: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
8d30: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
8d40: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
8d50: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
8d60: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
8d70: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
8d80: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
8d90: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
8da0: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
8db0: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
8dc0: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
8dd0: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
8de0: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
8df0: 20 63 68 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20   char *zMalloc; 
8e00: 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72    /* Holding var
8e10: 69 61 62 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61  iable for alloca
8e20: 74 65 64 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20  ted memory */.  
8e30: 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
8e40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65   /* Number of re
8e50: 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f 20  gisters left to 
8e60: 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31  copy */.  int p1
8e70: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
8e80: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 66  gister to copy f
8e90: 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b  rom */.  int p2;
8ea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
8eb0: 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74 6f  ister to copy to
8ec0: 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e   */..  n = pOp->
8ed0: 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e  p3;.  p1 = pOp->
8ee0: 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  p1;.  p2 = pOp->
8ef0: 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e  p2;.  assert( n>
8f00: 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32 3e  0 && p1>0 && p2>
8f10: 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
8f20: 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c  1+n<=p2 || p2+n<
8f30: 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d  =p1 );..  pIn1 =
8f40: 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f   &aMem[p1];.  pO
8f50: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  ut = &aMem[p2];.
8f60: 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74    do{.    assert
8f70: 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70  ( pOut<=&aMem[(p
8f80: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
8f90: 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
8fa0: 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28  t( pIn1<=&aMem[(
8fb0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
8fc0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
8fd0: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
8fe0: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
8ff0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
9000: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
9010: 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
9020: 28 70 4f 75 74 29 3b 0a 20 20 20 20 7a 4d 61 6c  (pOut);.    zMal
9030: 6c 6f 63 20 3d 20 70 4f 75 74 2d 3e 7a 4d 61 6c  loc = pOut->zMal
9040: 6c 6f 63 3b 0a 20 20 20 20 6d 65 6d 63 70 79 28  loc;.    memcpy(
9050: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 73 69 7a 65  pOut, pIn1, size
9060: 6f 66 28 4d 65 6d 29 29 3b 0a 23 69 66 64 65 66  of(Mem));.#ifdef
9070: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
9080: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
9090: 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70 31  pyFrom>=&aMem[p1
90a0: 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f 70  ] && pOut->pScop
90b0: 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31 2b 70  yFrom<&aMem[p1+p
90c0: 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20 20 20  Op->p3] ){.     
90d0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
90e0: 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d 3e 70  m += p1 - pOp->p
90f0: 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  2;.    }.#endif.
9100: 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20      pIn1->flags 
9110: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
9120: 0a 20 20 20 20 70 49 6e 31 2d 3e 78 44 65 6c 20  .    pIn1->xDel 
9130: 3d 20 30 3b 0a 20 20 20 20 70 49 6e 31 2d 3e 7a  = 0;.    pIn1->z
9140: 4d 61 6c 6c 6f 63 20 3d 20 7a 4d 61 6c 6c 6f 63  Malloc = zMalloc
9150: 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
9160: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9170: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9180: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9190: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
91a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
91b0: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
91c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
91d0: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
91e0: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
91f0: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
9200: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
9210: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
9220: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
9230: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
9240: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
9250: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9260: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9270: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9280: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9290: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
92a0: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
92b0: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
92c0: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
92d0: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
92e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
92f0: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
9300: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
9310: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
9320: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
9330: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9340: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
9350: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9360: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9370: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9380: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9390: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
93a0: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
93b0: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
93c0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
93d0: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
93e0: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
93f0: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
9400: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
9410: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
9420: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
9430: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
9440: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9450: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9460: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9470: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9480: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9490: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
94a0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
94b0: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
94c0: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
94d0: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
94e0: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
94f0: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9500: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9510: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9520: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9530: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9540: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9550: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9560: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9570: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9580: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9590: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
95a0: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
95b0: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
95c0: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
95d0: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
95e0: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
95f0: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9600: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9610: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9620: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9630: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9640: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9650: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9660: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9670: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9680: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9690: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
96a0: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
96b0: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
96c0: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
96d0: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
96e0: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
96f0: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9700: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9710: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9720: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9730: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9740: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9750: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9760: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9770: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9780: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9790: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
97a0: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
97b0: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
97c0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
97d0: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
97e0: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
97f0: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9800: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9810: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9820: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9830: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9840: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9850: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9860: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9870: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9880: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9890: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
98a0: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
98b0: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
98c0: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
98d0: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
98e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
98f0: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9900: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9910: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9920: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9930: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9940: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9950: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9960: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9970: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9980: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9990: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
99a0: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
99b0: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
99c0: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
99d0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
99e0: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
99f0: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9a00: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9a10: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9a20: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9a30: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9a40: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9a50: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
9a60: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
9a70: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
9a80: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
9a90: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
9aa0: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
9ab0: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
9ac0: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
9ad0: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
9ae0: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
9af0: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
9b00: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
9b10: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
9b20: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
9b30: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
9b40: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
9b50: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
9b60: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
9b70: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
9b80: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
9b90: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
9ba0: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
9bb0: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
9bc0: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
9bd0: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
9be0: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
9bf0: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
9c00: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
9c10: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
9c20: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
9c30: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
9c40: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
9c50: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
9c60: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
9c70: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
9c80: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
9c90: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
9ca0: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
9cb0: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
9cc0: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
9cd0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
9ce0: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
9cf0: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
9d00: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
9d10: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
9d20: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
9d30: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
9d40: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
9d50: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
9d60: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
9d70: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
9d80: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
9d90: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
9da0: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
9db0: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
9dc0: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
9dd0: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
9de0: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
9df0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
9e00: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
9e10: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
9e20: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
9e30: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
9e40: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
9e50: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
9e60: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
9e70: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
9e80: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
9e90: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
9ea0: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
9eb0: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
9ec0: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
9ed0: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
9ee0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
9ef0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
9f00: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
9f10: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
9f20: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
9f30: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
9f40: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
9f50: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
9f60: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
9f70: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
9f80: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
9f90: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
9fa0: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
9fb0: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
9fc0: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
9fd0: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
9fe0: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
9ff0: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a000: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a010: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a020: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a030: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a040: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a050: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a060: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a070: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a080: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a090: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a0a0: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a0b0: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a0c0: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a0d0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a0e0: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a0f0: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a100: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a110: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a120: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a130: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a140: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a150: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a160: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a170: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a180: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a190: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a1a0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a1b0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a1c0: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a1d0: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a1e0: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a1f0: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a200: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a210: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a220: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a230: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a240: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a250: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a260: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a270: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a280: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a290: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a2a0: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a2b0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a2c0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a2d0: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a2e0: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a2f0: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a300: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a310: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a320: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a330: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a340: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a350: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a360: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a370: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a380: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a390: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a3a0: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a3b0: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a3c0: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a3d0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a3e0: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a3f0: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a400: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a410: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a420: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a430: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a440: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a450: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
a460: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
a470: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
a480: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
a490: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
a4a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a4b0: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
a4c0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
a4d0: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
a4e0: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
a4f0: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
a500: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
a510: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
a520: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
a530: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
a540: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
a550: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
a560: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
a570: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
a580: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
a590: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
a5a0: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
a5b0: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
a5c0: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
a5d0: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
a5e0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
a5f0: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
a600: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
a610: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
a620: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
a630: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
a640: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
a650: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
a660: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
a670: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
a680: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
a690: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
a6a0: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
a6b0: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
a6c0: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
a6d0: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
a6e0: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
a6f0: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
a700: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
a710: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
a720: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
a730: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
a740: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
a750: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
a760: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
a770: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
a780: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
a790: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
a7a0: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
a7b0: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
a7c0: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
a7d0: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
a7e0: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
a7f0: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
a800: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
a810: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
a820: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
a830: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
a840: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
a850: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a860: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
a870: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
a880: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
a890: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
a8a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
a8b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
a8c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
a8d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
a8e0: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
a8f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a900: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
a910: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
a920: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
a930: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
a940: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
a950: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
a960: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
a970: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
a980: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
a990: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
a9a0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
a9b0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
a9c0: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
a9d0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
a9e0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
a9f0: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
aa00: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
aa10: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
aa20: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
aa30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
aa40: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aa50: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
aa60: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
aa70: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
aa80: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
aa90: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
aaa0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
aab0: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
aac0: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
aad0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
aae0: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
aaf0: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
ab00: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ab10: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
ab20: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
ab30: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
ab40: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
ab50: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
ab60: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
ab70: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
ab80: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
ab90: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
aba0: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
abb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
abc0: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
abd0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
abe0: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
abf0: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
ac00: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
ac10: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
ac20: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
ac30: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ac40: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
ac50: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
ac60: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
ac70: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ac80: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
ac90: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
aca0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
acb0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
acc0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
acd0: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
ace0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
acf0: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
ad00: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
ad10: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
ad20: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
ad30: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
ad40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ad50: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
ad60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
ad70: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
ad80: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
ad90: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
ada0: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
adb0: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
adc0: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
add0: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
ade0: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
adf0: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
ae00: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
ae10: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
ae20: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
ae30: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
ae40: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
ae50: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
ae60: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
ae70: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
ae80: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
ae90: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
aea0: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
aeb0: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
aec0: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
aed0: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
aee0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
aef0: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
af00: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
af10: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
af20: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
af30: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
af40: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
af50: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
af60: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
af70: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
af80: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
af90: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
afa0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
afb0: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
afc0: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
afd0: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
afe0: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
aff0: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b000: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b010: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b020: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b030: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b040: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b050: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b060: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b070: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b080: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b090: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b0a0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b0b0: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b0c0: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b0d0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b0e0: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b0f0: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b100: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b110: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b120: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b130: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b140: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b150: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b160: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b170: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b180: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b190: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b1a0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b1b0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b1c0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b1d0: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b1e0: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b1f0: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b200: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b210: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b220: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b230: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b240: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b250: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b260: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b270: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b280: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b290: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b2a0: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b2b0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b2c0: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b2d0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b2e0: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b2f0: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b300: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b310: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b320: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b330: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b340: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b350: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b360: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b370: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b380: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b390: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b3a0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b3b0: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b3c0: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b3d0: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b3e0: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b3f0: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b400: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b410: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b420: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b430: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b440: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b450: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
b460: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
b470: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
b480: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b490: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b4a0: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
b4b0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b4c0: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
b4d0: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
b4e0: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
b4f0: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
b500: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b510: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b520: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b530: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b540: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b550: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
b560: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
b570: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
b580: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
b590: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
b5a0: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
b5b0: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b5c0: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
b5d0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b5e0: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
b5f0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
b600: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
b610: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
b620: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
b630: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
b640: 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53  r = rB;.    MemS
b650: 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
b660: 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20   MEM_Real);.    
b670: 69 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65  if( ((type1|type
b680: 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20  2)&MEM_Real)==0 
b690: 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20  && !bIntint ){. 
b6a0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b6b0: 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28  IntegerAffinity(
b6c0: 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  pOut);.    }.#en
b6d0: 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
b6e0: 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  ..arithmetic_res
b6f0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73  ult_is_null:.  s
b700: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
b710: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72  Null(pOut);.  br
b720: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
b730: 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20  e: CollSeq P1 * 
b740: 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  * P4.**.** P4 is
b750: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
b760: 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20  CollSeq struct. 
b770: 49 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c  If the next call
b780: 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74   to a user funct
b790: 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67  ion.** or aggreg
b7a0: 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65  ate calls sqlite
b7b0: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
b7c0: 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f  ), this collatio
b7d0: 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a  n sequence will.
b7e0: 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20  ** be returned. 
b7f0: 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20  This is used by 
b800: 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e  the built-in min
b810: 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75  (), max() and nu
b820: 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69  llif().** functi
b830: 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ons..**.** If P1
b840: 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
b850: 65 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73  en it is a regis
b860: 74 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65  ter that a subse
b870: 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a  quent min() or.*
b880: 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74  * max() aggregat
b890: 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20  e will set to 1 
b8a0: 69 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  if the current r
b8b0: 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69  ow is not the mi
b8c0: 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69  nimum or.** maxi
b8d0: 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67  mum.  The P1 reg
b8e0: 69 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c  ister is initial
b8f0: 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69  ized to 0 by thi
b900: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
b910: 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
b920: 63 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69  ce used by the i
b930: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
b940: 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f   the aforementio
b950: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a  ned functions.**
b960: 20 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65   to retrieve the
b970: 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65   collation seque
b980: 6e 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20  nce set by this 
b990: 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76  opcode is not av
b9a0: 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69  ailable.** publi
b9b0: 63 6c 79 2c 20 6f 6e 6c 79 20 74 6f 20 75 73 65  cly, only to use
b9c0: 72 20 66 75 6e 63 74 69 6f 6e 73 20 64 65 66 69  r functions defi
b9d0: 6e 65 64 20 69 6e 20 66 75 6e 63 2e 63 2e 0a 2a  ned in func.c..*
b9e0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
b9f0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
ba00: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
ba10: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
ba20: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
ba30: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
ba40: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
ba50: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
ba60: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
ba70: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31  ode: Function P1
ba80: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ba90: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
baa0: 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a  func(r[P2@P5]).*
bab0: 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73  *.** Invoke a us
bac0: 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20  er function (P4 
bad0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bae0: 61 20 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63  a Function struc
baf0: 74 75 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66  ture that.** def
bb00: 69 6e 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  ines the functio
bb10: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
bb20: 65 6e 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ents taken from 
bb30: 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a  register P2 and.
bb40: 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  ** successors.  
bb50: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
bb60: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
bb70: 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
bb80: 20 50 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72   P3..** Register
bb90: 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20   P3 must not be 
bba0: 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  one of the funct
bbb0: 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a  ion inputs..**.*
bbc0: 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69 74  * P1 is a 32-bit
bbd0: 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74   bitmask indicat
bbe0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
bbf0: 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74  ot each argument
bc00: 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63   to the .** func
bc10: 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69  tion was determi
bc20: 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61  ned to be consta
bc30: 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69  nt at compile ti
bc40: 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73 74  me. If the first
bc50: 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73  .** argument was
bc60: 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62   constant then b
bc70: 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73 65  it 0 of P1 is se
bc80: 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20  t. This is used 
bc90: 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  to determine.** 
bca0: 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61 74  whether meta dat
bcb0: 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  a associated wit
bcc0: 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  h a user functio
bcd0: 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67  n argument using
bce0: 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
bcf0: 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41 50  set_auxdata() AP
bd00: 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20  I may be safely 
bd10: 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74  retained until t
bd20: 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63  he next.** invoc
bd30: 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70  ation of this op
bd40: 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  code..**.** See 
bd50: 61 6c 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e  also: AggStep an
bd60: 64 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61  d AggFinal.*/.ca
bd70: 73 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20  se OP_Function: 
bd80: 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d  {.  int i;.  Mem
bd90: 20 2a 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65   *pArg;.  sqlite
bda0: 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
bdb0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
bdc0: 2a 61 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b  *apVal;.  int n;
bdd0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b  ..  n = pOp->p5;
bde0: 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
bdf0: 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
be00: 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
be10: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
be20: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
be30: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
be40: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
be50: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
be60: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
be70: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20  nge(p, pOut);.. 
be80: 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c   assert( n==0 ||
be90: 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70   (pOp->p2>0 && p
bea0: 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d  Op->p2+n<=(p->nM
beb0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
bec0: 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
bed0: 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20 7c  Op->p3<pOp->p2 |
bee0: 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e  | pOp->p3>=pOp->
bef0: 70 32 2b 6e 20 29 3b 0a 20 20 70 41 72 67 20 3d  p2+n );.  pArg =
bf00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
bf10: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
bf20: 20 69 2b 2b 2c 20 70 41 72 67 2b 2b 29 7b 0a 20   i++, pArg++){. 
bf30: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
bf40: 56 61 6c 69 64 28 70 41 72 67 29 20 29 3b 0a 20  Valid(pArg) );. 
bf50: 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 41     apVal[i] = pA
bf60: 72 67 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65  rg;.    Deepheme
bf70: 72 61 6c 69 7a 65 28 70 41 72 67 29 3b 0a 20 20  ralize(pArg);.  
bf80: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
bf90: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 41 72 67  (pOp->p2+i, pArg
bfa0: 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74  );.  }..  assert
bfb0: 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
bfc0: 34 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 63  4_FUNCDEF );.  c
bfd0: 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e  tx.pFunc = pOp->
bfe0: 70 34 2e 70 46 75 6e 63 3b 0a 20 20 63 74 78 2e  p4.pFunc;.  ctx.
bff0: 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78 2e  iOp = pc;.  ctx.
c000: 70 56 64 62 65 20 3d 20 70 3b 0a 0a 20 20 2f 2a  pVdbe = p;..  /*
c010: 20 54 68 65 20 6f 75 74 70 75 74 20 63 65 6c 6c   The output cell
c020: 20 6d 61 79 20 61 6c 72 65 61 64 79 20 68 61 76   may already hav
c030: 65 20 61 20 62 75 66 66 65 72 20 61 6c 6c 6f 63  e a buffer alloc
c040: 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20  ated. Move.  ** 
c050: 74 68 65 20 70 6f 69 6e 74 65 72 20 74 6f 20 63  the pointer to c
c060: 74 78 2e 73 20 73 6f 20 69 6e 20 63 61 73 65 20  tx.s so in case 
c070: 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69 6f  the user-functio
c080: 6e 20 63 61 6e 20 75 73 65 0a 20 20 2a 2a 20 74  n can use.  ** t
c090: 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  he already alloc
c0a0: 61 74 65 64 20 62 75 66 66 65 72 20 69 6e 73 74  ated buffer inst
c0b0: 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74 69 6e  ead of allocatin
c0c0: 67 20 61 20 6e 65 77 20 6f 6e 65 2e 0a 20 20 2a  g a new one..  *
c0d0: 2f 0a 20 20 6d 65 6d 63 70 79 28 26 63 74 78 2e  /.  memcpy(&ctx.
c0e0: 73 2c 20 70 4f 75 74 2c 20 73 69 7a 65 6f 66 28  s, pOut, sizeof(
c0f0: 4d 65 6d 29 29 3b 0a 20 20 70 4f 75 74 2d 3e 66  Mem));.  pOut->f
c100: 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b  lags = MEM_Null;
c110: 0a 20 20 70 4f 75 74 2d 3e 78 44 65 6c 20 3d 20  .  pOut->xDel = 
c120: 30 3b 0a 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c  0;.  pOut->zMall
c130: 6f 63 20 3d 20 30 3b 0a 20 20 4d 65 6d 53 65 74  oc = 0;.  MemSet
c140: 54 79 70 65 46 6c 61 67 28 26 63 74 78 2e 73 2c  TypeFlag(&ctx.s,
c150: 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20 63   MEM_Null);..  c
c160: 74 78 2e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  tx.fErrorOrAux =
c170: 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70 46   0;.  if( ctx.pF
c180: 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20 26  unc->funcFlags &
c190: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45   SQLITE_FUNC_NEE
c1a0: 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73 73  DCOLL ){.    ass
c1b0: 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a  ert( pOp>aOp );.
c1c0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
c1d0: 2d 31 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43  -1].p4type==P4_C
c1e0: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73  OLLSEQ );.    as
c1f0: 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70  sert( pOp[-1].op
c200: 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71  code==OP_CollSeq
c210: 20 29 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c   );.    ctx.pCol
c220: 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70  l = pOp[-1].p4.p
c230: 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e  Coll;.  }.  db->
c240: 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
c250: 52 6f 77 69 64 3b 0a 20 20 28 2a 63 74 78 2e 70  Rowid;.  (*ctx.p
c260: 46 75 6e 63 2d 3e 78 46 75 6e 63 29 28 26 63 74  Func->xFunc)(&ct
c270: 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
c280: 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
c290: 32 33 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77  230 */.  lastRow
c2a0: 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77  id = db->lastRow
c2b0: 69 64 3b 0a 0a 20 20 69 66 28 20 64 62 2d 3e 6d  id;..  if( db->m
c2c0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 7b 0a 20  allocFailed ){. 
c2d0: 20 20 20 2f 2a 20 45 76 65 6e 20 74 68 6f 75 67     /* Even thoug
c2e0: 68 20 61 20 6d 61 6c 6c 6f 63 28 29 20 68 61 73  h a malloc() has
c2f0: 20 66 61 69 6c 65 64 2c 20 74 68 65 20 69 6d 70   failed, the imp
c300: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  lementation of t
c310: 68 65 0a 20 20 20 20 2a 2a 20 75 73 65 72 20 66  he.    ** user f
c320: 75 6e 63 74 69 6f 6e 20 6d 61 79 20 68 61 76 65  unction may have
c330: 20 63 61 6c 6c 65 64 20 61 6e 20 73 71 6c 69 74   called an sqlit
c340: 65 33 5f 72 65 73 75 6c 74 5f 58 58 58 28 29 20  e3_result_XXX() 
c350: 66 75 6e 63 74 69 6f 6e 0a 20 20 20 20 2a 2a 20  function.    ** 
c360: 74 6f 20 72 65 74 75 72 6e 20 61 20 76 61 6c 75  to return a valu
c370: 65 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e. The following
c380: 20 63 61 6c 6c 20 72 65 6c 65 61 73 65 73 20 61   call releases a
c390: 6e 79 20 72 65 73 6f 75 72 63 65 73 0a 20 20 20  ny resources.   
c3a0: 20 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20 77   ** associated w
c3b0: 69 74 68 20 73 75 63 68 20 61 20 76 61 6c 75 65  ith such a value
c3c0: 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c  ..    */.    sql
c3d0: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
c3e0: 73 65 28 26 63 74 78 2e 73 29 3b 0a 20 20 20 20  se(&ctx.s);.    
c3f0: 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
c400: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
c410: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
c420: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
c430: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
c440: 20 20 69 66 28 20 63 74 78 2e 66 45 72 72 6f 72    if( ctx.fError
c450: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
c460: 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29 7b 0a   ctx.isError ){.
c470: 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74        sqlite3Set
c480: 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
c490: 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
c4a0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
c4b0: 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 20  (&ctx.s));.     
c4c0: 20 72 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f   rc = ctx.isErro
c4d0: 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  r;.    }.    sql
c4e0: 69 74 65 33 56 64 62 65 44 65 6c 65 74 65 41 75  ite3VdbeDeleteAu
c4f0: 78 44 61 74 61 28 70 2c 20 70 63 2c 20 70 4f 70  xData(p, pc, pOp
c500: 2d 3e 70 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  ->p1);.  }..  /*
c510: 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c 74   Copy the result
c520: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c530: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
c540: 33 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  3 */.  sqlite3Vd
c550: 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
c560: 28 26 63 74 78 2e 73 2c 20 65 6e 63 6f 64 69 6e  (&ctx.s, encodin
c570: 67 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  g);.  assert( pO
c580: 75 74 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e  ut->flags==MEM_N
c590: 75 6c 6c 20 29 3b 0a 20 20 6d 65 6d 63 70 79 28  ull );.  memcpy(
c5a0: 70 4f 75 74 2c 20 26 63 74 78 2e 73 2c 20 73 69  pOut, &ctx.s, si
c5b0: 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 69 66  zeof(Mem));.  if
c5c0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
c5d0: 54 6f 6f 42 69 67 28 70 4f 75 74 29 20 29 7b 0a  TooBig(pOut) ){.
c5e0: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
c5f0: 3b 0a 20 20 7d 0a 0a 23 69 66 20 30 0a 20 20 2f  ;.  }..#if 0.  /
c600: 2a 20 54 68 65 20 61 70 70 2d 64 65 66 69 6e 65  * The app-define
c610: 64 20 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 64  d function has d
c620: 6f 6e 65 20 73 6f 6d 65 74 68 69 6e 67 20 74 68  one something th
c630: 61 74 20 61 73 20 63 61 75 73 65 64 20 74 68 69  at as caused thi
c640: 73 0a 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74  s.  ** statement
c650: 20 74 6f 20 65 78 70 69 72 65 2e 20 20 28 50 65   to expire.  (Pe
c660: 72 68 61 70 73 20 74 68 65 20 66 75 6e 63 74 69  rhaps the functi
c670: 6f 6e 20 63 61 6c 6c 65 64 20 73 71 6c 69 74 65  on called sqlite
c680: 33 5f 65 78 65 63 28 29 0a 20 20 2a 2a 20 77 69  3_exec().  ** wi
c690: 74 68 20 61 20 43 52 45 41 54 45 20 54 41 42 4c  th a CREATE TABL
c6a0: 45 20 73 74 61 74 65 6d 65 6e 74 2e 29 0a 20 20  E statement.).  
c6b0: 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 65 78 70 69  */.  if( p->expi
c6c0: 72 65 64 20 29 20 72 63 20 3d 20 53 51 4c 49 54  red ) rc = SQLIT
c6d0: 45 5f 41 42 4f 52 54 3b 0a 23 65 6e 64 69 66 0a  E_ABORT;.#endif.
c6e0: 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
c6f0: 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29  E(pOp->p3, pOut)
c700: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
c710: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
c720: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
c730: 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31 20  code: BitAnd P1 
c740: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
c750: 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b  opsis:  r[P3]=r[
c760: 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1]&r[P2].**.** 
c770: 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73  Take the bit-wis
c780: 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c  e AND of the val
c790: 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ues in register 
c7a0: 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a  P1 and P2 and.**
c7b0: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
c7c0: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
c7d0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
c7e0: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
c7f0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
c800: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
c810: 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20 2a  BitOr P1 P2 P3 *
c820: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
c830: 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b 50   r[P3]=r[P1]|r[P
c840: 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68  2].**.** Take th
c850: 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f 66  e bit-wise OR of
c860: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
c870: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
c880: 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74  2 and.** store t
c890: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
c8a0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
c8b0: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
c8c0: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
c8d0: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
c8e0: 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65 66  Opcode: ShiftLef
c8f0: 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
c900: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
c910: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
c920: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
c930: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
c940: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
c950: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
c960: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
c970: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
c980: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
c990: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
c9a0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
c9b0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
c9c0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
c9d0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
c9e0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
c9f0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
ca00: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
ca10: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
ca20: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e  :  r[P3]=r[P2]>>
ca30: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
ca40: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
ca50: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ca60: 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20  P2 to the right 
ca70: 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72  by the.** number
ca80: 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69   of bits specifi
ca90: 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65  ed by the intege
caa0: 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  r in register P1
cab0: 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72  ..** Store the r
cac0: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
cad0: 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68  r P3..** If eith
cae0: 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
caf0: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
cb00: 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
cb10: 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20  _BitAnd:        
cb20: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cb30: 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69   as TK_BITAND, i
cb40: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cb50: 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20  .case OP_BitOr: 
cb60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb70: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42   /* same as TK_B
cb80: 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  ITOR, in1, in2, 
cb90: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
cba0: 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20  ShiftLeft:      
cbb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
cbc0: 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e  as TK_LSHIFT, in
cbd0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
cbe0: 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67  case OP_ShiftRig
cbf0: 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ht: {           
cc00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53  /* same as TK_RS
cc10: 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  HIFT, in1, in2, 
cc20: 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41  out3 */.  i64 iA
cc30: 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36  ;.  u64 uA;.  i6
cc40: 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a  4 iB;.  u8 op;..
cc50: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
cc60: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20  Op->p1];.  pIn2 
cc70: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
cc80: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
cc90: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28  [pOp->p3];.  if(
cca0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20   (pIn1->flags | 
ccb0: 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d  pIn2->flags) & M
ccc0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73  EM_Null ){.    s
ccd0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
cce0: 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20  Null(pOut);.    
ccf0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20  break;.  }.  iA 
cd00: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74  = sqlite3VdbeInt
cd10: 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69  Value(pIn2);.  i
cd20: 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  B = sqlite3VdbeI
cd30: 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20  ntValue(pIn1);. 
cd40: 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64   op = pOp->opcod
cd50: 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f  e;.  if( op==OP_
cd60: 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41  BitAnd ){.    iA
cd70: 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   &= iB;.  }else 
cd80: 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72  if( op==OP_BitOr
cd90: 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42   ){.    iA |= iB
cda0: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42  ;.  }else if( iB
cdb0: 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  !=0 ){.    asser
cdc0: 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52  t( op==OP_ShiftR
cdd0: 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  ight || op==OP_S
cde0: 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20  hiftLeft );..   
cdf0: 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20   /* If shifting 
ce00: 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d  by a negative am
ce10: 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74  ount, shift in t
ce20: 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69  he other directi
ce30: 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42  on */.    if( iB
ce40: 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  <0 ){.      asse
ce50: 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68  rt( OP_ShiftRigh
ce60: 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b  t==OP_ShiftLeft+
ce70: 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20  1 );.      op = 
ce80: 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b  2*OP_ShiftLeft +
ce90: 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69   1 - op;.      i
cea0: 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d  B = iB>(-64) ? -
ceb0: 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a  iB : 64;.    }..
cec0: 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29      if( iB>=64 )
ced0: 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41  {.      iA = (iA
cee0: 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  >=0 || op==OP_Sh
cef0: 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d  iftLeft) ? 0 : -
cf00: 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  1;.    }else{.  
cf10: 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20      memcpy(&uA, 
cf20: 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29  &iA, sizeof(uA))
cf30: 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d  ;.      if( op==
cf40: 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a  OP_ShiftLeft ){.
cf50: 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69          uA <<= i
cf60: 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  B;.      }else{.
cf70: 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69          uA >>= i
cf80: 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69  B;.        /* Si
cf90: 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72  gn-extend on a r
cfa0: 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20  ight shift of a 
cfb0: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
cfc0: 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  */.        if( i
cfd0: 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28  A<0 ) uA |= ((((
cfe0: 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c  u64)0xffffffff)<
cff0: 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29  <32)|0xffffffff)
d000: 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20   << (64-iB);.   
d010: 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70     }.      memcp
d020: 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65  y(&iA, &uA, size
d030: 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20  of(iA));.    }. 
d040: 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d   }.  pOut->u.i =
d050: 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70   iA;.  MemSetTyp
d060: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
d070: 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Int);.  break;.}
d080: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64  ../* Opcode: Add
d090: 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a  Imm  P1 P2 * * *
d0a0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
d0b0: 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a  [P1]=r[P1]+P2.**
d0c0: 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e   .** Add the con
d0d0: 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20  stant P2 to the 
d0e0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
d0f0: 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73  r P1..** The res
d100: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e  ult is always an
d110: 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
d120: 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67  To force any reg
d130: 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69  ister to be an i
d140: 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64  nteger, just add
d150: 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41   0..*/.case OP_A
d160: 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20  ddImm: {        
d170: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
d180: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d190: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
d1a0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
d1b0: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
d1c0: 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
d1d0: 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  In1);.  pIn1->u.
d1e0: 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  i += pOp->p2;.  
d1f0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
d200: 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50  ode: MustBeInt P
d210: 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a  1 P2 * * *.** .*
d220: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d230: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d240: 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65   to be an intege
d250: 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  r.  If the value
d260: 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74  .** in P1 is not
d270: 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20   an integer and 
d280: 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
d290: 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65  ted into an inte
d2a0: 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64  ger.** without d
d2b0: 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a  ata loss, then j
d2c0: 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
d2d0: 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d  to P2, or if P2=
d2e0: 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53  =0.** raise an S
d2f0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65  QLITE_MISMATCH e
d300: 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73  xception..*/.cas
d310: 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20  e OP_MustBeInt: 
d320: 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
d330: 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
d340: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
d350: 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p1];.  if( (pIn
d360: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d370: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70  nt)==0 ){.    ap
d380: 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31  plyAffinity(pIn1
d390: 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  , SQLITE_AFF_NUM
d3a0: 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  ERIC, encoding);
d3b0: 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
d3c0: 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67  aken((pIn1->flag
d3d0: 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32  s&MEM_Int)==0, 2
d3e0: 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
d3f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
d400: 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69  t)==0 ){.      i
d410: 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b  f( pOp->p2==0 ){
d420: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51  .        rc = SQ
d430: 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20  LITE_MISMATCH;. 
d440: 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
d450: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
d460: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
d470: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
d480: 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20 62  2 - 1;.        b
d490: 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  reak;.      }.  
d4a0: 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74    }.  }.  MemSet
d4b0: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
d4c0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
d4d0: 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
d4e0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
d4f0: 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64  G_POINT./* Opcod
d500: 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20  e: RealAffinity 
d510: 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
d520: 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31 20   If register P1 
d530: 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72  holds an integer
d540: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
d550: 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a   real value..**.
d560: 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
d570: 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74 72  s used when extr
d580: 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  acting informati
d590: 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e  on from a column
d5a0: 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41   that.** has REA
d5b0: 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63  L affinity.  Suc
d5c0: 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20  h column values 
d5d0: 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f  may still be sto
d5e0: 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65  red as.** intege
d5f0: 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66  rs, for space ef
d600: 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66  ficiency, but af
d610: 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77  ter extraction w
d620: 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74  e want them.** t
d630: 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65  o have only a re
d640: 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73  al value..*/.cas
d650: 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74  e OP_RealAffinit
d660: 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  y: {            
d670: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
d680: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
d690: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
d6a0: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
d6b0: 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69  _Int ){.    sqli
d6c0: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
d6d0: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
d6e0: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
d6f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
d700: 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f  MIT_CAST./* Opco
d710: 64 65 3a 20 54 6f 54 65 78 74 20 50 31 20 2a 20  de: ToText P1 * 
d720: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63  * * *.**.** Forc
d730: 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
d740: 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62 65  egister P1 to be
d750: 20 74 65 78 74 2e 0a 2a 2a 20 49 66 20 74 68 65   text..** If the
d760: 20 76 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69   value is numeri
d770: 63 2c 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  c, convert it to
d780: 20 61 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20   a string using 
d790: 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e  the.** equivalen
d7a0: 74 20 6f 66 20 73 70 72 69 6e 74 66 28 29 2e 20  t of sprintf(). 
d7b0: 20 42 6c 6f 62 20 76 61 6c 75 65 73 20 61 72 65   Blob values are
d7c0: 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 0a 2a   unchanged and.*
d7d0: 2a 20 61 72 65 20 61 66 74 65 72 77 61 72 64 73  * are afterwards
d7e0: 20 73 69 6d 70 6c 79 20 69 6e 74 65 72 70 72 65   simply interpre
d7f0: 74 65 64 20 61 73 20 74 65 78 74 2e 0a 2a 2a 0a  ted as text..**.
d800: 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20  ** A NULL value 
d810: 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62  is not changed b
d820: 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20  y this routine. 
d830: 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c   It remains NULL
d840: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 54  ..*/.case OP_ToT
d850: 65 78 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ext: {          
d860: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
d870: 61 73 20 54 4b 5f 54 4f 5f 54 45 58 54 2c 20 69  as TK_TO_TEXT, i
d880: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d890: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d8a0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d8b0: 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69 66  e(p, pIn1);.  if
d8c0: 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
d8d0: 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65 61 6b  MEM_Null ) break
d8e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 4d 45 4d 5f  ;.  assert( MEM_
d8f0: 53 74 72 3d 3d 28 4d 45 4d 5f 42 6c 6f 62 3e 3e  Str==(MEM_Blob>>
d900: 33 29 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  3) );.  pIn1->fl
d910: 61 67 73 20 7c 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags |= (pIn1->fl
d920: 61 67 73 26 4d 45 4d 5f 42 6c 6f 62 29 3e 3e 33  ags&MEM_Blob)>>3
d930: 3b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74  ;.  applyAffinit
d940: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
d950: 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f 64 69 6e  FF_TEXT, encodin
d960: 67 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  g);.  rc = Expan
d970: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 61  dBlob(pIn1);.  a
d980: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
d990: 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c 7c 20  gs & MEM_Str || 
d9a0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
d9b0: 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67   );.  pIn1->flag
d9c0: 73 20 26 3d 20 7e 28 4d 45 4d 5f 49 6e 74 7c 4d  s &= ~(MEM_Int|M
d9d0: 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 42 6c 6f 62  EM_Real|MEM_Blob
d9e0: 7c 4d 45 4d 5f 5a 65 72 6f 29 3b 0a 20 20 55 50  |MEM_Zero);.  UP
d9f0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
da00: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
da10: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
da20: 54 6f 42 6c 6f 62 20 50 31 20 2a 20 2a 20 2a 20  ToBlob P1 * * * 
da30: 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68  *.**.** Force th
da40: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
da50: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 42  ter P1 to be a B
da60: 4c 4f 42 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76  LOB..** If the v
da70: 61 6c 75 65 20 69 73 20 6e 75 6d 65 72 69 63 2c  alue is numeric,
da80: 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61   convert it to a
da90: 20 73 74 72 69 6e 67 20 66 69 72 73 74 2e 0a 2a   string first..*
daa0: 2a 20 53 74 72 69 6e 67 73 20 61 72 65 20 73 69  * Strings are si
dab0: 6d 70 6c 79 20 72 65 69 6e 74 65 72 70 72 65 74  mply reinterpret
dac0: 65 64 20 61 73 20 62 6c 6f 62 73 20 77 69 74 68  ed as blobs with
dad0: 20 6e 6f 20 63 68 61 6e 67 65 0a 2a 2a 20 74 6f   no change.** to
dae0: 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
daf0: 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  data..**.** A NU
db00: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
db10: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
db20: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
db30: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
db40: 73 65 20 4f 50 5f 54 6f 42 6c 6f 62 3a 20 7b 20  se OP_ToBlob: { 
db50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db60: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54   /* same as TK_T
db70: 4f 5f 42 4c 4f 42 2c 20 69 6e 31 20 2a 2f 0a 20  O_BLOB, in1 */. 
db80: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
db90: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
dba0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
dbb0: 4e 75 6c 6c 20 29 20 62 72 65 61 6b 3b 0a 20 20  Null ) break;.  
dbc0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
dbd0: 20 26 20 4d 45 4d 5f 42 6c 6f 62 29 3d 3d 30 20   & MEM_Blob)==0 
dbe0: 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69  ){.    applyAffi
dbf0: 6e 69 74 79 28 70 49 6e 31 2c 20 53 51 4c 49 54  nity(pIn1, SQLIT
dc00: 45 5f 41 46 46 5f 54 45 58 54 2c 20 65 6e 63 6f  E_AFF_TEXT, enco
dc10: 64 69 6e 67 29 3b 0a 20 20 20 20 61 73 73 65 72  ding);.    asser
dc20: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  t( pIn1->flags &
dc30: 20 4d 45 4d 5f 53 74 72 20 7c 7c 20 64 62 2d 3e   MEM_Str || db->
dc40: 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a  mallocFailed );.
dc50: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
dc60: 61 67 28 70 49 6e 31 2c 20 4d 45 4d 5f 42 6c 6f  ag(pIn1, MEM_Blo
dc70: 62 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  b);.  }else{.   
dc80: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 3d 20   pIn1->flags &= 
dc90: 7e 28 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 26 7e  ~(MEM_TypeMask&~
dca0: 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 0a 20  MEM_Blob);.  }. 
dcb0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
dcc0: 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 62 72  SIZE(pIn1);.  br
dcd0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
dce0: 65 3a 20 54 6f 4e 75 6d 65 72 69 63 20 50 31 20  e: ToNumeric P1 
dcf0: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
dd00: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
dd10: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
dd20: 62 65 20 6e 75 6d 65 72 69 63 20 28 65 69 74 68  be numeric (eith
dd30: 65 72 20 61 6e 0a 2a 2a 20 69 6e 74 65 67 65 72  er an.** integer
dd40: 20 6f 72 20 61 20 66 6c 6f 61 74 69 6e 67 2d 70   or a floating-p
dd50: 6f 69 6e 74 20 6e 75 6d 62 65 72 2e 29 0a 2a 2a  oint number.).**
dd60: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73   If the value is
dd70: 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c 20 74   text or blob, t
dd80: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 69 74  ry to convert it
dd90: 20 74 6f 20 61 6e 20 75 73 69 6e 67 20 74 68 65   to an using the
dda0: 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  .** equivalent o
ddb0: 66 20 61 74 6f 69 28 29 20 6f 72 20 61 74 6f 66  f atoi() or atof
ddc0: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 20 69  () and store 0 i
ddd0: 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76 65 72  f no such conver
dde0: 73 69 6f 6e 20 0a 2a 2a 20 69 73 20 70 6f 73 73  sion .** is poss
ddf0: 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55  ible..**.** A NU
de00: 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20  LL value is not 
de10: 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 73 20  changed by this 
de20: 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d  routine.  It rem
de30: 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61  ains NULL..*/.ca
de40: 73 65 20 4f 50 5f 54 6f 4e 75 6d 65 72 69 63 3a  se OP_ToNumeric:
de50: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
de60: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
de70: 4b 5f 54 4f 5f 4e 55 4d 45 52 49 43 2c 20 69 6e  K_TO_NUMERIC, in
de80: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
de90: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
dea0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e 75  sqlite3VdbeMemNu
deb0: 6d 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20  merify(pIn1);.  
dec0: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
ded0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
dee0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
def0: 65 3a 20 54 6f 49 6e 74 20 50 31 20 2a 20 2a 20  e: ToInt P1 * * 
df00: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  * *.**.** Force 
df10: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
df20: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 61  ister P1 to be a
df30: 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 0a 2a  n integer.  If.*
df40: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63  * The value is c
df50: 75 72 72 65 6e 74 6c 79 20 61 20 72 65 61 6c 20  urrently a real 
df60: 6e 75 6d 62 65 72 2c 20 64 72 6f 70 20 69 74 73  number, drop its
df70: 20 66 72 61 63 74 69 6f 6e 61 6c 20 70 61 72 74   fractional part
df80: 2e 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  ..** If the valu
df90: 65 20 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f  e is text or blo
dfa0: 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72  b, try to conver
dfb0: 74 20 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67  t it to an integ
dfc0: 65 72 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  er using the.** 
dfd0: 65 71 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74  equivalent of at
dfe0: 6f 69 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30  oi() and store 0
dff0: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
e000: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
e010: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
e020: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
e030: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
e040: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
e050: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
e060: 20 4f 50 5f 54 6f 49 6e 74 3a 20 7b 20 20 20 20   OP_ToInt: {    
e070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e080: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 49   same as TK_TO_I
e090: 4e 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  NT, in1 */.  pIn
e0a0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e0b0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e0c0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
e0d0: 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  l)==0 ){.    sql
e0e0: 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
e0f0: 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d  erify(pIn1);.  }
e100: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
e110: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
e120: 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20 21  _OMIT_CAST) && !
e130: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
e140: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
e150: 4e 54 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54  NT)./* Opcode: T
e160: 6f 52 65 61 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  oReal P1 * * * *
e170: 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65  .**.** Force the
e180: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
e190: 65 72 20 50 31 20 74 6f 20 62 65 20 61 20 66 6c  er P1 to be a fl
e1a0: 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 6e 75 6d  oating point num
e1b0: 62 65 72 2e 0a 2a 2a 20 49 66 20 54 68 65 20 76  ber..** If The v
e1c0: 61 6c 75 65 20 69 73 20 63 75 72 72 65 6e 74 6c  alue is currentl
e1d0: 79 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 63 6f  y an integer, co
e1e0: 6e 76 65 72 74 20 69 74 2e 0a 2a 2a 20 49 66 20  nvert it..** If 
e1f0: 74 68 65 20 76 61 6c 75 65 20 69 73 20 74 65 78  the value is tex
e200: 74 20 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74  t or blob, try t
e210: 6f 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  o convert it to 
e220: 61 6e 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67  an integer using
e230: 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65   the.** equivale
e240: 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64  nt of atoi() and
e250: 20 73 74 6f 72 65 20 30 2e 30 20 69 66 20 6e 6f   store 0.0 if no
e260: 20 73 75 63 68 20 63 6f 6e 76 65 72 73 69 6f 6e   such conversion
e270: 20 69 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a   is possible..**
e280: 0a 2a 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65  .** A NULL value
e290: 20 69 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20   is not changed 
e2a0: 62 79 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e  by this routine.
e2b0: 20 20 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c    It remains NUL
e2c0: 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f  L..*/.case OP_To
e2d0: 52 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20  Real: {         
e2e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
e2f0: 20 61 73 20 54 4b 5f 54 4f 5f 52 45 41 4c 2c 20   as TK_TO_REAL, 
e300: 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
e310: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
e320: 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
e330: 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20 69  ge(p, pIn1);.  i
e340: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
e350: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
e360: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
e370: 65 4d 65 6d 52 65 61 6c 69 66 79 28 70 49 6e 31  eMemRealify(pIn1
e380: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e390: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
e3a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
e3b0: 5f 43 41 53 54 29 20 26 26 20 21 64 65 66 69 6e  _CAST) && !defin
e3c0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
e3d0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 29 20 2a  LOATING_POINT) *
e3e0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
e3f0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
e400: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
e410: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
e420: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
e430: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
e440: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
e450: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
e460: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
e470: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
e480: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
e490: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
e4a0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
e4b0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
e4c0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
e4d0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
e4e0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
e4f0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
e500: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
e510: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
e520: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
e530: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
e540: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
e550: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
e560: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
e570: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
e580: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
e590: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
e5a0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
e5b0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
e5c0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
e5d0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
e5e0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
e5f0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
e600: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
e610: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
e620: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
e630: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
e640: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
e650: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
e660: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
e670: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
e680: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
e690: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
e6a0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
e6b0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
e6c0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
e6d0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
e6e0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
e6f0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
e700: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
e710: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
e720: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
e730: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
e740: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
e750: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
e760: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
e770: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
e780: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
e790: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
e7a0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
e7b0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
e7c0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
e7d0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
e7e0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
e7f0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e800: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e810: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e820: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e830: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e840: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e850: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e860: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e870: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e880: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e890: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e8a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e8b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e8c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e8d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e8e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e8f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e900: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e910: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e920: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e930: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e940: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e950: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e960: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e970: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e980: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e990: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e9a0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e9b0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e9c0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e9d0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e9e0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e9f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
ea00: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
ea10: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
ea20: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
ea30: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
ea40: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
ea50: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
ea60: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
ea70: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
ea80: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
ea90: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
eaa0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
eab0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
eac0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
ead0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
eae0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
eaf0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
eb00: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
eb10: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
eb20: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
eb30: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
eb40: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
eb50: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
eb60: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
eb70: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
eb80: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
eb90: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
eba0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
ebb0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
ebc0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ebd0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
ebe0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
ebf0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
ec00: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
ec10: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
ec20: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ec30: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
ec40: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
ec50: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
ec60: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
ec70: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
ec80: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
ec90: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
eca0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
ecb0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
ecc0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
ecd0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
ece0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
ecf0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
ed00: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
ed10: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ed20: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
ed30: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ed40: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ed50: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
ed60: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
ed70: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
ed80: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
ed90: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
eda0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
edb0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
edc0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
edd0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
ede0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
edf0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
ee00: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
ee10: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
ee20: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
ee30: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
ee40: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
ee50: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
ee60: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
ee70: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
ee80: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
ee90: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
eea0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
eeb0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
eec0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
eed0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
eee0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
eef0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
ef00: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
ef10: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
ef20: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
ef30: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
ef40: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
ef50: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
ef60: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
ef70: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
ef80: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
ef90: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
efa0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
efb0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
efc0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
efd0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
efe0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
eff0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
f000: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
f010: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
f020: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f030: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f040: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f050: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f060: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f070: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
f080: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f090: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
f0a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
f0b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
f0c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
f0d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
f0e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
f0f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
f100: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
f110: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
f120: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
f130: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
f140: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
f150: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
f160: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
f170: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
f180: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
f190: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
f1a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
f1b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
f1c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
f1d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
f1e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
f1f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
f200: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
f210: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
f220: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
f230: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
f240: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
f250: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
f260: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
f270: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
f280: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
f290: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
f2a0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f2b0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
f2c0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
f2d0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
f2e0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
f2f0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
f300: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
f310: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f320: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
f330: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f340: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
f350: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
f360: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
f370: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
f380: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
f390: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
f3a0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
f3b0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
f3c0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
f3d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f3e0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
f3f0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
f400: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
f410: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
f420: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
f430: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
f440: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
f450: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
f460: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
f470: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
f480: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
f490: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
f4a0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
f4b0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
f4c0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
f4d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
f4e0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
f4f0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
f500: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
f510: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
f520: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
f530: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
f540: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
f550: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
f560: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
f570: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
f580: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
f590: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
f5a0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f5b0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
f5c0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
f5d0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
f5e0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
f5f0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
f600: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
f610: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
f620: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
f630: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
f640: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
f650: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
f660: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
f670: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
f680: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
f690: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
f6a0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
f6b0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
f6c0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
f6d0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
f6e0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
f6f0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
f700: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
f710: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
f720: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
f730: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
f740: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
f750: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
f760: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
f770: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
f780: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
f790: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
f7a0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
f7b0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
f7c0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
f7d0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
f7e0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
f7f0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f800: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f810: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f820: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f830: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f840: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f850: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f860: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f870: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f880: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f890: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f8a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f8b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f8c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f8d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f8e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f8f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
f900: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f910: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f920: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
f930: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
f940: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
f950: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
f960: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f970: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f980: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
f990: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f9a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
f9b0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
f9c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
f9d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f9e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f9f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
fa00: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
fa10: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
fa20: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
fa30: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
fa40: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
fa50: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
fa60: 61 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20  affinity ){.    
fa70: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
fa80: 70 49 6e 31 2c 20 61 66 66 69 6e 69 74 79 2c 20  pIn1, affinity, 
fa90: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20  encoding);.     
faa0: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
fab0: 49 6e 33 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  In3, affinity, e
fac0: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 20 20  ncoding);.      
fad0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
fae0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
faf0: 65 6d 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 61  em;.    }..    a
fb00: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
fb10: 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
fb20: 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
fb30: 3d 30 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  =0 );.    Expand
fb40: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
fb50: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 33 29  ExpandBlob(pIn3)
fb60: 3b 0a 20 20 20 20 72 65 73 20 3d 20 73 71 6c 69  ;.    res = sqli
fb70: 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 70 49  te3MemCompare(pI
fb80: 6e 33 2c 20 70 49 6e 31 2c 20 70 4f 70 2d 3e 70  n3, pIn1, pOp->p
fb90: 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20  4.pColl);.  }.  
fba0: 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
fbb0: 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
fbc0: 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 20 3d 20  OP_Eq:    res = 
fbd0: 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65 61  res==0;     brea
fbe0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4e  k;.    case OP_N
fbf0: 65 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 21  e:    res = res!
fc00: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
fc10: 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20     case OP_Lt:  
fc20: 20 20 72 65 73 20 3d 20 72 65 73 3c 30 3b 20 20    res = res<0;  
fc30: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
fc40: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 72 65  ase OP_Le:    re
fc50: 73 20 3d 20 72 65 73 3c 3d 30 3b 20 20 20 20 20  s = res<=0;     
fc60: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
fc70: 4f 50 5f 47 74 3a 20 20 20 20 72 65 73 20 3d 20  OP_Gt:    res = 
fc80: 72 65 73 3e 30 3b 20 20 20 20 20 20 62 72 65 61  res>0;      brea
fc90: 6b 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20  k;.    default: 
fca0: 20 20 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e        res = res>
fcb0: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
fcc0: 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   }..  if( pOp->p
fcd0: 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
fce0: 50 32 20 29 7b 0a 20 20 20 20 70 4f 75 74 20 3d  P2 ){.    pOut =
fcf0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
fd00: 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  .    memAboutToC
fd10: 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
fd20: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
fd30: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74  ag(pOut, MEM_Int
fd40: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  );.    pOut->u.i
fd50: 20 3d 20 72 65 73 3b 0a 20 20 20 20 52 45 47 49   = res;.    REGI
fd60: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
fd70: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 7d 65 6c  p2, pOut);.  }el
fd80: 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
fd90: 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 20  chTaken(res!=0, 
fda0: 28 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54  (pOp->p5 & SQLIT
fdb0: 45 5f 4e 55 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a  E_NULLEQ)?2:3);.
fdc0: 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
fdd0: 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
fde0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  2-1;.    }.  }. 
fdf0: 20 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61   /* Undo any cha
fe00: 6e 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70  nges made by app
fe10: 6c 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20  lyAffinity() to 
fe20: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
fe30: 65 72 73 2e 20 2a 2f 0a 20 20 70 49 6e 31 2d 3e  ers. */.  pIn1->
fe40: 66 6c 61 67 73 20 3d 20 28 70 49 6e 31 2d 3e 66  flags = (pIn1->f
fe50: 6c 61 67 73 26 7e 4d 45 4d 5f 54 79 70 65 4d 61  lags&~MEM_TypeMa
fe60: 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 26 4d 45  sk) | (flags1&ME
fe70: 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 70  M_TypeMask);.  p
fe80: 49 6e 33 2d 3e 66 6c 61 67 73 20 3d 20 28 70 49  In3->flags = (pI
fe90: 6e 33 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f 54  n3->flags&~MEM_T
fea0: 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67  ypeMask) | (flag
feb0: 73 33 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  s3&MEM_TypeMask)
fec0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
fed0: 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74 61   Opcode: Permuta
fee0: 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a  tion * * * P4 *.
fef0: 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70 65  **.** Set the pe
ff00: 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20 62  rmutation used b
ff10: 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65  y the OP_Compare
ff20: 20 6f 70 65 72 61 74 6f 72 20 74 6f 20 62 65 20   operator to be 
ff30: 74 68 65 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20  the array.** of 
ff40: 69 6e 74 65 67 65 72 73 20 69 6e 20 50 34 2e 0a  integers in P4..
ff50: 2a 2a 0a 2a 2a 20 54 68 65 20 70 65 72 6d 75 74  **.** The permut
ff60: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61  ation is only va
ff70: 6c 69 64 20 75 6e 74 69 6c 20 74 68 65 20 6e 65  lid until the ne
ff80: 78 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68  xt OP_Compare th
ff90: 61 74 20 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50  at has.** the OP
ffa0: 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74  FLAG_PERMUTE bit
ffb0: 20 73 65 74 20 69 6e 20 50 35 2e 20 54 79 70 69   set in P5. Typi
ffc0: 63 61 6c 6c 79 20 74 68 65 20 4f 50 5f 50 65 72  cally the OP_Per
ffd0: 6d 75 74 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20  mutation should 
ffe0: 0a 2a 2a 20 6f 63 63 75 72 20 69 6d 6d 65 64 69  .** occur immedi
fff0: 61 74 65 6c 79 20 70 72 69 6f 72 20 74 6f 20 74  ately prior to t
10000 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a  he OP_Compare..*
10010 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
10020 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
10030 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
10040 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
10050 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10060 2e 61 69 20 29 3b 0a 20 20 61 50 65 72 6d 75 74  .ai );.  aPermut
10070 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a  e = pOp->p4.ai;.
10080 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
10090 70 63 6f 64 65 3a 20 43 6f 6d 70 61 72 65 20 50  pcode: Compare P
100a0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
100b0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 40   Synopsis: r[P1@
100c0 50 33 5d 20 3c 2d 3e 20 72 5b 50 32 40 50 33 5d  P3] <-> r[P2@P3]
100d0 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74  .**.** Compare t
100e0 77 6f 20 76 65 63 74 6f 72 73 20 6f 66 20 72 65  wo vectors of re
100f0 67 69 73 74 65 72 73 20 69 6e 20 72 65 67 28 50  gisters in reg(P
10100 31 29 2e 2e 72 65 67 28 50 31 2b 50 33 2d 31 29  1)..reg(P1+P3-1)
10110 20 28 63 61 6c 6c 20 74 68 69 73 0a 2a 2a 20 76   (call this.** v
10120 65 63 74 6f 72 20 22 41 22 29 20 61 6e 64 20 69  ector "A") and i
10130 6e 20 72 65 67 28 50 32 29 2e 2e 72 65 67 28 50  n reg(P2)..reg(P
10140 32 2b 50 33 2d 31 29 20 28 22 42 22 29 2e 20 20  2+P3-1) ("B").  
10150 53 61 76 65 20 74 68 65 20 72 65 73 75 6c 74 20  Save the result 
10160 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61 72  of.** the compar
10170 69 73 6f 6e 20 66 6f 72 20 75 73 65 20 62 79 20  ison for use by 
10180 74 68 65 20 6e 65 78 74 20 4f 50 5f 4a 75 6d 70  the next OP_Jump
10190 20 69 6e 73 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a   instruct..**.**
101a0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
101b0 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 62 69  PFLAG_PERMUTE bi
101c0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
101d0 6f 72 64 65 72 20 6f 66 20 63 6f 6d 70 61 72 69  order of compari
101e0 73 6f 6e 20 69 73 0a 2a 2a 20 64 65 74 65 72 6d  son is.** determ
101f0 69 6e 65 64 20 62 79 20 74 68 65 20 6d 6f 73 74  ined by the most
10200 20 72 65 63 65 6e 74 20 4f 50 5f 50 65 72 6d 75   recent OP_Permu
10210 74 61 74 69 6f 6e 20 6f 70 65 72 61 74 6f 72 2e  tation operator.
10220 20 20 49 66 20 74 68 65 0a 2a 2a 20 4f 50 46 4c    If the.** OPFL
10230 41 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 69  AG_PERMUTE bit i
10240 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65  s clear, then re
10250 67 69 73 74 65 72 20 61 72 65 20 63 6f 6d 70 61  gister are compa
10260 72 65 64 20 69 6e 20 73 65 71 75 65 6e 74 69 61  red in sequentia
10270 6c 0a 2a 2a 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a  l.** order..**.*
10280 2a 20 50 34 20 69 73 20 61 20 4b 65 79 49 6e 66  * P4 is a KeyInf
10290 6f 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74  o structure that
102a0 20 64 65 66 69 6e 65 73 20 63 6f 6c 6c 61 74 69   defines collati
102b0 6e 67 20 73 65 71 75 65 6e 63 65 73 20 61 6e 64  ng sequences and
102c0 20 73 6f 72 74 0a 2a 2a 20 6f 72 64 65 72 73 20   sort.** orders 
102d0 66 6f 72 20 74 68 65 20 63 6f 6d 70 61 72 69 73  for the comparis
102e0 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d 75 74 61  on.  The permuta
102f0 74 69 6f 6e 20 61 70 70 6c 69 65 73 20 74 6f 20  tion applies to 
10300 72 65 67 69 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c  registers.** onl
10310 79 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20  y.  The KeyInfo 
10320 65 6c 65 6d 65 6e 74 73 20 61 72 65 20 75 73 65  elements are use
10330 64 20 73 65 71 75 65 6e 74 69 61 6c 6c 79 2e 0a  d sequentially..
10340 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 70 61 72  **.** The compar
10350 69 73 6f 6e 20 69 73 20 61 20 73 6f 72 74 20 63  ison is a sort c
10360 6f 6d 70 61 72 69 73 6f 6e 2c 20 73 6f 20 4e 55  omparison, so NU
10370 4c 4c 73 20 63 6f 6d 70 61 72 65 20 65 71 75 61  LLs compare equa
10380 6c 2c 0a 2a 2a 20 4e 55 4c 4c 73 20 61 72 65 20  l,.** NULLs are 
10390 6c 65 73 73 20 74 68 61 6e 20 6e 75 6d 62 65 72  less than number
103a0 73 2c 20 6e 75 6d 62 65 72 73 20 61 72 65 20 6c  s, numbers are l
103b0 65 73 73 20 74 68 61 6e 20 73 74 72 69 6e 67 73  ess than strings
103c0 2c 0a 2a 2a 20 61 6e 64 20 73 74 72 69 6e 67 73  ,.** and strings
103d0 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 62   are less than b
103e0 6c 6f 62 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  lobs..*/.case OP
103f0 5f 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 69 6e  _Compare: {.  in
10400 74 20 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  t n;.  int i;.  
10410 69 6e 74 20 70 31 3b 0a 20 20 69 6e 74 20 70 32  int p1;.  int p2
10420 3b 0a 20 20 63 6f 6e 73 74 20 4b 65 79 49 6e 66  ;.  const KeyInf
10430 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
10440 6e 74 20 69 64 78 3b 0a 20 20 43 6f 6c 6c 53 65  nt idx;.  CollSe
10450 71 20 2a 70 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20  q *pColl;    /* 
10460 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
10470 63 65 20 74 6f 20 75 73 65 20 6f 6e 20 74 68 69  ce to use on thi
10480 73 20 74 65 72 6d 20 2a 2f 0a 20 20 69 6e 74 20  s term */.  int 
10490 62 52 65 76 3b 20 20 20 20 20 20 20 20 20 20 2f  bRev;          /
104a0 2a 20 54 72 75 65 20 66 6f 72 20 44 45 53 43 45  * True for DESCE
104b0 4e 44 49 4e 47 20 73 6f 72 74 20 6f 72 64 65 72  NDING sort order
104c0 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70 2d   */..  if( (pOp-
104d0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52  >p5 & OPFLAG_PER
104e0 4d 55 54 45 29 3d 3d 30 20 29 20 61 50 65 72 6d  MUTE)==0 ) aPerm
104f0 75 74 65 20 3d 20 30 3b 0a 20 20 6e 20 3d 20 70  ute = 0;.  n = p
10500 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
10510 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
10520 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
10530 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
10540 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
10550 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
10560 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
10570 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  .#if SQLITE_DEBU
10580 47 0a 20 20 69 66 28 20 61 50 65 72 6d 75 74 65  G.  if( aPermute
10590 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b 2c 20 6d   ){.    int k, m
105a0 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f 72 28 6b  x = 0;.    for(k
105b0 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66  =0; k<n; k++) if
105c0 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78  ( aPermute[k]>mx
105d0 20 29 20 6d 78 20 3d 20 61 50 65 72 6d 75 74 65   ) mx = aPermute
105e0 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  [k];.    assert(
105f0 20 70 31 3e 30 20 26 26 20 70 31 2b 6d 78 3c 3d   p1>0 && p1+mx<=
10600 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
10610 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
10620 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
10630 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  +mx<=(p->nMem-p-
10640 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20  >nCursor)+1 );. 
10650 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
10660 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6e  rt( p1>0 && p1+n
10670 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
10680 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20  ursor)+1 );.    
10690 61 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20  assert( p2>0 && 
106a0 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  p2+n<=(p->nMem-p
106b0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
106c0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
106d0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 20 20  LITE_DEBUG */.  
106e0 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b  for(i=0; i<n; i+
106f0 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d 20 61 50  +){.    idx = aP
10700 65 72 6d 75 74 65 20 3f 20 61 50 65 72 6d 75 74  ermute ? aPermut
10710 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20 20 61 73  e[i] : i;.    as
10720 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10730 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 20  (&aMem[p1+idx]) 
10740 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d  );.    assert( m
10750 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b  emIsValid(&aMem[
10760 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20  p2+idx]) );.    
10770 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
10780 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 31 2b  1+idx, &aMem[p1+
10790 69 64 78 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  idx]);.    REGIS
107a0 54 45 52 5f 54 52 41 43 45 28 70 32 2b 69 64 78  TER_TRACE(p2+idx
107b0 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29  , &aMem[p2+idx])
107c0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 3c  ;.    assert( i<
107d0 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64  pKeyInfo->nField
107e0 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c 20 3d 20   );.    pColl = 
107f0 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b  pKeyInfo->aColl[
10800 69 5d 3b 0a 20 20 20 20 62 52 65 76 20 3d 20 70  i];.    bRev = p
10810 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72  KeyInfo->aSortOr
10820 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69 43 6f 6d  der[i];.    iCom
10830 70 61 72 65 20 3d 20 73 71 6c 69 74 65 33 4d 65  pare = sqlite3Me
10840 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65 6d 5b 70  mCompare(&aMem[p
10850 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d 5b 70 32  1+idx], &aMem[p2
10860 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20  +idx], pColl);. 
10870 20 20 20 69 66 28 20 69 43 6f 6d 70 61 72 65 20     if( iCompare 
10880 29 7b 0a 20 20 20 20 20 20 69 66 28 20 62 52 65  ){.      if( bRe
10890 76 20 29 20 69 43 6f 6d 70 61 72 65 20 3d 20 2d  v ) iCompare = -
108a0 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20 20 20 20  iCompare;.      
108b0 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d  break;.    }.  }
108c0 0a 20 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b  .  aPermute = 0;
108d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
108e0 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20 50 31 20  Opcode: Jump P1 
108f0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
10900 4a 75 6d 70 20 74 6f 20 74 68 65 20 69 6e 73 74  Jump to the inst
10910 72 75 63 74 69 6f 6e 20 61 74 20 61 64 64 72 65  ruction at addre
10920 73 73 20 50 31 2c 20 50 32 2c 20 6f 72 20 50 33  ss P1, P2, or P3
10930 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10940 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74 68 65 20  ether.** in the 
10950 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50 5f 43  most recent OP_C
10960 6f 6d 70 61 72 65 20 69 6e 73 74 72 75 63 74 69  ompare instructi
10970 6f 6e 20 74 68 65 20 50 31 20 76 65 63 74 6f 72  on the P1 vector
10980 20 77 61 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a   was less than.*
10990 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f 72 20 67  * equal to, or g
109a0 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
109b0 50 32 20 76 65 63 74 6f 72 2c 20 72 65 73 70 65  P2 vector, respe
109c0 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65  ctively..*/.case
109d0 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20 20 20 20   OP_Jump: {     
109e0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
109f0 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d 70 61 72  */.  if( iCompar
10a00 65 3c 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  e<0 ){.    pc = 
10a10 70 4f 70 2d 3e 70 31 20 2d 20 31 3b 20 20 56 64  pOp->p1 - 1;  Vd
10a20 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
10a30 33 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  3);.  }else if( 
10a40 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b 0a 20  iCompare==0 ){. 
10a50 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
10a60 2d 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68  - 1;  VdbeBranch
10a70 54 61 6b 65 6e 28 31 2c 33 29 3b 0a 20 20 7d 65  Taken(1,3);.  }e
10a80 6c 73 65 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  lse{.    pc = pO
10a90 70 2d 3e 70 33 20 2d 20 31 3b 20 20 56 64 62 65  p->p3 - 1;  Vdbe
10aa0 42 72 61 6e 63 68 54 61 6b 65 6e 28 32 2c 33 29  BranchTaken(2,3)
10ab0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10ac0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64  ../* Opcode: And
10ad0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
10ae0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10af0 3d 28 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d  =(r[P1] && r[P2]
10b00 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10b10 20 6c 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20   logical AND of 
10b20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
10b30 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
10b40 32 20 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74  2 and.** write t
10b50 68 65 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72  he result into r
10b60 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a  egister P3..**.*
10b70 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20 6f  * If either P1 o
10b80 72 20 50 32 20 69 73 20 30 20 28 66 61 6c 73 65  r P2 is 0 (false
10b90 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  ) then the resul
10ba0 74 20 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a  t is 0 even if.*
10bb0 2a 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75  * the other inpu
10bc0 74 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55  t is NULL.  A NU
10bd0 4c 4c 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74  LL and true or t
10be0 77 6f 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a  wo NULLs give.**
10bf0 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
10c00 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72  */./* Opcode: Or
10c10 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
10c20 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
10c30 3d 28 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d  =(r[P1] || r[P2]
10c40 29 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65  ).**.** Take the
10c50 20 6c 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74   logical OR of t
10c60 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
10c70 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
10c80 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
10c90 20 61 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73   answer in regis
10ca0 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P3..**.** If
10cb0 20 65 69 74 68 65 72 20 50 31 20 6f 72 20 50 32   either P1 or P2
10cc0 20 69 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75   is nonzero (tru
10cd0 65 29 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  e) then the resu
10ce0 6c 74 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a  lt is 1 (true).*
10cf0 2a 20 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74  * even if the ot
10d00 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
10d10 4c 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66  L.  A NULL and f
10d20 61 6c 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c  alse or two NULL
10d30 73 0a 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c  s.** give a NULL
10d40 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65   output..*/.case
10d50 20 4f 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20   OP_And:        
10d60 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
10d70 20 54 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e   TK_AND, in1, in
10d80 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
10d90 4f 50 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20  OP_Or: {        
10da0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10db0 54 4b 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  TK_OR, in1, in2,
10dc0 20 6f 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76   out3 */.  int v
10dd0 31 3b 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70  1;    /* Left op
10de0 65 72 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45  erand:  0==FALSE
10df0 2c 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e  , 1==TRUE, 2==UN
10e00 4b 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f  KNOWN or NULL */
10e10 0a 20 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a  .  int v2;    /*
10e20 20 52 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20   Right operand: 
10e30 30 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55  0==FALSE, 1==TRU
10e40 45 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72  E, 2==UNKNOWN or
10e50 20 4e 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31   NULL */..  pIn1
10e60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
10e70 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66  ];.  if( pIn1->f
10e80 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10e90 29 7b 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20  ){.    v1 = 2;. 
10ea0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d   }else{.    v1 =
10eb0 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10ec0 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20  alue(pIn1)!=0;. 
10ed0 20 7d 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65   }.  pIn2 = &aMe
10ee0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66  m[pOp->p2];.  if
10ef0 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20  ( pIn2->flags & 
10f00 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
10f10 76 32 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  v2 = 2;.  }else{
10f20 0a 20 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65  .    v2 = sqlite
10f30 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
10f40 6e 32 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66  n2)!=0;.  }.  if
10f50 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
10f60 50 5f 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61  P_And ){.    sta
10f70 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
10f80 65 64 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69  ed char and_logi
10f90 63 5b 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c  c[] = { 0, 0, 0,
10fa0 20 30 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20   0, 1, 2, 0, 2, 
10fb0 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e  2 };.    v1 = an
10fc0 64 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  d_logic[v1*3+v2]
10fd0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
10fe0 74 61 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69  tatic const unsi
10ff0 67 6e 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67  gned char or_log
11000 69 63 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32  ic[] = { 0, 1, 2
11010 2c 20 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c  , 1, 1, 1, 2, 1,
11020 20 32 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f   2 };.    v1 = o
11030 72 5f 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d  r_logic[v1*3+v2]
11040 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26  ;.  }.  pOut = &
11050 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
11060 20 69 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20   if( v1==2 ){.  
11070 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
11080 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  (pOut, MEM_Null)
11090 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
110a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20  Out->u.i = v1;. 
110b0 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
110c0 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29  g(pOut, MEM_Int)
110d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
110e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
110f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
11100 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
11110 20 21 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e   !r[P1].**.** In
11120 74 65 72 70 72 65 74 20 74 68 65 20 76 61 6c 75  terpret the valu
11130 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
11140 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
11150 6c 75 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  lue.  Store the.
11160 2a 2a 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c  ** boolean compl
11170 65 6d 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65  ement in registe
11180 72 20 50 32 2e 20 20 49 66 20 74 68 65 20 76 61  r P2.  If the va
11190 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
111a0 50 31 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  P1 is .** NULL, 
111b0 74 68 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73  then a NULL is s
111c0 74 6f 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a  tored in P2..*/.
111d0 63 61 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20  case OP_Not: {  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
111f0 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c   same as TK_NOT,
11200 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20   in1, out2 */.  
11210 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
11220 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
11230 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
11240 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67    if( pIn1->flag
11250 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
11260 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
11270 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
11280 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71  .  }else{.    sq
11290 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49  lite3VdbeMemSetI
112a0 6e 74 36 34 28 70 4f 75 74 2c 20 21 73 71 6c 69  nt64(pOut, !sqli
112b0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
112c0 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62 72  pIn1));.  }.  br
112d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
112e0 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32 20  e: BitNot P1 P2 
112f0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11300 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31 5d  s: r[P1]= ~r[P1]
11310 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  .**.** Interpret
11320 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
11330 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20 61  register P1 as a
11340 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f 72  n integer.  Stor
11350 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63 6f  e the.** ones-co
11360 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20  mplement of the 
11370 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65  P1 value into re
11380 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 50  gister P2.  If P
11390 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55 4c  1 holds.** a NUL
113a0 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20 4e  L then store a N
113b0 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  ULL in P2..*/.ca
113c0 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b 20  se OP_BitNot: { 
113d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
113e0 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f 54  ame as TK_BITNOT
113f0 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20  , in1, out2 */. 
11400 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
11410 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
11420 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
11430 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
11440 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
11450 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11460 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
11470 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
11480 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
11490 49 6e 74 36 34 28 70 4f 75 74 2c 20 7e 73 71 6c  Int64(pOut, ~sql
114a0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
114b0 28 70 49 6e 31 29 29 3b 0a 20 20 7d 0a 20 20 62  (pIn1));.  }.  b
114c0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
114d0 64 65 3a 20 4f 6e 63 65 20 50 31 20 50 32 20 2a  de: Once P1 P2 *
114e0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b   * *.**.** Check
114f0 20 74 68 65 20 22 6f 6e 63 65 22 20 66 6c 61 67   the "once" flag
11500 20 6e 75 6d 62 65 72 20 50 31 2e 20 49 66 20 69   number P1. If i
11510 74 20 69 73 20 73 65 74 2c 20 6a 75 6d 70 20 74  t is set, jump t
11520 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
11530 2e 20 0a 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c  . .** Otherwise,
11540 20 73 65 74 20 74 68 65 20 66 6c 61 67 20 61 6e   set the flag an
11550 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  d fall through t
11560 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
11570 75 63 74 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74  uction..** In ot
11580 68 65 72 20 77 6f 72 64 73 2c 20 74 68 69 73 20  her words, this 
11590 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 61 6c  opcode causes al
115a0 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f  l following opco
115b0 64 65 73 20 75 70 20 74 68 72 6f 75 67 68 20 50  des up through P
115c0 32 0a 2a 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e  2.** (but not in
115d0 63 6c 75 64 69 6e 67 20 50 32 29 20 74 6f 20 72  cluding P2) to r
115e0 75 6e 20 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64  un just once and
115f0 20 74 6f 20 62 65 20 73 6b 69 70 70 65 64 20 6f   to be skipped o
11600 6e 20 73 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20  n subsequent.** 
11610 74 69 6d 65 73 20 74 68 72 6f 75 67 68 20 74 68  times through th
11620 65 20 6c 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c  e loop..**.** Al
11630 6c 20 22 6f 6e 63 65 22 20 66 6c 61 67 73 20 61  l "once" flags a
11640 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65  re initially cle
11650 61 72 65 64 20 77 68 65 6e 65 76 65 72 20 61 20  ared whenever a 
11660 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
11670 6e 74 0a 2a 2a 20 66 69 72 73 74 20 62 65 67 69  nt.** first begi
11680 6e 73 20 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61  ns to run..*/.ca
11690 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
116a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
116b0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
116c0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46  Op->p1<p->nOnceF
116d0 6c 61 67 20 29 3b 0a 20 20 56 64 62 65 42 72 61  lag );.  VdbeBra
116e0 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63  nchTaken(p->aOnc
116f0 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d  eFlag[pOp->p1]!=
11700 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e  0, 2);.  if( p->
11710 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11720 31 5d 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  1] ){.    pc = p
11730 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73  Op->p2-1;.  }els
11740 65 7b 0a 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46  e{.    p->aOnceF
11750 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31  lag[pOp->p1] = 1
11760 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11770 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
11780 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
11790 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
117a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
117b0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
117c0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
117d0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
117e0 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
117f0 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
11800 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
11810 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
11820 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
11830 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
11840 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
11850 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
11860 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
11870 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
11880 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11890 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
118a0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
118b0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
118c0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
118d0 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
118e0 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
118f0 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
11900 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
11910 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
11920 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
11930 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
11940 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11960 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
11970 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
11980 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
11990 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
119a0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
119b0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
119c0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
119d0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
119e0 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
119f0 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
11a00 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
11a10 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
11a20 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
11a30 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
11a40 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
11a50 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
11a60 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
11a70 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
11a80 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
11a90 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
11aa0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
11ab0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
11ac0 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 70 63   if( c ){.    pc
11ad0 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
11ae0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11af0 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20   Opcode: IsNull 
11b00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
11b10 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72 5b 50  ynopsis:  if r[P
11b20 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
11b30 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
11b40 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
11b50 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
11b60 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
11b70 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
11b80 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
11b90 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
11ba0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
11bb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
11bc0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
11bd0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
11be0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
11bf0 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
11c00 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
11c10 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
11c20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
11c30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
11c40 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
11c50 4e 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a  Null P1 P2 * * *
11c60 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
11c70 20 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74   r[P1]!=NULL got
11c80 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20  o P2.**.** Jump 
11c90 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
11ca0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
11cb0 31 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20  1 is not NULL.  
11cc0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e  .*/.case OP_NotN
11cd0 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ull: {          
11ce0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
11cf0 4e 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69  NOTNULL, jump, i
11d00 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
11d10 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
11d20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
11d30 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
11d40 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32   MEM_Null)==0, 2
11d50 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
11d60 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
11d70 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d  )==0 ){.    pc =
11d80 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
11d90 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
11da0 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20   Opcode: Column 
11db0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
11dc0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50  * Synopsis:  r[P
11dd0 33 5d 3d 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  3]=PX.**.** Inte
11de0 72 70 72 65 74 20 74 68 65 20 64 61 74 61 20 74  rpret the data t
11df0 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f  hat cursor P1 po
11e00 69 6e 74 73 20 74 6f 20 61 73 20 61 20 73 74 72  ints to as a str
11e10 75 63 74 75 72 65 20 62 75 69 6c 74 20 75 73 69  ucture built usi
11e20 6e 67 0a 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65  ng.** the MakeRe
11e30 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e  cord instruction
11e40 2e 20 20 28 53 65 65 20 74 68 65 20 4d 61 6b 65  .  (See the Make
11e50 52 65 63 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f  Record opcode fo
11e60 72 20 61 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20  r additional.** 
11e70 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  information abou
11e80 74 20 74 68 65 20 66 6f 72 6d 61 74 20 6f 66 20  t the format of 
11e90 74 68 65 20 64 61 74 61 2e 29 20 20 45 78 74 72  the data.)  Extr
11ea0 61 63 74 20 74 68 65 20 50 32 2d 74 68 20 63 6f  act the P2-th co
11eb0 6c 75 6d 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69  lumn.** from thi
11ec0 73 20 72 65 63 6f 72 64 2e 20 20 49 66 20 74 68  s record.  If th
11ed0 65 72 65 20 61 72 65 20 6c 65 73 73 20 74 68 61  ere are less tha
11ee0 74 20 28 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c  t (P2+1) .** val
11ef0 75 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ues in the recor
11f00 64 2c 20 65 78 74 72 61 63 74 20 61 20 4e 55 4c  d, extract a NUL
11f10 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c  L..**.** The val
11f20 75 65 20 65 78 74 72 61 63 74 65 64 20 69 73 20  ue extracted is 
11f30 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
11f40 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P3..**.** If 
11f50 74 68 65 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61  the column conta
11f60 69 6e 73 20 66 65 77 65 72 20 74 68 61 6e 20 50  ins fewer than P
11f70 32 20 66 69 65 6c 64 73 2c 20 74 68 65 6e 20 65  2 fields, then e
11f80 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20  xtract a NULL.  
11f90 4f 72 2c 0a 2a 2a 20 69 66 20 74 68 65 20 50 34  Or,.** if the P4
11fa0 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50   argument is a P
11fb0 34 5f 4d 45 4d 20 75 73 65 20 74 68 65 20 76 61  4_MEM use the va
11fc0 6c 75 65 20 6f 66 20 74 68 65 20 50 34 20 61 72  lue of the P4 ar
11fd0 67 75 6d 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65  gument as.** the
11fe0 20 72 65 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49   result..**.** I
11ff0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45  f the OPFLAG_CLE
12000 41 52 43 41 43 48 45 20 62 69 74 20 69 73 20 73  ARCACHE bit is s
12010 65 74 20 6f 6e 20 50 35 20 61 6e 64 20 50 31 20  et on P5 and P1 
12020 69 73 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  is a pseudo-tabl
12030 65 20 63 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65  e cursor,.** the
12040 6e 20 74 68 65 20 63 61 63 68 65 20 6f 66 20 74  n the cache of t
12050 68 65 20 63 75 72 73 6f 72 20 69 73 20 72 65 73  he cursor is res
12060 65 74 20 70 72 69 6f 72 20 74 6f 20 65 78 74 72  et prior to extr
12070 61 63 74 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d  acting the colum
12080 6e 2e 0a 2a 2a 20 54 68 65 20 66 69 72 73 74 20  n..** The first 
12090 4f 50 5f 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73  OP_Column agains
120a0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
120b0 20 61 66 74 65 72 20 74 68 65 20 76 61 6c 75 65   after the value
120c0 20 6f 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a   of the content.
120d0 2a 2a 20 72 65 67 69 73 74 65 72 20 68 61 73 20  ** register has 
120e0 63 68 61 6e 67 65 64 20 73 68 6f 75 6c 64 20 68  changed should h
120f0 61 76 65 20 74 68 69 73 20 62 69 74 20 73 65 74  ave this bit set
12100 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
12110 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
12120 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  and OPFLAG_TYPEO
12130 46 41 52 47 20 62 69 74 73 20 61 72 65 20 73 65  FARG bits are se
12140 74 20 6f 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20  t on P5 when.** 
12150 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 67 75  the result is gu
12160 61 72 61 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79  aranteed to only
12170 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
12180 61 72 67 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65  argument of a le
12190 6e 67 74 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70  ngth().** or typ
121a0 65 6f 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20  eof() function, 
121b0 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 54  respectively.  T
121c0 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61  he loading of la
121d0 72 67 65 20 62 6c 6f 62 73 20 63 61 6e 20 62 65  rge blobs can be
121e0 0a 2a 2a 20 73 6b 69 70 70 65 64 20 66 6f 72 20  .** skipped for 
121f0 6c 65 6e 67 74 68 28 29 20 61 6e 64 20 61 6c 6c  length() and all
12200 20 63 6f 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67   content loading
12210 20 63 61 6e 20 62 65 20 73 6b 69 70 70 65 64 20   can be skipped 
12220 66 6f 72 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f  for typeof()..*/
12230 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a  .case OP_Column:
12240 20 7b 0a 20 20 69 36 34 20 70 61 79 6c 6f 61 64   {.  i64 payload
12250 53 69 7a 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65  Size64; /* Numbe
12260 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
12270 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
12280 74 20 70 32 3b 20 20 20 20 20 20 20 20 20 20 20  t p2;           
12290 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* column numbe
122a0 72 20 74 6f 20 72 65 74 72 69 65 76 65 20 2a 2f  r to retrieve */
122b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
122c0 43 3b 20 20 20 20 2f 2a 20 54 68 65 20 56 44 42  C;    /* The VDB
122d0 45 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74  E cursor */.  Bt
122e0 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 20 20  Cursor *pCrsr;  
122f0 20 2f 2a 20 54 68 65 20 42 54 72 65 65 20 63 75   /* The BTree cu
12300 72 73 6f 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61  rsor */.  u32 *a
12310 54 79 70 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Type;        /* 
12320 61 54 79 70 65 5b 69 5d 20 68 6f 6c 64 73 20 74  aType[i] holds t
12330 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65 20  he numeric type 
12340 6f 66 20 74 68 65 20 69 2d 74 68 20 63 6f 6c 75  of the i-th colu
12350 6d 6e 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66  mn */.  u32 *aOf
12360 66 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f  fset;      /* aO
12370 66 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73  ffset[i] is offs
12380 65 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64  et to start of d
12390 61 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c  ata for i-th col
123a0 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e  umn */.  int len
123b0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
123c0 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
123d0 20 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61   serialized data
123e0 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20   for the column 
123f0 2a 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20  */.  int i;     
12400 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
12410 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d  counter */.  Mem
12420 20 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20   *pDest;        
12430 2f 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74  /* Where to writ
12440 65 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20  e the extracted 
12450 76 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73  value */.  Mem s
12460 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Mem;          /*
12470 20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65   For storing the
12480 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65   record being de
12490 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74  coded */.  const
124a0 20 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a   u8 *zData;   /*
124b0 20 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63   Part of the rec
124c0 6f 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65  ord being decode
124d0 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20  d */.  const u8 
124e0 2a 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78  *zHdr;    /* Nex
124f0 74 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20  t unparsed byte 
12500 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f  of the header */
12510 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e  .  const u8 *zEn
12520 64 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72  dHdr; /* Pointer
12530 20 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61   to first byte a
12540 66 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20  fter the header 
12550 2a 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b  */.  u32 offset;
12560 20 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65          /* Offse
12570 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20  t into the data 
12580 2a 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64  */.  u32 szField
12590 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  ;       /* Numbe
125a0 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68  r of bytes in th
125b0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66  e content of a f
125c0 69 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76  ield */.  u32 av
125d0 61 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ail;         /* 
125e0 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
125f0 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74  of available dat
12600 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20  a */.  u32 t;   
12610 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74            /* A t
12620 79 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  ype code from th
12630 65 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20  e record header 
12640 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20  */.  Mem *pReg; 
12650 20 20 20 20 20 20 20 20 2f 2a 20 50 73 65 75 64          /* Pseud
12660 6f 54 61 62 6c 65 20 69 6e 70 75 74 20 72 65 67  oTable input reg
12670 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70 32 20 3d  ister */..  p2 =
12680 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
12690 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
126a0 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
126b0 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
126c0 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65  ;.  pDest = &aMe
126d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65  m[pOp->p3];.  me
126e0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
126f0 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73 73 65  , pDest);.  asse
12700 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
12710 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
12720 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
12730 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
12740 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
12750 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
12760 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  2<pC->nField );.
12770 20 20 61 54 79 70 65 20 3d 20 70 43 2d 3e 61 54    aType = pC->aT
12780 79 70 65 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d  ype;.  aOffset =
12790 20 61 54 79 70 65 20 2b 20 70 43 2d 3e 6e 46 69   aType + pC->nFi
127a0 65 6c 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  eld;.#ifndef SQL
127b0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
127c0 54 41 42 4c 45 0a 20 20 61 73 73 65 72 74 28 20  TABLE.  assert( 
127d0 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3d  pC->pVtabCursor=
127e0 3d 30 20 29 3b 20 2f 2a 20 4f 50 5f 43 6f 6c 75  =0 ); /* OP_Colu
127f0 6d 6e 20 6e 65 76 65 72 20 63 61 6c 6c 65 64 20  mn never called 
12800 6f 6e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  on virtual table
12810 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 70 43 72   */.#endif.  pCr
12820 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
12830 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
12840 72 21 3d 30 20 7c 7c 20 70 43 2d 3e 70 73 65 75  r!=0 || pC->pseu
12850 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b 20  doTableReg>0 ); 
12860 2f 2a 20 70 43 72 73 72 20 4e 55 4c 4c 20 6f 6e  /* pCrsr NULL on
12870 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
12880 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
12890 21 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52  !=0 || pC->nullR
128a0 6f 77 20 29 3b 20 20 20 20 20 20 20 20 20 20 2f  ow );          /
128b0 2a 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 6f 6e  * pC->nullRow on
128c0 20 50 73 65 75 64 6f 54 61 62 6c 65 73 20 2a 2f   PseudoTables */
128d0 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  ..  /* If the cu
128e0 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74  rsor cache is st
128f0 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70  ale, bring it up
12900 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63  -to-date */.  rc
12910 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
12920 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a  rsorMoveto(pC);.
12930 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
12940 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
12950 6f 72 3b 0a 20 20 69 66 28 20 70 43 2d 3e 63 61  or;.  if( pC->ca
12960 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e 63 61  cheStatus!=p->ca
12970 63 68 65 43 74 72 20 7c 7c 20 28 70 4f 70 2d 3e  cheCtr || (pOp->
12980 70 35 26 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  p5&OPFLAG_CLEARC
12990 41 43 48 45 29 21 3d 30 20 29 7b 0a 20 20 20 20  ACHE)!=0 ){.    
129a0 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
129b0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 72  ){.      if( pCr
129c0 73 72 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  sr==0 ){.       
129d0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
129e0 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
129f0 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
12a00 26 61 4d 65 6d 5b 70 43 2d 3e 70 73 65 75 64 6f  &aMem[pC->pseudo
12a10 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20 20 20 20  TableReg];.     
12a20 20 20 20 61 73 73 65 72 74 28 20 70 52 65 67 2d     assert( pReg-
12a30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
12a40 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
12a50 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
12a60 70 52 65 67 29 20 29 3b 0a 20 20 20 20 20 20 20  pReg) );.       
12a70 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12a80 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61   = pC->szRow = a
12a90 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e 6e 3b 0a  vail = pReg->n;.
12aa0 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
12ab0 20 3d 20 28 75 38 2a 29 70 52 65 67 2d 3e 7a 3b   = (u8*)pReg->z;
12ac0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12ad0 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
12ae0 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
12af0 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 67  Null);.        g
12b00 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
12b10 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
12b20 65 6c 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65  else{.      asse
12b30 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 20  rt( pCrsr );.   
12b40 20 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62     if( pC->isTab
12b50 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  le==0 ){.       
12b60 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
12b70 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
12b80 69 64 28 70 43 72 73 72 29 20 29 3b 0a 20 20 20  id(pCrsr) );.   
12b90 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63       VVA_ONLY(rc
12ba0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
12bb0 4b 65 79 53 69 7a 65 28 70 43 72 73 72 2c 20 26  KeySize(pCrsr, &
12bc0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 29 3b 0a  payloadSize64);.
12bd0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12be0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12bf0 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73 65   /* True because
12c00 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74 6f   of CursorMoveto
12c10 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a 2f  () call above */
12c20 0a 20 20 20 20 20 20 20 20 2f 2a 20 73 71 6c 69  .        /* sqli
12c30 74 65 33 42 74 72 65 65 50 61 72 73 65 43 65 6c  te3BtreeParseCel
12c40 6c 50 74 72 28 29 20 75 73 65 73 20 67 65 74 56  lPtr() uses getV
12c50 61 72 69 6e 74 33 32 28 29 20 74 6f 20 65 78 74  arint32() to ext
12c60 72 61 63 74 20 74 68 65 0a 20 20 20 20 20 20 20  ract the.       
12c70 20 2a 2a 20 70 61 79 6c 6f 61 64 20 73 69 7a 65   ** payload size
12c80 2c 20 73 6f 20 69 74 20 69 73 20 69 6d 70 6f 73  , so it is impos
12c90 73 69 62 6c 65 20 66 6f 72 20 70 61 79 6c 6f 61  sible for payloa
12ca0 64 53 69 7a 65 36 34 20 74 6f 20 62 65 0a 20 20  dSize64 to be.  
12cb0 20 20 20 20 20 20 2a 2a 20 6c 61 72 67 65 72 20        ** larger 
12cc0 74 68 61 6e 20 33 32 20 62 69 74 73 2e 20 2a 2f  than 32 bits. */
12cd0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
12ce0 20 28 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20   (payloadSize64 
12cf0 26 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32  & SQLITE_MAX_U32
12d00 29 3d 3d 28 75 36 34 29 70 61 79 6c 6f 61 64 53  )==(u64)payloadS
12d10 69 7a 65 36 34 20 29 3b 0a 20 20 20 20 20 20 20  ize64 );.       
12d20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69   pC->aRow = sqli
12d30 74 65 33 42 74 72 65 65 4b 65 79 46 65 74 63 68  te3BtreeKeyFetch
12d40 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b  (pCrsr, &avail);
12d50 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79  .        pC->pay
12d60 6c 6f 61 64 53 69 7a 65 20 3d 20 28 75 33 32 29  loadSize = (u32)
12d70 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 3b 0a 20  payloadSize64;. 
12d80 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
12d90 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
12da0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
12db0 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
12dc0 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c 59          VVA_ONLY
12dd0 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42 74  (rc =) sqlite3Bt
12de0 72 65 65 44 61 74 61 53 69 7a 65 28 70 43 72 73  reeDataSize(pCrs
12df0 72 2c 20 26 70 43 2d 3e 70 61 79 6c 6f 61 64 53  r, &pC->payloadS
12e00 69 7a 65 29 3b 0a 20 20 20 20 20 20 20 20 61 73  ize);.        as
12e10 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
12e20 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 44 61 74 61  _OK );   /* Data
12e30 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66 61  Size() cannot fa
12e40 69 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 43  il */.        pC
12e50 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65 33  ->aRow = sqlite3
12e60 42 74 72 65 65 44 61 74 61 46 65 74 63 68 28 70  BtreeDataFetch(p
12e70 43 72 73 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20  Crsr, &avail);. 
12e80 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73       }.      ass
12e90 65 72 74 28 20 61 76 61 69 6c 3c 3d 36 35 35 33  ert( avail<=6553
12ea0 36 20 29 3b 20 20 2f 2a 20 4d 61 78 69 6d 75 6d  6 );  /* Maximum
12eb0 20 70 61 67 65 20 73 69 7a 65 20 69 73 20 36 34   page size is 64
12ec0 4b 69 42 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  KiB */.      if(
12ed0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12ee0 20 3c 3d 20 28 75 33 32 29 61 76 61 69 6c 20 29   <= (u32)avail )
12ef0 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a  {.        pC->sz
12f00 52 6f 77 20 3d 20 70 43 2d 3e 70 61 79 6c 6f 61  Row = pC->payloa
12f10 64 53 69 7a 65 3b 0a 20 20 20 20 20 20 7d 65 6c  dSize;.      }el
12f20 73 65 7b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e  se{.        pC->
12f30 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 3b 0a 20  szRow = avail;. 
12f40 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
12f50 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
12f60 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d   > (u32)db->aLim
12f70 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  it[SQLITE_LIMIT_
12f80 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20  LENGTH] ){.     
12f90 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
12fa0 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
12fb0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
12fc0 75 73 20 3d 20 70 2d 3e 63 61 63 68 65 43 74 72  us = p->cacheCtr
12fd0 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64 72 4f 66  ;.    pC->iHdrOf
12fe0 66 73 65 74 20 3d 20 67 65 74 56 61 72 69 6e 74  fset = getVarint
12ff0 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20 6f 66 66  32(pC->aRow, off
13000 73 65 74 29 3b 0a 20 20 20 20 70 43 2d 3e 6e 48  set);.    pC->nH
13010 64 72 50 61 72 73 65 64 20 3d 20 30 3b 0a 20 20  drParsed = 0;.  
13020 20 20 61 4f 66 66 73 65 74 5b 30 5d 20 3d 20 6f    aOffset[0] = o
13030 66 66 73 65 74 3b 0a 20 20 20 20 69 66 28 20 61  ffset;.    if( a
13040 76 61 69 6c 3c 6f 66 66 73 65 74 20 29 7b 0a 20  vail<offset ){. 
13050 20 20 20 20 20 2f 2a 20 70 43 2d 3e 61 52 6f 77       /* pC->aRow
13060 20 64 6f 65 73 20 6e 6f 74 20 68 61 76 65 20 74   does not have t
13070 6f 20 68 6f 6c 64 20 74 68 65 20 65 6e 74 69 72  o hold the entir
13080 65 20 72 6f 77 2c 20 62 75 74 20 69 74 20 64 6f  e row, but it do
13090 65 73 20 61 74 20 6c 65 61 73 74 0a 20 20 20 20  es at least.    
130a0 20 20 2a 2a 20 6e 65 65 64 20 74 6f 20 63 6f 76    ** need to cov
130b0 65 72 20 74 68 65 20 68 65 61 64 65 72 20 6f 66  er the header of
130c0 20 74 68 65 20 72 65 63 6f 72 64 2e 20 20 49 66   the record.  If
130d0 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
130e0 6f 74 20 63 6f 6e 74 61 69 6e 0a 20 20 20 20 20  ot contain.     
130f0 20 2a 2a 20 74 68 65 20 63 6f 6d 70 6c 65 74 65   ** the complete
13100 20 68 65 61 64 65 72 2c 20 74 68 65 6e 20 73 65   header, then se
13110 74 20 69 74 20 74 6f 20 7a 65 72 6f 2c 20 66 6f  t it to zero, fo
13120 72 63 69 6e 67 20 74 68 65 20 68 65 61 64 65 72  rcing the header
13130 20 74 6f 20 62 65 0a 20 20 20 20 20 20 2a 2a 20   to be.      ** 
13140 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
13150 63 61 74 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20  cated. */.      
13160 70 43 2d 3e 61 52 6f 77 20 3d 20 30 3b 0a 20 20  pC->aRow = 0;.  
13170 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
13180 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
13190 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
131a0 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
131b0 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
131c0 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
131d0 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74 68 69  r..    ** Do thi
131e0 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64 20 61  s now to avoid a
131f0 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d 6f 72  n oversize memor
13200 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a 20 20  y allocation..  
13210 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79 70 65    **.    ** Type
13220 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62 65 20   entries can be 
13230 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20 35 20  between 1 and 5 
13240 62 79 74 65 73 20 65 61 63 68 2e 20 20 42 75 74  bytes each.  But
13250 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a 20 20   4 and 5 byte.  
13260 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73    ** types use s
13270 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63  o much data spac
13280 65 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e  e that there can
13290 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e   only be 4096 an
132a0 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a 20 74  d 32 of.    ** t
132b0 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65 6c  hem, respectivel
132c0 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69 6d  y.  So the maxim
132d0 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68  um header length
132e0 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61 0a   results from a.
132f0 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20 74 79      ** 3-byte ty
13300 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66 20 74  pe for each of t
13310 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 33 32  he maximum of 32
13320 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c 75 73  768 columns plus
13330 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20 65 78   three.    ** ex
13340 74 72 61 20 62 79 74 65 73 20 66 6f 72 20 74 68  tra bytes for th
13350 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20  e header length 
13360 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33  itself.  32768*3
13370 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20   + 3 = 98307..  
13380 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f 66 66    */.    if( off
13390 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c 20 6f  set > 98307 || o
133a0 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61 79 6c  ffset > pC->payl
133b0 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20 20 20  oadSize ){.     
133c0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52   rc = SQLITE_COR
133d0 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20  RUPT_BKPT;.     
133e0 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f   goto op_column_
133f0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
13400 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
13410 20 61 74 20 6c 65 61 73 74 20 74 68 65 20 66 69   at least the fi
13420 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69 65 73  rst p2+1 entries
13430 20 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 68   of the header h
13440 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20 70 61  ave been.  ** pa
13450 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64 20 69  rsed and valid i
13460 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 69 6e  nformation is in
13470 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64 20 61   aOffset[] and a
13480 54 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69  Type[]..  */.  i
13490 66 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65  f( pC->nHdrParse
134a0 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20  d<=p2 ){.    /* 
134b0 49 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65  If there is more
134c0 20 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c   header availabl
134d0 65 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e  e for parsing in
134e0 20 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79   the record, try
134f0 0a 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61  .    ** to extra
13500 63 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69  ct additional fi
13510 65 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20  elds up through 
13520 74 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c  the p2+1-th fiel
13530 64 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d .    */.    if
13540 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74  ( pC->iHdrOffset
13550 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20  <aOffset[0] ){. 
13560 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
13570 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74  e zData points t
13580 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20  o enough of the 
13590 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20  record to cover 
135a0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
135b0 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f       if( pC->aRo
135c0 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  w==0 ){.        
135d0 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c  memset(&sMem, 0,
135e0 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a   sizeof(sMem));.
135f0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
13600 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
13610 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20 61  tree(pCrsr, 0, a
13620 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20 20  Offset[0], .    
13630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13650 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20 26   !pC->isTable, &
13660 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 69  sMem);.        i
13670 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
13680 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
13690 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72  to op_column_err
136a0 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  or;.        }.  
136b0 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28 75        zData = (u
136c0 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20 20  8*)sMem.z;.     
136d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
136e0 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f 77  zData = pC->aRow
136f0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  ;.      }.  .   
13700 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 61 54     /* Fill in aT
13710 79 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73  ype[i] and aOffs
13720 65 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72  et[i] values thr
13730 6f 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66  ough the p2-th f
13740 69 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ield. */.      i
13750 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65   = pC->nHdrParse
13760 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74 20  d;.      offset 
13770 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b 0a 20 20  = aOffset[i];.  
13780 20 20 20 20 7a 48 64 72 20 3d 20 7a 44 61 74 61      zHdr = zData
13790 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65   + pC->iHdrOffse
137a0 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64 48 64 72  t;.      zEndHdr
137b0 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f 66 66 73   = zData + aOffs
137c0 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20 61 73 73  et[0];.      ass
137d0 65 72 74 28 20 69 3c 3d 70 32 20 26 26 20 7a 48  ert( i<=p2 && zH
137e0 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 20 20  dr<zEndHdr );.  
137f0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
13800 69 66 28 20 7a 48 64 72 5b 30 5d 3c 30 78 38 30  if( zHdr[0]<0x80
13810 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 74 20   ){.          t 
13820 3d 20 7a 48 64 72 5b 30 5d 3b 0a 20 20 20 20 20  = zHdr[0];.     
13830 20 20 20 20 20 7a 48 64 72 2b 2b 3b 0a 20 20 20       zHdr++;.   
13840 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
13850 20 20 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71        zHdr += sq
13860 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
13870 28 7a 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20  (zHdr, &t);.    
13880 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61 54      }.        aT
13890 79 70 65 5b 69 5d 20 3d 20 74 3b 0a 20 20 20 20  ype[i] = t;.    
138a0 20 20 20 20 73 7a 46 69 65 6c 64 20 3d 20 73 71      szField = sq
138b0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
138c0 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
138d0 20 20 20 6f 66 66 73 65 74 20 2b 3d 20 73 7a 46     offset += szF
138e0 69 65 6c 64 3b 0a 20 20 20 20 20 20 20 20 69 66  ield;.        if
138f0 28 20 6f 66 66 73 65 74 3c 73 7a 46 69 65 6c 64  ( offset<szField
13900 20 29 7b 20 20 2f 2a 20 54 72 75 65 20 69 66 20   ){  /* True if 
13910 6f 66 66 73 65 74 20 6f 76 65 72 66 6c 6f 77 73  offset overflows
13920 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 48   */.          zH
13930 64 72 20 3d 20 26 7a 45 6e 64 48 64 72 5b 31 5d  dr = &zEndHdr[1]
13940 3b 20 20 2f 2a 20 46 6f 72 63 65 73 20 53 51 4c  ;  /* Forces SQL
13950 49 54 45 5f 43 4f 52 52 55 50 54 20 72 65 74 75  ITE_CORRUPT retu
13960 72 6e 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 20 20  rn below */.    
13970 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
13980 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
13990 2b 2b 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66  ++;.        aOff
139a0 73 65 74 5b 69 5d 20 3d 20 6f 66 66 73 65 74 3b  set[i] = offset;
139b0 0a 20 20 20 20 20 20 7d 77 68 69 6c 65 28 20 69  .      }while( i
139c0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
139d0 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 70 43  dHdr );.      pC
139e0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
139f0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
13a00 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
13a10 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
13a20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
13a30 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ==0 ){.        s
13a40 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c  qlite3VdbeMemRel
13a50 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20  ease(&sMem);.   
13a60 20 20 20 20 20 73 4d 65 6d 2e 66 6c 61 67 73 20       sMem.flags 
13a70 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20  = MEM_Null;.    
13a80 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
13a90 49 66 20 77 65 20 68 61 76 65 20 72 65 61 64 20  If we have read 
13aa0 6d 6f 72 65 20 68 65 61 64 65 72 20 64 61 74 61  more header data
13ab0 20 74 68 61 6e 20 77 61 73 20 63 6f 6e 74 61 69   than was contai
13ac0 6e 65 64 20 69 6e 20 74 68 65 20 68 65 61 64 65  ned in the heade
13ad0 72 2c 0a 20 20 20 20 20 20 2a 2a 20 6f 72 20 69  r,.      ** or i
13ae0 66 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  f the end of the
13af0 20 6c 61 73 74 20 66 69 65 6c 64 20 61 70 70 65   last field appe
13b00 61 72 73 20 74 6f 20 62 65 20 70 61 73 74 20 74  ars to be past t
13b10 68 65 20 65 6e 64 20 6f 66 20 74 68 65 0a 20 20  he end of the.  
13b20 20 20 20 20 2a 2a 20 72 65 63 6f 72 64 2c 20 6f      ** record, o
13b30 72 20 69 66 20 74 68 65 20 65 6e 64 20 6f 66 20  r if the end of 
13b40 74 68 65 20 6c 61 73 74 20 66 69 65 6c 64 20 61  the last field a
13b50 70 70 65 61 72 73 20 74 6f 20 62 65 20 62 65 66  ppears to be bef
13b60 6f 72 65 20 74 68 65 20 65 6e 64 0a 20 20 20 20  ore the end.    
13b70 20 20 2a 2a 20 6f 66 20 74 68 65 20 72 65 63 6f    ** of the reco
13b80 72 64 20 28 77 68 65 6e 20 61 6c 6c 20 66 69 65  rd (when all fie
13b90 6c 64 73 20 70 72 65 73 65 6e 74 29 2c 20 74 68  lds present), th
13ba0 65 6e 20 77 65 20 6d 75 73 74 20 62 65 20 64 65  en we must be de
13bb0 61 6c 69 6e 67 20 0a 20 20 20 20 20 20 2a 2a 20  aling .      ** 
13bc0 77 69 74 68 20 61 20 63 6f 72 72 75 70 74 20 64  with a corrupt d
13bd0 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a  atabase..      *
13be0 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
13bf0 72 20 3e 20 7a 45 6e 64 48 64 72 29 0a 20 20 20  r > zEndHdr).   
13c00 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74 20 3e      || (offset >
13c10 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
13c20 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 7a 48 64  ).       || (zHd
13c30 72 3d 3d 7a 45 6e 64 48 64 72 20 26 26 20 6f 66  r==zEndHdr && of
13c40 66 73 65 74 21 3d 70 43 2d 3e 70 61 79 6c 6f 61  fset!=pC->payloa
13c50 64 53 69 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a  dSize).      ){.
13c60 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
13c70 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
13c80 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f  ;.        goto o
13c90 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a  p_column_error;.
13ca0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
13cb0 20 20 20 2f 2a 20 49 66 20 61 66 74 65 72 20 74     /* If after t
13cc0 72 79 69 6e 67 20 74 6f 20 65 78 74 72 61 20 6e  rying to extra n
13cd0 65 77 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20  ew entries from 
13ce0 74 68 65 20 68 65 61 64 65 72 2c 20 6e 48 64 72  the header, nHdr
13cf0 50 61 72 73 65 64 20 69 73 0a 20 20 20 20 2a 2a  Parsed is.    **
13d00 20 73 74 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f   still not up to
13d10 20 70 32 2c 20 74 68 61 74 20 6d 65 61 6e 73 20   p2, that means 
13d20 74 68 61 74 20 74 68 65 20 72 65 63 6f 72 64 20  that the record 
13d30 68 61 73 20 66 65 77 65 72 20 74 68 61 6e 20 70  has fewer than p
13d40 32 0a 20 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73  2.    ** columns
13d50 2e 20 20 53 6f 20 74 68 65 20 72 65 73 75 6c 74  .  So the result
13d60 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
13d70 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
13d80 65 20 6f 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20  e or a NULL..   
13d90 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
13da0 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29  nHdrParsed<=p2 )
13db0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d  {.      if( pOp-
13dc0 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20  >p4type==P4_MEM 
13dd0 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
13de0 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
13df0 43 6f 70 79 28 70 44 65 73 74 2c 20 70 4f 70 2d  Copy(pDest, pOp-
13e00 3e 70 34 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74  >p4.pMem, MEM_St
13e10 61 74 69 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  atic);.      }el
13e20 73 65 7b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53  se{.        MemS
13e30 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
13e40 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20  , MEM_Null);.   
13e50 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
13e60 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20  op_column_out;. 
13e70 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a 20 45     }.  }..  /* E
13e80 78 74 72 61 63 74 20 74 68 65 20 63 6f 6e 74 65  xtract the conte
13e90 6e 74 20 66 6f 72 20 74 68 65 20 70 32 2b 31 2d  nt for the p2+1-
13ea0 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43 6f 6e 74  th column.  Cont
13eb0 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a 20 20 2a  rol can only.  *
13ec0 2a 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  * reach this poi
13ed0 6e 74 20 69 66 20 61 4f 66 66 73 65 74 5b 70 32  nt if aOffset[p2
13ee0 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d  ], aOffset[p2+1]
13ef0 2c 20 61 6e 64 20 61 54 79 70 65 5b 70 32 5d 20  , and aType[p2] 
13f00 61 72 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c  are.  ** all val
13f10 69 64 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  id..  */.  asser
13f20 74 28 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61  t( p2<pC->nHdrPa
13f30 72 73 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74  rsed );.  assert
13f40 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
13f50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c  );.  assert( sql
13f60 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d  ite3VdbeCheckMem
13f70 49 6e 76 61 72 69 61 6e 74 73 28 70 44 65 73 74  Invariants(pDest
13f80 29 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73  ) );.  if( pC->s
13f90 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32  zRow>=aOffset[p2
13fa0 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  +1] ){.    /* Th
13fb0 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e  is is the common
13fc0 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20   case where the 
13fd0 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20  desired content 
13fe0 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67  fits on the orig
13ff0 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65  inal.    ** page
14000 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e   - where the con
14010 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61  tent is not on a
14020 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20  n overflow page 
14030 2a 2f 0a 20 20 20 20 56 64 62 65 4d 65 6d 52 65  */.    VdbeMemRe
14040 6c 65 61 73 65 28 70 44 65 73 74 29 3b 0a 20 20  lease(pDest);.  
14050 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72    sqlite3VdbeSer
14060 69 61 6c 47 65 74 28 70 43 2d 3e 61 52 6f 77 2b  ialGet(pC->aRow+
14070 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 54 79  aOffset[p2], aTy
14080 70 65 5b 70 32 5d 2c 20 70 44 65 73 74 29 3b 0a  pe[p2], pDest);.
14090 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
140a0 54 68 69 73 20 62 72 61 6e 63 68 20 68 61 70 70  This branch happ
140b0 65 6e 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f  ens only when co
140c0 6e 74 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72  ntent is on over
140d0 66 6c 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20  flow pages */.  
140e0 20 20 74 20 3d 20 61 54 79 70 65 5b 70 32 5d 3b    t = aType[p2];
140f0 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70 2d 3e  .    if( ((pOp->
14100 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c 45 4e  p5 & (OPFLAG_LEN
14110 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f 54 59  GTHARG|OPFLAG_TY
14120 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20 20 20  PEOFARG))!=0.   
14130 20 20 20 20 20 20 20 26 26 20 28 28 74 3e 3d 31         && ((t>=1
14140 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29 20 7c  2 && (t&1)==0) |
14150 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  | (pOp->p5 & OPF
14160 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 21 3d  LAG_TYPEOFARG)!=
14170 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c 65 6e  0)).     || (len
14180 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
14190 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29 29 3d  rialTypeLen(t))=
141a0 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20  =0.    ){.      
141b0 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20 69 72  /* Content is ir
141c0 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 74 68 65  relevant for the
141d0 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
141e0 6f 6e 20 61 6e 64 20 66 6f 72 0a 20 20 20 20 20  on and for.     
141f0 20 2a 2a 20 74 68 65 20 6c 65 6e 67 74 68 28 58   ** the length(X
14200 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
14210 69 73 20 61 20 62 6c 6f 62 2e 20 20 53 6f 20 77  is a blob.  So w
14220 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c 20  e might as well 
14230 75 73 65 0a 20 20 20 20 20 20 2a 2a 20 62 6f 67  use.      ** bog
14240 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68 65  us content rathe
14250 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 20 63  r than reading c
14260 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73 6b  ontent from disk
14270 2e 20 20 4e 55 4c 4c 20 77 6f 72 6b 73 0a 20 20  .  NULL works.  
14280 20 20 20 20 2a 2a 20 66 6f 72 20 74 65 78 74 20      ** for text 
14290 61 6e 64 20 62 6c 6f 62 20 61 6e 64 20 77 68 61  and blob and wha
142a0 74 65 76 65 72 20 69 73 20 69 6e 20 74 68 65 20  tever is in the 
142b0 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 76 61  payloadSize64 va
142c0 72 69 61 62 6c 65 0a 20 20 20 20 20 20 2a 2a 20  riable.      ** 
142d0 77 69 6c 6c 20 77 6f 72 6b 20 66 6f 72 20 65 76  will work for ev
142e0 65 72 79 74 68 69 6e 67 20 65 6c 73 65 2e 20 20  erything else.  
142f0 43 6f 6e 74 65 6e 74 20 69 73 20 61 6c 73 6f 20  Content is also 
14300 69 72 72 65 6c 65 76 61 6e 74 20 69 66 0a 20 20  irrelevant if.  
14310 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6e 74 65      ** the conte
14320 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 30 2e 20  nt length is 0. 
14330 2a 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d  */.      zData =
14340 20 74 3c 3d 31 33 20 3f 20 28 75 38 2a 29 26 70   t<=13 ? (u8*)&p
14350 61 79 6c 6f 61 64 53 69 7a 65 36 34 20 3a 20 30  ayloadSize64 : 0
14360 3b 0a 20 20 20 20 20 20 73 4d 65 6d 2e 7a 4d 61  ;.      sMem.zMa
14370 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 7d 65  lloc = 0;.    }e
14380 6c 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 73 65  lse{.      memse
14390 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65  t(&sMem, 0, size
143a0 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20  of(sMem));.     
143b0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
143c0 6f 76 65 28 26 73 4d 65 6d 2c 20 70 44 65 73 74  ove(&sMem, pDest
143d0 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  );.      rc = sq
143e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
143f0 42 74 72 65 65 28 70 43 72 73 72 2c 20 61 4f 66  Btree(pCrsr, aOf
14400 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20 21  fset[p2], len, !
14410 70 43 2d 3e 69 73 54 61 62 6c 65 2c 0a 20 20 20  pC->isTable,.   
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14440 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 69 66  &sMem);.      if
14450 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
14460 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  ){.        goto 
14470 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
14480 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7a  .      }.      z
14490 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65 6d  Data = (u8*)sMem
144a0 2e 7a 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  .z;.    }.    sq
144b0 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
144c0 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
144d0 73 74 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 77  st);.    /* If w
144e0 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c  e dynamically al
144f0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 74 6f  located space to
14500 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61 20 28   hold the data (
14510 69 6e 20 74 68 65 0a 20 20 20 20 2a 2a 20 73 71  in the.    ** sq
14520 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
14530 42 74 72 65 65 28 29 20 63 61 6c 6c 20 61 62 6f  Btree() call abo
14540 76 65 29 20 74 68 65 6e 20 74 72 61 6e 73 66 65  ve) then transfe
14550 72 20 63 6f 6e 74 72 6f 6c 20 6f 66 20 74 68 61  r control of tha
14560 74 0a 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63  t.    ** dynamic
14570 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
14580 70 61 63 65 20 6f 76 65 72 20 74 6f 20 74 68 65  pace over to the
14590 20 70 44 65 73 74 20 73 74 72 75 63 74 75 72 65   pDest structure
145a0 2e 0a 20 20 20 20 2a 2a 20 54 68 69 73 20 70 72  ..    ** This pr
145b0 65 76 65 6e 74 73 20 61 20 6d 65 6d 6f 72 79 20  events a memory 
145c0 63 6f 70 79 2e 20 2a 2f 0a 20 20 20 20 69 66 28  copy. */.    if(
145d0 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 7b   sMem.zMalloc ){
145e0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
145f0 4d 65 6d 2e 7a 3d 3d 73 4d 65 6d 2e 7a 4d 61 6c  Mem.z==sMem.zMal
14600 6c 6f 63 20 29 3b 0a 20 20 20 20 20 20 61 73 73  loc );.      ass
14610 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61  ert( VdbeMemDyna
14620 6d 69 63 28 70 44 65 73 74 29 3d 3d 30 20 29 3b  mic(pDest)==0 );
14630 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
14640 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26 20 28  pDest->flags & (
14650 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72  MEM_Blob|MEM_Str
14660 29 29 3d 3d 30 20 7c 7c 20 70 44 65 73 74 2d 3e  ))==0 || pDest->
14670 7a 3d 3d 73 4d 65 6d 2e 7a 20 29 3b 0a 20 20 20  z==sMem.z );.   
14680 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
14690 26 3d 20 7e 28 4d 45 4d 5f 45 70 68 65 6d 7c 4d  &= ~(MEM_Ephem|M
146a0 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20 20  EM_Static);.    
146b0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 7c    pDest->flags |
146c0 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 20 20  = MEM_Term;.    
146d0 20 20 70 44 65 73 74 2d 3e 7a 20 3d 20 73 4d 65    pDest->z = sMe
146e0 6d 2e 7a 3b 0a 20 20 20 20 20 20 70 44 65 73 74  m.z;.      pDest
146f0 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 73 4d 65 6d  ->zMalloc = sMem
14700 2e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 7d 0a  .zMalloc;.    }.
14710 20 20 7d 0a 20 20 70 44 65 73 74 2d 3e 65 6e 63    }.  pDest->enc
14720 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 0a 6f 70   = encoding;..op
14730 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a 0a 20 20 44  _column_out:.  D
14740 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 44  eephemeralize(pD
14750 65 73 74 29 3b 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f  est);.op_column_
14760 65 72 72 6f 72 3a 0a 20 20 55 50 44 41 54 45 5f  error:.  UPDATE_
14770 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65  MAX_BLOBSIZE(pDe
14780 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  st);.  REGISTER_
14790 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
147a0 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  Dest);.  break;.
147b0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 66  }../* Opcode: Af
147c0 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a 20 50  finity P1 P2 * P
147d0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
147e0 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31 40 50   affinity(r[P1@P
147f0 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c 79 20  2]).**.** Apply 
14800 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20 61 20  affinities to a 
14810 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65 67 69  range of P2 regi
14820 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 77  sters starting w
14830 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  ith P1..**.** P4
14840 20 69 73 20 61 20 73 74 72 69 6e 67 20 74 68 61   is a string tha
14850 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
14860 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e 74 68  rs long. The nth
14870 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
14880 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
14890 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
148a0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
148b0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
148c0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d 65 6d  r the nth.** mem
148d0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 65 20  ory cell in the 
148e0 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  range..*/.case O
148f0 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a 20 20  P_Affinity: {.  
14900 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 66 66  const char *zAff
14910 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68 65 20  inity;   /* The 
14920 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65 20 61  affinity to be a
14930 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68 61 72  pplied */.  char
14940 20 63 41 66 66 3b 20 20 20 20 20 20 20 20 20 20   cAff;          
14950 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67 6c 65       /* A single
14960 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 61 66   character of af
14970 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a 41 66  finity */..  zAf
14980 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34  finity = pOp->p4
14990 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 7a 41  .z;.  assert( zA
149a0 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a 20 20  ffinity!=0 );.  
149b0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
149c0 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20 29 3b  y[pOp->p2]==0 );
149d0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
149e0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68 69 6c  pOp->p1];.  whil
149f0 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a 41 66  e( (cAff = *(zAf
14a00 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20 29 7b  finity++))!=0 ){
14a10 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e  .    assert( pIn
14a20 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b 28 70  1 <= &p->aMem[(p
14a30 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
14a40 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72  r)] );.    asser
14a50 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
14a60 6e 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79  n1) );.    apply
14a70 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63  Affinity(pIn1, c
14a80 41 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Aff, encoding);.
14a90 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a      pIn1++;.  }.
14aa0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
14ab0 70 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72  pcode: MakeRecor
14ac0 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  d P1 P2 P3 P4 *.
14ad0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
14ae0 33 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32  3]=mkrec(r[P1@P2
14af0 5d 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  ]).**.** Convert
14b00 20 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65   P2 registers be
14b10 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20  ginning with P1 
14b20 69 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64  into the [record
14b30 20 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20   format].** use 
14b40 61 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64  as a data record
14b50 20 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74   in a database t
14b60 61 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79  able or as a key
14b70 0a 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e  .** in an index.
14b80 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20    The OP_Column 
14b90 6f 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64  opcode can decod
14ba0 65 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74  e the record lat
14bb0 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79  er..**.** P4 may
14bc0 20 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61   be a string tha
14bd0 74 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65  t is P2 characte
14be0 72 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74  rs long.  The nt
14bf0 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74  h character of t
14c00 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64  he.** string ind
14c10 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d  icates the colum
14c20 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20  n affinity that 
14c30 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66  should be used f
14c40 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69  or the nth.** fi
14c50 65 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78  eld of the index
14c60 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
14c70 6d 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61  mapping from cha
14c80 72 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69  racter to affini
14c90 74 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74  ty is given by t
14ca0 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a  he SQLITE_AFF_.*
14cb0 2a 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64  * macros defined
14cc0 20 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e   in sqliteInt.h.
14cd0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
14ce0 4e 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e  NULL then all in
14cf0 64 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20  dex fields have 
14d00 74 68 65 20 61 66 66 69 6e 69 74 79 20 4e 4f 4e  the affinity NON
14d10 45 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  E..*/.case OP_Ma
14d20 6b 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38  keRecord: {.  u8
14d30 20 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20   *zNewRecord;   
14d40 20 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72       /* A buffer
14d50 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74   to hold the dat
14d60 61 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65  a for the new re
14d70 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  cord */.  Mem *p
14d80 52 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  Rec;            
14d90 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f   /* The new reco
14da0 72 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74  rd */.  u64 nDat
14db0 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  a;             /
14dc0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  * Number of byte
14dd0 73 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20  s of data space 
14de0 2a 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20  */.  int nHdr;  
14df0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14e00 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
14e10 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
14e20 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20  /.  i64 nByte;  
14e30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
14e40 74 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65  ta space require
14e50 64 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72  d for this recor
14e60 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f  d */.  int nZero
14e70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
14e80 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
14e90 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
14ea0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
14eb0 2f 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b  /.  int nVarint;
14ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14ed0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e  mber of bytes in
14ee0 20 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75   a varint */.  u
14ef0 33 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20  32 serial_type; 
14f00 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69        /* Type fi
14f10 65 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44  eld */.  Mem *pD
14f20 61 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20  ata0;           
14f30 2f 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74  /* First field t
14f40 6f 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e  o be combined in
14f50 74 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  to the record */
14f60 0a 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20  .  Mem *pLast;  
14f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
14f80 74 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72  t field of the r
14f90 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  ecord */.  int n
14fa0 46 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20  Field;          
14fb0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66    /* Number of f
14fc0 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63  ields in the rec
14fd0 6f 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ord */.  char *z
14fe0 41 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20  Affinity;       
14ff0 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20  /* The affinity 
15000 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72  string for the r
15010 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66  ecord */.  int f
15020 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
15030 20 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74    /* File format
15040 20 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f   to use for enco
15050 64 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b  ding */.  int i;
15060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15070 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
15080 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68  n zNewRecord[] h
15090 65 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a  eader */.  int j
150a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
150b0 20 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20    /* Space used 
150c0 69 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20  in zNewRecord[] 
150d0 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 69 6e 74  content */.  int
150e0 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20   len;           
150f0 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
15100 20 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f   a field */..  /
15110 2a 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72  * Assuming the r
15120 65 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e  ecord contains N
15130 20 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63   fields, the rec
15140 6f 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73  ord format looks
15150 0a 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a  .  ** like this:
15160 0a 20 20 2a 2a 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d  .  **.  ** -----
15170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15180 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15190 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151b0 2d 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73  ---.  ** | hdr-s
151c0 69 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74  ize | type 0 | t
151d0 79 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79  ype 1 | ... | ty
151e0 70 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c  pe N-1 | data0 |
151f0 20 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20   ... | data N-1 
15200 7c 20 0a 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d  | .  ** --------
15210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15220 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15230 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15240 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15250 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28  .  **.  ** Data(
15260 30 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d  0) is taken from
15270 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44   register P1.  D
15280 61 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f  ata(1) comes fro
15290 6d 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a  m register P1+1.
152a0 20 20 2a 2a 20 61 6e 64 20 73 6f 20 66 72 6f 74    ** and so frot
152b0 68 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63  h..  **.  ** Eac
152c0 68 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20  h type field is 
152d0 61 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65  a varint represe
152e0 6e 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c  nting the serial
152f0 20 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20   type of the .  
15300 2a 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  ** corresponding
15310 20 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73   data element (s
15320 65 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  ee sqlite3VdbeSe
15330 72 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65  rialType()). The
15340 0a 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66  .  ** hdr-size f
15350 69 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76  ield is also a v
15360 61 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74  arint which is t
15370 68 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74  he offset from t
15380 68 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a  he beginning.  *
15390 2a 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  * of the record 
153a0 74 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20  to data0..  */. 
153b0 20 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20   nData = 0;     
153c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
153d0 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73   bytes of data s
153e0 70 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d  pace */.  nHdr =
153f0 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20   0;          /* 
15400 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20  Number of bytes 
15410 6f 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20  of header space 
15420 2a 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20  */.  nZero = 0; 
15430 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15440 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
15450 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
15460 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46  e record */.  nF
15470 69 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  ield = pOp->p1;.
15480 20 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f    zAffinity = pO
15490 70 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72  p->p4.z;.  asser
154a0 74 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70  t( nField>0 && p
154b0 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
154c0 3e 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e  >p2+nField<=(p->
154d0 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
154e0 2b 31 20 29 3b 0a 20 20 70 44 61 74 61 30 20 3d  +1 );.  pData0 =
154f0 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64 5d 3b 0a   &aMem[nField];.
15500 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
15510 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d 20 26 70  p2;.  pLast = &p
15520 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d 31 5d 3b  Data0[nField-1];
15530 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d  .  file_format =
15540 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65   p->minWriteFile
15550 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a 20 49 64  Format;..  /* Id
15560 65 6e 74 69 66 79 20 74 68 65 20 6f 75 74 70 75  entify the outpu
15570 74 20 72 65 67 69 73 74 65 72 20 2a 2f 0a 20 20  t register */.  
15580 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
15590 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f 70 2d 3e  pOp->p1 || pOp->
155a0 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d  p3>=pOp->p1+pOp-
155b0 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  >p2 );.  pOut = 
155c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
155d0 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
155e0 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a 20 20  ge(p, pOut);..  
155f0 2f 2a 20 41 70 70 6c 79 20 74 68 65 20 72 65 71  /* Apply the req
15600 75 65 73 74 65 64 20 61 66 66 69 6e 69 74 79 20  uested affinity 
15610 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73 0a 20 20  to all inputs.  
15620 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 44 61  */.  assert( pDa
15630 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20  ta0<=pLast );.  
15640 69 66 28 20 7a 41 66 66 69 6e 69 74 79 20 29 7b  if( zAffinity ){
15650 0a 20 20 20 20 70 52 65 63 20 3d 20 70 44 61 74  .    pRec = pDat
15660 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20 20 20 20  a0;.    do{.    
15670 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
15680 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66 66 69 6e  pRec++, *(zAffin
15690 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64 69 6e 67  ity++), encoding
156a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
156b0 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 3d 3d 30   zAffinity[0]==0
156c0 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61 73 74 20   || pRec<=pLast 
156d0 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65 28 20 7a  );.    }while( z
156e0 41 66 66 69 6e 69 74 79 5b 30 5d 20 29 3b 0a 20  Affinity[0] );. 
156f0 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70 20 74 68   }..  /* Loop th
15700 72 6f 75 67 68 20 74 68 65 20 65 6c 65 6d 65 6e  rough the elemen
15710 74 73 20 74 68 61 74 20 77 69 6c 6c 20 6d 61 6b  ts that will mak
15720 65 20 75 70 20 74 68 65 20 72 65 63 6f 72 64 20  e up the record 
15730 74 6f 20 66 69 67 75 72 65 0a 20 20 2a 2a 20 6f  to figure.  ** o
15740 75 74 20 68 6f 77 20 6d 75 63 68 20 73 70 61 63  ut how much spac
15750 65 20 69 73 20 72 65 71 75 69 72 65 64 20 66 6f  e is required fo
15760 72 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64  r the new record
15770 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63 20 3d 20  ..  */.  pRec = 
15780 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a 20 20 20  pLast;.  do{.   
15790 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
157a0 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20 20  lid(pRec) );.   
157b0 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20 73   serial_type = s
157c0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
157d0 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65 5f  Type(pRec, file_
157e0 66 6f 72 6d 61 74 29 3b 0a 20 20 20 20 6c 65 6e  format);.    len
157f0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 65   = sqlite3VdbeSe
15800 72 69 61 6c 54 79 70 65 4c 65 6e 28 73 65 72 69  rialTypeLen(seri
15810 61 6c 5f 74 79 70 65 29 3b 0a 20 20 20 20 69 66  al_type);.    if
15820 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20  ( pRec->flags & 
15830 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20  MEM_Zero ){.    
15840 20 20 69 66 28 20 6e 44 61 74 61 20 29 7b 0a 20    if( nData ){. 
15850 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
15860 62 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28  beMemExpandBlob(
15870 70 52 65 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c  pRec);.      }el
15880 73 65 7b 0a 20 20 20 20 20 20 20 20 6e 5a 65 72  se{.        nZer
15890 6f 20 2b 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65  o += pRec->u.nZe
158a0 72 6f 3b 0a 20 20 20 20 20 20 20 20 6c 65 6e 20  ro;.        len 
158b0 2d 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f  -= pRec->u.nZero
158c0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
158d0 20 20 20 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e      nData += len
158e0 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20  ;.    testcase( 
158f0 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37  serial_type==127
15900 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61 73 65   );.    testcase
15910 28 20 73 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31  ( serial_type==1
15920 32 38 20 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b  28 );.    nHdr +
15930 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31  = serial_type<=1
15940 32 37 20 3f 20 31 20 3a 20 73 71 6c 69 74 65 33  27 ? 1 : sqlite3
15950 56 61 72 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c  VarintLen(serial
15960 5f 74 79 70 65 29 3b 0a 20 20 7d 77 68 69 6c 65  _type);.  }while
15970 28 20 28 2d 2d 70 52 65 63 29 3e 3d 70 44 61 74  ( (--pRec)>=pDat
15980 61 30 20 29 3b 0a 0a 20 20 2f 2a 20 41 64 64 20  a0 );..  /* Add 
15990 74 68 65 20 69 6e 69 74 69 61 6c 20 68 65 61 64  the initial head
159a0 65 72 20 76 61 72 69 6e 74 20 61 6e 64 20 74 6f  er varint and to
159b0 74 61 6c 20 74 68 65 20 73 69 7a 65 20 2a 2f 0a  tal the size */.
159c0 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72    testcase( nHdr
159d0 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74 63  ==126 );.  testc
159e0 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20 29  ase( nHdr==127 )
159f0 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31 32  ;.  if( nHdr<=12
15a00 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  6 ){.    /* The 
15a10 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a 20  common case */. 
15a20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20 20     nHdr += 1;.  
15a30 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52 61  }else{.    /* Ra
15a40 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65 61  re case of a rea
15a50 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65 72  lly large header
15a60 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74 20   */.    nVarint 
15a70 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c  = sqlite3VarintL
15a80 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e 48  en(nHdr);.    nH
15a90 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a 20  dr += nVarint;. 
15aa0 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c 73     if( nVarint<s
15ab0 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
15ac0 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b 0a  nHdr) ) nHdr++;.
15ad0 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e 48    }.  nByte = nH
15ae0 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28 20  dr+nData;.  if( 
15af0 6e 42 79 74 65 3e 64 62 2d 3e 61 4c 69 6d 69 74  nByte>db->aLimit
15b00 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
15b10 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74  NGTH] ){.    got
15b20 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a  o too_big;.  }..
15b30 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74    /* Make sure t
15b40 68 65 20 6f 75 74 70 75 74 20 72 65 67 69 73 74  he output regist
15b50 65 72 20 68 61 73 20 61 20 62 75 66 66 65 72 20  er has a buffer 
15b60 6c 61 72 67 65 20 65 6e 6f 75 67 68 20 74 6f 20  large enough to 
15b70 73 74 6f 72 65 20 0a 20 20 2a 2a 20 74 68 65 20  store .  ** the 
15b80 6e 65 77 20 72 65 63 6f 72 64 2e 20 54 68 65 20  new record. The 
15b90 6f 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20  output register 
15ba0 28 70 4f 70 2d 3e 70 33 29 20 69 73 20 6e 6f 74  (pOp->p3) is not
15bb0 20 61 6c 6c 6f 77 65 64 20 74 6f 0a 20 20 2a 2a   allowed to.  **
15bc0 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 69   be one of the i
15bd0 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20 28  nput registers (
15be0 62 65 63 61 75 73 65 20 74 68 65 20 66 6f 6c 6c  because the foll
15bf0 6f 77 69 6e 67 20 63 61 6c 6c 20 74 6f 0a 20 20  owing call to.  
15c00 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  ** sqlite3VdbeMe
15c10 6d 47 72 6f 77 28 29 20 63 6f 75 6c 64 20 63 6c  mGrow() could cl
15c20 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65 20  obber the value 
15c30 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73 65  before it is use
15c40 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 73  d)..  */.  if( s
15c50 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f  qlite3VdbeMemGro
15c60 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  w(pOut, (int)nBy
15c70 74 65 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f  te, 0) ){.    go
15c80 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
15c90 20 7a 4e 65 77 52 65 63 6f 72 64 20 3d 20 28 75   zNewRecord = (u
15ca0 38 20 2a 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20  8 *)pOut->z;..  
15cb0 2f 2a 20 57 72 69 74 65 20 74 68 65 20 72 65 63  /* Write the rec
15cc0 6f 72 64 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74  ord */.  i = put
15cd0 56 61 72 69 6e 74 33 32 28 7a 4e 65 77 52 65 63  Varint32(zNewRec
15ce0 6f 72 64 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20  ord, nHdr);.  j 
15cf0 3d 20 6e 48 64 72 3b 0a 20 20 61 73 73 65 72 74  = nHdr;.  assert
15d00 28 20 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20  ( pData0<=pLast 
15d10 29 3b 0a 20 20 70 52 65 63 20 3d 20 70 44 61 74  );.  pRec = pDat
15d20 61 30 3b 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65  a0;.  do{.    se
15d30 72 69 61 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69  rial_type = sqli
15d40 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
15d50 65 28 70 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72  e(pRec, file_for
15d60 6d 61 74 29 3b 0a 20 20 20 20 69 20 2b 3d 20 70  mat);.    i += p
15d70 75 74 56 61 72 69 6e 74 33 32 28 26 7a 4e 65 77  utVarint32(&zNew
15d80 52 65 63 6f 72 64 5b 69 5d 2c 20 73 65 72 69 61  Record[i], seria
15d90 6c 5f 74 79 70 65 29 3b 20 20 20 20 20 20 20 20  l_type);        
15da0 20 20 20 20 2f 2a 20 73 65 72 69 61 6c 20 74 79      /* serial ty
15db0 70 65 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73  pe */.    j += s
15dc0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
15dd0 50 75 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b  Put(&zNewRecord[
15de0 6a 5d 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c  j], pRec, serial
15df0 5f 74 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65  _type); /* conte
15e00 6e 74 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20  nt */.  }while( 
15e10 28 2b 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20  (++pRec)<=pLast 
15e20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d  );.  assert( i==
15e30 6e 48 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74  nHdr );.  assert
15e40 28 20 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20  ( j==nByte );.. 
15e50 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
15e60 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28  >0 && pOp->p3<=(
15e70 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
15e80 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e  or) );.  pOut->n
15e90 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20   = (int)nByte;. 
15ea0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
15eb0 45 4d 5f 42 6c 6f 62 3b 0a 20 20 70 4f 75 74 2d  EM_Blob;.  pOut-
15ec0 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 69 66 28  >xDel = 0;.  if(
15ed0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
15ee0 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
15ef0 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
15f00 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
15f10 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
15f20 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
15f30 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
15f40 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
15f50 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
15f60 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
15f70 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
15f80 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
15f90 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
15fa0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
15fb0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
15fc0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
15fd0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
15fe0 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
15ff0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
16000 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
16010 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
16020 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
16030 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
16040 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
16050 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
16060 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
16070 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
16080 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
16090 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
160a0 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 6e 45  ease */.  i64 nE
160b0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
160c0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 70 43 72 73   *pCrsr;..  pCrs
160d0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
160e0 2d 3e 70 31 5d 2d 3e 70 43 75 72 73 6f 72 3b 0a  ->p1]->pCursor;.
160f0 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
16100 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
16110 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
16120 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
16130 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
16140 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
16150 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
16160 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
16170 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
16180 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
16190 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
161a0 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
161b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
161c0 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
161d0 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
161e0 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
161f0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
16200 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
16210 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
16220 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
16230 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
16240 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
16250 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
16260 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
16270 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
16280 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
16290 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
162a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
162b0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
162c0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
162d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
162e0 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
162f0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
16300 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
16310 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
16320 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
16330 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
16340 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
16350 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
16360 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
16370 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
16380 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
16390 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
163a0 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
163b0 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
163c0 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
163d0 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
163e0 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
163f0 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
16400 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
16410 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
16420 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
16430 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
16440 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
16450 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
16460 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
16470 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
16480 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
16490 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
164a0 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
164b0 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
164c0 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
164d0 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
164e0 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
164f0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
16500 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
16510 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
16520 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
16530 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
16540 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
16550 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
16560 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
16570 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
16580 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
16590 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
165a0 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
165b0 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
165c0 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
165d0 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
165e0 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
165f0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
16600 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
16610 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53  /.      sqlite3S
16620 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
16630 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f  rMsg, db, "canno
16640 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69 6e 74  t open savepoint
16650 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53 51   - ".        "SQ
16660 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16670 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20 20  progress");.    
16680 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55    rc = SQLITE_BU
16690 53 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  SY;.    }else{. 
166a0 20 20 20 20 20 6e 4e 61 6d 65 20 3d 20 73 71 6c       nName = sql
166b0 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 4e 61  ite3Strlen30(zNa
166c0 6d 65 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  me);..#ifndef SQ
166d0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
166e0 4c 54 41 42 4c 45 0a 20 20 20 20 20 20 2f 2a 20  LTABLE.      /* 
166f0 54 68 69 73 20 63 61 6c 6c 20 69 73 20 4f 6b 20  This call is Ok 
16700 65 76 65 6e 20 69 66 20 74 68 69 73 20 73 61 76  even if this sav
16710 65 70 6f 69 6e 74 20 69 73 20 61 63 74 75 61 6c  epoint is actual
16720 6c 79 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  ly a transaction
16730 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f  .      ** savepo
16740 69 6e 74 20 28 61 6e 64 20 74 68 65 72 65 66 6f  int (and therefo
16750 72 65 20 73 68 6f 75 6c 64 20 6e 6f 74 20 70 72  re should not pr
16760 6f 6d 70 74 20 78 53 61 76 65 70 6f 69 6e 74 28  ompt xSavepoint(
16770 29 29 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 20 20  )) callbacks..  
16780 20 20 20 20 2a 2a 20 49 66 20 74 68 69 73 20 69      ** If this i
16790 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  s a transaction 
167a0 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67 20  savepoint being 
167b0 6f 70 65 6e 65 64 2c 20 69 74 20 69 73 20 67 75  opened, it is gu
167c0 61 72 61 6e 74 65 65 64 0a 20 20 20 20 20 20 2a  aranteed.      *
167d0 2a 20 74 68 61 74 20 74 68 65 20 64 62 2d 3e 61  * that the db->a
167e0 56 54 72 61 6e 73 5b 5d 20 61 72 72 61 79 20 69  VTrans[] array i
167f0 73 20 65 6d 70 74 79 2e 20 20 2a 2f 0a 20 20 20  s empty.  */.   
16800 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61     assert( db->a
16810 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
16820 64 62 2d 3e 6e 56 54 72 61 6e 73 3d 3d 30 20 29  db->nVTrans==0 )
16830 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
16840 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
16850 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54 5f  t(db, SAVEPOINT_
16860 42 45 47 49 4e 2c 0a 20 20 20 20 20 20 20 20 20  BEGIN,.         
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74         db->nStat
16890 65 6d 65 6e 74 2b 64 62 2d 3e 6e 53 61 76 65 70  ement+db->nSavep
168a0 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 69 66 28  oint);.      if(
168b0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
168c0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
168d0 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
168e0 0a 0a 20 20 20 20 20 20 2f 2a 20 43 72 65 61 74  ..      /* Creat
168f0 65 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  e a new savepoin
16900 74 20 73 74 72 75 63 74 75 72 65 2e 20 2a 2f 0a  t structure. */.
16910 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
16920 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
16930 64 62 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70  db, sizeof(Savep
16940 6f 69 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a  oint)+nName+1);.
16950 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 20 29        if( pNew )
16960 7b 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e  {.        pNew->
16970 7a 4e 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29  zName = (char *)
16980 26 70 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20  &pNew[1];.      
16990 20 20 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a    memcpy(pNew->z
169a0 4e 61 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61  Name, zName, nNa
169b0 6d 65 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20  me+1);.    .    
169c0 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
169d0 69 73 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73  is no open trans
169e0 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72  action, then mar
169f0 6b 20 74 68 69 73 20 61 73 20 61 20 73 70 65 63  k this as a spec
16a00 69 61 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  ial.        ** "
16a10 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
16a20 70 6f 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20  point". */.     
16a30 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
16a40 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20  ommit ){.       
16a50 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
16a60 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
16a70 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69   db->isTransacti
16a80 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b  onSavepoint = 1;
16a90 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
16aa0 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53            db->nS
16ab0 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20  avepoint++;.    
16ac0 20 20 20 20 7d 0a 20 20 20 20 0a 20 20 20 20 20      }.    .     
16ad0 20 20 20 2f 2a 20 4c 69 6e 6b 20 74 68 65 20 6e     /* Link the n
16ae0 65 77 20 73 61 76 65 70 6f 69 6e 74 20 69 6e 74  ew savepoint int
16af0 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68  o the database h
16b00 61 6e 64 6c 65 27 73 20 6c 69 73 74 2e 20 2a 2f  andle's list. */
16b10 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 70  .        pNew->p
16b20 4e 65 78 74 20 3d 20 64 62 2d 3e 70 53 61 76 65  Next = db->pSave
16b30 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64  point;.        d
16b40 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
16b50 70 4e 65 77 3b 0a 20 20 20 20 20 20 20 20 70 4e  pNew;.        pN
16b60 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  ew->nDeferredCon
16b70 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
16b80 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 70  dCons;.        p
16b90 4e 65 77 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d  New->nDeferredIm
16ba0 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  mCons = db->nDef
16bb0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
16bc0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65      }.    }.  }e
16bd0 6c 73 65 7b 0a 20 20 20 20 69 53 61 76 65 70 6f  lse{.    iSavepo
16be0 69 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  int = 0;..    /*
16bf0 20 46 69 6e 64 20 74 68 65 20 6e 61 6d 65 64 20   Find the named 
16c00 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 74 68  savepoint. If th
16c10 65 72 65 20 69 73 20 6e 6f 20 73 75 63 68 20 73  ere is no such s
16c20 61 76 65 70 6f 69 6e 74 2c 20 74 68 65 6e 20 61  avepoint, then a
16c30 6e 0a 20 20 20 20 2a 2a 20 61 6e 20 65 72 72 6f  n.    ** an erro
16c40 72 20 69 73 20 72 65 74 75 72 6e 65 64 20 74 6f  r is returned to
16c50 20 74 68 65 20 75 73 65 72 2e 20 20 2a 2f 0a 20   the user.  */. 
16c60 20 20 20 66 6f 72 28 0a 20 20 20 20 20 20 70 53     for(.      pS
16c70 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 70  avepoint = db->p
16c80 53 61 76 65 70 6f 69 6e 74 3b 20 0a 20 20 20 20  Savepoint; .    
16c90 20 20 70 53 61 76 65 70 6f 69 6e 74 20 26 26 20    pSavepoint && 
16ca0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 70  sqlite3StrICmp(p
16cb0 53 61 76 65 70 6f 69 6e 74 2d 3e 7a 4e 61 6d 65  Savepoint->zName
16cc0 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  , zName);.      
16cd0 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61  pSavepoint = pSa
16ce0 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 0a 20  vepoint->pNext. 
16cf0 20 20 20 29 7b 0a 20 20 20 20 20 20 69 53 61 76     ){.      iSav
16d00 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a  epoint++;.    }.
16d10 20 20 20 20 69 66 28 20 21 70 53 61 76 65 70 6f      if( !pSavepo
16d20 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  int ){.      sql
16d30 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
16d40 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22  ->zErrMsg, db, "
16d50 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e  no such savepoin
16d60 74 3a 20 25 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a  t: %s", zName);.
16d70 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
16d80 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 65 6c  E_ERROR;.    }el
16d90 73 65 20 69 66 28 20 64 62 2d 3e 6e 56 64 62 65  se if( db->nVdbe
16da0 57 72 69 74 65 3e 30 20 26 26 20 70 31 3d 3d 53  Write>0 && p1==S
16db0 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
16dc0 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 74 20   ){.      /* It 
16dd0 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
16de0 74 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d  to release (comm
16df0 69 74 29 20 61 20 73 61 76 65 70 6f 69 6e 74 20  it) a savepoint 
16e00 69 66 20 74 68 65 72 65 20 61 72 65 20 0a 20 20  if there are .  
16e10 20 20 20 20 2a 2a 20 61 63 74 69 76 65 20 77 72      ** active wr
16e20 69 74 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a  ite statements..
16e30 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
16e40 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
16e50 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
16e60 20 0a 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f   .        "canno
16e70 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
16e80 69 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d  int - SQL statem
16e90 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
16ea0 22 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20 20  ".      );.     
16eb0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
16ec0 59 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 0a 20  Y;.    }else{.. 
16ed0 20 20 20 20 20 2f 2a 20 44 65 74 65 72 6d 69 6e       /* Determin
16ee0 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
16ef0 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
16f00 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
16f10 2e 20 49 66 20 73 6f 2c 0a 20 20 20 20 20 20 2a  . If so,.      *
16f20 2a 20 61 6e 64 20 74 68 69 73 20 69 73 20 61 20  * and this is a 
16f30 52 45 4c 45 41 53 45 20 63 6f 6d 6d 61 6e 64 2c  RELEASE command,
16f40 20 74 68 65 6e 20 74 68 65 20 63 75 72 72 65 6e   then the curren
16f50 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 0a 20  t transaction . 
16f60 20 20 20 20 20 2a 2a 20 69 73 20 63 6f 6d 6d 69       ** is commi
16f70 74 74 65 64 2e 20 0a 20 20 20 20 20 20 2a 2f 0a  tted. .      */.
16f80 20 20 20 20 20 20 69 6e 74 20 69 73 54 72 61 6e        int isTran
16f90 73 61 63 74 69 6f 6e 20 3d 20 70 53 61 76 65 70  saction = pSavep
16fa0 6f 69 6e 74 2d 3e 70 4e 65 78 74 3d 3d 30 20 26  oint->pNext==0 &
16fb0 26 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63 74  & db->isTransact
16fc0 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20  ionSavepoint;.  
16fd0 20 20 20 20 69 66 28 20 69 73 54 72 61 6e 73 61      if( isTransa
16fe0 63 74 69 6f 6e 20 26 26 20 70 31 3d 3d 53 41 56  ction && p1==SAV
16ff0 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
17000 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 72  {.        if( (r
17010 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
17020 68 65 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53  heckFk(p, 1))!=S
17030 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
17040 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17050 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20  return;.        
17060 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  }.        db->au
17070 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
17080 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
17090 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53 51  3VdbeHalt(p)==SQ
170a0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
170b0 20 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70         p->pc = p
170c0 63 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  c;.          db-
170d0 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
170e0 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e 72 63  .          p->rc
170f0 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42   = rc = SQLITE_B
17100 55 53 59 3b 0a 20 20 20 20 20 20 20 20 20 20 67  USY;.          g
17110 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b  oto vdbe_return;
17120 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
17130 20 20 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63     db->isTransac
17140 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 20 3d 20  tionSavepoint = 
17150 30 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  0;.        rc = 
17160 70 2d 3e 72 63 3b 0a 20 20 20 20 20 20 7d 65 6c  p->rc;.      }el
17170 73 65 7b 0a 20 20 20 20 20 20 20 20 69 53 61 76  se{.        iSav
17180 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
17190 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
171a0 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
171b0 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
171c0 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
171d0 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 69 69            for(ii
171e0 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
171f0 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  ii++){.         
17200 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 54     sqlite3BtreeT
17210 72 69 70 41 6c 6c 43 75 72 73 6f 72 73 28 64 62  ripAllCursors(db
17220 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 53  ->aDb[ii].pBt, S
17230 51 4c 49 54 45 5f 41 42 4f 52 54 29 3b 0a 20 20  QLITE_ABORT);.  
17240 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17250 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
17260 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
17270 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
17280 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
17290 74 72 65 65 53 61 76 65 70 6f 69 6e 74 28 64 62  treeSavepoint(db
172a0 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 70  ->aDb[ii].pBt, p
172b0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
172c0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72 63            if( rc
172d0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
172e0 20 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20             goto 
172f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
17300 6f 72 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  or;.          }.
17310 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17320 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
17330 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 26 26 20  INT_ROLLBACK && 
17340 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54  (db->flags&SQLIT
17350 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
17360 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  !=0 ){.         
17370 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
17380 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
17390 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  (db);.          
173a0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
173b0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
173c0 6f 6e 28 64 62 29 3b 0a 20 20 20 20 20 20 20 20  on(db);.        
173d0 20 20 64 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64    db->flags = (d
173e0 62 2d 3e 66 6c 61 67 73 20 7c 20 53 51 4c 49 54  b->flags | SQLIT
173f0 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 29  E_InternChanges)
17400 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
17410 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
17420 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  Regardless of wh
17430 65 74 68 65 72 20 74 68 69 73 20 69 73 20 61 20  ether this is a 
17440 52 45 4c 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42  RELEASE or ROLLB
17450 41 43 4b 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c  ACK, destroy all
17460 20 0a 20 20 20 20 20 20 2a 2a 20 73 61 76 65 70   .      ** savep
17470 6f 69 6e 74 73 20 6e 65 73 74 65 64 20 69 6e 73  oints nested ins
17480 69 64 65 20 6f 66 20 74 68 65 20 73 61 76 65 70  ide of the savep
17490 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61  oint being opera
174a0 74 65 64 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20  ted on. */.     
174b0 20 77 68 69 6c 65 28 20 64 62 2d 3e 70 53 61 76   while( db->pSav
174c0 65 70 6f 69 6e 74 21 3d 70 53 61 76 65 70 6f 69  epoint!=pSavepoi
174d0 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54  nt ){.        pT
174e0 6d 70 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  mp = db->pSavepo
174f0 69 6e 74 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  int;.        db-
17500 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70 54  >pSavepoint = pT
17510 6d 70 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20  mp->pNext;.     
17520 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
17530 28 64 62 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20  (db, pTmp);.    
17540 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
17550 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  nt--;.      }.. 
17560 20 20 20 20 20 2f 2a 20 49 66 20 69 74 20 69 73       /* If it is
17570 20 61 20 52 45 4c 45 41 53 45 2c 20 74 68 65 6e   a RELEASE, then
17580 20 64 65 73 74 72 6f 79 20 74 68 65 20 73 61 76   destroy the sav
17590 65 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65  epoint being ope
175a0 72 61 74 65 64 20 6f 6e 20 0a 20 20 20 20 20 20  rated on .      
175b0 2a 2a 20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73  ** too. If it is
175c0 20 61 20 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20   a ROLLBACK TO, 
175d0 74 68 65 6e 20 73 65 74 20 74 68 65 20 6e 75 6d  then set the num
175e0 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64 20  ber of deferred 
175f0 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72  .      ** constr
17600 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20  aint violations 
17610 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64  present in the d
17620 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 76  atabase to the v
17630 61 6c 75 65 20 73 74 6f 72 65 64 0a 20 20 20 20  alue stored.    
17640 20 20 2a 2a 20 77 68 65 6e 20 74 68 65 20 73 61    ** when the sa
17650 76 65 70 6f 69 6e 74 20 77 61 73 20 63 72 65 61  vepoint was crea
17660 74 65 64 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69  ted.  */.      i
17670 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
17680 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
17690 20 20 20 20 61 73 73 65 72 74 28 20 70 53 61 76      assert( pSav
176a0 65 70 6f 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76  epoint==db->pSav
176b0 65 70 6f 69 6e 74 20 29 3b 0a 20 20 20 20 20 20  epoint );.      
176c0 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74    db->pSavepoint
176d0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
176e0 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73 71  Next;.        sq
176f0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
17700 70 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20  pSavepoint);.   
17710 20 20 20 20 20 69 66 28 20 21 69 73 54 72 61 6e       if( !isTran
17720 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20  saction ){.     
17730 20 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f       db->nSavepo
17740 69 6e 74 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d  int--;.        }
17750 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
17760 20 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72        db->nDefer
17770 72 65 64 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  redCons = pSavep
17780 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 43  oint->nDeferredC
17790 6f 6e 73 3b 0a 20 20 20 20 20 20 20 20 64 62 2d  ons;.        db-
177a0 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
177b0 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e  s = pSavepoint->
177c0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
177d0 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
177e0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
177f0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ion ){.        r
17800 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17810 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70 31 2c  avepoint(db, p1,
17820 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20   iSavepoint);.  
17830 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
17840 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
17850 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
17860 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  r;.      }.    }
17870 0a 20 20 7d 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d  .  }..  break;.}
17880 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 75 74  ../* Opcode: Aut
17890 6f 43 6f 6d 6d 69 74 20 50 31 20 50 32 20 2a 20  oCommit P1 P2 * 
178a0 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68  * *.**.** Set th
178b0 65 20 64 61 74 61 62 61 73 65 20 61 75 74 6f 2d  e database auto-
178c0 63 6f 6d 6d 69 74 20 66 6c 61 67 20 74 6f 20 50  commit flag to P
178d0 31 20 28 31 20 6f 72 20 30 29 2e 20 49 66 20 50  1 (1 or 0). If P
178e0 32 20 69 73 20 74 72 75 65 2c 20 72 6f 6c 6c 0a  2 is true, roll.
178f0 2a 2a 20 62 61 63 6b 20 61 6e 79 20 63 75 72 72  ** back any curr
17900 65 6e 74 6c 79 20 61 63 74 69 76 65 20 62 74 72  ently active btr
17910 65 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e  ee transactions.
17920 20 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e   If there are an
17930 79 20 61 63 74 69 76 65 0a 2a 2a 20 56 4d 73 20  y active.** VMs 
17940 28 61 70 61 72 74 20 66 72 6f 6d 20 74 68 69 73  (apart from this
17950 20 6f 6e 65 29 2c 20 74 68 65 6e 20 61 20 52 4f   one), then a RO
17960 4c 4c 42 41 43 4b 20 66 61 69 6c 73 2e 20 20 41  LLBACK fails.  A
17970 20 43 4f 4d 4d 49 54 20 66 61 69 6c 73 20 69 66   COMMIT fails if
17980 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 61 63  .** there are ac
17990 74 69 76 65 20 77 72 69 74 69 6e 67 20 56 4d 73  tive writing VMs
179a0 20 6f 72 20 61 63 74 69 76 65 20 56 4d 73 20 74   or active VMs t
179b0 68 61 74 20 75 73 65 20 73 68 61 72 65 64 20 63  hat use shared c
179c0 61 63 68 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  ache..**.** This
179d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 61 75   instruction cau
179e0 73 65 73 20 74 68 65 20 56 4d 20 74 6f 20 68 61  ses the VM to ha
179f0 6c 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  lt..*/.case OP_A
17a00 75 74 6f 43 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69  utoCommit: {.  i
17a10 6e 74 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  nt desiredAutoCo
17a20 6d 6d 69 74 3b 0a 20 20 69 6e 74 20 69 52 6f 6c  mmit;.  int iRol
17a30 6c 62 61 63 6b 3b 0a 20 20 69 6e 74 20 74 75 72  lback;.  int tur
17a40 6e 4f 6e 41 43 3b 0a 0a 20 20 64 65 73 69 72 65  nOnAC;..  desire
17a50 64 41 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f  dAutoCommit = pO
17a60 70 2d 3e 70 31 3b 0a 20 20 69 52 6f 6c 6c 62 61  p->p1;.  iRollba
17a70 63 6b 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ck = pOp->p2;.  
17a80 74 75 72 6e 4f 6e 41 43 20 3d 20 64 65 73 69 72  turnOnAC = desir
17a90 65 64 41 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20  edAutoCommit && 
17aa0 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b  !db->autoCommit;
17ab0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17ac0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17ad0 7c 7c 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  || desiredAutoCo
17ae0 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73  mmit==0 );.  ass
17af0 65 72 74 28 20 64 65 73 69 72 65 64 41 75 74 6f  ert( desiredAuto
17b00 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 69 52 6f  Commit==1 || iRo
17b10 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a 20 20 61  llback==0 );.  a
17b20 73 73 65 72 74 28 20 64 62 2d 3e 6e 56 64 62 65  ssert( db->nVdbe
17b30 41 63 74 69 76 65 3e 30 20 29 3b 20 20 2f 2a 20  Active>0 );  /* 
17b40 41 74 20 6c 65 61 73 74 20 74 68 69 73 20 6f 6e  At least this on
17b50 65 20 56 4d 20 69 73 20 61 63 74 69 76 65 20 2a  e VM is active *
17b60 2f 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  /.  assert( p->b
17b70 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 23 69 66  IsReader );..#if
17b80 20 30 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41   0.  if( turnOnA
17b90 43 20 26 26 20 69 52 6f 6c 6c 62 61 63 6b 20 26  C && iRollback &
17ba0 26 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69 76  & db->nVdbeActiv
17bb0 65 3e 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  e>1 ){.    /* If
17bc0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
17bd0 6e 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 52  n implements a R
17be0 4f 4c 4c 42 41 43 4b 20 61 6e 64 20 6f 74 68 65  OLLBACK and othe
17bf0 72 20 56 4d 73 20 61 72 65 0a 20 20 20 20 2a 2a  r VMs are.    **
17c00 20 73 74 69 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20   still running, 
17c10 61 6e 64 20 61 20 74 72 61 6e 73 61 63 74 69 6f  and a transactio
17c20 6e 20 69 73 20 61 63 74 69 76 65 2c 20 72 65 74  n is active, ret
17c30 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64  urn an error ind
17c40 69 63 61 74 69 6e 67 0a 20 20 20 20 2a 2a 20 74  icating.    ** t
17c50 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d  hat the other VM
17c60 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20  s must complete 
17c70 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20  first. .    */. 
17c80 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
17c90 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
17ca0 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 72 6f 6c   db, "cannot rol
17cb0 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74 69 6f  lback transactio
17cc0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17cd0 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17ce0 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17cf0 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17d00 59 3b 0a 20 20 7d 65 6c 73 65 0a 23 65 6e 64 69  Y;.  }else.#endi
17d10 66 0a 20 20 69 66 28 20 74 75 72 6e 4f 6e 41 43  f.  if( turnOnAC
17d20 20 26 26 20 21 69 52 6f 6c 6c 62 61 63 6b 20 26   && !iRollback &
17d30 26 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  & db->nVdbeWrite
17d40 3e 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20  >0 ){.    /* If 
17d50 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
17d60 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f   implements a CO
17d70 4d 4d 49 54 20 61 6e 64 20 6f 74 68 65 72 20 56  MMIT and other V
17d80 4d 73 20 61 72 65 20 77 72 69 74 69 6e 67 0a 20  Ms are writing. 
17d90 20 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20     ** return an 
17da0 65 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67  error indicating
17db0 20 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20   that the other 
17dc0 56 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74  VMs must complet
17dd0 65 20 66 69 72 73 74 2e 20 0a 20 20 20 20 2a 2f  e first. .    */
17de0 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53  .    sqlite3SetS
17df0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
17e00 67 2c 20 64 62 2c 20 22 63 61 6e 6e 6f 74 20 63  g, db, "cannot c
17e10 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
17e20 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 22 53  n - ".        "S
17e30 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  QL statements in
17e40 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20 20 20   progress");.   
17e50 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53   rc = SQLITE_BUS
17e60 59 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 64  Y;.  }else if( d
17e70 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17e80 21 3d 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  !=db->autoCommit
17e90 20 29 7b 0a 20 20 20 20 69 66 28 20 69 52 6f 6c   ){.    if( iRol
17ea0 6c 62 61 63 6b 20 29 7b 0a 20 20 20 20 20 20 61  lback ){.      a
17eb0 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17ec0 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20  toCommit==1 );. 
17ed0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6c 6c       sqlite3Roll
17ee0 62 61 63 6b 41 6c 6c 28 64 62 2c 20 53 51 4c 49  backAll(db, SQLI
17ef0 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
17f00 4b 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  K);.      db->au
17f10 74 6f 43 6f 6d 6d 69 74 20 3d 20 31 3b 0a 20 20  toCommit = 1;.  
17f20 20 20 7d 65 6c 73 65 20 69 66 28 20 28 72 63 20    }else if( (rc 
17f30 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  = sqlite3VdbeChe
17f40 63 6b 46 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c  ckFk(p, 1))!=SQL
17f50 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
17f60 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
17f70 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
17f80 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
17f90 74 20 3d 20 28 75 38 29 64 65 73 69 72 65 64 41  t = (u8)desiredA
17fa0 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 20  utoCommit;.     
17fb0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
17fc0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
17fd0 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
17fe0 70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20  p->pc = pc;.    
17ff0 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d      db->autoComm
18000 69 74 20 3d 20 28 75 38 29 28 31 2d 64 65 73 69  it = (u8)(1-desi
18010 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a  redAutoCommit);.
18020 20 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20          p->rc = 
18030 72 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59  rc = SQLITE_BUSY
18040 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76  ;.        goto v
18050 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20  dbe_return;.    
18060 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73    }.    }.    as
18070 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
18080 6d 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73  ment==0 );.    s
18090 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
180a0 6f 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69  oints(db);.    i
180b0 66 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45  f( p->rc==SQLITE
180c0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20  _OK ){.      rc 
180d0 3d 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  = SQLITE_DONE;. 
180e0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
180f0 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
18100 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74  R;.    }.    got
18110 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18120 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
18130 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
18140 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 0a 20 20  >zErrMsg, db,.  
18150 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64 41        (!desiredA
18160 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e  utoCommit)?"cann
18170 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e 73  ot start a trans
18180 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61 20  action within a 
18190 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a 20  transaction":(. 
181a0 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61 63         (iRollbac
181b0 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62  k)?"cannot rollb
181c0 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  ack - no transac
181d0 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 3a  tion is active":
181e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
181f0 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d      "cannot comm
18200 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74  it - no transact
18210 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29 29  ion is active"))
18220 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20 20  ;.         .    
18230 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f  rc = SQLITE_ERRO
18240 52 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  R;.  }.  break;.
18250 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72  }../* Opcode: Tr
18260 61 6e 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20  ansaction P1 P2 
18270 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42  P3 P4 P5.**.** B
18280 65 67 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  egin a transacti
18290 6f 6e 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50  on on database P
182a0 31 20 69 66 20 61 20 74 72 61 6e 73 61 63 74 69  1 if a transacti
182b0 6f 6e 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64  on is not alread
182c0 79 0a 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20  y.** active..** 
182d0 49 66 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P2 is non-zer
182e0 6f 2c 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d  o, then a write-
182f0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73  transaction is s
18300 74 61 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20  tarted, or if a 
18310 0a 2a 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63  .** read-transac
18320 74 69 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20  tion is already 
18330 61 63 74 69 76 65 2c 20 69 74 20 69 73 20 75 70  active, it is up
18340 67 72 61 64 65 64 20 74 6f 20 61 20 77 72 69 74  graded to a writ
18350 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a  e-transaction..*
18360 2a 20 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c  * If P2 is zero,
18370 20 74 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61   then a read-tra
18380 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72  nsaction is star
18390 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ted..**.** P1 is
183a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
183b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
183c0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 74 72 61  on which the tra
183d0 6e 73 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73  nsaction is.** s
183e0 74 61 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30  tarted.  Index 0
183f0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
18400 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69  abase file and i
18410 6e 64 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a  ndex 1 is the.**
18420 20 66 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74   file used for t
18430 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
18440 20 20 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f    Indices of 2 o
18450 72 20 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20  r more are used 
18460 66 6f 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20  for.** attached 
18470 64 61 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a  databases..**.**
18480 20 49 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e   If a write-tran
18490 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
184a0 65 64 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e  ed and the Vdbe.
184b0 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
184c0 66 6c 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20  flag is.** true 
184d0 28 74 68 69 73 20 66 6c 61 67 20 69 73 20 73 65  (this flag is se
184e0 74 20 69 66 20 74 68 65 20 56 64 62 65 20 6d 61  t if the Vdbe ma
184f0 79 20 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68  y modify more th
18500 61 6e 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d  an one row and m
18510 61 79 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41  ay.** throw an A
18520 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c  BORT exception),
18530 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
18540 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73  nsaction may als
18550 6f 20 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20  o be opened..** 
18560 4d 6f 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c  More specificall
18570 79 2c 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74  y, a statement t
18580 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70  ransaction is op
18590 65 6e 65 64 20 69 66 66 20 74 68 65 20 64 61 74  ened iff the dat
185a0 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
185b0 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ion is currently
185c0 20 6e 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d   not in autocomm
185d0 69 74 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74  it mode, or if t
185e0 68 65 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a  here are other.*
185f0 2a 20 61 63 74 69 76 65 20 73 74 61 74 65 6d 65  * active stateme
18600 6e 74 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74  nts. A statement
18610 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c   transaction all
18620 6f 77 73 20 74 68 65 20 63 68 61 6e 67 65 73 20  ows the changes 
18630 6d 61 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20  made by this.** 
18640 56 44 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65  VDBE to be rolle
18650 64 20 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20  d back after an 
18660 65 72 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61  error without ha
18670 76 69 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63  ving to roll bac
18680 6b 20 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20  k the.** entire 
18690 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20  transaction. If 
186a0 6e 6f 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f  no error is enco
186b0 75 6e 74 65 72 65 64 2c 20 74 68 65 20 73 74 61  untered, the sta
186c0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
186d0 6f 6e 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d  on.** will autom
186e0 61 74 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20  atically commit 
186f0 77 68 65 6e 20 74 68 65 20 56 44 42 45 20 68 61  when the VDBE ha
18700 6c 74 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  lts..**.** If P5
18710 21 3d 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70  !=0 then this op
18720 63 6f 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73  code also checks
18730 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
18740 69 65 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a  ie against P3.**
18750 20 61 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20   and the schema 
18760 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
18770 65 72 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a  er against P4..*
18780 2a 20 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61  * The cookie cha
18790 6e 67 65 73 20 69 74 73 20 76 61 6c 75 65 20 77  nges its value w
187a0 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
187b0 62 61 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e  base schema chan
187c0 67 65 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65  ges..** This ope
187d0 72 61 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74  ration is used t
187e0 6f 20 64 65 74 65 63 74 20 77 68 65 6e 20 74 68  o detect when th
187f0 61 74 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61  at the cookie ha
18800 73 20 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64  s changed.** and
18810 20 74 68 61 74 20 74 68 65 20 63 75 72 72 65 6e   that the curren
18820 74 20 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20  t process needs 
18830 74 6f 20 72 65 72 65 61 64 20 74 68 65 20 73 63  to reread the sc
18840 68 65 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63  hema.  If the sc
18850 68 65 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69  hema.** cookie i
18860 6e 20 50 33 20 64 69 66 66 65 72 73 20 66 72 6f  n P3 differs fro
18870 6d 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  m the schema coo
18880 6b 69 65 20 69 6e 20 74 68 65 20 64 61 74 61 62  kie in the datab
18890 61 73 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a  ase header or.**
188a0 20 69 66 20 74 68 65 20 73 63 68 65 6d 61 20 67   if the schema g
188b0 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65  eneration counte
188c0 72 20 69 6e 20 50 34 20 64 69 66 66 65 72 73 20  r in P4 differs 
188d0 66 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74  from the current
188e0 0a 2a 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63  .** generation c
188f0 6f 75 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20  ounter, then an 
18900 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72  SQLITE_SCHEMA er
18910 72 6f 72 20 69 73 20 72 61 69 73 65 64 20 61 6e  ror is raised an
18920 64 20 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68  d execution.** h
18930 61 6c 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74  alts.  The sqlit
18940 65 33 5f 73 74 65 70 28 29 20 77 72 61 70 70 65  e3_step() wrappe
18950 72 20 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74  r function might
18960 20 74 68 65 6e 20 72 65 70 72 65 70 61 72 65 20   then reprepare 
18970 74 68 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  the.** statement
18980 20 61 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72   and rerun it fr
18990 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
189a0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61  ..*/.case OP_Tra
189b0 6e 73 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74  nsaction: {.  Bt
189c0 72 65 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20  ree *pBt;.  int 
189d0 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65  iMeta;.  int iGe
189e0 6e 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  n;..  assert( p-
189f0 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20  >bIsReader );.  
18a00 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
18a10 6e 6c 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70  nly==0 || pOp->p
18a20 32 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  2==0 );.  assert
18a30 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
18a40 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20  pOp->p1<db->nDb 
18a50 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
18a60 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
18a70 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29  Mask, pOp->p1) )
18a80 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20  ;.  if( pOp->p2 
18a90 26 26 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20  && (db->flags & 
18aa0 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
18ab0 29 21 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  )!=0 ){.    rc =
18ac0 20 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59   SQLITE_READONLY
18ad0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
18ae0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
18af0 20 7d 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61   }.  pBt = db->a
18b00 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
18b10 0a 0a 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20  ..  if( pBt ){. 
18b20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
18b30 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70  treeBeginTrans(p
18b40 42 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  Bt, pOp->p2);.  
18b50 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
18b60 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
18b70 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
18b80 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
18b90 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
18ba0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
18bb0 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  n;.    }.    if(
18bc0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
18bd0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
18be0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
18bf0 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20  .    }..    if( 
18c00 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73  pOp->p2 && p->us
18c10 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20  esStmtJournal . 
18c20 20 20 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f      && (db->auto
18c30 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d  Commit==0 || db-
18c40 3e 6e 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20  >nVdbeRead>1) . 
18c50 20 20 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65     ){.      asse
18c60 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65  rt( sqlite3Btree
18c70 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29  IsInTrans(pBt) )
18c80 3b 0a 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69  ;.      if( p->i
18c90 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a  Statement==0 ){.
18ca0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
18cb0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d  db->nStatement>=
18cc0 30 20 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f  0 && db->nSavepo
18cd0 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20  int>=0 );.      
18ce0 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74    db->nStatement
18cf0 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e  ++; .        p->
18d00 69 53 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d  iStatement = db-
18d10 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
18d20 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20  ->nStatement;.  
18d30 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20      }..      rc 
18d40 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  = sqlite3VtabSav
18d50 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50  epoint(db, SAVEP
18d60 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69  OINT_BEGIN, p->i
18d70 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20  Statement-1);.  
18d80 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
18d90 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
18da0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
18db0 65 65 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c  eeBeginStmt(pBt,
18dc0 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b   p->iStatement);
18dd0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
18de0 2f 2a 20 53 74 6f 72 65 20 74 68 65 20 63 75 72  /* Store the cur
18df0 72 65 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68  rent value of th
18e00 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
18e10 65 73 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73  es deferred cons
18e20 74 72 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20  traint.      ** 
18e30 63 6f 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20  counter. If the 
18e40 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
18e50 63 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62  ction needs to b
18e60 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20  e rolled back,. 
18e70 20 20 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75       ** the valu
18e80 65 20 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65  e of this counte
18e90 72 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  r needs to be re
18ea0 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a  stored too.  */.
18eb0 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65        p->nStmtDe
18ec0 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66  fCons = db->nDef
18ed0 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
18ee0 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43   p->nStmtDefImmC
18ef0 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
18f00 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20  redImmCons;.    
18f10 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72  }..    /* Gather
18f20 20 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   the schema vers
18f30 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63  ion number for c
18f40 68 65 63 6b 69 6e 67 20 2a 2f 0a 20 20 20 20 73  hecking */.    s
18f50 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65  qlite3BtreeGetMe
18f60 74 61 28 70 42 74 2c 20 42 54 52 45 45 5f 53 43  ta(pBt, BTREE_SC
18f70 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75  HEMA_VERSION, (u
18f80 33 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20  32 *)&iMeta);.  
18f90 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62    iGen = db->aDb
18fa0 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d  [pOp->p1].pSchem
18fb0 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a  a->iGeneration;.
18fc0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 47 65    }else{.    iGe
18fd0 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20  n = iMeta = 0;. 
18fe0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   }.  assert( pOp
18ff0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
19000 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32  p4type==P4_INT32
19010 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
19020 35 20 26 26 20 28 69 4d 65 74 61 21 3d 70 4f 70  5 && (iMeta!=pOp
19030 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f  ->p3 || iGen!=pO
19040 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20 20 20 20  p->p4.i) ){.    
19050 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
19060 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
19070 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20     p->zErrMsg = 
19080 73 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28  sqlite3DbStrDup(
19090 64 62 2c 20 22 64 61 74 61 62 61 73 65 20 73 63  db, "database sc
190a0 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
190b0 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  ");.    /* If th
190c0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
190d0 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
190e0 65 20 66 69 6c 65 20 6d 61 74 63 68 65 73 20 74  e file matches t
190f0 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a  he cookie .    *
19100 2a 20 73 74 6f 72 65 64 20 77 69 74 68 20 74 68  * stored with th
19110 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72  e in-memory repr
19120 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
19130 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20  e schema, do.   
19140 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74   ** not reload t
19150 68 65 20 73 63 68 65 6d 61 20 66 72 6f 6d 20 74  he schema from t
19160 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19170 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
19180 49 66 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65  If virtual-table
19190 73 20 61 72 65 20 69 6e 20 75 73 65 2c 20 74 68  s are in use, th
191a0 69 73 20 69 73 20 6e 6f 74 20 6a 75 73 74 20 61  is is not just a
191b0 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a  n optimization..
191c0 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d      ** Often, v-
191d0 74 61 62 6c 65 73 20 73 74 6f 72 65 20 74 68 65  tables store the
191e0 69 72 20 64 61 74 61 20 69 6e 20 6f 74 68 65 72  ir data in other
191f0 20 53 51 4c 69 74 65 20 74 61 62 6c 65 73 2c 20   SQLite tables, 
19200 77 68 69 63 68 0a 20 20 20 20 2a 2a 20 61 72 65  which.    ** are
19210 20 71 75 65 72 69 65 64 20 66 72 6f 6d 20 77 69   queried from wi
19220 74 68 69 6e 20 78 4e 65 78 74 28 29 20 61 6e 64  thin xNext() and
19230 20 6f 74 68 65 72 20 76 2d 74 61 62 6c 65 20 6d   other v-table m
19240 65 74 68 6f 64 73 20 75 73 69 6e 67 0a 20 20 20  ethods using.   
19250 20 2a 2a 20 70 72 65 70 61 72 65 64 20 71 75 65   ** prepared que
19260 72 69 65 73 2e 20 49 66 20 73 75 63 68 20 61 20  ries. If such a 
19270 71 75 65 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d  query is out-of-
19280 64 61 74 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20  date, we do not 
19290 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64  want to.    ** d
192a0 69 73 63 61 72 64 20 74 68 65 20 64 61 74 61 62  iscard the datab
192b0 61 73 65 20 73 63 68 65 6d 61 2c 20 61 73 20 74  ase schema, as t
192c0 68 65 20 75 73 65 72 20 63 6f 64 65 20 69 6d 70  he user code imp
192d0 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65 0a 20 20  lementing the.  
192e0 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75    ** v-table wou
192f0 6c 64 20 68 61 76 65 20 74 6f 20 62 65 20 72 65  ld have to be re
19300 61 64 79 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ady for the sqli
19310 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74 75  te3_vtab structu
19320 72 65 20 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a  re itself.    **
19330 20 74 6f 20 62 65 20 69 6e 76 61 6c 69 64 61 74   to be invalidat
19340 65 64 20 77 68 65 6e 65 76 65 72 20 73 71 6c 69  ed whenever sqli
19350 74 65 33 5f 73 74 65 70 28 29 20 69 73 20 63 61  te3_step() is ca
19360 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68 69 6e  lled from within
19370 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d 74 61 62   .    ** a v-tab
19380 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a  le method..    *
19390 2f 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44  /.    if( db->aD
193a0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65  b[pOp->p1].pSche
193b0 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69  ma->schema_cooki
193c0 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20 20 20 20  e!=iMeta ){.    
193d0 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e    sqlite3ResetOn
193e0 65 53 63 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d  eSchema(db, pOp-
193f0 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  >p1);.    }.    
19400 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a  p->expired = 1;.
19410 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
19420 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72  SCHEMA;.  }.  br
19430 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19440 65 3a 20 52 65 61 64 43 6f 6f 6b 69 65 20 50 31  e: ReadCookie P1
19450 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
19460 20 52 65 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d   Read cookie num
19470 62 65 72 20 50 33 20 66 72 6f 6d 20 64 61 74 61  ber P3 from data
19480 62 61 73 65 20 50 31 20 61 6e 64 20 77 72 69 74  base P1 and writ
19490 65 20 69 74 20 69 6e 74 6f 20 72 65 67 69 73 74  e it into regist
194a0 65 72 20 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20  er P2..** P3==1 
194b0 69 73 20 74 68 65 20 73 63 68 65 6d 61 20 76 65  is the schema ve
194c0 72 73 69 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73  rsion.  P3==2 is
194d0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 6f   the database fo
194e0 72 6d 61 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69  rmat..** P3==3 i
194f0 73 20 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65  s the recommende
19500 64 20 70 61 67 65 72 20 63 61 63 68 65 20 73 69  d pager cache si
19510 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
19520 2e 20 20 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74  .  P1==0 is.** t
19530 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
19540 20 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20   file and P1==1 
19550 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  is the database 
19560 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
19570 72 65 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20  re.** temporary 
19580 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68  tables..**.** Th
19590 65 72 65 20 6d 75 73 74 20 62 65 20 61 20 72 65  ere must be a re
195a0 61 64 2d 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64  ad-lock on the d
195b0 61 74 61 62 61 73 65 20 28 65 69 74 68 65 72 20  atabase (either 
195c0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a  a transaction.**
195d0 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65 64   must be started
195e0 20 6f 72 20 74 68 65 72 65 20 6d 75 73 74 20 62   or there must b
195f0 65 20 61 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72  e an open cursor
19600 29 20 62 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63  ) before.** exec
19610 75 74 69 6e 67 20 74 68 69 73 20 69 6e 73 74 72  uting this instr
19620 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
19630 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b  OP_ReadCookie: {
19640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
19650 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
19660 65 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61  e */.  int iMeta
19670 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69  ;.  int iDb;.  i
19680 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61  nt iCookie;..  a
19690 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
196a0 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20 70  der );.  iDb = p
196b0 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69  Op->p1;.  iCooki
196c0 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  e = pOp->p3;.  a
196d0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53  ssert( pOp->p3<S
196e0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
196f0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
19700 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
19710 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
19720 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t( db->aDb[iDb].
19730 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  pBt!=0 );.  asse
19740 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
19750 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62  ->btreeMask, iDb
19760 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42  ) );..  sqlite3B
19770 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d 3e  treeGetMeta(db->
19780 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43  aDb[iDb].pBt, iC
19790 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26 69  ookie, (u32 *)&i
197a0 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  Meta);.  pOut->u
197b0 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72  .i = iMeta;.  br
197c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
197d0 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50 31 20  e: SetCookie P1 
197e0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
197f0 57 72 69 74 65 20 74 68 65 20 63 6f 6e 74 65 6e  Write the conten
19800 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
19810 20 28 69 6e 74 65 72 70 72 65 74 65 64 20 61 73   (interpreted as
19820 20 61 6e 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20   an integer).** 
19830 69 6e 74 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62  into cookie numb
19840 65 72 20 50 32 20 6f 66 20 64 61 74 61 62 61 73  er P2 of databas
19850 65 20 50 31 2e 20 20 50 32 3d 3d 31 20 69 73 20  e P1.  P2==1 is 
19860 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
19870 6f 6e 2e 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69  on.  .** P2==2 i
19880 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
19890 6f 72 6d 61 74 2e 20 50 32 3d 3d 33 20 69 73 20  ormat. P2==3 is 
198a0 74 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20  the recommended 
198b0 70 61 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20  pager cache .** 
198c0 73 69 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72  size, and so for
198d0 74 68 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68  th.  P1==0 is th
198e0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
198f0 66 69 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69  file and P1==1 i
19900 73 20 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61  s the .** databa
19910 73 65 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20  se file used to 
19920 73 74 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20  store temporary 
19930 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20  tables..**.** A 
19940 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74  transaction must
19950 20 62 65 20 73 74 61 72 74 65 64 20 62 65 66 6f   be started befo
19960 72 65 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  re executing thi
19970 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  s opcode..*/.cas
19980 65 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20  e OP_SetCookie: 
19990 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a  {       /* in3 *
199a0 2f 0a 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61  /.  Db *pDb;.  a
199b0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53  ssert( pOp->p2<S
199c0 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45  QLITE_N_BTREE_ME
199d0 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  TA );.  assert( 
199e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
199f0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
19a00 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
19a10 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
19a20 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
19a30 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
19a40 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
19a50 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
19a60 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
19a70 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
19a80 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
19a90 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
19aa0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29  (db, pOp->p1, 0)
19ab0 20 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d   );.  pIn3 = &aM
19ac0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73  em[pOp->p3];.  s
19ad0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
19ae0 65 67 65 72 69 66 79 28 70 49 6e 33 29 3b 0a 20  egerify(pIn3);. 
19af0 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f   /* See note abo
19b00 75 74 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e  ut index shiftin
19b10 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b  g on OP_ReadCook
19b20 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  ie */.  rc = sql
19b30 69 74 65 33 42 74 72 65 65 55 70 64 61 74 65 4d  ite3BtreeUpdateM
19b40 65 74 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f  eta(pDb->pBt, pO
19b50 70 2d 3e 70 32 2c 20 28 69 6e 74 29 70 49 6e 33  p->p2, (int)pIn3
19b60 2d 3e 75 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f  ->u.i);.  if( pO
19b70 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 53 43 48  p->p2==BTREE_SCH
19b80 45 4d 41 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20  EMA_VERSION ){. 
19b90 20 20 20 2f 2a 20 57 68 65 6e 20 74 68 65 20 73     /* When the s
19ba0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61  chema cookie cha
19bb0 6e 67 65 73 2c 20 72 65 63 6f 72 64 20 74 68 65  nges, record the
19bc0 20 6e 65 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65   new cookie inte
19bd0 72 6e 61 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44  rnally */.    pD
19be0 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  b->pSchema->sche
19bf0 6d 61 5f 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74  ma_cookie = (int
19c00 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn3->u.i;.    
19c10 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
19c20 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
19c30 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
19c40 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
19c50 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
19c60 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
19c70 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
19c80 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
19c90 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
19ca0 66 6f 72 6d 61 74 20 3d 20 28 75 38 29 70 49 6e  format = (u8)pIn
19cb0 33 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66  3->u.i;.  }.  if
19cc0 28 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a  ( pOp->p1==1 ){.
19cd0 20 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74      /* Invalidat
19ce0 65 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73  e all prepared s
19cf0 74 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76  tatements whenev
19d00 65 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61  er the TEMP data
19d10 62 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65  base.    ** sche
19d20 6d 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20  ma is changed.  
19d30 54 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a  Ticket #1644 */.
19d40 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
19d50 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
19d60 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e  nts(db);.    p->
19d70 65 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d  expired = 0;.  }
19d80 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19d90 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64  Opcode: OpenRead
19da0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
19db0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
19dc0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
19dd0 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e  * Open a read-on
19de0 6c 79 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68  ly cursor for th
19df0 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65  e database table
19e00 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
19e10 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64   is.** P2 in a d
19e20 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54  atabase file.  T
19e30 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
19e40 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62   is determined b
19e50 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20  y P3. .** P3==0 
19e60 6d 65 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64  means the main d
19e70 61 74 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d  atabase, P3==1 m
19e80 65 61 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  eans the databas
19e90 65 20 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74  e used for .** t
19ea0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c  emporary tables,
19eb0 20 61 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20   and P3>1 means 
19ec0 75 73 65 64 20 74 68 65 20 63 6f 72 72 65 73 70  used the corresp
19ed0 6f 6e 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a  onding attached.
19ee0 2a 2a 20 64 61 74 61 62 61 73 65 2e 20 20 47 69  ** database.  Gi
19ef0 76 65 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f  ve the new curso
19f00 72 20 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20  r an identifier 
19f10 6f 66 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a  of P1.  The P1.*
19f20 2a 20 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f  * values need no
19f30 74 20 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20  t be contiguous 
19f40 62 75 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65  but all P1 value
19f50 73 20 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c  s should be smal
19f60 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49  l integers..** I
19f70 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f  t is an error fo
19f80 72 20 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74  r P1 to be negat
19f90 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ive..**.** If P5
19fa0 21 3d 30 20 74 68 65 6e 20 75 73 65 20 74 68 65  !=0 then use the
19fb0 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
19fc0 73 74 65 72 20 50 32 20 61 73 20 74 68 65 20 72  ster P2 as the r
19fd0 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a  oot page, not.**
19fe0 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32   the value of P2
19ff0 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54   itself..**.** T
1a000 68 65 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72  here will be a r
1a010 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20  ead lock on the 
1a020 64 61 74 61 62 61 73 65 20 77 68 65 6e 65 76 65  database wheneve
1a030 72 20 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a  r there is an.**
1a040 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49   open cursor.  I
1a050 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  f the database w
1a060 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f  as unlocked prio
1a070 72 20 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75  r to this instru
1a080 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20  ction.** then a 
1a090 72 65 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71  read lock is acq
1a0a0 75 69 72 65 64 20 61 73 20 70 61 72 74 20 6f 66  uired as part of
1a0b0 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1a0c0 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f  n.  A read.** lo
1a0d0 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20  ck allows other 
1a0e0 70 72 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61  processes to rea
1a0f0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 62  d the database b
1a100 75 74 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20  ut prohibits.** 
1a110 61 6e 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73  any other proces
1a120 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67  s from modifying
1a130 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 20 20   the database.  
1a140 54 68 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73  The read lock is
1a150 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65  .** released whe
1a160 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72  n all cursors ar
1a170 65 20 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68  e closed.  If th
1a180 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  is instruction a
1a190 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65  ttempts.** to ge
1a1a0 74 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75  t a read lock bu
1a1b0 74 20 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72  t fails, the scr
1a1c0 69 70 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77  ipt terminates w
1a1d0 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45  ith an.** SQLITE
1a1e0 5f 42 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65  _BUSY error code
1a1f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76  ..**.** The P4 v
1a200 61 6c 75 65 20 6d 61 79 20 62 65 20 65 69 74 68  alue may be eith
1a210 65 72 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50  er an integer (P
1a220 34 5f 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f  4_INT32) or a po
1a230 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65  inter to.** a Ke
1a240 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20  yInfo structure 
1a250 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66  (P4_KEYINFO). If
1a260 20 69 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72   it is a pointer
1a270 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a   to a KeyInfo .*
1a280 2a 20 73 74 72 75 63 74 75 72 65 2c 20 74 68 65  * structure, the
1a290 6e 20 73 61 69 64 20 73 74 72 75 63 74 75 72 65  n said structure
1a2a0 20 64 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e   defines the con
1a2b0 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69  tent and collati
1a2c0 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20  ng .** sequence 
1a2d0 6f 66 20 74 68 65 20 69 6e 64 65 78 20 62 65 69  of the index bei
1a2e0 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72  ng opened. Other
1a2f0 77 69 73 65 2c 20 69 66 20 50 34 20 69 73 20 61  wise, if P4 is a
1a300 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61  n integer .** va
1a310 6c 75 65 2c 20 69 74 20 69 73 20 73 65 74 20 74  lue, it is set t
1a320 6f 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  o the number of 
1a330 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74  columns in the t
1a340 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  able..**.** See 
1a350 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c  also: OpenWrite,
1a360 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a   ReopenIdx.*/./*
1a370 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49   Opcode: ReopenI
1a380 64 78 20 50 31 20 50 32 20 50 33 20 50 34 20 50  dx P1 P2 P3 P4 P
1a390 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1a3a0 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1a3b0 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64  .** The ReopenId
1a3c0 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65  x opcode works e
1a3d0 78 61 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64  xactly like Read
1a3e0 4f 70 65 6e 20 65 78 63 65 70 74 20 74 68 61 74  Open except that
1a3f0 20 69 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65   it first.** che
1a400 63 6b 73 20 74 6f 20 73 65 65 20 69 66 20 74 68  cks to see if th
1a410 65 20 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69  e cursor on P1 i
1a420 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77  s already open w
1a430 69 74 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a  ith a root page.
1a440 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20  ** number of P2 
1a450 61 6e 64 20 69 66 20 69 74 20 69 73 20 74 68 69  and if it is thi
1a460 73 20 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73  s opcode becomes
1a470 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74   a no-op.  In ot
1a480 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66  her words,.** if
1a490 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 61   the cursor is a
1a4a0 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20  lready open, do 
1a4b0 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a  not reopen it..*
1a4c0 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49  *.** The ReopenI
1a4d0 64 78 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e  dx opcode may on
1a4e0 6c 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20  ly be used with 
1a4f0 50 35 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50  P5==0 and with P
1a500 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f  4 being.** a P4_
1a510 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20  KEYINFO object. 
1a520 20 46 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68   Furthermore, th
1a530 65 20 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20  e P3 value must 
1a540 62 65 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a  be the same as.*
1a550 2a 20 65 76 65 72 79 20 6f 74 68 65 72 20 52 65  * every other Re
1a560 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52  openIdx or OpenR
1a570 65 61 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65  ead for the same
1a580 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a   cursor number..
1a590 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70  **.** See the Op
1a5a0 65 6e 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f  enRead opcode do
1a5b0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20  cumentation for 
1a5c0 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
1a5d0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  mation..*/./* Op
1a5e0 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20  code: OpenWrite 
1a5f0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1a600 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1a610 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1a620 20 4f 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69   Open a read/wri
1a630 74 65 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20  te cursor named 
1a640 50 31 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20  P1 on the table 
1a650 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
1a660 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50  oot.** page is P
1a670 32 2e 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20  2.  Or if P5!=0 
1a680 75 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  use the content 
1a690 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 74  of register P2 t
1a6a0 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f  o find the.** ro
1a6b0 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54  ot page..**.** T
1a6c0 68 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20  he P4 value may 
1a6d0 62 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74  be either an int
1a6e0 65 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20  eger (P4_INT32) 
1a6f0 6f 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a  or a pointer to.
1a700 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72  ** a KeyInfo str
1a710 75 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e  ucture (P4_KEYIN
1a720 46 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20  FO). If it is a 
1a730 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79  pointer to a Key
1a740 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75  Info .** structu
1a750 72 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74  re, then said st
1a760 72 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20  ructure defines 
1a770 74 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20  the content and 
1a780 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65  collating .** se
1a790 71 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e  quence of the in
1a7a0 64 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  dex being opened
1a7b0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20  . Otherwise, if 
1a7c0 50 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72  P4 is an integer
1a7d0 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69   .** value, it i
1a7e0 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d  s set to the num
1a7f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
1a800 6e 20 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20  n the table, or 
1a810 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73  to the.** larges
1a820 74 20 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63  t index of any c
1a830 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62  olumn of the tab
1a840 6c 65 20 74 68 61 74 20 69 73 20 61 63 74 75 61  le that is actua
1a850 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  lly used..**.** 
1a860 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
1a870 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
1a880 20 4f 70 65 6e 52 65 61 64 20 65 78 63 65 70 74   OpenRead except
1a890 20 74 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74   that it opens t
1a8a0 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20  he cursor.** in 
1a8b0 72 65 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e  read/write mode.
1a8c0 20 20 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61    For a given ta
1a8d0 62 6c 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62  ble, there can b
1a8e0 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65  e one or more re
1a8f0 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f  ad-only.** curso
1a900 72 73 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72  rs or a single r
1a910 65 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72  ead/write cursor
1a920 20 62 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a   but not both..*
1a930 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70  *.** See also Op
1a940 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20  enRead..*/.case 
1a950 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a  OP_ReopenIdx: {.
1a960 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1a970 75 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ur;..  assert( p
1a980 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 61  Op->p5==0 );.  a
1a990 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
1a9a0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1a9b0 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
1a9c0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1a9d0 69 66 28 20 70 43 75 72 20 26 26 20 70 43 75 72  if( pCur && pCur
1a9e0 2d 3e 70 67 6e 6f 52 6f 6f 74 3d 3d 28 75 33 32  ->pgnoRoot==(u32
1a9f0 29 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20  )pOp->p2 ){.    
1aa00 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69 44  assert( pCur->iD
1aa10 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20 20  b==pOp->p3 );   
1aa20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65 64     /* Guaranteed
1aa30 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e   by the code gen
1aa40 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62 72  erator */.    br
1aa50 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  eak;.  }.  /* If
1aa60 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1aa70 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1aa80 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1aa90 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1aaa0 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1aab0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1aac0 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1aad0 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1aae0 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65  }.case OP_OpenRe
1aaf0 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e  ad:.case OP_Open
1ab00 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20 6e  Write: {.  int n
1ab10 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66 6f  Field;.  KeyInfo
1ab20 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e   *pKeyInfo;.  in
1ab30 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62 3b  t p2;.  int iDb;
1ab40 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a 20  .  int wrFlag;. 
1ab50 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56 64   Btree *pX;.  Vd
1ab60 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a  beCursor *pCur;.
1ab70 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61 73    Db *pDb;..  as
1ab80 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26 28  sert( (pOp->p5&(
1ab90 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c 4f  OPFLAG_P2ISREG|O
1aba0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3d  PFLAG_BULKCSR))=
1abb0 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61 73  =pOp->p5 );.  as
1abc0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1abd0 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20  e==OP_OpenWrite 
1abe0 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b  || pOp->p5==0 );
1abf0 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49  .  assert( p->bI
1ac00 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73  sReader );.  ass
1ac10 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
1ac20 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c  ==OP_OpenRead ||
1ac30 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ac40 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20  _ReopenIdx.     
1ac50 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f       || p->readO
1ac60 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28  nly==0 );..  if(
1ac70 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20   p->expired ){. 
1ac80 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41     rc = SQLITE_A
1ac90 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b 3b  BORT;.    break;
1aca0 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d  .  }..  nField =
1acb0 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d   0;.  pKeyInfo =
1acc0 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e   0;.  p2 = pOp->
1acd0 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d  p2;.  iDb = pOp-
1ace0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69  >p3;.  assert( i
1acf0 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d  Db>=0 && iDb<db-
1ad00 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
1ad10 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
1ad20 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
1ad30 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
1ad40 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d  aDb[iDb];.  pX =
1ad50 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73   pDb->pBt;.  ass
1ad60 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20  ert( pX!=0 );.  
1ad70 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
1ad80 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b  =OP_OpenWrite ){
1ad90 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31 3b  .    wrFlag = 1;
1ada0 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
1adb0 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
1adc0 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
1add0 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d 3e  );.    if( pDb->
1ade0 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f  pSchema->file_fo
1adf0 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72 69  rmat < p->minWri
1ae00 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b 0a  teFileFormat ){.
1ae10 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69 74        p->minWrit
1ae20 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70 44  eFileFormat = pD
1ae30 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65  b->pSchema->file
1ae40 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a 20  _format;.    }. 
1ae50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46 6c   }else{.    wrFl
1ae60 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66  ag = 0;.  }.  if
1ae70 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ( pOp->p5 & OPFL
1ae80 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20 20  AG_P2ISREG ){.  
1ae90 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20 29    assert( p2>0 )
1aea0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
1aeb0 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
1aec0 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49  ursor) );.    pI
1aed0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a  n2 = &aMem[p2];.
1aee0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
1aef0 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a  sValid(pIn2) );.
1af00 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49 6e      assert( (pIn
1af10 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  2->flags & MEM_I
1af20 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73 71  nt)!=0 );.    sq
1af30 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65  lite3VdbeMemInte
1af40 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20 20  gerify(pIn2);.  
1af50 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e 32    p2 = (int)pIn2
1af60 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68  ->u.i;.    /* Th
1af70 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61 79  e p2 value alway
1af80 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70  s comes from a p
1af90 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54 61  rior OP_CreateTa
1afa0 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20  ble opcode and. 
1afb0 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64     ** that opcod
1afc0 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73 65  e will always se
1afd0 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20 74  t the p2 value t
1afe0 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65  o 2 or more or e
1aff0 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a  lse fail..    **
1b000 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20 61   If there were a
1b010 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70 72   failure, the pr
1b020 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
1b030 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c 74   would have halt
1b040 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72 65  ed.    ** before
1b050 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20 69   reaching this i
1b060 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20  nstruction. */. 
1b070 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32 3c     if( NEVER(p2<
1b080 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63 20  2) ) {.      rc 
1b090 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54  = SQLITE_CORRUPT
1b0a0 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74  _BKPT;.      got
1b0b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1b0c0 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
1b0d0 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1b0e0 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1b0f0 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1b100 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1b110 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1b120 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1b130 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1b140 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1b150 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1b160 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1b170 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e  Field+pKeyInfo->
1b180 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  nXField;.  }else
1b190 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1b1a0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1b1b0 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1b1c0 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1b1d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1b1e0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1b1f0 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1b200 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1b210 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1b220 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1b230 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1b240 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1b250 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1b260 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1b270 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20 20  eld, iDb, 1);.  
1b280 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67 6f  if( pCur==0 ) go
1b290 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75  to no_mem;.  pCu
1b2a0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  r->nullRow = 1;.
1b2b0 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72 65    pCur->isOrdere
1b2c0 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 70  d = 1;.  pCur->p
1b2d0 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20 20  gnoRoot = p2;.  
1b2e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1b2f0 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1b300 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1b310 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72 29  , pCur->pCursor)
1b320 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49 6e  ;.  pCur->pKeyIn
1b330 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a 20  fo = pKeyInfo;. 
1b340 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1b350 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f 42  BULKCSR==BTREE_B
1b360 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71 6c  ULKLOAD );.  sql
1b370 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1b380 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73  ints(pCur->pCurs
1b390 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f  or, (pOp->p5 & O
1b3a0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29 3b  PFLAG_BULKCSR));
1b3b0 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74 20  ..  /* Since it 
1b3c0 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d 6f  performs no memo
1b3d0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f 72  ry allocation or
1b3e0 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76 61   IO, the only va
1b3f0 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73 71  lue that.  ** sq
1b400 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b410 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69 73  () may return is
1b420 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a 20   SQLITE_OK. */. 
1b430 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
1b440 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20  ITE_OK );..  /* 
1b450 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72 73  Set the VdbeCurs
1b460 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69 61  or.isTable varia
1b470 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76 65  ble. Previous ve
1b480 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20 53  rsions of.  ** S
1b490 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63 68  QLite used to ch
1b4a0 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74 2d  eck if the root-
1b4b0 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65 20  page flags were 
1b4c0 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f 69  sane at this poi
1b4d0 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70 6f  nt.  ** and repo
1b4e0 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72 72  rt database corr
1b4f0 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20 77  uption if they w
1b500 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68 69  ere not, but thi
1b510 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a 2a  s check has.  **
1b520 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e 74   since moved int
1b530 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79 65  o the btree laye
1b540 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72 2d  r.  */  .  pCur-
1b550 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d 3e  >isTable = pOp->
1b560 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49 4e  p4type!=P4_KEYIN
1b570 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  FO;.  break;.}..
1b580 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45  /* Opcode: OpenE
1b590 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20 2a  phemeral P1 P2 *
1b5a0 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
1b5b0 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a  is: nColumn=P2.*
1b5c0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20  *.** Open a new 
1b5d0 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20 74  cursor P1 to a t
1b5e0 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a  ransient table..
1b5f0 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69 73  ** The cursor is
1b600 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20 72   always opened r
1b610 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20 69  ead/write even i
1b620 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  f .** the main d
1b630 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64 2d  atabase is read-
1b640 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65 6d  only.  The ephem
1b650 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73  eral.** table is
1b660 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61 74   deleted automat
1b670 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65 20  ically when the 
1b680 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65 64  cursor is closed
1b690 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68  ..**.** P2 is th
1b6a0 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75  e number of colu
1b6b0 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65 6d  mns in the ephem
1b6c0 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54  eral table..** T
1b6d0 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 73  he cursor points
1b6e0 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62 6c   to a BTree tabl
1b6f0 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20 74  e if P4==0 and t
1b700 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78 0a  o a BTree index.
1b710 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20  ** if P4 is not 
1b720 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  0.  If P4 is not
1b730 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73   NULL, it points
1b740 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   to a KeyInfo st
1b750 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74 20  ructure.** that 
1b760 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72 6d  defines the form
1b770 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74 68  at of keys in th
1b780 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54  e index..**.** T
1b790 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72 20  he P5 parameter 
1b7a0 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f 66  can be a mask of
1b7b0 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c 61   the BTREE_* fla
1b7c0 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e  gs defined.** in
1b7d0 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73 65   btree.h.  These
1b7e0 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61   flags control a
1b7f0 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f 70  spects of the op
1b800 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  eration of.** th
1b810 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42 54  e btree.  The BT
1b820 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c  REE_OMIT_JOURNAL
1b830 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47 4c   and BTREE_SINGL
1b840 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61  E flags are.** a
1b850 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c  dded automatical
1b860 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ly..*/./* Opcode
1b870 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78 20  : OpenAutoindex 
1b880 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20  P1 P2 * P4 *.** 
1b890 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d  Synopsis: nColum
1b8a0 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  n=P2.**.** This 
1b8b0 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68 65  opcode works the
1b8c0 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e   same as OP_Open
1b8d0 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20 68  Ephemeral.  It h
1b8e0 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e  as a.** differen
1b8f0 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69 6e  t name to distin
1b900 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20 20  guish its use.  
1b910 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20 75  Tables created u
1b920 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73 20  sing.** by this 
1b930 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75  opcode will be u
1b940 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74 69  sed for automati
1b950 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74 72  cally created tr
1b960 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63  ansient.** indic
1b970 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a  es in joins..*/.
1b980 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f  case OP_OpenAuto
1b990 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f  index: .case OP_
1b9a0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b  OpenEphemeral: {
1b9b0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1b9c0 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70  Cx;.  KeyInfo *p
1b9d0 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74  KeyInfo;..  stat
1b9e0 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66 73  ic const int vfs
1b9f0 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20 53  Flags = .      S
1ba00 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57  QLITE_OPEN_READW
1ba10 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  RITE |.      SQL
1ba20 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20  ITE_OPEN_CREATE 
1ba30 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1ba40 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a  PEN_EXCLUSIVE |.
1ba50 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1ba60 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20  N_DELETEONCLOSE 
1ba70 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1ba80 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42  PEN_TRANSIENT_DB
1ba90 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1baa0 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65  >p1>=0 );.  asse
1bab0 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29  rt( pOp->p2>=0 )
1bac0 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61  ;.  pCx = alloca
1bad0 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d  teCursor(p, pOp-
1bae0 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31  >p1, pOp->p2, -1
1baf0 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  , 1);.  if( pCx=
1bb00 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1bb10 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77  ;.  pCx->nullRow
1bb20 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45   = 1;.  pCx->isE
1bb30 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20  phemeral = 1;.  
1bb40 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1bb50 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20  eOpen(db->pVfs, 
1bb60 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74  0, db, &pCx->pBt
1bb70 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
1bb80 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45             BTREE
1bb90 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20  _OMIT_JOURNAL | 
1bba0 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70  BTREE_SINGLE | p
1bbb0 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73  Op->p5, vfsFlags
1bbc0 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
1bbd0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63  ITE_OK ){.    rc
1bbe0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42   = sqlite3BtreeB
1bbf0 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70  eginTrans(pCx->p
1bc00 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  Bt, 1);.  }.  if
1bc10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1bc20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1bc30 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1bc40 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1bc50 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1bc60 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1bc70 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1bc80 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1bc90 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1bca0 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1bcb0 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1bcc0 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1bcd0 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1bce0 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1bcf0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1bd00 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1bd10 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1bd20 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1bd30 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1bd40 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f  ( (pKeyInfo = pO
1bd50 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1bd60 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1bd70 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1bd80 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1bd90 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1bda0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1bdb0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1bdc0 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67 6e  e(pCx->pBt, &pgn
1bdd0 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59  o, BTREE_BLOBKEY
1bde0 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20 20   | pOp->p5); .  
1bdf0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
1be00 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
1be10 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d 4d   assert( pgno==M
1be20 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a  ASTER_ROOT+1 );.
1be30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1be40 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1be50 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1be60 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e  rt( pKeyInfo->en
1be70 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20  c==ENC(db) );.  
1be80 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79 49        pCx->pKeyI
1be90 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1bea0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
1beb0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28  ite3BtreeCursor(
1bec0 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c 20  pCx->pBt, pgno, 
1bed0 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43 78  1, pKeyInfo, pCx
1bee0 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20  ->pCursor);.    
1bef0 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e 69    }.      pCx->i
1bf00 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20  sTable = 0;.    
1bf10 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20  }else{.      rc 
1bf20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  = sqlite3BtreeCu
1bf30 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20 4d  rsor(pCx->pBt, M
1bf40 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20 30  ASTER_ROOT, 1, 0
1bf50 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  , pCx->pCursor);
1bf60 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1bf70 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ble = 1;.    }. 
1bf80 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64 65   }.  pCx->isOrde
1bf90 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d  red = (pOp->p5!=
1bfa0 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44 29  BTREE_UNORDERED)
1bfb0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1bfc0 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f   Opcode: SorterO
1bfd0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
1bfe0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1bff0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1c000 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1c010 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1c020 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1c030 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1c040 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1c050 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1c060 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1c070 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1c080 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1c090 6f 72 69 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66  orithm..**.** If
1c0a0 20 61 72 67 75 6d 65 6e 74 20 50 33 20 69 73 20   argument P3 is 
1c0b0 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69  non-zero, then i
1c0c0 74 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  t indicates that
1c0d0 20 74 68 65 20 73 6f 72 74 65 72 20 6d 61 79 0a   the sorter may.
1c0e0 2a 2a 20 61 73 73 75 6d 65 20 74 68 61 74 20 61  ** assume that a
1c0f0 20 73 74 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e   stable sort con
1c100 73 69 64 65 72 69 6e 67 20 74 68 65 20 66 69 72  sidering the fir
1c110 73 74 20 50 33 20 66 69 65 6c 64 73 20 6f 66 20  st P3 fields of 
1c120 65 61 63 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73  each.** key is s
1c130 75 66 66 69 63 69 65 6e 74 20 74 6f 20 70 72 6f  ufficient to pro
1c140 64 75 63 65 20 74 68 65 20 72 65 71 75 69 72 65  duce the require
1c150 64 20 72 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61  d results..*/.ca
1c160 73 65 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e  se OP_SorterOpen
1c170 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1c180 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1c190 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1c1a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c1b0 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  2>=0 );.  pCx = 
1c1c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1c1d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1c1e0 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66  p2, -1, 1);.  if
1c1f0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c200 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70  no_mem;.  pCx->p
1c210 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70  KeyInfo = pOp->p
1c220 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73  4.pKeyInfo;.  as
1c230 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1c240 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20  nfo->db==db );. 
1c250 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e 70 4b   assert( pCx->pK
1c260 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c270 28 64 62 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  (db) );.  rc = s
1c280 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
1c290 49 6e 69 74 28 64 62 2c 20 70 4f 70 2d 3e 70 33  Init(db, pOp->p3
1c2a0 2c 20 70 43 78 29 3b 0a 20 20 62 72 65 61 6b 3b  , pCx);.  break;
1c2b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1c2c0 65 71 75 65 6e 63 65 54 65 73 74 20 50 31 20 50  equenceTest P1 P
1c2d0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1c2e0 73 69 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b  sis: if( cursor[
1c2f0 50 31 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d  P1].ctr++ ) pc =
1c300 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20   P2.**.** P1 is 
1c310 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e  a sorter cursor.
1c320 20 49 66 20 74 68 65 20 73 65 71 75 65 6e 63 65   If the sequence
1c330 20 63 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72   counter is curr
1c340 65 6e 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70  ently zero, jump
1c350 0a 2a 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72  .** to P2. Regar
1c360 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65 72  dless of whether
1c370 20 6f 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70   or not the jump
1c380 20 69 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65   is taken, incre
1c390 6d 65 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20  ment the.** the 
1c3a0 73 65 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a  sequence value..
1c3b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65  */.case OP_Seque
1c3c0 6e 63 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62  nceTest: {.  Vdb
1c3d0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61  eCursor *pC;.  a
1c3e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1c3f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1c400 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1c410 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1c420 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1c430 43 2d 3e 70 53 6f 72 74 65 72 20 29 3b 0a 20 20  C->pSorter );.  
1c440 69 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e  if( (pC->seqCoun
1c450 74 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  t++)==0 ){.    p
1c460 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1c470 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1c480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1c490 50 73 65 75 64 6f 20 50 31 20 50 32 20 50 33 20  Pseudo P1 P2 P3 
1c4a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1c4b0 20 50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72   P3 columns in r
1c4c0 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20  [P2].**.** Open 
1c4d0 61 20 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61  a new cursor tha
1c4e0 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61  t points to a fa
1c4f0 6b 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f  ke table that co
1c500 6e 74 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a  ntains a single.
1c510 2a 2a 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20  ** row of data. 
1c520 20 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   The content of 
1c530 74 68 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20  that one row is 
1c540 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d  the content of m
1c550 65 6d 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65  emory.** registe
1c560 72 20 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20  r P2.  In other 
1c570 77 6f 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31  words, cursor P1
1c580 20 62 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61   becomes an alia
1c590 73 20 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45  s for the .** ME
1c5a0 4d 5f 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63  M_Blob content c
1c5b0 6f 6e 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69  ontained in regi
1c5c0 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41  ster P2..**.** A
1c5d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72   pseudo-table cr
1c5e0 65 61 74 65 64 20 62 79 20 74 68 69 73 20 6f 70  eated by this op
1c5f0 63 6f 64 65 20 69 73 20 75 73 65 64 20 74 6f 20  code is used to 
1c600 68 6f 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  hold a single.**
1c610 20 72 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d   row output from
1c620 20 74 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74   the sorter so t
1c630 68 61 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20  hat the row can 
1c640 62 65 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e  be decomposed in
1c650 74 6f 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c  to.** individual
1c660 20 63 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74   columns using t
1c670 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1c680 6f 64 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c  ode.  The OP_Col
1c690 75 6d 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73  umn opcode.** is
1c6a0 20 74 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72   the only cursor
1c6b0 20 6f 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72   opcode that wor
1c6c0 6b 73 20 77 69 74 68 20 61 20 70 73 65 75 64 6f  ks with a pseudo
1c6d0 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33  -table..**.** P3
1c6e0 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
1c6f0 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1c700 72 65 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c  records that wil
1c710 6c 20 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a  l be stored by.*
1c720 2a 20 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62  * the pseudo-tab
1c730 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  le..*/.case OP_O
1c740 70 65 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56  penPseudo: {.  V
1c750 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a  dbeCursor *pCx;.
1c760 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c770 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  p1>=0 );.  asser
1c780 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b  t( pOp->p3>=0 );
1c790 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74  .  pCx = allocat
1c7a0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
1c7b0 70 31 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c  p1, pOp->p3, -1,
1c7c0 20 30 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d   0);.  if( pCx==
1c7d0 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
1c7e0 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20  .  pCx->nullRow 
1c7f0 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 70 73 65 75  = 1;.  pCx->pseu
1c800 64 6f 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70  doTableReg = pOp
1c810 2d 3e 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54  ->p2;.  pCx->isT
1c820 61 62 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65  able = 1;.  asse
1c830 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29  rt( pOp->p5==0 )
1c840 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
1c850 20 4f 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50   Opcode: Close P
1c860 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
1c870 43 6c 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70  Close a cursor p
1c880 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64  reviously opened
1c890 20 61 73 20 50 31 2e 20 20 49 66 20 50 31 20 69   as P1.  If P1 i
1c8a0 73 20 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74  s not.** current
1c8b0 6c 79 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e  ly open, this in
1c8c0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e  struction is a n
1c8d0 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
1c8e0 5f 43 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65  _Close: {.  asse
1c8f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1c900 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1c910 72 73 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65  rsor );.  sqlite
1c920 33 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28  3VdbeFreeCursor(
1c930 70 2c 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  p, p->apCsr[pOp-
1c940 3e 70 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73  >p1]);.  p->apCs
1c950 72 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a  r[pOp->p1] = 0;.
1c960 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1c970 70 63 6f 64 65 3a 20 53 65 65 6b 47 45 20 50 31  pcode: SeekGE P1
1c980 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1c990 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1c9a0 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1c9b0 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1c9c0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1c9d0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1c9e0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1c9f0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1ca00 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1ca10 33 20 61 73 20 74 68 65 20 6b 65 79 2e 20 20 49  3 as the key.  I
1ca20 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ca30 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1ca40 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1ca50 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1ca60 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1ca70 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1ca80 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1ca90 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1caa0 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1cab0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1cac0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1cad0 6e 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c  nts to the small
1cae0 65 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a  est entry that .
1caf0 2a 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ** is greater th
1cb00 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1cb10 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1cb20 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1cb30 63 6f 72 64 73 20 0a 2a 2a 20 67 72 65 61 74 65  cords .** greate
1cb40 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  r than or equal 
1cb50 74 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  to the key and P
1cb60 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1cb70 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1cb80 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1cb90 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1cba0 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1cbb0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1cbc0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1cbd0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1cbe0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1cbf0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1cc00 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1cc10 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1cc20 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1cc30 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1cc40 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1cc50 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1cc60 47 74 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Gt, SeekLe.*/./*
1cc70 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20   Opcode: SeekGT 
1cc80 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a  P1 P2 P3 P4 *.**
1cc90 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
1cca0 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66  [P3@P4].**.** If
1ccb0 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1ccc0 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c  s to an SQL tabl
1ccd0 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75  e (B-Tree that u
1cce0 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73  ses integer keys
1ccf0 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76  ), .** use the v
1cd00 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
1cd10 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66   P3 as a key. If
1cd20 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72   cursor P1 refer
1cd30 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20  s .** to an SQL 
1cd40 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69  index, then P3 i
1cd50 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61  s the first in a
1cd60 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65  n array of P4 re
1cd70 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74  gisters .** that
1cd80 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20   are used as an 
1cd90 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b  unpacked index k
1cda0 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73  ey. .**.** Repos
1cdb0 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20  ition cursor P1 
1cdc0 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e  so that  it poin
1cdd0 74 73 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65  ts to the smalle
1cde0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1cdf0 2a 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  * is greater tha
1ce00 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e  n the key value.
1ce10 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f   If there are no
1ce20 20 72 65 63 6f 72 64 73 20 67 72 65 61 74 65 72   records greater
1ce30 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65   than .** the ke
1ce40 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1ce50 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1ce60 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1ce70 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1ce80 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1ce90 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1cea0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1ceb0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1cec0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1ced0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1cee0 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1cef0 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1cf00 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1cf10 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1cf20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1cf30 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1cf40 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c  t, SeekGe, SeekL
1cf50 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1cf60 53 65 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20  SeekLT P1 P2 P3 
1cf70 50 34 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 * .** Synopsi
1cf80 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1cf90 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1cfa0 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1cfb0 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1cfc0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1cfd0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1cfe0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1cff0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d000 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d010 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d020 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d030 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d040 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d050 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d060 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d070 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d080 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d090 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d0a0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d0b0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1d0c0 65 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20  e largest entry 
1d0d0 74 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73  that .** is less
1d0e0 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
1d0f0 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d100 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73  e no records les
1d110 73 20 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b  s than .** the k
1d120 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1d130 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1d140 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1d150 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1d160 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1d170 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1d180 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1d190 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1d1a0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1d1b0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1d1c0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1d1d0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1d1e0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1d1f0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1d200 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64   See also: Found
1d210 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b  , NotFound, Seek
1d220 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b  Gt, SeekGe, Seek
1d230 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  Le.*/./* Opcode:
1d240 20 53 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33   SeekLE P1 P2 P3
1d250 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1d260 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1d270 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20  **.** If cursor 
1d280 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20  P1 refers to an 
1d290 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65  SQL table (B-Tre
1d2a0 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65  e that uses inte
1d2b0 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75  ger keys), .** u
1d2c0 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  se the value in 
1d2d0 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61  register P3 as a
1d2e0 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20   key. If cursor 
1d2f0 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1d300 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1d310 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1d320 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1d330 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1d340 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1d350 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1d360 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1d370 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1d380 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1d390 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1d3a0 20 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74   largest entry t
1d3b0 68 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20  hat .** is less 
1d3c0 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f  than or equal to
1d3d0 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20   the key value. 
1d3e0 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
1d3f0 72 65 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73  records .** less
1d400 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
1d410 6f 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  o the key and P2
1d420 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1d430 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1d440 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d450 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1d460 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1d470 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1d480 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1d490 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1d4a0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1d4b0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1d4c0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1d4d0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1d4e0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1d4f0 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1d500 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1d510 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1d520 65 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73  e, SeekLt.*/.cas
1d530 65 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20  e OP_SeekLT:    
1d540 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d550 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d560 6b 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20  kLE:         /* 
1d570 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73  jump, in3 */.cas
1d580 65 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20  e OP_SeekGE:    
1d590 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e       /* jump, in
1d5a0 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65  3 */.case OP_See
1d5b0 6b 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  kGT: {       /* 
1d5c0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69  jump, in3 */.  i
1d5d0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6f 63  nt res;.  int oc
1d5e0 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
1d5f0 70 43 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65  pC;.  UnpackedRe
1d600 63 6f 72 64 20 72 3b 0a 20 20 69 6e 74 20 6e 46  cord r;.  int nF
1d610 69 65 6c 64 3b 0a 20 20 69 36 34 20 69 4b 65 79  ield;.  i64 iKey
1d620 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 6f  ;      /* The ro
1d630 77 69 64 20 77 65 20 61 72 65 20 74 6f 20 73 65  wid we are to se
1d640 65 6b 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65  ek to */..  asse
1d650 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1d660 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1d670 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
1d680 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b 0a  ( pOp->p2!=0 );.
1d690 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
1d6a0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
1d6b0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
1d6c0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
1d6d0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a  oTableReg==0 );.
1d6e0 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65    assert( OP_See
1d6f0 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54  kLE == OP_SeekLT
1d700 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  +1 );.  assert( 
1d710 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f 50 5f  OP_SeekGE == OP_
1d720 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20 61 73  SeekLT+2 );.  as
1d730 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 20  sert( OP_SeekGT 
1d740 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33 20 29  == OP_SeekLT+3 )
1d750 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d760 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61  isOrdered );.  a
1d770 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73  ssert( pC->pCurs
1d780 6f 72 21 3d 30 20 29 3b 0a 20 20 6f 63 20 3d 20  or!=0 );.  oc = 
1d790 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 20 20 70  pOp->opcode;.  p
1d7a0 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  C->nullRow = 0;.
1d7b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
1d7c0 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70  BUG.  pC->seekOp
1d7d0 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a   = pOp->opcode;.
1d7e0 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70 43 2d  #endif.  if( pC-
1d7f0 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  >isTable ){.    
1d800 2f 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c  /* The input val
1d810 75 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62  ue in P3 might b
1d820 65 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69  e of any type: i
1d830 6e 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74  nteger, real, st
1d840 72 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f  ring,.    ** blo
1d850 62 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74  b, or NULL.  But
1d860 20 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20   it needs to be 
1d870 61 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72  an integer befor
1d880 65 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20  e we can do.    
1d890 2a 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20  ** the seek, so 
1d8a0 63 6f 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  covert it. */.  
1d8b0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1d8c0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 41 70 70  Op->p3];.    App
1d8d0 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1d8e0 79 28 70 49 6e 33 29 3b 0a 20 20 20 20 69 4b 65  y(pIn3);.    iKe
1d8f0 79 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49  y = sqlite3VdbeI
1d900 6e 74 56 61 6c 75 65 28 70 49 6e 33 29 3b 0a 20  ntValue(pIn3);. 
1d910 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61     pC->rowidIsVa
1d920 6c 69 64 20 3d 20 30 3b 0a 0a 20 20 20 20 2f 2a  lid = 0;..    /*
1d930 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1d940 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1d950 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1d960 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1d970 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1d980 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1d990 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1d9a0 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1d9b0 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
1d9c0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1d9d0 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1d9e0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1d9f0 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1da00 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
1da10 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1da20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1da30 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1da40 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1da50 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1da60 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1da70 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1da80 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1da90 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
1daa0 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
1dab0 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20  aken(1,2);.     
1dac0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
1dad0 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  }..      /* If t
1dae0 68 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  he approximation
1daf0 20 69 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20   iKey is larger 
1db00 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1db10 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1db20 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1db30 69 74 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61  itute >= for > a
1db40 6e 64 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67  nd < for <=. e.g
1db50 2e 20 69 66 20 74 68 65 20 73 65 61 72 63 68 20  . if the search 
1db60 74 65 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73  term.      ** is
1db70 20 34 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74   4.9 and the int
1db80 65 67 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69  eger approximati
1db90 6f 6e 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20  on 5:.      **. 
1dba0 20 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28       **        (
1dbb0 78 20 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20  x >  4.9)    -> 
1dbc0 20 20 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20      (x >= 5).   
1dbd0 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1dbe0 3c 3d 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  <= 4.9)    ->   
1dbf0 20 20 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20    (x <  5).     
1dc00 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49   */.      if( pI
1dc10 6e 33 2d 3e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  n3->r<(double)iK
1dc20 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1dc30 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
1dc40 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
1dc50 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1dc60 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
1dc70 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
1dc80 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1dc90 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
1dca0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1dcb0 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1dcc0 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1dcd0 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1dce0 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1dcf0 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
1dd00 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1dd10 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1dd20 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
1dd30 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1dd40 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1dd50 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1dd60 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
1dd70 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
1dd80 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
1dd90 3e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79 20  >r>(double)iKey 
1dda0 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1ddb0 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28 4f  t( OP_SeekLE==(O
1ddc0 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a 20  P_SeekLT+1) );. 
1ddd0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 4f         assert( O
1dde0 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53 65  P_SeekGT==(OP_Se
1ddf0 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20 20  ekGE+1) );.     
1de00 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f 53     assert( (OP_S
1de10 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29 3d  eekLT & 0x0001)=
1de20 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30 78  =(OP_SeekGE & 0x
1de30 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20 20  0001) );.       
1de40 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30 30   if( (oc & 0x000
1de50 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20 26  1)==(OP_SeekLT &
1de60 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b 3b   0x0001) ) oc++;
1de70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20 0a  .      }.    } .
1de80 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1de90 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
1dea0 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
1deb0 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c 20 30   0, (u64)iKey, 0
1dec0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69 66 28  , &res);.    if(
1ded0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1dee0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  {.      goto abo
1def0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1df00 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72  .    }.    if( r
1df10 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 70  es==0 ){.      p
1df20 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
1df30 3d 20 31 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6c  = 1;.      pC->l
1df40 61 73 74 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b  astRowid = iKey;
1df50 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a  .    }.  }else{.
1df60 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
1df70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
1df80 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1df90 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
1dfa0 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
1dfb0 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
1dfc0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
1dfd0 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
1dfe0 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
1dff0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
1e000 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
1e010 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
1e020 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
1e030 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
1e040 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
1e050 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
1e060 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
1e070 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
1e080 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
1e090 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
1e0a0 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
1e0b0 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
1e0c0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
1e0d0 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
1e0e0 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
1e0f0 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
1e100 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
1e110 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
1e120 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
1e130 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
1e140 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
1e150 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
1e160 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
1e170 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
1e180 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
1e190 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
1e1a0 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
1e1b0 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
1e1c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
1e1d0 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
1e1e0 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
1e1f0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
1e200 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
1e210 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1e220 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
1e230 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
1e240 45 78 70 61 6e 64 42 6c 6f 62 28 72 2e 61 4d 65  ExpandBlob(r.aMe
1e250 6d 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  m);.    rc = sql
1e260 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
1e270 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72  npacked(pC->pCur
1e280 73 6f 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26  sor, &r, 0, 0, &
1e290 72 65 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63  res);.    if( rc
1e2a0 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  !=SQLITE_OK ){. 
1e2b0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
1e2c0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
1e2d0 20 20 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69    }.    pC->rowi
1e2e0 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20  dIsValid = 0;.  
1e2f0 7d 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64  }.  pC->deferred
1e300 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43  Moveto = 0;.  pC
1e310 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
1e320 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66  CACHE_STALE;.#if
1e330 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
1e340 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68    sqlite3_search
1e350 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66  _count++;.#endif
1e360 0a 20 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65  .  if( oc>=OP_Se
1e370 65 6b 47 45 20 29 7b 20 20 61 73 73 65 72 74 28  ekGE ){  assert(
1e380 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c   oc==OP_SeekGE |
1e390 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  | oc==OP_SeekGT 
1e3a0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30  );.    if( res<0
1e3b0 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f   || (res==0 && o
1e3c0 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b  c==OP_SeekGT) ){
1e3d0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a  .      res = 0;.
1e3e0 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1e3f0 65 33 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e  e3BtreeNext(pC->
1e400 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
1e410 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
1e420 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
1e430 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1e440 72 3b 0a 20 20 20 20 20 20 70 43 2d 3e 72 6f 77  r;.      pC->row
1e450 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1e460 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1e470 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20  res = 0;.    }. 
1e480 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
1e490 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c  rt( oc==OP_SeekL
1e4a0 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b  T || oc==OP_Seek
1e4b0 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20 72 65  LE );.    if( re
1e4c0 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30 20 26  s>0 || (res==0 &
1e4d0 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 54 29  & oc==OP_SeekLT)
1e4e0 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20   ){.      res = 
1e4f0 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  0;.      rc = sq
1e500 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69 6f  lite3BtreePrevio
1e510 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  us(pC->pCursor, 
1e520 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28  &res);.      if(
1e530 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
1e540 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
1e550 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
1e560 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
1e570 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b   = 0;.    }else{
1e580 0a 20 20 20 20 20 20 2f 2a 20 72 65 73 20 6d 69  .      /* res mi
1e590 67 68 74 20 62 65 20 6e 65 67 61 74 69 76 65 20  ght be negative 
1e5a0 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
1e5b0 65 20 69 73 20 65 6d 70 74 79 2e 20 20 43 68 65  e is empty.  Che
1e5c0 63 6b 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 73  ck to.      ** s
1e5d0 65 65 20 69 66 20 74 68 69 73 20 69 73 20 74 68  ee if this is th
1e5e0 65 20 63 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f  e case..      */
1e5f0 0a 20 20 20 20 20 20 72 65 73 20 3d 20 73 71 6c  .      res = sql
1e600 69 74 65 33 42 74 72 65 65 45 6f 66 28 70 43 2d  ite3BtreeEof(pC-
1e610 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  >pCursor);.    }
1e620 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
1e630 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64  Op->p2>0 );.  Vd
1e640 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
1e650 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s!=0,2);.  if( r
1e660 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  es ){.    pc = p
1e670 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
1e680 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e690 70 63 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 50  pcode: Seek P1 P
1e6a0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
1e6b0 73 69 73 3a 20 20 69 6e 74 6b 65 79 3d 72 5b 50  sis:  intkey=r[P
1e6c0 32 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  2].**.** P1 is a
1e6d0 6e 20 6f 70 65 6e 20 74 61 62 6c 65 20 63 75 72  n open table cur
1e6e0 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 61 20  sor and P2 is a 
1e6f0 72 6f 77 69 64 20 69 6e 74 65 67 65 72 2e 20 20  rowid integer.  
1e700 41 72 72 61 6e 67 65 0a 2a 2a 20 66 6f 72 20 50  Arrange.** for P
1e710 31 20 74 6f 20 6d 6f 76 65 20 73 6f 20 74 68 61  1 to move so tha
1e720 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74  t it points to t
1e730 68 65 20 72 6f 77 69 64 20 67 69 76 65 6e 20 62  he rowid given b
1e740 79 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  y P2..**.** This
1e750 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 64   is actually a d
1e760 65 66 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e  eferred seek.  N
1e770 6f 74 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20  othing actually 
1e780 68 61 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a  happens until.**
1e790 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 75   the cursor is u
1e7a0 73 65 64 20 74 6f 20 72 65 61 64 20 61 20 72 65  sed to read a re
1e7b0 63 6f 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c  cord.  That way,
1e7c0 20 69 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20   if no reads.** 
1e7d0 6f 63 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65  occur, no unnece
1e7e0 73 73 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e  ssary I/O happen
1e7f0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  s..*/.case OP_Se
1e800 65 6b 3a 20 7b 20 20 20 20 2f 2a 20 69 6e 32 20  ek: {    /* in2 
1e810 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
1e820 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  *pC;..  assert( 
1e830 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1e840 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1e850 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1e860 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1e870 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1e880 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70  .  assert( pC->p
1e890 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
1e8a0 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62  ssert( pC->isTab
1e8b0 6c 65 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c  le );.  pC->null
1e8c0 52 6f 77 20 3d 20 30 3b 0a 20 20 70 49 6e 32 20  Row = 0;.  pIn2 
1e8d0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
1e8e0 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  ;.  pC->movetoTa
1e8f0 72 67 65 74 20 3d 20 73 71 6c 69 74 65 33 56 64  rget = sqlite3Vd
1e900 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29  beIntValue(pIn2)
1e910 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  ;.  pC->rowidIsV
1e920 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  alid = 0;.  pC->
1e930 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
1e940 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 20   1;.  break;.}. 
1e950 20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6f   ../* Opcode: Fo
1e960 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1e970 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1e980 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1e990 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1e9a0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1e9b0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1e9c0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1e9d0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1e9e0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e9f0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1ea00 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1ea10 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1ea20 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1ea30 2a 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69  *.** Cursor P1 i
1ea40 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1ea50 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1ea60 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1ea70 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1ea80 73 20 61 20 70 72 65 66 69 78 20 6f 66 20 61 6e  s a prefix of an
1ea90 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
1eaa0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
1eab0 65 20 74 6f 20 50 32 20 61 6e 64 0a 2a 2a 20 50  e to P2 and.** P
1eac0 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74 69  1 is left pointi
1ead0 6e 67 20 61 74 20 74 68 65 20 6d 61 74 63 68 69  ng at the matchi
1eae0 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20  ng entry..**.** 
1eaf0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1eb00 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1eb10 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1eb20 65 20 69 74 20 63 61 6e 20 62 65 0a 2a 2a 20 61  e it can be.** a
1eb30 64 76 61 6e 63 65 64 20 69 6e 20 74 68 65 20 66  dvanced in the f
1eb40 6f 72 77 61 72 64 20 64 69 72 65 63 74 69 6f 6e  orward direction
1eb50 2e 20 20 54 68 65 20 4e 65 78 74 20 69 6e 73 74  .  The Next inst
1eb60 72 75 63 74 69 6f 6e 20 77 69 6c 6c 20 77 6f 72  ruction will wor
1eb70 6b 2c 0a 2a 2a 20 62 75 74 20 6e 6f 74 20 74 68  k,.** but not th
1eb80 65 20 50 72 65 76 20 69 6e 73 74 72 75 63 74 69  e Prev instructi
1eb90 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1eba0 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  so: NotFound, No
1ebb0 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78 69  Conflict, NotExi
1ebc0 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a 2f  sts. SeekGe.*/./
1ebd0 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f 75  * Opcode: NotFou
1ebe0 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20 2a  nd P1 P2 P3 P4 *
1ebf0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
1ec00 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
1ec10 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20 72   If P4==0 then r
1ec20 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64 73  egister P3 holds
1ec30 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75 63   a blob construc
1ec40 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f 72  ted by MakeRecor
1ec50 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20 74  d.  If.** P4>0 t
1ec60 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1ec70 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66 20  is the first of 
1ec80 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68 61  P4 registers tha
1ec90 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b  t form an unpack
1eca0 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a  ed.** record..**
1ecb0 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20 69   .** Cursor P1 i
1ecc0 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62 74  s on an index bt
1ecd0 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65 63  ree.  If the rec
1ece0 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20 62  ord identified b
1ecf0 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20 69  y P3 and P4.** i
1ed00 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69 78  s not the prefix
1ed10 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e   of any entry in
1ed20 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20   P1 then a jump 
1ed30 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20 20  is made to P2.  
1ed40 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20 63  If P1 .** does c
1ed50 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79 20  ontain an entry 
1ed60 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61 74  whose prefix mat
1ed70 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20 72  ches the P3/P4 r
1ed80 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74 72  ecord then contr
1ed90 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72 6f  ol.** falls thro
1eda0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1edb0 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64 20  instruction and 
1edc0 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e 74  P1 is left point
1edd0 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d 61  ing at the.** ma
1ede0 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a 2a  tching entry..**
1edf0 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
1ee00 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  on leaves the cu
1ee10 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65 20  rsor in a state 
1ee20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74 20  where it cannot 
1ee30 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69  be.** advanced i
1ee40 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74 69  n either directi
1ee50 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  on.  In other wo
1ee60 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61 6e  rds, the Next an
1ee70 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64 65  d Prev.** opcode
1ee80 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61 66  s do not work af
1ee90 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74 69  ter this operati
1eea0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
1eeb0 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45 78  so: Found, NotEx
1eec0 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74  ists, NoConflict
1eed0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1eee0 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32 20  oConflict P1 P2 
1eef0 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70  P3 P4 *.** Synop
1ef00 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
1ef10 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30  ].**.** If P4==0
1ef20 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
1ef30 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63  3 holds a blob c
1ef40 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61  onstructed by Ma
1ef50 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a  keRecord.  If.**
1ef60 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73   P4>0 then regis
1ef70 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69  ter P3 is the fi
1ef80 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74  rst of P4 regist
1ef90 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e  ers that form an
1efa0 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63   unpacked.** rec
1efb0 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73  ord..** .** Curs
1efc0 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69  or P1 is on an i
1efd0 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66 20  ndex btree.  If 
1efe0 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74  the record ident
1eff0 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64 20  ified by P3 and 
1f000 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61  P4.** contains a
1f010 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20 6a  ny NULL value, j
1f020 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
1f030 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20 74  to P2.  If all t
1f040 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20 72  erms of the.** r
1f050 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e 55  ecord are not-NU
1f060 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b 20  LL then a check 
1f070 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65 72  is done to deter
1f080 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77 20  mine if any row 
1f090 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e 64  in the.** P1 ind
1f0a0 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20 6d  ex btree has a m
1f0b0 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65 66  atching key pref
1f0c0 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  ix.  If there ar
1f0d0 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a 75  e no matches, ju
1f0e0 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65 6c  mp.** immediatel
1f0f0 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68 65  y to P2.  If the
1f100 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20 66  re is a match, f
1f110 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64 20  all through and 
1f120 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a 20  leave the P1.** 
1f130 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67 20  cursor pointing 
1f140 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20  to the matching 
1f150 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  row..**.** This 
1f160 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c 61  opcode is simila
1f170 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  r to OP_NotFound
1f180 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70 74   with the except
1f190 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a 2a  ions that the.**
1f1a0 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61 79   branch is alway
1f1b0 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20 70  s taken if any p
1f1c0 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72 63  art of the searc
1f1d0 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20 4e  h key input is N
1f1e0 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  ULL..**.** This 
1f1f0 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
1f200 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
1f210 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
1f220 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76  cannot be.** adv
1f230 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72 20  anced in either 
1f240 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
1f250 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1f260 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a  Next and Prev.**
1f270 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20   opcodes do not 
1f280 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73 20  work after this 
1f290 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  operation..**.**
1f2a0 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f   See also: NotFo
1f2b0 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  und, Found, NotE
1f2c0 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f 50  xists.*/.case OP
1f2d0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20 20  _NoConflict:    
1f2e0 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f2f0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e  .case OP_NotFoun
1f300 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  d:       /* jump
1f310 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
1f320 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20 20  _Found: {       
1f330 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f   /* jump, in3 */
1f340 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45 78  .  int alreadyEx
1f350 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  ists;.  int ii;.
1f360 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1f370 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 63  ;.  int res;.  c
1f380 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55 6e  har *pFree;.  Un
1f390 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70 49  packedRecord *pI
1f3a0 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b 65  dxKey;.  Unpacke
1f3b0 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68 61  dRecord r;.  cha
1f3c0 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e 44  r aTempRec[ROUND
1f3d0 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b 65  8(sizeof(Unpacke
1f3e0 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a 65  dRecord)) + size
1f3f0 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b 0a  of(Mem)*4 + 7];.
1f400 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
1f410 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
1f420 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
1f430 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
1f440 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
1f450 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
1f460 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f470 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f480 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1f490 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1f4a0 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
1f4b0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1f4c0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1f4d0 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
1f4e0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
1f4f0 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
1f500 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
1f510 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
1f520 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
1f530 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1f540 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
1f550 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 70 46  Table==0 );.  pF
1f560 72 65 65 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  ree = 0;  /* Not
1f570 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
1f580 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
1f590 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
1f5a0 6e 67 2e 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ng. */.  if( pOp
1f5b0 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20 20  ->p4.i>0 ){.    
1f5c0 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
1f5d0 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72  >pKeyInfo;.    r
1f5e0 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
1f5f0 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72 2e  Op->p4.i;.    r.
1f600 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 20 20 20  aMem = pIn3;.   
1f610 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
1f620 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1f630 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d       assert( mem
1f640 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
1f650 69 69 5d 29 20 29 3b 0a 20 20 20 20 20 20 45 78  ii]) );.      Ex
1f660 70 61 6e 64 42 6c 6f 62 28 26 72 2e 61 4d 65 6d  pandBlob(&r.aMem
1f670 5b 69 69 5d 29 3b 0a 23 69 66 64 65 66 20 53 51  [ii]);.#ifdef SQ
1f680 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 20  LITE_DEBUG.     
1f690 20 69 66 28 20 69 69 20 29 20 52 45 47 49 53 54   if( ii ) REGIST
1f6a0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
1f6b0 2b 69 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d  +ii, &r.aMem[ii]
1f6c0 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 7d 0a  );.#endif.    }.
1f6d0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72      pIdxKey = &r
1f6e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
1f6f0 49 64 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33  IdxKey = sqlite3
1f700 56 64 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65  VdbeAllocUnpacke
1f710 64 52 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20  dRecord(.       
1f720 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61   pC->pKeyInfo, a
1f730 54 65 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28  TempRec, sizeof(
1f740 61 54 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65  aTempRec), &pFre
1f750 65 0a 20 20 20 20 29 3b 20 0a 20 20 20 20 69 66  e.    ); .    if
1f760 28 20 70 49 64 78 4b 65 79 3d 3d 30 20 29 20 67  ( pIdxKey==0 ) g
1f770 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
1f780 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
1f790 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
1f7a0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70  ;.    assert( (p
1f7b0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1f7c0 5f 5a 65 72 6f 29 3d 3d 30 20 29 3b 20 20 2f 2a  _Zero)==0 );  /*
1f7d0 20 7a 65 72 6f 62 6c 6f 62 73 20 61 6c 72 65 61   zeroblobs alrea
1f7e0 64 79 20 65 78 70 61 6e 64 65 64 20 2a 2f 0a 20  dy expanded */. 
1f7f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52 65     sqlite3VdbeRe
1f800 63 6f 72 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70  cordUnpack(pC->p
1f810 4b 65 79 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e  KeyInfo, pIn3->n
1f820 2c 20 70 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b  , pIn3->z, pIdxK
1f830 65 79 29 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b  ey);.  }.  pIdxK
1f840 65 79 2d 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d  ey->default_rc =
1f850 20 30 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f   0;.  if( pOp->o
1f860 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode==OP_NoConf
1f870 6c 69 63 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46  lict ){.    /* F
1f880 6f 72 20 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66  or the OP_NoConf
1f890 6c 69 63 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b  lict opcode, tak
1f8a0 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61 6e  e the jump if an
1f8b0 79 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  y of the.    ** 
1f8c0 69 6e 70 75 74 20 66 69 65 6c 64 73 20 61 72 65  input fields are
1f8d0 20 4e 55 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79   NULL, since any
1f8e0 20 6b 65 79 20 77 69 74 68 20 61 20 4e 55 4c 4c   key with a NULL
1f8f0 20 77 69 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a   will not.    **
1f900 20 63 6f 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20   conflict */.   
1f910 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 72 2e   for(ii=0; ii<r.
1f920 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20  nField; ii++){. 
1f930 20 20 20 20 20 69 66 28 20 72 2e 61 4d 65 6d 5b       if( r.aMem[
1f940 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ii].flags & MEM_
1f950 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 20 20 20 20  Null ){.        
1f960 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f970 3b 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  ; VdbeBranchTake
1f980 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20 20  n(1,2);.        
1f990 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
1f9a0 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
1f9b0 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
1f9c0 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
1f9d0 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79 2c  Cursor, pIdxKey,
1f9e0 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1f9f0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3d 3d 30  if( pOp->p4.i==0
1fa00 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1fa10 62 46 72 65 65 28 64 62 2c 20 70 46 72 65 65 29  bFree(db, pFree)
1fa20 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
1fa30 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
1fa40 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 43   break;.  }.  pC
1fa50 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 72  ->seekResult = r
1fa60 65 73 3b 0a 20 20 61 6c 72 65 61 64 79 45 78 69  es;.  alreadyExi
1fa70 73 74 73 20 3d 20 28 72 65 73 3d 3d 30 29 3b 0a  sts = (res==0);.
1fa80 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1fa90 31 2d 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  1-alreadyExists;
1faa0 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  .  pC->deferredM
1fab0 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d  oveto = 0;.  pC-
1fac0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1fad0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 69 66  ACHE_STALE;.  if
1fae0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
1faf0 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20 20 20 56  P_Found ){.    V
1fb00 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 61  dbeBranchTaken(a
1fb10 6c 72 65 61 64 79 45 78 69 73 74 73 21 3d 30 2c  lreadyExists!=0,
1fb20 32 29 3b 0a 20 20 20 20 69 66 28 20 61 6c 72 65  2);.    if( alre
1fb30 61 64 79 45 78 69 73 74 73 20 29 20 70 63 20 3d  adyExists ) pc =
1fb40 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
1fb50 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42  }else{.    VdbeB
1fb60 72 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61  ranchTaken(alrea
1fb70 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29 3b 0a  dyExists==0,2);.
1fb80 20 20 20 20 69 66 28 20 21 61 6c 72 65 61 64 79      if( !already
1fb90 45 78 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f  Exists ) pc = pO
1fba0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
1fbb0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1fbc0 63 6f 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20  code: NotExists 
1fbd0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1fbe0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
1fbf0 3d 72 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20  =r[P3].**.** P1 
1fc00 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20  is the index of 
1fc10 61 20 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e  a cursor open on
1fc20 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74   an SQL table bt
1fc30 72 65 65 20 28 77 69 74 68 20 69 6e 74 65 67 65  ree (with intege
1fc40 72 0a 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20  r.** keys).  P3 
1fc50 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f  is an integer ro
1fc60 77 69 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73  wid.  If P1 does
1fc70 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72   not contain a r
1fc80 65 63 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f  ecord with.** ro
1fc90 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70  wid P3 then jump
1fca0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
1fcb0 50 32 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20  P2.  If P1 does 
1fcc0 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
1fcd0 0a 2a 2a 20 77 69 74 68 20 72 6f 77 69 64 20 50  .** with rowid P
1fce0 33 20 74 68 65 6e 20 6c 65 61 76 65 20 74 68 65  3 then leave the
1fcf0 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1fd00 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64 20   at that record 
1fd10 61 6e 64 20 66 61 6c 6c 0a 2a 2a 20 74 68 72 6f  and fall.** thro
1fd20 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
1fd30 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
1fd40 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75  ** The OP_NotFou
1fd50 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72  nd opcode perfor
1fd60 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70 65 72  ms the same oper
1fd70 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62  ation on index b
1fd80 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68 20 61  trees.** (with a
1fd90 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69 2d 76  rbitrary multi-v
1fda0 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a  alue keys)..**.*
1fdb0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65  * This opcode le
1fdc0 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
1fdd0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
1fde0 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20 61 64   it cannot be ad
1fdf0 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74  vanced.** in eit
1fe00 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
1fe10 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1fe20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
1fe30 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a  v opcodes will.*
1fe40 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f  * not work follo
1fe50 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65  wing this opcode
1fe60 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1fe70 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1fe80 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f  d, NoConflict.*/
1fe90 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 45 78 69 73  .case OP_NotExis
1fea0 74 73 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  ts: {        /* 
1feb0 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56  jump, in3 */.  V
1fec0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
1fed0 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
1fee0 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 75  ;.  int res;.  u
1fef0 36 34 20 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33  64 iKey;..  pIn3
1ff00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
1ff10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
1ff20 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1ff30 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  nt );.  assert( 
1ff40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1ff50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1ff60 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1ff70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1ff80 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
1ff90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
1ffa0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
1ffb0 70 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  p = 0;.#endif.  
1ffc0 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
1ffd0 62 6c 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ble );.  assert(
1ffe0 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65   pC->pseudoTable
1fff0 52 65 67 3d 3d 30 20 29 3b 0a 20 20 70 43 72 73  Reg==0 );.  pCrs
20000 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
20010 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72  .  assert( pCrsr
20020 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20 30  !=0 );.  res = 0
20030 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33 2d  ;.  iKey = pIn3-
20040 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c  >u.i;.  rc = sql
20050 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55  ite3BtreeMovetoU
20060 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 30  npacked(pCrsr, 0
20070 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73 29  , iKey, 0, &res)
20080 3b 0a 20 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69  ;.  pC->lastRowi
20090 64 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20  d = pIn3->u.i;. 
200a0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
200b0 64 20 3d 20 72 65 73 3d 3d 30 20 3f 31 3a 30 3b  d = res==0 ?1:0;
200c0 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
200d0 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
200e0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
200f0 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
20100 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
20110 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
20120 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
20130 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
20140 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
20150 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
20160 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 3d 3d  ->rowidIsValid==
20170 30 20 29 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73  0 );.  }.  pC->s
20180 65 65 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b  eekResult = res;
20190 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
201a0 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
201b0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
201c0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
201d0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
201e0 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20  .**.** Find the 
201f0 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73  next available s
20200 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20 66  equence number f
20210 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a  or cursor P1..**
20220 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75 65   Write the seque
20230 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20  nce number into 
20240 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
20250 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d  The sequence num
20260 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73 6f  ber on the curso
20270 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  r is incremented
20280 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20 69   after this.** i
20290 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f  nstruction.  .*/
202a0 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
202b0 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  e: {           /
202c0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
202d0 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
202e0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
202f0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
20300 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  );.  assert( p->
20310 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d  apCsr[pOp->p1]!=
20320 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  0 );.  pOut->u.i
20330 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
20340 3e 70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b  >p1]->seqCount++
20350 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
20360 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77  * Opcode: NewRow
20370 69 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  id P1 P2 P3 * *.
20380 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
20390 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47  2]=rowid.**.** G
203a0 65 74 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72  et a new integer
203b0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
203c0 61 2e 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75  a.k.a "rowid") u
203d0 73 65 64 20 61 73 20 74 68 65 20 6b 65 79 20 74  sed as the key t
203e0 6f 20 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68  o a table..** Th
203f0 65 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20  e record number 
20400 69 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c  is not previousl
20410 79 20 75 73 65 64 20 61 73 20 61 20 6b 65 79 20  y used as a key 
20420 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
20430 2a 2a 20 74 61 62 6c 65 20 74 68 61 74 20 63 75  ** table that cu
20440 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
20450 6f 2e 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f  o.  The new reco
20460 72 64 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69  rd number is wri
20470 74 74 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20  tten.** written 
20480 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
20490 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68  **.** If P3>0 th
204a0 65 6e 20 50 33 20 69 73 20 61 20 72 65 67 69 73  en P3 is a regis
204b0 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20  ter in the root 
204c0 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44  frame of this VD
204d0 42 45 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a  BE that holds .*
204e0 2a 20 74 68 65 20 6c 61 72 67 65 73 74 20 70 72  * the largest pr
204f0 65 76 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74  eviously generat
20500 65 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ed record number
20510 2e 20 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20  . No new record 
20520 6e 75 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61  numbers are.** a
20530 6c 6c 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73  llowed to be les
20540 73 20 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75  s than this valu
20550 65 2e 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c  e. When this val
20560 75 65 20 72 65 61 63 68 65 73 20 69 74 73 20 6d  ue reaches its m
20570 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53  aximum, .** an S
20580 51 4c 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72  QLITE_FULL error
20590 20 69 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54   is generated. T
205a0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 20 69  he P3 register i
205b0 73 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74  s updated with t
205c0 68 65 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65  he '.** generate
205d0 64 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e  d record number.
205e0 20 54 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69   This P3 mechani
205f0 73 6d 20 69 73 20 75 73 65 64 20 74 6f 20 68 65  sm is used to he
20600 6c 70 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  lp implement the
20610 0a 2a 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  .** AUTOINCREMEN
20620 54 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61  T feature..*/.ca
20630 73 65 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20  se OP_NewRowid: 
20640 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
20650 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
20660 2f 0a 20 20 69 36 34 20 76 3b 20 20 20 20 20 20  /.  i64 v;      
20670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
20680 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20  e new rowid */. 
20690 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
206a0 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f          /* Curso
206b0 72 20 6f 66 20 74 61 62 6c 65 20 74 6f 20 67 65  r of table to ge
206c0 74 20 74 68 65 20 6e 65 77 20 72 6f 77 69 64 20  t the new rowid 
206d0 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
206e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
206f0 65 73 75 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69  esult of an sqli
20700 74 65 33 42 74 72 65 65 4c 61 73 74 28 29 20 2a  te3BtreeLast() *
20710 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20 20 20 20  /.  int cnt;    
20720 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
20730 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69 74 20 74  unter to limit t
20740 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 61  he number of sea
20750 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a  rches */.  Mem *
20760 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  pMem;           
20770 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
20780 6c 64 69 6e 67 20 6c 61 72 67 65 73 74 20 72 6f  lding largest ro
20790 77 69 64 20 66 6f 72 20 41 55 54 4f 49 4e 43 52  wid for AUTOINCR
207a0 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46  EMENT */.  VdbeF
207b0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20 20 20  rame *pFrame;   
207c0 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20    /* Root frame 
207d0 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20  of VDBE */..  v 
207e0 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a  = 0;.  res = 0;.
207f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20800 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
20810 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
20820 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
20830 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
20840 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28  ( pC!=0 );.  if(
20850 20 4e 45 56 45 52 28 70 43 2d 3e 70 43 75 72 73   NEVER(pC->pCurs
20860 6f 72 3d 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a  or==0) ){.    /*
20870 20 54 68 65 20 7a 65 72 6f 20 69 6e 69 74 69 61   The zero initia
20880 6c 69 7a 61 74 69 6f 6e 20 61 62 6f 76 65 20 69  lization above i
20890 73 20 61 6c 6c 20 74 68 61 74 20 69 73 20 6e 65  s all that is ne
208a0 65 64 65 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b  eded */.  }else{
208b0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
208c0 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
208d0 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
208e0 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
208f0 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
20900 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
20910 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
20920 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
20930 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
20940 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
20950 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
20960 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
20970 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
20980 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
20990 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
209a0 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
209b0 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
209c0 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
209d0 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
209e0 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
209f0 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
20a00 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
20a10 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
20a20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
20a30 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
20a40 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
20a50 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
20a60 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
20a70 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
20a80 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
20a90 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
20aa0 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
20ab0 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
20ac0 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
20ad0 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
20ae0 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
20af0 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
20b00 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
20b10 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
20b20 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
20b30 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
20b40 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
20b50 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
20b60 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
20b70 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
20b80 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
20b90 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
20ba0 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
20bb0 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
20bc0 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
20bd0 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
20be0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
20bf0 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
20c00 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
20c10 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
20c20 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
20c30 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
20c40 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
20c50 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
20c60 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
20c70 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
20c80 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
20c90 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
20ca0 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
20cb0 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
20cc0 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
20cd0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
20ce0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
20cf0 4c 61 73 74 28 70 43 2d 3e 70 43 75 72 73 6f 72  Last(pC->pCursor
20d00 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
20d10 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
20d20 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f   ){.        goto
20d30 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
20d40 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
20d50 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20     if( res ){.  
20d60 20 20 20 20 20 20 76 20 3d 20 31 3b 20 20 20 2f        v = 1;   /
20d70 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34  * IMP: R-61914-4
20d80 38 30 37 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65  8074 */.      }e
20d90 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73 73  lse{.        ass
20da0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
20db0 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
20dc0 43 2d 3e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  C->pCursor) );. 
20dd0 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
20de0 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28  te3BtreeKeySize(
20df0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29  pC->pCursor, &v)
20e00 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
20e10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
20e20 29 3b 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66  );   /* Cannot f
20e30 61 69 6c 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74  ail following Bt
20e40 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20  reeLast() */.   
20e50 20 20 20 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f       if( v>=MAX_
20e60 52 4f 57 49 44 20 29 7b 0a 20 20 20 20 20 20 20  ROWID ){.       
20e70 20 20 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d     pC->useRandom
20e80 52 6f 77 69 64 20 3d 20 31 3b 0a 20 20 20 20 20  Rowid = 1;.     
20e90 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
20ea0 20 20 20 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d      v++;   /* IM
20eb0 50 3a 20 52 2d 32 39 35 33 38 2d 33 34 39 38 37  P: R-29538-34987
20ec0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
20ed0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66      }.    }..#if
20ee0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
20ef0 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20  _AUTOINCREMENT. 
20f00 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29     if( pOp->p3 )
20f10 7b 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72  {.      /* Asser
20f20 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76  t that P3 is a v
20f30 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  alid memory cell
20f40 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72  . */.      asser
20f50 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a  t( pOp->p3>0 );.
20f60 20 20 20 20 20 20 69 66 28 20 70 2d 3e 70 46 72        if( p->pFr
20f70 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20 20 66  ame ){.        f
20f80 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72  or(pFrame=p->pFr
20f90 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61  ame; pFrame->pPa
20fa0 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72  rent; pFrame=pFr
20fb0 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20  ame->pParent);. 
20fc0 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74         /* Assert
20fd0 20 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61   that P3 is a va
20fe0 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e  lid memory cell.
20ff0 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65   */.        asse
21000 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72  rt( pOp->p3<=pFr
21010 61 6d 65 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20  ame->nMem );.   
21020 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 70 46 72       pMem = &pFr
21030 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
21040 33 5d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  3];.      }else{
21050 0a 20 20 20 20 20 20 20 20 2f 2a 20 41 73 73 65  .        /* Asse
21060 72 74 20 74 68 61 74 20 50 33 20 69 73 20 61 20  rt that P3 is a 
21070 76 61 6c 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c  valid memory cel
21080 6c 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73  l. */.        as
21090 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
210a0 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
210b0 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
210c0 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
210d0 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
210e0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
210f0 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
21100 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
21110 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
21120 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
21130 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
21140 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
21150 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
21160 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
21170 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
21180 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
21190 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
211a0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
211b0 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
211c0 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
211d0 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
211e0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
211f0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
21200 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
21210 2a 20 49 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36  * IMP: R-12275-6
21220 31 33 33 38 20 2a 2f 0a 20 20 20 20 20 20 20 20  1338 */.        
21230 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
21240 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
21250 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
21260 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
21270 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
21280 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
21290 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
212a0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
212b0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
212c0 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
212d0 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
212e0 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
212f0 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
21300 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
21310 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
21320 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
21330 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
21340 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
21350 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
21360 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
21370 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
21380 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
21390 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
213a0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
213b0 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
213c0 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
213d0 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
213e0 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
213f0 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
21400 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
21410 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
21420 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
21430 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
21440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21450 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
21460 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
21470 20 20 20 20 20 2f 2a 20 6f 6e 20 74 68 65 20 66       /* on the f
21480 69 72 73 74 20 61 74 74 65 6d 70 74 2c 20 73 69  irst attempt, si
21490 6d 70 6c 79 20 64 6f 20 6f 6e 65 20 6d 6f 72 65  mply do one more
214a0 20 74 68 61 6e 20 70 72 65 76 69 6f 75 73 20 2a   than previous *
214b0 2f 0a 20 20 20 20 20 20 76 20 3d 20 6c 61 73 74  /.      v = last
214c0 52 6f 77 69 64 3b 0a 20 20 20 20 20 20 76 20 26  Rowid;.      v &
214d0 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29  = (MAX_ROWID>>1)
214e0 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64 6f 65 73  ; /* ensure does
214f0 6e 27 74 20 67 6f 20 6e 65 67 61 74 69 76 65 20  n't go negative 
21500 2a 2f 0a 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a  */.      v++; /*
21510 20 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f   ensure non-zero
21520 20 2a 2f 0a 20 20 20 20 20 20 63 6e 74 20 3d 20   */.      cnt = 
21530 30 3b 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  0;.      while( 
21540 20 20 28 28 72 63 20 3d 20 73 71 6c 69 74 65 33    ((rc = sqlite3
21550 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
21560 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c  ked(pC->pCursor,
21570 20 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20   0, (u64)v,.    
21580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
215a0 20 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20               0, 
215b0 26 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f  &res))==SQLITE_O
215c0 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26  K).            &
215d0 26 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20  & (res==0).     
215e0 20 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74         && (++cnt
215f0 3c 31 30 30 29 29 7b 0a 20 20 20 20 20 20 20 20  <100)){.        
21600 2f 2a 20 63 6f 6c 6c 69 73 69 6f 6e 20 2d 20 74  /* collision - t
21610 72 79 20 61 6e 6f 74 68 65 72 20 72 61 6e 64 6f  ry another rando
21620 6d 20 72 6f 77 69 64 20 2a 2f 0a 20 20 20 20 20  m rowid */.     
21630 20 20 20 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f     sqlite3_rando
21640 6d 6e 65 73 73 28 73 69 7a 65 6f 66 28 76 29 2c  mness(sizeof(v),
21650 20 26 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66   &v);.        if
21660 28 20 63 6e 74 3c 35 20 29 7b 0a 20 20 20 20 20  ( cnt<5 ){.     
21670 20 20 20 20 20 2f 2a 20 74 72 79 20 22 73 6d 61       /* try "sma
21680 6c 6c 22 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64  ll" random rowid
21690 73 20 66 6f 72 20 74 68 65 20 69 6e 69 74 69 61  s for the initia
216a0 6c 20 61 74 74 65 6d 70 74 73 20 2a 2f 0a 20 20  l attempts */.  
216b0 20 20 20 20 20 20 20 20 76 20 26 3d 20 30 78 66          v &= 0xf
216c0 66 66 66 66 66 3b 0a 20 20 20 20 20 20 20 20 7d  fffff;.        }
216d0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
216e0 76 20 26 3d 20 28 4d 41 58 5f 52 4f 57 49 44 3e  v &= (MAX_ROWID>
216f0 3e 31 29 3b 20 2f 2a 20 65 6e 73 75 72 65 20 64  >1); /* ensure d
21700 6f 65 73 6e 27 74 20 67 6f 20 6e 65 67 61 74 69  oesn't go negati
21710 76 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a  ve */.        }.
21720 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 2f 2a 20          v++; /* 
21730 65 6e 73 75 72 65 20 6e 6f 6e 2d 7a 65 72 6f 20  ensure non-zero 
21740 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  */.      }.     
21750 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
21760 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
21770 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
21780 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
21790 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35 33 30 30  MP: R-38219-5300
217a0 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  2 */.        got
217b0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
217c0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
217d0 20 20 20 20 61 73 73 65 72 74 28 20 76 3e 30 20      assert( v>0 
217e0 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38  );  /* EV: R-408
217f0 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20 20 20 20  12-03570 */.    
21800 7d 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49  }.    pC->rowidI
21810 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20  sValid = 0;.    
21820 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
21830 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e  to = 0;.    pC->
21840 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
21850 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
21860 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a   pOut->u.i = v;.
21870 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
21880 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 20 50 31  pcode: Insert P1
21890 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
218a0 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79  Synopsis: intkey
218b0 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72 5b 50 32  =r[P3] data=r[P2
218c0 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 6e  ].**.** Write an
218d0 20 65 6e 74 72 79 20 69 6e 74 6f 20 74 68 65 20   entry into the 
218e0 74 61 62 6c 65 20 6f 66 20 63 75 72 73 6f 72 20  table of cursor 
218f0 50 31 2e 20 20 41 20 6e 65 77 20 65 6e 74 72 79  P1.  A new entry
21900 20 69 73 0a 2a 2a 20 63 72 65 61 74 65 64 20 69   is.** created i
21910 66 20 69 74 20 64 6f 65 73 6e 27 74 20 61 6c 72  f it doesn't alr
21920 65 61 64 79 20 65 78 69 73 74 20 6f 72 20 74 68  eady exist or th
21930 65 20 64 61 74 61 20 66 6f 72 20 61 6e 20 65 78  e data for an ex
21940 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74 72 79 20  isting.** entry 
21950 69 73 20 6f 76 65 72 77 72 69 74 74 65 6e 2e 20  is overwritten. 
21960 20 54 68 65 20 64 61 74 61 20 69 73 20 74 68 65   The data is the
21970 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c 6f 62 20   value MEM_Blob 
21980 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
21990 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 32 2e  er.** number P2.
219a0 20 54 68 65 20 6b 65 79 20 69 73 20 73 74 6f 72   The key is stor
219b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
219c0 33 2e 20 54 68 65 20 6b 65 79 20 6d 75 73 74 0a  3. The key must.
219d0 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49 6e 74 2e  ** be a MEM_Int.
219e0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
219f0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
21a00 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
21a10 74 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61  then the row cha
21a20 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20  nge count is.** 
21a30 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
21a40 65 72 77 69 73 65 20 6e 6f 74 29 2e 20 20 49 66  erwise not).  If
21a50 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54   the OPFLAG_LAST
21a60 52 4f 57 49 44 20 66 6c 61 67 20 6f 66 20 50 35  ROWID flag of P5
21a70 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74 68 65 6e   is set,.** then
21a80 20 72 6f 77 69 64 20 69 73 20 73 74 6f 72 65 64   rowid is stored
21a90 20 66 6f 72 20 73 75 62 73 65 71 75 65 6e 74 20   for subsequent 
21aa0 72 65 74 75 72 6e 20 62 79 20 74 68 65 0a 2a 2a  return by the.**
21ab0 20 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e   sqlite3_last_in
21ac0 73 65 72 74 5f 72 6f 77 69 64 28 29 20 66 75 6e  sert_rowid() fun
21ad0 63 74 69 6f 6e 20 28 6f 74 68 65 72 77 69 73 65  ction (otherwise
21ae0 20 69 74 20 69 73 20 75 6e 6d 6f 64 69 66 69 65   it is unmodifie
21af0 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d)..**.** If the
21b00 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
21b10 45 53 55 4c 54 20 66 6c 61 67 20 6f 66 20 50 35  ESULT flag of P5
21b20 20 69 73 20 73 65 74 20 61 6e 64 20 69 66 20 74   is set and if t
21b30 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20  he result of.** 
21b40 74 68 65 20 6c 61 73 74 20 73 65 65 6b 20 6f 70  the last seek op
21b50 65 72 61 74 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45  eration (OP_NotE
21b60 78 69 73 74 73 29 20 77 61 73 20 61 20 73 75 63  xists) was a suc
21b70 63 65 73 73 2c 20 74 68 65 6e 20 74 68 69 73 0a  cess, then this.
21b80 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 77 69 6c  ** operation wil
21b90 6c 20 6e 6f 74 20 61 74 74 65 6d 70 74 20 74 6f  l not attempt to
21ba0 20 66 69 6e 64 20 74 68 65 20 61 70 70 72 6f 70   find the approp
21bb0 72 69 61 74 65 20 72 6f 77 20 62 65 66 6f 72 65  riate row before
21bc0 20 64 6f 69 6e 67 0a 2a 2a 20 74 68 65 20 69 6e   doing.** the in
21bd0 73 65 72 74 20 62 75 74 20 77 69 6c 6c 20 69 6e  sert but will in
21be0 73 74 65 61 64 20 6f 76 65 72 77 72 69 74 65 20  stead overwrite 
21bf0 74 68 65 20 72 6f 77 20 74 68 61 74 20 74 68 65  the row that the
21c00 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 75   cursor is.** cu
21c10 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
21c20 20 74 6f 2e 20 20 50 72 65 73 75 6d 61 62 6c 79   to.  Presumably
21c30 2c 20 74 68 65 20 70 72 69 6f 72 20 4f 50 5f 4e  , the prior OP_N
21c40 6f 74 45 78 69 73 74 73 20 6f 70 63 6f 64 65 0a  otExists opcode.
21c50 2a 2a 20 68 61 73 20 61 6c 72 65 61 64 79 20 70  ** has already p
21c60 6f 73 69 74 69 6f 6e 65 64 20 74 68 65 20 63 75  ositioned the cu
21c70 72 73 6f 72 20 63 6f 72 72 65 63 74 6c 79 2e 20  rsor correctly. 
21c80 20 54 68 69 73 20 69 73 20 61 6e 20 6f 70 74 69   This is an opti
21c90 6d 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74 68 61 74  mization.** that
21ca0 20 62 6f 6f 73 74 73 20 70 65 72 66 6f 72 6d 61   boosts performa
21cb0 6e 63 65 20 62 79 20 61 76 6f 69 64 69 6e 67 20  nce by avoiding 
21cc0 72 65 64 75 6e 64 61 6e 74 20 73 65 65 6b 73 2e  redundant seeks.
21cd0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
21ce0 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66 6c  FLAG_ISUPDATE fl
21cf0 61 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  ag is set, then 
21d00 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 70  this opcode is p
21d10 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55 50 44  art of an.** UPD
21d20 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20  ATE operation.  
21d30 4f 74 68 65 72 77 69 73 65 20 28 69 66 20 74 68  Otherwise (if th
21d40 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 29  e flag is clear)
21d50 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64   then this opcod
21d60 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f 66 20  e.** is part of 
21d70 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72 61 74  an INSERT operat
21d80 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66 65 72  ion.  The differ
21d90 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69 6d 70  ence is only imp
21da0 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74 68 65  ortant to.** the
21db0 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a   update hook..**
21dc0 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 50 34  .** Parameter P4
21dd0 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20 61 20   may point to a 
21de0 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
21df0 67 20 74 68 65 20 74 61 62 6c 65 2d 6e 61 6d 65  g the table-name
21e00 2c 20 6f 72 0a 2a 2a 20 6d 61 79 20 62 65 20 4e  , or.** may be N
21e10 55 4c 4c 2e 20 49 66 20 69 74 20 69 73 20 6e 6f  ULL. If it is no
21e20 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 65  t NULL, then the
21e30 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a   update-hook .**
21e40 20 28 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74   (sqlite3.xUpdat
21e50 65 43 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e  eCallback) is in
21e60 76 6f 6b 65 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  voked following 
21e70 61 20 73 75 63 63 65 73 73 66 75 6c 20 69 6e 73  a successful ins
21e80 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e  ert..**.** (WARN
21e90 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50 31 20  ING/TODO: If P1 
21ea0 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75 72 73  is a pseudo-curs
21eb0 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64 79 6e  or and P2 is dyn
21ec0 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f  amically.** allo
21ed0 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77 6e 65  cated, then owne
21ee0 72 73 68 69 70 20 6f 66 20 50 32 20 69 73 20 74  rship of P2 is t
21ef0 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20 74 68  ransferred to th
21f00 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 0a  e pseudo-cursor.
21f10 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65 72 20  ** and register 
21f20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68 65 6d  P2 becomes ephem
21f30 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20 63 75  eral.  If the cu
21f40 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65 64 2c  rsor is changed,
21f50 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
21f60 20 72 65 67 69 73 74 65 72 20 50 32 20 77 69 6c   register P2 wil
21f70 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e 20 20  l then change.  
21f80 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73 20 64  Make sure this d
21f90 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75 73 65  oes not.** cause
21fa0 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e 29 0a   any problems.).
21fb0 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
21fc0 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
21fd0 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20 54 68  s on tables.  Th
21fe0 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69 6e 73  e equivalent ins
21ff0 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20  truction.** for 
22000 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f 49 64  indices is OP_Id
22010 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f  xInsert..*/./* O
22020 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49 6e 74  pcode: InsertInt
22030 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
22040 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e  ** Synopsis:  in
22050 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b 50  tkey=P3 data=r[P
22060 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  2].**.** This wo
22070 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65  rks exactly like
22080 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65 70   OP_Insert excep
22090 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 69  t that the key i
220a0 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72  s the.** integer
220b0 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20 74   value P3, not t
220c0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
220d0 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20 69  integer stored i
220e0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
220f0 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72 74  /.case OP_Insert
22100 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  : .case OP_Inser
22110 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tInt: {.  Mem *p
22120 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20 4d  Data;       /* M
22130 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20  EM cell holding 
22140 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65 63  data for the rec
22150 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
22160 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65  ed */.  Mem *pKe
22170 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d  y;        /* MEM
22180 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b 65   cell holding ke
22190 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72  y  for the recor
221a0 64 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  d */.  i64 iKey;
221b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
221c0 69 6e 74 65 67 65 72 20 52 4f 57 49 44 20 6f 72  integer ROWID or
221d0 20 6b 65 79 20 66 6f 72 20 74 68 65 20 72 65 63   key for the rec
221e0 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74  ord to be insert
221f0 65 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  ed */.  VdbeCurs
22200 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
22210 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
22220 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
22230 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
22240 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20  nt nZero;       
22250 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65   /* Number of ze
22260 72 6f 2d 62 79 74 65 73 20 74 6f 20 61 70 70 65  ro-bytes to appe
22270 6e 64 20 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b  nd */.  int seek
22280 52 65 73 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73  Result;   /* Res
22290 75 6c 74 20 6f 66 20 70 72 69 6f 72 20 73 65 65  ult of prior see
222a0 6b 20 6f 72 20 30 20 69 66 20 6e 6f 20 55 53 45  k or 0 if no USE
222b0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
222c0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
222d0 2a 7a 44 62 3b 20 20 2f 2a 20 64 61 74 61 62 61  *zDb;  /* databa
222e0 73 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62  se name - used b
222f0 79 20 74 68 65 20 75 70 64 61 74 65 20 68 6f 6f  y the update hoo
22300 6b 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  k */.  const cha
22310 72 20 2a 7a 54 62 6c 3b 20 2f 2a 20 54 61 62 6c  r *zTbl; /* Tabl
22320 65 20 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79  e name - used by
22330 20 74 68 65 20 6f 70 64 61 74 65 20 68 6f 6f 6b   the opdate hook
22340 20 2a 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20   */.  int op;   
22350 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64          /* Opcod
22360 65 20 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f  e for update hoo
22370 6b 3a 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45  k: SQLITE_UPDATE
22380 20 6f 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52   or SQLITE_INSER
22390 54 20 2a 2f 0a 0a 20 20 70 44 61 74 61 20 3d 20  T */..  pData = 
223a0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
223b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
223c0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
223d0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
223e0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
223f0 69 64 28 70 44 61 74 61 29 20 29 3b 0a 20 20 70  id(pData) );.  p
22400 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
22410 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
22420 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
22430 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21  rt( pC->pCursor!
22440 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22450 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
22460 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
22470 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
22480 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
22490 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74  CE(pOp->p2, pDat
224a0 61 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e  a);..  if( pOp->
224b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
224c0 74 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20  t ){.    pKey = 
224d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
224e0 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
224f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
22500 74 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  t );.    assert(
22510 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79   memIsValid(pKey
22520 29 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45  ) );.    REGISTE
22530 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
22540 20 70 4b 65 79 29 3b 0a 20 20 20 20 69 4b 65 79   pKey);.    iKey
22550 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20   = pKey->u.i;.  
22560 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
22570 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
22580 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b 0a  OP_InsertInt );.
22590 20 20 20 20 69 4b 65 79 20 3d 20 70 4f 70 2d 3e      iKey = pOp->
225a0 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70  p3;.  }..  if( p
225b0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
225c0 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
225d0 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70 4f  ange++;.  if( pO
225e0 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 4c  p->p5 & OPFLAG_L
225f0 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e 6c  ASTROWID ) db->l
22600 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
22610 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20 69  owid = iKey;.  i
22620 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  f( pData->flags 
22630 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
22640 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a    pData->z = 0;.
22650 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20 30      pData->n = 0
22660 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
22670 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66 6c  ssert( pData->fl
22680 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c  ags & (MEM_Blob|
22690 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d 0a  MEM_Str) );.  }.
226a0 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 28    seekResult = (
226b0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
226c0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29  G_USESEEKRESULT)
226d0 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c   ? pC->seekResul
226e0 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70 44  t : 0);.  if( pD
226f0 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ata->flags & MEM
22700 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a 65  _Zero ){.    nZe
22710 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a  ro = pData->u.nZ
22720 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ero;.  }else{.  
22730 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d    nZero = 0;.  }
22740 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
22750 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e 70  treeInsert(pC->p
22760 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79 2c  Cursor, 0, iKey,
22770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
22780 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74 61             pData
22790 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20 6e  ->z, pData->n, n
227a0 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20 20  Zero,.          
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227c0 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41  (pOp->p5 & OPFLA
227d0 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73 65  G_APPEND)!=0, se
227e0 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20 20  ekResult.  );.  
227f0 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64  pC->rowidIsValid
22800 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66 65   = 0;.  pC->defe
22810 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
22820 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
22830 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
22840 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  ..  /* Invoke th
22850 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66  e update-hook if
22860 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20   required. */.  
22870 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
22880 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74 65  K && db->xUpdate
22890 43 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d  Callback && pOp-
228a0 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 7a 44 62  >p4.z ){.    zDb
228b0 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
228c0 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 7a  Db].zName;.    z
228d0 54 62 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  Tbl = pOp->p4.z;
228e0 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f 70 2d  .    op = ((pOp-
228f0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53 55  >p5 & OPFLAG_ISU
22900 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45 5f  PDATE) ? SQLITE_
22910 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45 5f  UPDATE : SQLITE_
22920 49 4e 53 45 52 54 29 3b 0a 20 20 20 20 61 73 73  INSERT);.    ass
22930 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
22940 20 29 3b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64   );.    db->xUpd
22950 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e  ateCallback(db->
22960 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20  pUpdateArg, op, 
22970 7a 44 62 2c 20 7a 54 62 6c 2c 20 69 4b 65 79 29  zDb, zTbl, iKey)
22980 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  ;.    assert( pC
22990 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d 0a  ->iDb>=0 );.  }.
229a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
229b0 70 63 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31  pcode: Delete P1
229c0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a   P2 * P4 *.**.**
229d0 20 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f   Delete the reco
229e0 72 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20  rd at which the 
229f0 50 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72  P1 cursor is cur
22a00 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e  rently pointing.
22a10 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f  .**.** The curso
22a20 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70  r will be left p
22a30 6f 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65  ointing at eithe
22a40 72 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68  r the next or th
22a50 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65  e previous.** re
22a60 63 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c  cord in the tabl
22a70 65 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74  e. If it is left
22a80 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65   pointing at the
22a90 20 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68   next record, th
22aa0 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e  en.** the next N
22ab0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
22ac0 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e  will be a no-op.
22ad0 20 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b    Hence it is OK
22ae0 20 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20   to delete.** a 
22af0 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68  record from with
22b00 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  in a Next loop..
22b10 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22b20 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
22b30 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
22b40 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
22b50 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
22b60 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
22b70 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
22b80 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
22b90 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
22ba0 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
22bb0 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
22bc0 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
22bd0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
22be0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
22bf0 74 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  t is the name of
22c00 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20   the table that 
22c10 50 31 20 69 73 0a 2a 2a 20 70 6f 69 6e 74 69 6e  P1 is.** pointin
22c20 67 20 74 6f 2e 20 20 54 68 65 20 75 70 64 61 74  g to.  The updat
22c30 65 20 68 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69  e hook will be i
22c40 6e 76 6f 6b 65 64 2c 20 69 66 20 69 74 20 65 78  nvoked, if it ex
22c50 69 73 74 73 2e 0a 2a 2a 20 49 66 20 50 34 20 69  ists..** If P4 i
22c60 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20  s not NULL then 
22c70 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  the P1 cursor mu
22c80 73 74 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  st have been pos
22c90 69 74 69 6f 6e 65 64 0a 2a 2a 20 75 73 69 6e 67  itioned.** using
22ca0 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
22cb0 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
22cc0 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63  his opcode..*/.c
22cd0 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
22ce0 0a 20 20 69 36 34 20 69 4b 65 79 3b 0a 20 20 56  .  i64 iKey;.  V
22cf0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
22d00 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
22d10 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
22d20 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
22d30 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
22d40 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
22d50 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
22d60 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
22d70 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e 6c 79 20  !=0 );  /* Only 
22d80 76 61 6c 69 64 20 66 6f 72 20 72 65 61 6c 20 74  valid for real t
22d90 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65 75 64 6f  ables, no pseudo
22da0 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69 4b 65 79  tables */.  iKey
22db0 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64   = pC->lastRowid
22dc0 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 75  ;      /* Only u
22dd0 73 65 64 20 66 6f 72 20 74 68 65 20 75 70 64 61  sed for the upda
22de0 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20 20 2f 2a  te hook */..  /*
22df0 20 54 68 65 20 4f 50 5f 44 65 6c 65 74 65 20 6f   The OP_Delete o
22e00 70 63 6f 64 65 20 61 6c 77 61 79 73 20 66 6f 6c  pcode always fol
22e10 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f 74 45 78  lows an OP_NotEx
22e20 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61 73 74 20  ists or OP_Last 
22e30 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f 6c 75 6d  or.  ** OP_Colum
22e40 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65 20 74 61  n on the same ta
22e50 62 6c 65 20 77 69 74 68 6f 75 74 20 61 6e 79 20  ble without any 
22e60 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f 70 65 72  intervening oper
22e70 61 74 69 6f 6e 73 20 74 68 61 74 0a 20 20 2a 2a  ations that.  **
22e80 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f 72 20 69   might move or i
22e90 6e 76 61 6c 69 64 61 74 65 20 74 68 65 20 63 75  nvalidate the cu
22ea0 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 63 75 72  rsor.  Hence cur
22eb0 73 6f 72 20 70 43 20 69 73 20 61 6c 77 61 79 73  sor pC is always
22ec0 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a 2a 20 74   pointing.  ** t
22ed0 6f 20 74 68 65 20 72 6f 77 20 74 6f 20 62 65 20  o the row to be 
22ee0 64 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20  deleted and the 
22ef0 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
22f00 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65 72 61 74  rMoveto() operat
22f10 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f 77 20 69  ion.  ** below i
22f20 73 20 61 6c 77 61 79 73 20 61 20 6e 6f 2d 6f 70  s always a no-op
22f30 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66 61 69 6c   and cannot fail
22f40 2e 20 20 57 65 20 77 69 6c 6c 20 72 75 6e 20 69  .  We will run i
22f50 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f 75 67 68  t anyhow, though
22f60 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61 72 64 20  ,.  ** to guard 
22f70 61 67 61 69 6e 73 74 20 66 75 74 75 72 65 20 63  against future c
22f80 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 63 6f  hanges to the co
22f90 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 20 20  de generator..  
22fa0 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43  **/.  assert( pC
22fb0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
22fc0 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  ==0 );.  rc = sq
22fd0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d  lite3VdbeCursorM
22fe0 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28  oveto(pC);.  if(
22ff0 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54   NEVER(rc!=SQLIT
23000 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f  E_OK) ) goto abo
23010 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
23020 0a 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ..  rc = sqlite3
23030 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 2d 3e  BtreeDelete(pC->
23040 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 2d 3e  pCursor);.  pC->
23050 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
23060 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a  CHE_STALE;..  /*
23070 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61   Invoke the upda
23080 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69  te-hook if requi
23090 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63  red. */.  if( rc
230a0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 64  ==SQLITE_OK && d
230b0 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62 61  b->xUpdateCallba
230c0 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 7a 20  ck && pOp->p4.z 
230d0 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  && pC->isTable )
230e0 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
230f0 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
23100 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45  pdateArg, SQLITE
23110 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 20 20 20  _DELETE,.       
23120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23130 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
23140 5d 2e 7a 4e 61 6d 65 2c 20 70 4f 70 2d 3e 70 34  ].zName, pOp->p4
23150 2e 7a 2c 20 69 4b 65 79 29 3b 0a 20 20 20 20 61  .z, iKey);.    a
23160 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d  ssert( pC->iDb>=
23170 30 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  0 );.  }.  if( p
23180 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
23190 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43 68  NCHANGE ) p->nCh
231a0 61 6e 67 65 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b  ange++;.  break;
231b0 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  .}./* Opcode: Re
231c0 73 65 74 43 6f 75 6e 74 20 2a 20 2a 20 2a 20 2a  setCount * * * *
231d0 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c   *.**.** The val
231e0 75 65 20 6f 66 20 74 68 65 20 63 68 61 6e 67 65  ue of the change
231f0 20 63 6f 75 6e 74 65 72 20 69 73 20 63 6f 70 69   counter is copi
23200 65 64 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  ed to the databa
23210 73 65 20 68 61 6e 64 6c 65 0a 2a 2a 20 63 68 61  se handle.** cha
23220 6e 67 65 20 63 6f 75 6e 74 65 72 20 28 72 65 74  nge counter (ret
23230 75 72 6e 65 64 20 62 79 20 73 75 62 73 65 71 75  urned by subsequ
23240 65 6e 74 20 63 61 6c 6c 73 20 74 6f 20 73 71 6c  ent calls to sql
23250 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 29 2e  ite3_changes()).
23260 0a 2a 2a 20 54 68 65 6e 20 74 68 65 20 56 4d 73  .** Then the VMs
23270 20 69 6e 74 65 72 6e 61 6c 20 63 68 61 6e 67 65   internal change
23280 20 63 6f 75 6e 74 65 72 20 72 65 73 65 74 73 20   counter resets 
23290 74 6f 20 30 2e 0a 2a 2a 20 54 68 69 73 20 69 73  to 0..** This is
232a0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
232b0 20 70 72 6f 67 72 61 6d 73 2e 0a 2a 2f 0a 63 61   programs..*/.ca
232c0 73 65 20 4f 50 5f 52 65 73 65 74 43 6f 75 6e 74  se OP_ResetCount
232d0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  : {.  sqlite3Vdb
232e0 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c 20  eSetChanges(db, 
232f0 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20 70  p->nChange);.  p
23300 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20  ->nChange = 0;. 
23310 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
23320 63 6f 64 65 3a 20 53 6f 72 74 65 72 43 6f 6d 70  code: SorterComp
23330 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34 0a  are P1 P2 P3 P4.
23340 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66  ** Synopsis:  if
23350 20 6b 65 79 28 50 31 29 21 3d 74 72 69 6d 28 72   key(P1)!=trim(r
23360 5b 50 33 5d 2c 50 34 29 20 67 6f 74 6f 20 50 32  [P3],P4) goto P2
23370 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 73  .**.** P1 is a s
23380 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 54 68  orter cursor. Th
23390 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 63  is instruction c
233a0 6f 6d 70 61 72 65 73 20 61 20 70 72 65 66 69 78  ompares a prefix
233b0 20 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72   of the.** recor
233c0 64 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74  d blob in regist
233d0 65 72 20 50 33 20 61 67 61 69 6e 73 74 20 61 20  er P3 against a 
233e0 70 72 65 66 69 78 20 6f 66 20 74 68 65 20 65 6e  prefix of the en
233f0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 74 68 65  try that .** the
23400 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20 63   sorter cursor c
23410 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 73 20  urrently points 
23420 74 6f 2e 20 20 4f 6e 6c 79 20 74 68 65 20 66 69  to.  Only the fi
23430 72 73 74 20 50 34 20 66 69 65 6c 64 73 0a 2a 2a  rst P4 fields.**
23440 20 6f 66 20 72 5b 50 33 5d 20 61 6e 64 20 74 68   of r[P3] and th
23450 65 20 73 6f 72 74 65 72 20 72 65 63 6f 72 64 20  e sorter record 
23460 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 0a 2a 2a  are compared..**
23470 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 33  .** If either P3
23480 20 6f 72 20 74 68 65 20 73 6f 72 74 65 72 20 63   or the sorter c
23490 6f 6e 74 61 69 6e 73 20 61 20 4e 55 4c 4c 20 69  ontains a NULL i
234a0 6e 20 6f 6e 65 20 6f 66 20 74 68 65 69 72 20 73  n one of their s
234b0 69 67 6e 69 66 69 63 61 6e 74 0a 2a 2a 20 66 69  ignificant.** fi
234c0 65 6c 64 73 20 28 6e 6f 74 20 63 6f 75 6e 74 69  elds (not counti
234d0 6e 67 20 74 68 65 20 50 34 20 66 69 65 6c 64 73  ng the P4 fields
234e0 20 61 74 20 74 68 65 20 65 6e 64 20 77 68 69 63   at the end whic
234f0 68 20 61 72 65 20 69 67 6e 6f 72 65 64 29 20 74  h are ignored) t
23500 68 65 6e 0a 2a 2a 20 74 68 65 20 63 6f 6d 70 61  hen.** the compa
23510 72 69 73 6f 6e 20 69 73 20 61 73 73 75 6d 65 64  rison is assumed
23520 20 74 6f 20 62 65 20 65 71 75 61 6c 2e 0a 2a 2a   to be equal..**
23530 0a 2a 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68  .** Fall through
23540 20 74 6f 20 6e 65 78 74 20 69 6e 73 74 72 75 63   to next instruc
23550 74 69 6f 6e 20 69 66 20 74 68 65 20 74 77 6f 20  tion if the two 
23560 72 65 63 6f 72 64 73 20 63 6f 6d 70 61 72 65 20  records compare 
23570 65 71 75 61 6c 20 74 6f 0a 2a 2a 20 65 61 63 68  equal to.** each
23580 20 6f 74 68 65 72 2e 20 20 4a 75 6d 70 20 74 6f   other.  Jump to
23590 20 50 32 20 69 66 20 74 68 65 79 20 61 72 65 20   P2 if they are 
235a0 64 69 66 66 65 72 65 6e 74 2e 0a 2a 2f 0a 63 61  different..*/.ca
235b0 73 65 20 4f 50 5f 53 6f 72 74 65 72 43 6f 6d 70  se OP_SorterComp
235c0 61 72 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  are: {.  VdbeCur
235d0 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
235e0 65 73 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 43 6f  es;.  int nKeyCo
235f0 6c 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  l;..  pC = p->ap
23600 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
23610 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
23620 28 70 43 29 20 29 3b 0a 20 20 61 73 73 65 72 74  (pC) );.  assert
23630 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
23640 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 49 6e  4_INT32 );.  pIn
23650 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
23660 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f 6c 20 3d 20  3];.  nKeyCol = 
23670 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 72 65 73  pOp->p4.i;.  res
23680 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
23690 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 43 6f  ite3VdbeSorterCo
236a0 6d 70 61 72 65 28 70 43 2c 20 70 49 6e 33 2c 20  mpare(pC, pIn3, 
236b0 6e 4b 65 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a  nKeyCol, &res);.
236c0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
236d0 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69  n(res!=0,2);.  i
236e0 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70 63  f( res ){.    pc
236f0 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20   = pOp->p2-1;.  
23700 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  }.  break;.};../
23710 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
23720 44 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a  Data P1 P2 * * *
23730 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
23740 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57  P2]=data.**.** W
23750 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74  rite into regist
23760 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65 6e  er P2 the curren
23770 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66 6f  t sorter data fo
23780 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72 20  r sorter cursor 
23790 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P1..*/.case OP_S
237a0 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20 56  orterData: {.  V
237b0 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
237c0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
237d0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20  Op->p2];.  pC = 
237e0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
237f0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
23800 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
23810 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
23820 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c 20  orterRowkey(pC, 
23830 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74 28  pOut);.  assert(
23840 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
23850 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26  | (pOut->flags &
23860 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20   MEM_Blob) );.  
23870 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
23880 6f 64 65 3a 20 52 6f 77 44 61 74 61 20 50 31 20  ode: RowData P1 
23890 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
238a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61  psis: r[P2]=data
238b0 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
238c0 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68  o register P2 th
238d0 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64  e complete row d
238e0 61 74 61 20 66 6f 72 20 63 75 72 73 6f 72 20 50  ata for cursor P
238f0 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e  1..** There is n
23900 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e  o interpretation
23910 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a   of the data.  .
23920 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63 6f  ** It is just co
23930 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32  pied onto the P2
23940 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74 6c   register exactl
23950 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66  y as .** it is f
23960 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61  ound in the data
23970 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  base file..**.**
23980 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73 6f   If the P1 curso
23990 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69  r must be pointi
239a0 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f  ng to a valid ro
239b0 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f  w (not a NULL ro
239c0 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20  w).** of a real 
239d0 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
239e0 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a  udo-table..*/./*
239f0 20 4f 70 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20   Opcode: RowKey 
23a00 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
23a10 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b  ynopsis: r[P2]=k
23a20 65 79 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69  ey.**.** Write i
23a30 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20  nto register P2 
23a40 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77  the complete row
23a50 20 6b 65 79 20 66 6f 72 20 63 75 72 73 6f 72 20   key for cursor 
23a60 50 31 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  P1..** There is 
23a70 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
23a80 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
23a90 0a 2a 2a 20 54 68 65 20 6b 65 79 20 69 73 20 63  .** The key is c
23aa0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
23ab0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
23ac0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
23ad0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
23ae0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
23af0 2a 20 49 66 20 74 68 65 20 50 31 20 63 75 72 73  * If the P1 curs
23b00 6f 72 20 6d 75 73 74 20 62 65 20 70 6f 69 6e 74  or must be point
23b10 69 6e 67 20 74 6f 20 61 20 76 61 6c 69 64 20 72  ing to a valid r
23b20 6f 77 20 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72  ow (not a NULL r
23b30 6f 77 29 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c  ow).** of a real
23b40 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73   table, not a ps
23b50 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63  eudo-table..*/.c
23b60 61 73 65 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63  ase OP_RowKey:.c
23b70 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20  ase OP_RowData: 
23b80 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
23b90 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
23ba0 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a  pCrsr;.  u32 n;.
23bb0 20 20 69 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f    i64 n64;..  pO
23bc0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
23bd0 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p2];.  memAboutT
23be0 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
23bf0 3b 0a 0a 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61  ;..  /* Note tha
23c00 74 20 52 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77  t RowKey and Row
23c10 44 61 74 61 20 61 72 65 20 72 65 61 6c 6c 79 20  Data are really 
23c20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
23c30 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a   instruction */.
23c40 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23c50 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
23c60 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
23c70 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
23c80 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
23c90 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
23ca0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23cb0 43 2d 3e 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f  C->isTable || pO
23cc0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f  p->opcode!=OP_Ro
23cd0 77 44 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72  wData );.  asser
23ce0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  t( pC->isTable==
23cf0 30 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  0 || pOp->opcode
23d00 3d 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  ==OP_RowData );.
23d10 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23d20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23d30 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20  >nullRow==0 );. 
23d40 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65   assert( pC->pse
23d50 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29  udoTableReg==0 )
23d60 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
23d70 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
23d80 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
23d90 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28 20 73  sor;.  assert( s
23da0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
23db0 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29 20  rIsValid(pCrsr) 
23dc0 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f  );..  /* The OP_
23dd0 52 6f 77 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f  RowKey and OP_Ro
23de0 77 44 61 74 61 20 6f 70 63 6f 64 65 73 20 61 6c  wData opcodes al
23df0 77 61 79 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e  ways follow OP_N
23e00 6f 74 45 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a  otExists or.  **
23e10 20 4f 50 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65   OP_Rewind/Op_Ne
23e20 78 74 20 77 69 74 68 20 6e 6f 20 69 6e 74 65 72  xt with no inter
23e30 76 65 6e 69 6e 67 20 69 6e 73 74 72 75 63 74 69  vening instructi
23e40 6f 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 69  ons that might i
23e50 6e 76 61 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74  nvalidate.  ** t
23e60 68 65 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63  he cursor.  Henc
23e70 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
23e80 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23e90 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c 20 69  rMoveto() call i
23ea0 73 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20  s always.  ** a 
23eb0 6e 6f 2d 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65  no-op and can ne
23ec0 76 65 72 20 66 61 69 6c 2e 20 20 42 75 74 20 77  ver fail.  But w
23ed0 65 20 6c 65 61 76 65 20 69 74 20 69 6e 20 70 6c  e leave it in pl
23ee0 61 63 65 20 61 73 20 61 20 73 61 66 65 74 79 2e  ace as a safety.
23ef0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
23f00 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
23f10 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20  to==0 );.  rc = 
23f20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
23f30 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20 69  rMoveto(pC);.  i
23f40 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51 4c  f( NEVER(rc!=SQL
23f50 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61  ITE_OK) ) goto a
23f60 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23f70 72 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  r;..  if( pC->is
23f80 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20  Table==0 ){.    
23f90 61 73 73 65 72 74 28 20 21 70 43 2d 3e 69 73 54  assert( !pC->isT
23fa0 61 62 6c 65 20 29 3b 0a 20 20 20 20 56 56 41 5f  able );.    VVA_
23fb0 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
23fc0 65 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70  e3BtreeKeySize(p
23fd0 43 72 73 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20  Crsr, &n64);.   
23fe0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
23ff0 49 54 45 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20  ITE_OK );    /* 
24000 54 72 75 65 20 62 65 63 61 75 73 65 20 6f 66 20  True because of 
24010 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63  CursorMoveto() c
24020 61 6c 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  all above */.   
24030 20 69 66 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69   if( n64>db->aLi
24040 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
24050 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20  _LENGTH] ){.    
24060 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
24070 20 20 20 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75      }.    n = (u
24080 33 32 29 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b  32)n64;.  }else{
24090 0a 20 20 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63  .    VVA_ONLY(rc
240a0 20 3d 29 20 73 71 6c 69 74 65 33 42 74 72 65 65   =) sqlite3Btree
240b0 44 61 74 61 53 69 7a 65 28 70 43 72 73 72 2c 20  DataSize(pCrsr, 
240c0 26 6e 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  &n);.    assert(
240d0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
240e0 3b 20 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65  ;    /* DataSize
240f0 28 29 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a  () cannot fail *
24100 2f 0a 20 20 20 20 69 66 28 20 6e 3e 28 75 33 32  /.    if( n>(u32
24110 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  )db->aLimit[SQLI
24120 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
24130 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 74   ){.      goto t
24140 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20  oo_big;.    }.  
24150 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  }.  if( sqlite3V
24160 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c  dbeMemGrow(pOut,
24170 20 6e 2c 20 30 29 20 29 7b 0a 20 20 20 20 67 6f   n, 0) ){.    go
24180 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
24190 20 70 4f 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20   pOut->n = n;.  
241a0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
241b0 4f 75 74 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a  Out, MEM_Blob);.
241c0 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
241d0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d  e==0 ){.    rc =
241e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
241f0 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f  (pCrsr, 0, n, pO
24200 75 74 2d 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b  ut->z);.  }else{
24210 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
24220 33 42 74 72 65 65 44 61 74 61 28 70 43 72 73 72  3BtreeData(pCrsr
24230 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29  , 0, n, pOut->z)
24240 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
24250 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
24260 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
24270 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 61   blob is ever ca
24280 73 74 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  st to text */.  
24290 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
242a0 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 52 45 47  IZE(pOut);.  REG
242b0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
242c0 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72  >p2, pOut);.  br
242d0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
242e0 65 3a 20 52 6f 77 69 64 20 50 31 20 50 32 20 2a  e: Rowid P1 P2 *
242f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
24300 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
24310 0a 2a 2a 20 53 74 6f 72 65 20 69 6e 20 72 65 67  .** Store in reg
24320 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
24330 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
24340 20 6b 65 79 20 6f 66 20 74 68 65 20 74 61 62 6c   key of the tabl
24350 65 20 65 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20  e entry that.** 
24360 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20  P1 is currently 
24370 70 6f 69 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20  point to..**.** 
24380 50 31 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  P1 can be either
24390 20 61 6e 20 6f 72 64 69 6e 61 72 79 20 74 61 62   an ordinary tab
243a0 6c 65 20 6f 72 20 61 20 76 69 72 74 75 61 6c 20  le or a virtual 
243b0 74 61 62 6c 65 2e 20 20 54 68 65 72 65 20 75 73  table.  There us
243c0 65 64 20 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65  ed to.** be a se
243d0 70 61 72 61 74 65 20 4f 50 5f 56 52 6f 77 69 64  parate OP_VRowid
243e0 20 6f 70 63 6f 64 65 20 66 6f 72 20 75 73 65 20   opcode for use 
243f0 77 69 74 68 20 76 69 72 74 75 61 6c 20 74 61 62  with virtual tab
24400 6c 65 73 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a  les, but this.**
24410 20 6f 6e 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20   one opcode now 
24420 77 6f 72 6b 73 20 66 6f 72 20 62 6f 74 68 20 74  works for both t
24430 61 62 6c 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63  able types..*/.c
24440 61 73 65 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20  ase OP_Rowid: { 
24450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24460 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
24470 73 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  se */.  VdbeCurs
24480 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b  or *pC;.  i64 v;
24490 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
244a0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
244b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
244c0 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65  pModule;..  asse
244d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
244e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
244f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
24500 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
24510 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
24520 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
24530 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
24540 67 3d 3d 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c  g==0 || pC->null
24550 52 6f 77 20 29 3b 0a 20 20 69 66 28 20 70 43 2d  Row );.  if( pC-
24560 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
24570 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pOut->flags = ME
24580 4d 5f 4e 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61  M_Null;.    brea
24590 6b 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  k;.  }else if( p
245a0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
245b0 6f 20 29 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d  o ){.    v = pC-
245c0 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3b 0a 23  >movetoTarget;.#
245d0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
245e0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
245f0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
24600 70 56 74 61 62 43 75 72 73 6f 72 20 29 7b 0a 20  pVtabCursor ){. 
24610 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e 70     pVtab = pC->p
24620 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74 61  VtabCursor->pVta
24630 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d  b;.    pModule =
24640 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b   pVtab->pModule;
24650 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f  .    assert( pMo
24660 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a  dule->xRowid );.
24670 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65      rc = pModule
24680 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 70 56 74  ->xRowid(pC->pVt
24690 61 62 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  abCursor, &v);. 
246a0 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
246b0 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
246c0 74 61 62 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  tab);.#endif /* 
246d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
246e0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65  UALTABLE */.  }e
246f0 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
24700 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20   pC->pCursor!=0 
24710 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
24720 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
24730 65 74 6f 28 70 43 29 3b 0a 20 20 20 20 69 66 28  eto(pC);.    if(
24740 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
24750 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
24760 20 20 20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64     if( pC->rowid
24770 49 73 56 61 6c 69 64 20 29 7b 0a 20 20 20 20 20  IsValid ){.     
24780 20 76 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77   v = pC->lastRow
24790 69 64 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  id;.    }else{. 
247a0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
247b0 33 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43  3BtreeKeySize(pC
247c0 2d 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a  ->pCursor, &v);.
247d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72 63        assert( rc
247e0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
247f0 2f 2a 20 41 6c 77 61 79 73 20 73 6f 20 62 65 63  /* Always so bec
24800 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
24810 76 65 74 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a  veto() above */.
24820 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74      }.  }.  pOut
24830 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65  ->u.i = v;.  bre
24840 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
24850 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a  : NullRow P1 * *
24860 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20   * *.**.** Move 
24870 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74 6f  the cursor P1 to
24880 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e   a null row.  An
24890 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72  y OP_Column oper
248a0 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f  ations.** that o
248b0 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20 63  ccur while the c
248c0 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65 20  ursor is on the 
248d0 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c  null row will al
248e0 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61 20  ways.** write a 
248f0 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  NULL..*/.case OP
24900 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64  _NullRow: {.  Vd
24910 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20  beCursor *pC;.. 
24920 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
24930 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
24940 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
24950 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
24960 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
24970 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e   pC!=0 );.  pC->
24980 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
24990 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20  C->rowidIsValid 
249a0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
249b0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
249c0 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
249d0 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
249e0 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
249f0 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
24a00 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
24a10 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24a20 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
24a30 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
24a40 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
24a50 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
24a60 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
24a70 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
24a80 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
24a90 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
24aa0 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
24ab0 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
24ac0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
24ad0 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
24ae0 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
24af0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
24b00 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
24b10 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
24b20 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
24b30 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
24b40 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
24b50 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
24b60 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
24b70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
24b80 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
24b90 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
24ba0 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
24bb0 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
24bc0 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
24bd0 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
24be0 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
24bf0 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
24c00 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
24c10 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
24c20 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
24c30 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
24c40 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
24c50 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
24c60 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
24c70 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24c80 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24c90 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24ca0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24cb0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24cc0 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
24cd0 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
24ce0 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
24cf0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
24d00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
24d10 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
24d20 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
24d30 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
24d40 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
24d50 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f  to = 0;.  pC->ro
24d60 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a  widIsValid = 0;.
24d70 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
24d80 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
24d90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24da0 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f  EBUG.  pC->seekO
24db0 70 20 3d 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e  p = OP_Last;.#en
24dc0 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  dif.  if( pOp->p
24dd0 32 3e 30 20 29 7b 0a 20 20 20 20 56 64 62 65 42  2>0 ){.    VdbeB
24de0 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
24df0 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
24e00 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
24e10 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
24e20 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
24e30 3a 20 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a  : Sort P1 P2 * *
24e40 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
24e50 63 6f 64 65 20 64 6f 65 73 20 65 78 61 63 74 6c  code does exactl
24e60 79 20 74 68 65 20 73 61 6d 65 20 74 68 69 6e 67  y the same thing
24e70 20 61 73 20 4f 50 5f 52 65 77 69 6e 64 20 65 78   as OP_Rewind ex
24e80 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 69 74 20  cept that.** it 
24e90 69 6e 63 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e  increments an un
24ea0 64 6f 63 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61  documented globa
24eb0 6c 20 76 61 72 69 61 62 6c 65 20 75 73 65 64 20  l variable used 
24ec0 66 6f 72 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a  for testing..**.
24ed0 2a 2a 20 53 6f 72 74 69 6e 67 20 69 73 20 61 63  ** Sorting is ac
24ee0 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20 77 72  complished by wr
24ef0 69 74 69 6e 67 20 72 65 63 6f 72 64 73 20 69 6e  iting records in
24f00 74 6f 20 61 20 73 6f 72 74 69 6e 67 20 69 6e 64  to a sorting ind
24f10 65 78 2c 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69  ex,.** then rewi
24f20 6e 64 69 6e 67 20 74 68 61 74 20 69 6e 64 65 78  nding that index
24f30 20 61 6e 64 20 70 6c 61 79 69 6e 67 20 69 74 20   and playing it 
24f40 62 61 63 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e  back from beginn
24f50 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20  ing to.** end.  
24f60 57 65 20 75 73 65 20 74 68 65 20 4f 50 5f 53 6f  We use the OP_So
24f70 72 74 20 6f 70 63 6f 64 65 20 69 6e 73 74 65 61  rt opcode instea
24f80 64 20 6f 66 20 4f 50 5f 52 65 77 69 6e 64 20 74  d of OP_Rewind t
24f90 6f 20 64 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69  o do the.** rewi
24fa0 6e 64 69 6e 67 20 73 6f 20 74 68 61 74 20 74 68  nding so that th
24fb0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
24fc0 65 20 77 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d  e will be increm
24fd0 65 6e 74 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67  ented and.** reg
24fe0 72 65 73 73 69 6f 6e 20 74 65 73 74 73 20 63 61  ression tests ca
24ff0 6e 20 64 65 74 65 72 6d 69 6e 65 20 77 68 65 74  n determine whet
25000 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f  her or not the o
25010 70 74 69 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63  ptimizer is.** c
25020 6f 72 72 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a  orrectly optimiz
25030 69 6e 67 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a  ing out sorts..*
25040 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
25050 53 6f 72 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Sort:    /* jump
25060 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74   */.case OP_Sort
25070 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
25080 6d 70 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  mp */.#ifdef SQL
25090 49 54 45 5f 54 45 53 54 0a 20 20 73 71 6c 69 74  ITE_TEST.  sqlit
250a0 65 33 5f 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b  e3_sort_count++;
250b0 0a 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63  .  sqlite3_searc
250c0 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69  h_count--;.#endi
250d0 66 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b  f.  p->aCounter[
250e0 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55  SQLITE_STMTSTATU
250f0 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20  S_SORT]++;.  /* 
25100 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74  Fall through int
25110 6f 20 4f 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d  o OP_Rewind */.}
25120 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 77 69  ./* Opcode: Rewi
25130 6e 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  nd P1 P2 * * *.*
25140 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
25150 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
25160 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74  r Column or Next
25170 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
25180 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
25190 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
251a0 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74  entry in the dat
251b0 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69  abase table or i
251c0 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20  ndex..** If the 
251d0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69  table or index i
251e0 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30  s empty and P2>0
251f0 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  , then jump imme
25200 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
25210 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20  * If P2 is 0 or 
25220 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  if the table or 
25230 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70  index is not emp
25240 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ty, fall through
25250 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  .** to the follo
25260 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e  wing instruction
25270 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ..**.** This opc
25280 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63  ode leaves the c
25290 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64  ursor configured
252a0 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77   to move in forw
252b0 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72  ard order,.** fr
252c0 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
252d0 20 74 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e   toward the end.
252e0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
252f0 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a  , the cursor is.
25300 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  ** configured to
25310 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50   use Next, not P
25320 72 65 76 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rev..*/.case OP_
25330 52 65 77 69 6e 64 3a 20 7b 20 20 20 20 20 20 20  Rewind: {       
25340 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
25350 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
25360 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
25370 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61  .  int res;..  a
25380 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
25390 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
253a0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
253b0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
253c0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
253d0 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
253e0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
253f0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
25400 5f 53 6f 72 74 65 72 53 6f 72 74 29 20 29 3b 0a  _SorterSort) );.
25410 20 20 72 65 73 20 3d 20 31 3b 0a 23 69 66 64 65    res = 1;.#ifde
25420 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
25430 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50   pC->seekOp = OP
25440 5f 52 65 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a  _Rewind;.#endif.
25450 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70    if( isSorter(p
25460 43 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  C) ){.    rc = s
25470 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
25480 52 65 77 69 6e 64 28 70 43 2c 20 26 72 65 73 29  Rewind(pC, &res)
25490 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
254a0 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
254b0 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
254c0 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
254d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
254e0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
254f0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
25500 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
25510 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
25520 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
25530 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
25540 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
25550 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
25560 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
25570 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
25580 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
25590 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
255a0 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
255b0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
255c0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
255d0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
255e0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
255f0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
25600 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
25610 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
25620 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
25630 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
25640 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
25650 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
25660 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
25670 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
25680 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
25690 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
256a0 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
256b0 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
256c0 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
256d0 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
256e0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
256f0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
25700 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
25710 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
25720 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
25730 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
25740 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
25750 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
25760 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
25770 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
25780 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
25790 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
257a0 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
257b0 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
257c0 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
257d0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
257e0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
257f0 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
25800 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
25810 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
25820 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
25830 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
25840 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
25850 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
25860 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
25870 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
25880 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
25890 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
258a0 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
258b0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
258c0 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
258d0 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
258e0 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
258f0 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
25900 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
25910 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
25920 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
25930 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
25940 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
25950 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
25960 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
25970 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
25980 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
25990 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
259a0 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
259b0 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
259c0 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
259d0 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
259e0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
259f0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
25a00 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
25a10 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
25a20 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
25a30 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
25a40 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25a50 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25a60 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
25a70 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
25a80 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
25a90 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
25aa0 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
25ab0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
25ac0 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
25ad0 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
25ae0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
25af0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
25b00 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
25b10 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
25b20 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
25b30 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
25b40 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
25b50 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
25b60 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
25b70 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
25b80 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
25b90 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
25ba0 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
25bb0 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
25bc0 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25bd0 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
25be0 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
25bf0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
25c00 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
25c10 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
25c20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
25c30 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
25c40 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
25c50 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
25c60 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
25c70 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
25c80 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
25c90 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
25ca0 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
25cb0 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
25cc0 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
25cd0 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
25ce0 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
25cf0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
25d00 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
25d10 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
25d20 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
25d30 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
25d40 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
25d50 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
25d60 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
25d70 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
25d80 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
25d90 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
25da0 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
25db0 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
25dc0 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
25dd0 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
25de0 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
25df0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
25e00 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
25e10 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
25e20 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
25e30 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
25e40 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
25e50 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
25e60 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
25e70 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
25e80 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
25e90 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
25ea0 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
25eb0 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
25ec0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
25ed0 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
25ee0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
25ef0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
25f00 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
25f10 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
25f20 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
25f30 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
25f40 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
25f50 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
25f60 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
25f70 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
25f80 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
25f90 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
25fa0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
25fb0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
25fc0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
25fd0 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
25fe0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
25ff0 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
26000 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
26010 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
26020 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
26030 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
26040 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
26050 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
26060 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26070 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
26080 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
26090 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
260a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
260b0 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
260c0 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
260d0 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
260e0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
260f0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26100 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
26110 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
26120 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
26130 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26140 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
26150 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
26160 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26170 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
26180 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
26190 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
261a0 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  pCursor );.  ass
261b0 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
261c0 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
261d0 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
261e0 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
261f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
26200 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
26210 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
26220 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
26230 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
26240 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26250 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
26260 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
26270 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
26280 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
26290 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
262a0 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
262b0 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
262c0 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
262d0 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
262e0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
262f0 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
26300 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
26310 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
26320 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
26330 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
26340 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
26350 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
26360 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
26370 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
26380 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
26390 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
263a0 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
263b0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
263c0 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
263d0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
263e0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
263f0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
26400 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
26410 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26420 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
26430 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
26440 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e 73 65 65  ewind || pC->see
26450 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a  kOp==OP_Found);.
26460 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26470 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c  pcode!=OP_Prev |
26480 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
26490 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a 20 20 20  P_PrevIfOpen.   
264a0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
264b0 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20 7c 7c 20  p==OP_SeekLT || 
264c0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
264d0 65 65 6b 4c 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekLE.       || 
264e0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c  pC->seekOp==OP_L
264f0 61 73 74 20 29 3b 0a 0a 20 20 72 63 20 3d 20 70  ast );..  rc = p
26500 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 28  Op->p4.xAdvance(
26510 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 65  pC->pCursor, &re
26520 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20  s);.next_tail:. 
26530 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
26540 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
26550 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
26560 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69  n(res==0,2);.  i
26570 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
26580 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
26590 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  ;.    pc = pOp->
265a0 70 32 20 2d 20 31 3b 0a 20 20 20 20 70 2d 3e 61  p2 - 1;.    p->a
265b0 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d  Counter[pOp->p5]
265c0 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  ++;.#ifdef SQLIT
265d0 45 5f 54 45 53 54 0a 20 20 20 20 73 71 6c 69 74  E_TEST.    sqlit
265e0 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b  e3_search_count+
265f0 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d 65 6c 73  +;.#endif.  }els
26600 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52  e{.    pC->nullR
26610 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 70 43  ow = 1;.  }.  pC
26620 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
26630 20 30 3b 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b   0;.  goto check
26640 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
26650 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
26660 78 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33  xInsert P1 P2 P3
26670 20 2a 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69   * P5.** Synopsi
26680 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
26690 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
266a0 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
266b0 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
266c0 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
266d0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
266e0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
266f0 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
26700 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
26710 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
26720 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
26730 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 61 20 66 6c  **.** P3 is a fl
26740 61 67 20 74 68 61 74 20 70 72 6f 76 69 64 65 73  ag that provides
26750 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
26760 2d 74 72 65 65 20 6c 61 79 65 72 20 74 68 61 74  -tree layer that
26770 20 74 68 69 73 0a 2a 2a 20 69 6e 73 65 72 74 20   this.** insert 
26780 69 73 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20  is likely to be 
26790 61 6e 20 61 70 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a  an append..**.**
267a0 20 49 66 20 50 35 20 68 61 73 20 74 68 65 20 4f   If P5 has the O
267b0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69  PFLAG_NCHANGE bi
267c0 74 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  t set, then the 
267d0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
267e0 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64  s.** incremented
267f0 20 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63   by this instruc
26800 74 69 6f 6e 2e 20 20 49 66 20 74 68 65 20 4f 50  tion.  If the OP
26810 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 62 69 74  FLAG_NCHANGE bit
26820 20 69 73 20 63 6c 65 61 72 2c 0a 2a 2a 20 74 68   is clear,.** th
26830 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
26840 75 6e 74 65 72 20 69 73 20 75 6e 63 68 61 6e 67  unter is unchang
26850 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  ed..**.** If P5 
26860 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  has the OPFLAG_U
26870 53 45 53 45 45 4b 52 45 53 55 4c 54 20 62 69 74  SESEEKRESULT bit
26880 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20 63   set, then the c
26890 75 72 73 6f 72 20 6d 75 73 74 20 68 61 76 65 0a  ursor must have.
268a0 2a 2a 20 6a 75 73 74 20 64 6f 6e 65 20 61 20 73  ** just done a s
268b0 65 65 6b 20 74 6f 20 74 68 65 20 73 70 6f 74 20  eek to the spot 
268c0 77 68 65 72 65 20 74 68 65 20 6e 65 77 20 65 6e  where the new en
268d0 74 72 79 20 69 73 20 74 6f 20 62 65 20 69 6e 73  try is to be ins
268e0 65 72 74 65 64 2e 0a 2a 2a 20 54 68 69 73 20 66  erted..** This f
268f0 6c 61 67 20 61 76 6f 69 64 73 20 64 6f 69 6e 67  lag avoids doing
26900 20 61 6e 20 65 78 74 72 61 20 73 65 65 6b 2e 0a   an extra seek..
26910 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
26920 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
26930 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
26940 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
26950 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
26960 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
26970 6e 73 65 72 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  nsert..*/.case O
26980 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 3a 20  P_SorterInsert: 
26990 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a        /* in2 */.
269a0 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73 65 72  case OP_IdxInser
269b0 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  t: {        /* i
269c0 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  n2 */.  VdbeCurs
269d0 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73  or *pC;.  BtCurs
269e0 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74  or *pCrsr;.  int
269f0 20 6e 4b 65 79 3b 0a 20 20 63 6f 6e 73 74 20 63   nKey;.  const c
26a00 68 61 72 20 2a 7a 4b 65 79 3b 0a 0a 20 20 61 73  har *zKey;..  as
26a10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
26a20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
26a30 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
26a40 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26a50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
26a60 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
26a70 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28   isSorter(pC)==(
26a80 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
26a90 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29 3b  SorterInsert) );
26aa0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
26ab0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65  pOp->p2];.  asse
26ac0 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73 20  rt( pIn2->flags 
26ad0 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20  & MEM_Blob );.  
26ae0 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72  pCrsr = pC->pCur
26af0 73 6f 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  sor;.  if( pOp->
26b00 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
26b10 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
26b20 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  ++;.  assert( pC
26b30 72 73 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65  rsr!=0 );.  asse
26b40 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
26b50 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
26b60 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
26b70 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
26b80 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 69 73  OK ){.    if( is
26b90 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20  Sorter(pC) ){.  
26ba0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
26bb0 56 64 62 65 53 6f 72 74 65 72 57 72 69 74 65 28  VdbeSorterWrite(
26bc0 70 43 2c 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d  pC, pIn2);.    }
26bd0 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79  else{.      nKey
26be0 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20   = pIn2->n;.    
26bf0 20 20 7a 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a    zKey = pIn2->z
26c00 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  ;.      rc = sql
26c10 69 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28  ite3BtreeInsert(
26c20 70 43 72 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65  pCrsr, zKey, nKe
26c30 79 2c 20 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70  y, "", 0, 0, pOp
26c40 2d 3e 70 33 2c 20 0a 20 20 20 20 20 20 20 20 20  ->p3, .         
26c50 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   ((pOp->p5 & OPF
26c60 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
26c70 54 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73  T) ? pC->seekRes
26c80 75 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20  ult : 0).       
26c90 20 20 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65     );.      asse
26ca0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
26cb0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20  Moveto==0 );.   
26cc0 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
26cd0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26ce0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
26cf0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
26d00 65 3a 20 49 64 78 44 65 6c 65 74 65 20 50 31 20  e: IdxDelete P1 
26d10 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
26d20 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40  opsis: key=r[P2@
26d30 50 33 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  P3].**.** The co
26d40 6e 74 65 6e 74 20 6f 66 20 50 33 20 72 65 67 69  ntent of P3 regi
26d50 73 74 65 72 73 20 73 74 61 72 74 69 6e 67 20 61  sters starting a
26d60 74 20 72 65 67 69 73 74 65 72 20 50 32 20 66 6f  t register P2 fo
26d70 72 6d 0a 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65  rm.** an unpacke
26d80 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 54 68 69  d index key. Thi
26d90 73 20 6f 70 63 6f 64 65 20 72 65 6d 6f 76 65 73  s opcode removes
26da0 20 74 68 61 74 20 65 6e 74 72 79 20 66 72 6f 6d   that entry from
26db0 20 74 68 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f   the .** index o
26dc0 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
26dd0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  P1..*/.case OP_I
26de0 64 78 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64  dxDelete: {.  Vd
26df0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
26e00 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
26e10 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e  .  int res;.  Un
26e20 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
26e30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
26e40 70 33 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p3>0 );.  assert
26e50 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
26e60 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d  Op->p2+pOp->p3<=
26e70 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
26e80 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
26e90 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26ea0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26eb0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
26ec0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
26ee0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
26ef0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
26f00 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
26f10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
26f20 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b  >p5==0 );.  r.pK
26f30 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65  eyInfo = pC->pKe
26f40 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c  yInfo;.  r.nFiel
26f50 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 33  d = (u16)pOp->p3
26f60 3b 0a 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63  ;.  r.default_rc
26f70 20 3d 20 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d   = 0;.  r.aMem =
26f80 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
26f90 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
26fa0 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20  EBUG.  { int i; 
26fb0 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69  for(i=0; i<r.nFi
26fc0 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74  eld; i++) assert
26fd0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
26fe0 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65  aMem[i]) ); }.#e
26ff0 6e 64 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69  ndif.  rc = sqli
27000 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e  te3BtreeMovetoUn
27010 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20 26 72  packed(pCrsr, &r
27020 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
27030 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
27040 4f 4b 20 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a  OK && res==0 ){.
27050 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
27060 42 74 72 65 65 44 65 6c 65 74 65 28 70 43 72 73  BtreeDelete(pCrs
27070 72 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  r);.  }.  assert
27080 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
27090 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d  veto==0 );.  pC-
270a0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
270b0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72  ACHE_STALE;.  br
270c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
270d0 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20 50  e: IdxRowid P1 P
270e0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
270f0 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64  sis: r[P2]=rowid
27100 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74  .**.** Write int
27110 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  o register P2 an
27120 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20 69   integer which i
27130 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72 79  s the last entry
27140 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 61   in the record a
27150 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20  t.** the end of 
27160 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70 6f  the index key po
27170 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72 73  inted to by curs
27180 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e 74  or P1.  This int
27190 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a  eger should be.*
271a0 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  * the rowid of t
271b0 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20 74  he table entry t
271c0 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e 64  o which this ind
271d0 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e  ex entry points.
271e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
271f0 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f   Rowid, MakeReco
27200 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  rd..*/.case OP_I
27210 64 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20  dxRowid: {      
27220 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
27230 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
27240 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
27250 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
27260 43 3b 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 0a  C;.  i64 rowid;.
27270 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
27280 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
27290 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
272a0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
272b0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
272c0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43  t( pC!=0 );.  pC
272d0 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f  rsr = pC->pCurso
272e0 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72  r;.  assert( pCr
272f0 73 72 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d  sr!=0 );.  pOut-
27300 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c  >flags = MEM_Nul
27310 6c 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  l;.  rc = sqlite
27320 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74  3VdbeCursorMovet
27330 6f 28 70 43 29 3b 0a 20 20 69 66 28 20 4e 45 56  o(pC);.  if( NEV
27340 45 52 28 72 63 29 20 29 20 67 6f 74 6f 20 61 62  ER(rc) ) goto ab
27350 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27360 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27370 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
27380 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27390 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
273a0 0a 20 20 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c  .  if( !pC->null
273b0 52 6f 77 20 29 7b 0a 20 20 20 20 72 6f 77 69 64  Row ){.    rowid
273c0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
273d0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
273e0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
273f0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
27400 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 64   = sqlite3VdbeId
27410 78 52 6f 77 69 64 28 64 62 2c 20 70 43 72 73 72  xRowid(db, pCrsr
27420 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69  , &rowid);.    i
27430 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
27440 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
27450 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
27460 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75  r;.    }.    pOu
27470 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a  t->u.i = rowid;.
27480 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
27490 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20  = MEM_Int;.  }. 
274a0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
274b0 63 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50  code: IdxGE P1 P
274c0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
274d0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
274e0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
274f0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
27500 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
27510 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
27520 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
27530 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
27540 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20  e PRIMARY KEY.  
27550 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
27560 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74   value against t
27570 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61  he index .** tha
27580 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c  t P1 is currentl
27590 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69  y pointing to, i
275a0 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d  gnoring the PRIM
275b0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
275c0 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74   .** fields at t
275d0 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66  he end..**.** If
275e0 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e   the P1 index en
275f0 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74  try is greater t
27600 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
27610 74 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a  the key value.**
27620 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32   then jump to P2
27630 2e 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c  .  Otherwise fal
27640 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
27650 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
27660 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
27670 20 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20   IdxGT P1 P2 P3 
27680 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
27690 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
276a0 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67  **.** The P4 reg
276b0 69 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67  ister values beg
276c0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66  inning with P3 f
276d0 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20  orm an unpacked 
276e0 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68  index .** key th
276f0 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49  at omits the PRI
27700 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61  MARY KEY.  Compa
27710 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75  re this key valu
27720 65 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e  e against the in
27730 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20  dex .** that P1 
27740 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27750 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27760 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27770 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20  EY or ROWID .** 
27780 66 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e  fields at the en
27790 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
277a0 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69  P1 index entry i
277b0 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  s greater than t
277c0 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
277d0 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
277e0 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
277f0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
27800 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
27810 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
27820 49 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50  IdxLT P1 P2 P3 P
27830 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
27840 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
27850 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
27860 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
27870 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
27880 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
27890 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
278a0 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
278b0 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
278c0 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
278d0 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
278e0 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
278f0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
27900 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
27910 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
27920 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
27930 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
27940 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
27950 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27960 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
27970 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68  the key value th
27980 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
27990 2a 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c  * Otherwise fall
279a0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
279b0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
279c0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
279d0 49 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50  IdxLE P1 P2 P3 P
279e0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
279f0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
27a00 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
27a10 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
27a20 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
27a30 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
27a40 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
27a50 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
27a60 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44  ARY KEY or ROWID
27a70 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20  .  Compare this 
27a80 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73  key value agains
27a90 74 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74  t.** the index t
27aa0 68 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e  hat P1 is curren
27ab0 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c  tly pointing to,
27ac0 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52   ignoring the PR
27ad0 49 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20  IMARY KEY or.** 
27ae0 52 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20  ROWID on the P1 
27af0 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  index..**.** If 
27b00 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
27b10 72 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ry is less than 
27b20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
27b30 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a  key value then j
27b40 75 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74  ump.** to P2. Ot
27b50 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72  herwise fall thr
27b60 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
27b70 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
27b80 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20  .case OP_IdxLE: 
27b90 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
27ba0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47   */.case OP_IdxG
27bb0 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
27bc0 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
27bd0 64 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLT:          /
27be0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
27bf0 50 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20  P_IdxGE:  {     
27c00 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
27c10 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
27c20 20 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61   int res;.  Unpa
27c30 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20  ckedRecord r;.. 
27c40 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
27c50 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
27c60 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
27c70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
27c80 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
27c90 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
27ca0 72 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65  rt( pC->isOrdere
27cb0 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  d );.  assert( p
27cc0 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a  C->pCursor!=0);.
27cd0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65    assert( pC->de
27ce0 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20  ferredMoveto==0 
27cf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27d00 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
27d10 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73 65 72  p5==1 );.  asser
27d20 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
27d30 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e  P4_INT32 );.  r.
27d40 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
27d50 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69  KeyInfo;.  r.nFi
27d60 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e  eld = (u16)pOp->
27d70 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d  p4.i;.  if( pOp-
27d80 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54  >opcode<OP_IdxLT
27d90 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27da0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27db0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
27dc0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
27dd0 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
27de0 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65  rc = -1;.  }else
27df0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
27e00 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  p->opcode==OP_Id
27e10 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  xGE || pOp->opco
27e20 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a  de==OP_IdxLT );.
27e30 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63      r.default_rc
27e40 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d   = 0;.  }.  r.aM
27e50 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  em = &aMem[pOp->
27e60 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p3];.#ifdef SQLI
27e70 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69 6e 74  TE_DEBUG.  { int
27e80 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72   i; for(i=0; i<r
27e90 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73  .nField; i++) as
27ea0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
27eb0 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20  (&r.aMem[i]) ); 
27ec0 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73 20 3d  }.#endif.  res =
27ed0 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64   0;  /* Not need
27ee0 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74  ed.  Only used t
27ef0 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e  o silence a warn
27f00 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73  ing. */.  rc = s
27f10 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b 65 79  qlite3VdbeIdxKey
27f20 43 6f 6d 70 61 72 65 28 70 43 2c 20 26 72 2c 20  Compare(pC, &r, 
27f30 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28  &res);.  assert(
27f40 20 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28   (OP_IdxLE&1)==(
27f50 4f 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28  OP_IdxLT&1) && (
27f60 4f 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50  OP_IdxGE&1)==(OP
27f70 5f 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69  _IdxGT&1) );.  i
27f80 66 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26  f( (pOp->opcode&
27f90 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29  1)==(OP_IdxLT&1)
27fa0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27fb0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
27fc0 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxLE || pOp->op
27fd0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
27fe0 3b 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73  ;.    res = -res
27ff0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28000 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28010 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28020 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28030 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73  IdxGT );.    res
28040 2b 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72  ++;.  }.  VdbeBr
28050 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c  anchTaken(res>0,
28060 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3e 30 20  2);.  if( res>0 
28070 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
28080 3e 70 32 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20  >p2 - 1 ;.  }.  
28090 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
280a0 6f 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20  ode: Destroy P1 
280b0 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
280c0 44 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65  Delete an entire
280d0 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
280e0 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
280f0 6f 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20  oot page in the 
28100 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
28110 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
28120 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65  .**.** The table
28130 20 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64   being destroyed
28140 20 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20   is in the main 
28150 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
28160 20 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50   P3==0.  If.** P
28170 33 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61  3==1 then the ta
28180 62 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20  ble to be clear 
28190 69 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69  is in the auxili
281a0 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c  ary database fil
281b0 65 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65  e.** that is use
281c0 64 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65  d to store table
281d0 73 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43  s create using C
281e0 52 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20  REATE TEMPORARY 
281f0 54 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  TABLE..**.** If 
28200 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e  AUTOVACUUM is en
28210 61 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73  abled then it is
28220 20 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61   possible that a
28230 6e 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65  nother root page
28240 0a 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76  .** might be mov
28250 65 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c  ed into the newl
28260 79 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70  y deleted root p
28270 61 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  age in order to 
28280 6b 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74  keep all.** root
28290 20 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75   pages contiguou
282a0 73 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  s at the beginni
282b0 6e 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ng of the databa
282c0 73 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a  se.  The former.
282d0 2a 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ** value of the 
282e0 72 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d  root page that m
282f0 6f 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65  oved - its value
28300 20 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65   before the move
28310 20 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69   occurred -.** i
28320 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  s stored in regi
28330 73 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20  ster P2.  If no 
28340 70 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e  page .** movemen
28350 74 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28  t was required (
28360 62 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c  because the tabl
28370 65 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20  e being dropped 
28380 77 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20  was already .** 
28390 74 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20  the last one in 
283a0 74 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68  the database) th
283b0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
283c0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
283d0 50 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41  P2..** If AUTOVA
283e0 43 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64  CUUM is disabled
283f0 20 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20   then a zero is 
28400 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74  stored in regist
28410 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
28420 20 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a   also: Clear.*/.
28430 63 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a  case OP_Destroy:
28440 20 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70   {     /* out2-p
28450 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69  rerelease */.  i
28460 6e 74 20 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74  nt iMoved;.  int
28470 20 69 43 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70   iCnt;.  Vdbe *p
28480 56 64 62 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b  Vdbe;.  int iDb;
28490 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ..  assert( p->r
284a0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69  eadOnly==0 );.#i
284b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
284c0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
284d0 20 69 43 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72   iCnt = 0;.  for
284e0 28 70 56 64 62 65 3d 64 62 2d 3e 70 56 64 62 65  (pVdbe=db->pVdbe
284f0 3b 20 70 56 64 62 65 3b 20 70 56 64 62 65 20 3d  ; pVdbe; pVdbe =
28500 20 70 56 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a   pVdbe->pNext){.
28510 20 20 20 20 69 66 28 20 70 56 64 62 65 2d 3e 6d      if( pVdbe->m
28520 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43  agic==VDBE_MAGIC
28530 5f 52 55 4e 20 26 26 20 70 56 64 62 65 2d 3e 62  _RUN && pVdbe->b
28540 49 73 52 65 61 64 65 72 20 0a 20 20 20 20 20 26  IsReader .     &
28550 26 20 70 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d  & pVdbe->inVtabM
28560 65 74 68 6f 64 3c 32 20 26 26 20 70 56 64 62 65  ethod<2 && pVdbe
28570 2d 3e 70 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a  ->pc>=0 .    ){.
28580 20 20 20 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20        iCnt++;.  
28590 20 20 7d 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20    }.  }.#else.  
285a0 69 43 6e 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65  iCnt = db->nVdbe
285b0 52 65 61 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70  Read;.#endif.  p
285c0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
285d0 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e  _Null;.  if( iCn
285e0 74 3e 31 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  t>1 ){.    rc = 
285f0 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20  SQLITE_LOCKED;. 
28600 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f     p->errorActio
28610 6e 20 3d 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20  n = OE_Abort;.  
28620 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20 3d  }else{.    iDb =
28630 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73   pOp->p3;.    as
28640 73 65 72 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b  sert( iCnt==1 );
28650 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
28660 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
28670 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20  Mask, iDb) );.  
28680 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f    iMoved = 0;  /
28690 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
286a0 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  nly to silence a
286b0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20   warning. */.   
286c0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
286d0 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e  eeDropTable(db->
286e0 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f  aDb[iDb].pBt, pO
286f0 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b  p->p1, &iMoved);
28700 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  .    pOut->flags
28710 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
28720 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76  pOut->u.i = iMov
28730 65 64 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ed;.#ifndef SQLI
28740 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
28750 55 4d 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  UM.    if( rc==S
28760 51 4c 49 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76  QLITE_OK && iMov
28770 65 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  ed!=0 ){.      s
28780 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
28790 76 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f  ved(db, iDb, iMo
287a0 76 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20  ved, pOp->p1);. 
287b0 20 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44       /* All OP_D
287c0 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
287d0 73 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73  s occur on the s
287e0 61 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20  ame btree */.   
287f0 20 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74     assert( reset
28800 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30  SchemaOnFault==0
28810 20 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f   || resetSchemaO
28820 6e 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b  nFault==iDb+1 );
28830 0a 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65  .      resetSche
28840 6d 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b  maOnFault = iDb+
28850 31 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  1;.    }.#endif.
28860 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
28870 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72  /* Opcode: Clear
28880 20 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20   P1 P2 P3.**.** 
28890 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65  Delete all conte
288a0 6e 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62  nts of the datab
288b0 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
288c0 65 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61  ex whose root pa
288d0 67 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74  ge.** in the dat
288e0 61 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69  abase file is gi
288f0 76 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c  ven by P1.  But,
28900 20 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c   unlike Destroy,
28910 20 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76   do not.** remov
28920 65 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  e the table or i
28930 6e 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61  ndex from the da
28940 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
28950 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69  ** The table bei
28960 6e 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74  ng clear is in t
28970 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
28980 20 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20   file if P2==0. 
28990 20 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65   If.** P2==1 the
289a0 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
289b0 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
289c0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
289d0 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
289e0 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
289f0 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
28a00 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
28a10 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
28a20 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76  *.** If the P3 v
28a30 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  alue is non-zero
28a40 2c 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  , then the table
28a50 20 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73   referred to mus
28a60 74 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65  t be an.** intke
28a70 79 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20  y table (an SQL 
28a80 74 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e  table, not an in
28a90 64 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61  dex). In this ca
28aa0 73 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67  se the row chang
28ab0 65 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69  e .** count is i
28ac0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
28ad0 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
28ae0 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65   in the table be
28af0 69 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a  ing cleared. .**
28b00 20 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65   If P3 is greate
28b10 72 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65  r than zero, the
28b20 6e 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  n the value stor
28b30 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
28b40 33 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63  3 is.** also inc
28b50 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20  remented by the 
28b60 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69  number of rows i
28b70 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e  n the table bein
28b80 67 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a  g cleared..**.**
28b90 20 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72   See also: Destr
28ba0 6f 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c  oy.*/.case OP_Cl
28bb0 65 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68  ear: {.  int nCh
28bc0 61 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67  ange;. .  nChang
28bd0 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  e = 0;.  assert(
28be0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
28bf0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
28c00 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
28c10 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29  Mask, pOp->p2) )
28c20 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
28c30 42 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28  BtreeClearTable(
28c40 0a 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70  .      db->aDb[p
28c50 4f 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70  Op->p2].pBt, pOp
28c60 2d 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f  ->p1, (pOp->p3 ?
28c70 20 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20   &nChange : 0). 
28c80 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70   );.  if( pOp->p
28c90 33 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61  3 ){.    p->nCha
28ca0 6e 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  nge += nChange;.
28cb0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e      if( pOp->p3>
28cc0 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
28cd0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61  t( memIsValid(&a
28ce0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b  Mem[pOp->p3]) );
28cf0 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  .      memAboutT
28d00 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d  oChange(p, &aMem
28d10 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
28d20 20 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e    aMem[pOp->p3].
28d30 75 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a  u.i += nChange;.
28d40 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
28d50 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
28d60 20 52 65 73 65 74 53 6f 72 74 65 72 20 50 31 20   ResetSorter P1 
28d70 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65  * * * *.**.** De
28d80 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74  lete all content
28d90 73 20 66 72 6f 6d 20 74 68 65 20 65 70 68 65 6d  s from the ephem
28da0 65 72 61 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f  eral table or so
28db0 72 74 65 72 0a 2a 2a 20 74 68 61 74 20 69 73 20  rter.** that is 
28dc0 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50  open on cursor P
28dd0 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  1..**.** This op
28de0 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20  code only works 
28df0 66 6f 72 20 63 75 72 73 6f 72 73 20 75 73 65 64  for cursors used
28e00 20 66 6f 72 20 73 6f 72 74 69 6e 67 20 61 6e 64   for sorting and
28e10 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69 74 68 20  .** opened with 
28e20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
28e30 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65   or OP_SorterOpe
28e40 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  n..*/.case OP_Re
28e50 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56  setSorter: {.  V
28e60 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28e70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
28e80 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
28e90 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
28ea0 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
28eb0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
28ec0 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 69 66  t( pC!=0 );.  if
28ed0 28 20 70 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b  ( pC->pSorter ){
28ee0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
28ef0 53 6f 72 74 65 72 52 65 73 65 74 28 64 62 2c 20  SorterReset(db, 
28f00 70 43 2d 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20  pC->pSorter);.  
28f10 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
28f20 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d 65 72  t( pC->isEphemer
28f30 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  al );.    rc = s
28f40 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
28f50 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28 70 43  TableOfCursor(pC
28f60 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a  ->pCursor);.  }.
28f70 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
28f80 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54 61 62  pcode: CreateTab
28f90 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  le P1 P2 * * *.*
28fa0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
28fb0 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a  ]=root iDb=P1.**
28fc0 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e  .** Allocate a n
28fd0 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68 65 20  ew table in the 
28fe0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28ff0 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72 20 69  le if P1==0 or i
29000 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61  n the.** auxilia
29010 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
29020 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20   if P1==1 or in 
29030 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74 61  an attached data
29040 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e  base if.** P1>1.
29050 20 20 57 72 69 74 65 20 74 68 65 20 72 6f 6f 74    Write the root
29060 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f 66 20   page number of 
29070 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  the new table in
29080 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  to.** register P
29090 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66  2.**.** The diff
290a0 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 61  erence between a
290b0 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e   table and an in
290c0 64 65 78 20 69 73 20 74 68 69 73 3a 20 20 41 20  dex is this:  A 
290d0 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61  table must.** ha
290e0 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e 74 65  ve a 4-byte inte
290f0 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61 6e 20  ger key and can 
29100 68 61 76 65 20 61 72 62 69 74 72 61 72 79 20 64  have arbitrary d
29110 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a  ata.  An index.*
29120 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74 72 61  * has an arbitra
29130 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20 64 61  ry key but no da
29140 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ta..**.** See al
29150 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65 78 0a  so: CreateIndex.
29160 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72  */./* Opcode: Cr
29170 65 61 74 65 49 6e 64 65 78 20 50 31 20 50 32 20  eateIndex P1 P2 
29180 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
29190 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44  s: r[P2]=root iD
291a0 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63  b=P1.**.** Alloc
291b0 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65 78 20  ate a new index 
291c0 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  in the main data
291d0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
291e0 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  =0 or in the.** 
291f0 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61  auxiliary databa
29200 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31  se file if P1==1
29210 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68   or in an attach
29220 65 64 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a  ed database if.*
29230 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74  * P1>1.  Write t
29240 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
29250 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74  ber of the new t
29260 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  able into.** reg
29270 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  ister P2..**.** 
29280 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  See documentatio
29290 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65 54 61  n on OP_CreateTa
292a0 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ble for addition
292b0 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a  al information..
292c0 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65 61 74  */.case OP_Creat
292d0 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20 20 20  eIndex:         
292e0 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
292f0 6c 65 61 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50  lease */.case OP
29300 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
29310 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
29320 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
29330 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74   int pgno;.  int
29340 20 66 6c 61 67 73 3b 0a 20 20 44 62 20 2a 70 44   flags;.  Db *pD
29350 62 3b 0a 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a  b;..  pgno = 0;.
29360 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29370 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29380 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
29390 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
293a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f  p->btreeMask, pO
293b0 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65  p->p1) );.  asse
293c0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
293d0 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64  =0 );.  pDb = &d
293e0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b  b->aDb[pOp->p1];
293f0 0a 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e  .  assert( pDb->
29400 70 42 74 21 3d 30 20 29 3b 0a 20 20 69 66 28 20  pBt!=0 );.  if( 
29410 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
29420 43 72 65 61 74 65 54 61 62 6c 65 20 29 7b 0a 20  CreateTable ){. 
29430 20 20 20 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54     /* flags = BT
29440 52 45 45 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20  REE_INTKEY; */. 
29450 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
29460 5f 49 4e 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65  _INTKEY;.  }else
29470 7b 0a 20 20 20 20 66 6c 61 67 73 20 3d 20 42 54  {.    flags = BT
29480 52 45 45 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d  REE_BLOBKEY;.  }
29490 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
294a0 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
294b0 70 44 62 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c  pDb->pBt, &pgno,
294c0 20 66 6c 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d   flags);.  pOut-
294d0 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62  >u.i = pgno;.  b
294e0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
294f0 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61 20  de: ParseSchema 
29500 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
29510 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73 65  * Read and parse
29520 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72 6f   all entries fro
29530 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41 53  m the SQLITE_MAS
29540 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61 74  TER table of dat
29550 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61 74  abase P1.** that
29560 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52 45   match the WHERE
29570 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a   clause P4. .**.
29580 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
29590 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73 65  nvokes the parse
295a0 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  r to create a ne
295b0 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
295c0 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20  e,.** then runs 
295d0 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c 20  the new virtual 
295e0 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73 20  machine.  It is 
295f0 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61 6e  thus a re-entran
29600 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73  t opcode..*/.cas
29610 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61  e OP_ParseSchema
29620 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20  : {.  int iDb;. 
29630 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61   const char *zMa
29640 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53  ster;.  char *zS
29650 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20 69  ql;.  InitData i
29660 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41  nitData;..  /* A
29670 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ny prepared stat
29680 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b  ement that invok
29690 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77  es this opcode w
296a0 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65 73  ill hold mutexes
296b0 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62  .  ** on every b
296c0 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20 61  tree.  This is a
296d0 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66 6f   prerequisite fo
296e0 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a  r invoking .  **
296f0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
29700 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66  back()..  */.#if
29710 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
29720 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69 44  .  for(iDb=0; iD
29730 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b  b<db->nDb; iDb++
29740 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  ){.    assert( i
29750 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33  Db==1 || sqlite3
29760 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78 28  BtreeHoldsMutex(
29770 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
29780 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  ) );.  }.#endif.
29790 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31  .  iDb = pOp->p1
297a0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
297b0 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
297c0 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44  b );.  assert( D
297d0 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
297e0 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c   iDb, DB_SchemaL
297f0 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55  oaded) );.  /* U
29800 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e 64  sed to be a cond
29810 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20  itional */ {.   
29820 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45 4d   zMaster = SCHEM
29830 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20 20  A_TABLE(iDb);.  
29840 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d 20    initData.db = 
29850 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  db;.    initData
29860 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  .iDb = pOp->p1;.
29870 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45      initData.pzE
29880 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72  rrMsg = &p->zErr
29890 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20  Msg;.    zSql = 
298a0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
298b0 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45 43  b,.       "SELEC
298c0 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65  T name, rootpage
298d0 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e  , sql FROM '%q'.
298e0 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44 45  %s WHERE %s ORDE
298f0 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20 20  R BY rowid",.   
29900 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d      db->aDb[iDb]
29910 2e 7a 4e 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c  .zName, zMaster,
29920 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
29930 20 69 66 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a   if( zSql==0 ){.
29940 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
29950 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c  E_NOMEM;.    }el
29960 73 65 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  se{.      assert
29970 28 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d  ( db->init.busy=
29980 3d 30 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =0 );.      db->
29990 69 6e 69 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20  init.busy = 1;. 
299a0 20 20 20 20 20 69 6e 69 74 44 61 74 61 2e 72 63       initData.rc
299b0 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20   = SQLITE_OK;.  
299c0 20 20 20 20 61 73 73 65 72 74 28 20 21 64 62 2d      assert( !db-
299d0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b  >mallocFailed );
299e0 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69  .      rc = sqli
299f0 74 65 33 5f 65 78 65 63 28 64 62 2c 20 7a 53 71  te3_exec(db, zSq
29a00 6c 2c 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61  l, sqlite3InitCa
29a10 6c 6c 62 61 63 6b 2c 20 26 69 6e 69 74 44 61 74  llback, &initDat
29a20 61 2c 20 30 29 3b 0a 20 20 20 20 20 20 69 66 28  a, 0);.      if(
29a30 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
29a40 20 72 63 20 3d 20 69 6e 69 74 44 61 74 61 2e 72   rc = initData.r
29a50 63 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  c;.      sqlite3
29a60 44 62 46 72 65 65 28 64 62 2c 20 7a 53 71 6c 29  DbFree(db, zSql)
29a70 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
29a80 2e 62 75 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d  .busy = 0;.    }
29a90 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20  .  }.  if( rc ) 
29aa0 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
29ab0 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
29ac0 6f 6e 28 64 62 29 3b 0a 20 20 69 66 28 20 72 63  on(db);.  if( rc
29ad0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
29ae0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
29af0 6d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20  m;.  }.  break; 
29b00 20 0a 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65   .}..#if !define
29b10 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e  d(SQLITE_OMIT_AN
29b20 41 4c 59 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65  ALYZE)./* Opcode
29b30 3a 20 4c 6f 61 64 41 6e 61 6c 79 73 69 73 20 50  : LoadAnalysis P
29b40 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
29b50 52 65 61 64 20 74 68 65 20 73 71 6c 69 74 65 5f  Read the sqlite_
29b60 73 74 61 74 31 20 74 61 62 6c 65 20 66 6f 72 20  stat1 table for 
29b70 64 61 74 61 62 61 73 65 20 50 31 20 61 6e 64 20  database P1 and 
29b80 6c 6f 61 64 20 74 68 65 20 63 6f 6e 74 65 6e 74  load the content
29b90 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62 6c  .** of that tabl
29ba0 65 20 69 6e 74 6f 20 74 68 65 20 69 6e 74 65 72  e into the inter
29bb0 6e 61 6c 20 69 6e 64 65 78 20 68 61 73 68 20 74  nal index hash t
29bc0 61 62 6c 65 2e 20 20 54 68 69 73 20 77 69 6c 6c  able.  This will
29bd0 20 63 61 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e   cause.** the an
29be0 61 6c 79 73 69 73 20 74 6f 20 62 65 20 75 73 65  alysis to be use
29bf0 64 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67  d when preparing
29c00 20 61 6c 6c 20 73 75 62 73 65 71 75 65 6e 74 20   all subsequent 
29c10 71 75 65 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65  queries..*/.case
29c20 20 4f 50 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73   OP_LoadAnalysis
29c30 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
29c40 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
29c50 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
29c60 20 72 63 20 3d 20 73 71 6c 69 74 65 33 41 6e 61   rc = sqlite3Ana
29c70 6c 79 73 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f  lysisLoad(db, pO
29c80 70 2d 3e 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b  p->p1);.  break;
29c90 20 20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21    .}.#endif /* !
29ca0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
29cb0 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a  MIT_ANALYZE) */.
29cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
29cd0 54 61 62 6c 65 20 50 31 20 2a 20 2a 20 50 34 20  Table P1 * * P4 
29ce0 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74  *.**.** Remove t
29cf0 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d  he internal (in-
29d00 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72  memory) data str
29d10 75 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73  uctures that des
29d20 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 61 62  cribe.** the tab
29d30 6c 65 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64  le named P4 in d
29d40 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69  atabase P1.  Thi
29d50 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65  s is called afte
29d60 72 20 61 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20  r a table.** is 
29d70 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
29d80 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
29d90 74 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20  troy opcode) in 
29da0 6f 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a  order to keep .*
29db0 2a 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72  * the internal r
29dc0 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
29dd0 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63   the.** schema c
29de0 6f 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77  onsistent with w
29df0 68 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a  hat is on disk..
29e00 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54  */.case OP_DropT
29e10 61 62 6c 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65  able: {.  sqlite
29e20 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29e30 54 61 62 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70  Table(db, pOp->p
29e40 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
29e50 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29e60 63 6f 64 65 3a 20 44 72 6f 70 49 6e 64 65 78 20  code: DropIndex 
29e70 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
29e80 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74  * Remove the int
29e90 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79  ernal (in-memory
29ea0 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65  ) data structure
29eb0 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a  s that describe.
29ec0 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 6e 61 6d  ** the index nam
29ed0 65 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73  ed P4 in databas
29ee0 65 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63  e P1.  This is c
29ef0 61 6c 6c 65 64 20 61 66 74 65 72 20 61 6e 20 69  alled after an i
29f00 6e 64 65 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70  ndex.** is dropp
29f10 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73  ed from disk (us
29f20 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20  ing the Destroy 
29f30 6f 70 63 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72  opcode).** in or
29f40 64 65 72 20 74 6f 20 6b 65 65 70 20 74 68 65 20  der to keep the 
29f50 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
29f60 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
29f70 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
29f80 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
29f90 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
29fa0 65 20 4f 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20  e OP_DropIndex: 
29fb0 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  {.  sqlite3Unlin
29fc0 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
29fd0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
29fe0 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
29ff0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a000 44 72 6f 70 54 72 69 67 67 65 72 20 50 31 20 2a  DropTrigger P1 *
2a010 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2a020 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2a030 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2a040 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2a050 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2a060 68 65 20 74 72 69 67 67 65 72 20 6e 61 6d 65 64  he trigger named
2a070 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20   P4 in database 
2a080 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c  P1.  This is cal
2a090 6c 65 64 20 61 66 74 65 72 20 61 20 74 72 69 67  led after a trig
2a0a0 67 65 72 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65  ger.** is droppe
2a0b0 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69  d from disk (usi
2a0c0 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f  ng the Destroy o
2a0d0 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20  pcode) in order 
2a0e0 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20  to keep .** the 
2a0f0 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65  internal represe
2a100 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  ntation of the.*
2a110 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74  * schema consist
2a120 65 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73  ent with what is
2a130 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73   on disk..*/.cas
2a140 65 20 4f 50 5f 44 72 6f 70 54 72 69 67 67 65 72  e OP_DropTrigger
2a150 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2a160 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
2a170 67 65 72 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ger(db, pOp->p1,
2a180 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62   pOp->p4.z);.  b
2a190 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65  reak;.}...#ifnde
2a1a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
2a1b0 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a  TEGRITY_CHECK./*
2a1c0 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 72 69   Opcode: Integri
2a1d0 74 79 43 6b 20 50 31 20 50 32 20 50 33 20 2a 20  tyCk P1 P2 P3 * 
2a1e0 50 35 0a 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61  P5.**.** Do an a
2a1f0 6e 61 6c 79 73 69 73 20 6f 66 20 74 68 65 20 63  nalysis of the c
2a200 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61  urrently open da
2a210 74 61 62 61 73 65 2e 20 20 53 74 6f 72 65 20 69  tabase.  Store i
2a220 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
2a230 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 6e 20   the text of an 
2a240 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 64 65  error message de
2a250 73 63 72 69 62 69 6e 67 20 61 6e 79 20 70 72 6f  scribing any pro
2a260 62 6c 65 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20  blems..** If no 
2a270 70 72 6f 62 6c 65 6d 73 20 61 72 65 20 66 6f 75  problems are fou
2a280 6e 64 2c 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c  nd, store a NULL
2a290 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
2a2a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73  .**.** The regis
2a2b0 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2a2c0 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62  the maximum numb
2a2d0 65 72 20 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72  er of allowed er
2a2e0 72 6f 72 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74  rors..** At most
2a2f0 20 72 65 67 28 50 33 29 20 65 72 72 6f 72 73 20   reg(P3) errors 
2a300 77 69 6c 6c 20 62 65 20 72 65 70 6f 72 74 65 64  will be reported
2a310 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  ..** In other wo
2a320 72 64 73 2c 20 74 68 65 20 61 6e 61 6c 79 73 69  rds, the analysi
2a330 73 20 73 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20  s stops as soon 
2a340 61 73 20 72 65 67 28 50 31 29 20 65 72 72 6f 72  as reg(P1) error
2a350 73 20 61 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20  s are .** seen. 
2a360 20 52 65 67 28 50 31 29 20 69 73 20 75 70 64 61   Reg(P1) is upda
2a370 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 75 6d  ted with the num
2a380 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65  ber of errors re
2a390 6d 61 69 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54  maining..**.** T
2a3a0 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d  he root page num
2a3b0 62 65 72 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c  bers of all tabl
2a3c0 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
2a3d0 73 65 20 61 72 65 20 69 6e 74 65 67 65 72 0a 2a  se are integer.*
2a3e0 2a 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 28  * stored in reg(
2a3f0 50 31 29 2c 20 72 65 67 28 50 31 2b 31 29 2c 20  P1), reg(P1+1), 
2a400 72 65 67 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20  reg(P1+2), .... 
2a410 20 54 68 65 72 65 20 61 72 65 20 50 32 20 74 61   There are P2 ta
2a420 62 6c 65 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a  bles.** total..*
2a430 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f  *.** If P5 is no
2a440 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63  t zero, the chec
2a450 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65  k is done on the
2a460 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2a470 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74  ase.** file, not
2a480 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
2a490 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54  se file..**.** T
2a4a0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73  his opcode is us
2a4b0 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20  ed to implement 
2a4c0 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68  the integrity_ch
2a4d0 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63  eck pragma..*/.c
2a4e0 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79  ase OP_Integrity
2a4f0 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f  Ck: {.  int nRoo
2a500 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t;      /* Numbe
2a510 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63  r of tables to c
2a520 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f  heck.  (Number o
2a530 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a  f root pages.) *
2a540 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20  /.  int *aRoot; 
2a550 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20      /* Array of 
2a560 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73  rootpage numbers
2a570 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62   for tables to b
2a580 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69  e checked */.  i
2a590 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 2f  nt j;          /
2a5a0 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a  * Loop counter *
2a5b0 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20  /.  int nErr;   
2a5c0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2a5d0 20 65 72 72 6f 72 73 20 72 65 70 6f 72 74 65 64   errors reported
2a5e0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20   */.  char *z;  
2a5f0 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66        /* Text of
2a600 20 74 68 65 20 65 72 72 6f 72 20 72 65 70 6f 72   the error repor
2a610 74 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72  t */.  Mem *pnEr
2a620 72 3b 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74  r;     /* Regist
2a630 65 72 20 6b 65 65 70 69 6e 67 20 74 72 61 63 6b  er keeping track
2a640 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2a650 6e 69 6e 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72  ning */..  asser
2a660 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
2a670 29 3b 0a 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70  );.  nRoot = pOp
2a680 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
2a690 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f  nRoot>0 );.  aRo
2a6a0 6f 74 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ot = sqlite3DbMa
2a6b0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
2a6c0 6f 66 28 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31  of(int)*(nRoot+1
2a6d0 29 20 29 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74  ) );.  if( aRoot
2a6e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
2a6f0 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
2a700 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2a710 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2a720 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45  Cursor) );.  pnE
2a730 72 72 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  rr = &aMem[pOp->
2a740 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 28  p3];.  assert( (
2a750 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d  pnErr->flags & M
2a760 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
2a770 61 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e  assert( (pnErr->
2a780 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74 72  flags & (MEM_Str
2a790 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29  |MEM_Blob))==0 )
2a7a0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
2a7b0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
2a7c0 28 6a 3d 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a  (j=0; j<nRoot; j
2a7d0 2b 2b 29 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a  ++){.    aRoot[j
2a7e0 5d 20 3d 20 28 69 6e 74 29 73 71 6c 69 74 65 33  ] = (int)sqlite3
2a7f0 56 64 62 65 49 6e 74 56 61 6c 75 65 28 26 70 49  VdbeIntValue(&pI
2a800 6e 31 5b 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52  n1[j]);.  }.  aR
2a810 6f 6f 74 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73  oot[j] = 0;.  as
2a820 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62  sert( pOp->p5<db
2a830 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
2a840 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2a850 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2a860 3e 70 35 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71  >p5) );.  z = sq
2a870 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67 72  lite3BtreeIntegr
2a880 69 74 79 43 68 65 63 6b 28 64 62 2d 3e 61 44 62  ityCheck(db->aDb
2a890 5b 70 4f 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61  [pOp->p5].pBt, a
2a8a0 52 6f 6f 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20  Root, nRoot,.   
2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
2a8d0 6e 74 29 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26  nt)pnErr->u.i, &
2a8e0 6e 45 72 72 29 3b 0a 20 20 73 71 6c 69 74 65 33  nErr);.  sqlite3
2a8f0 44 62 46 72 65 65 28 64 62 2c 20 61 52 6f 6f 74  DbFree(db, aRoot
2a900 29 3b 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20  );.  pnErr->u.i 
2a910 2d 3d 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74  -= nErr;.  sqlit
2a920 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
2a930 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45  (pIn1);.  if( nE
2a940 72 72 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  rr==0 ){.    ass
2a950 65 72 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d  ert( z==0 );.  }
2a960 65 6c 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b  else if( z==0 ){
2a970 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  .    goto no_mem
2a980 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73  ;.  }else{.    s
2a990 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2a9a0 53 74 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c  Str(pIn1, z, -1,
2a9b0 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71   SQLITE_UTF8, sq
2a9c0 6c 69 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d  lite3_free);.  }
2a9d0 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
2a9e0 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20  OBSIZE(pIn1);.  
2a9f0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
2aa00 65 45 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20  eEncoding(pIn1, 
2aa10 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65  encoding);.  bre
2aa20 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
2aa30 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45  SQLITE_OMIT_INTE
2aa40 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a  GRITY_CHECK */..
2aa50 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2aa60 74 41 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a  tAdd P1 P2 * * *
2aa70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
2aa80 6f 77 73 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a  owset(P1)=r[P2].
2aa90 2a 2a 0a 2a 2a 20 49 6e 73 65 72 74 20 74 68 65  **.** Insert the
2aaa0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 68   integer value h
2aab0 65 6c 64 20 62 79 20 72 65 67 69 73 74 65 72 20  eld by register 
2aac0 50 32 20 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61  P2 into a boolea
2aad0 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20  n index.** held 
2aae0 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a  in register P1..
2aaf0 2a 2a 0a 2a 2a 20 41 6e 20 61 73 73 65 72 74 69  **.** An asserti
2ab00 6f 6e 20 66 61 69 6c 73 20 69 66 20 50 32 20 69  on fails if P2 i
2ab10 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65 72  s not an integer
2ab20 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77  ..*/.case OP_Row
2ab30 53 65 74 41 64 64 3a 20 7b 20 20 20 20 20 20 20  SetAdd: {       
2ab40 2f 2a 20 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20  /* in1, in2 */. 
2ab50 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ab60 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
2ab70 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2ab80 0a 20 20 61 73 73 65 72 74 28 20 28 70 49 6e 32  .  assert( (pIn2
2ab90 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2aba0 74 29 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 28  t)!=0 );.  if( (
2abb0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
2abc0 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a  M_RowSet)==0 ){.
2abd0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2abe0 65 6d 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31  emSetRowSet(pIn1
2abf0 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31  );.    if( (pIn1
2ac00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2ac10 77 53 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20  wSet)==0 ) goto 
2ac20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71  no_mem;.  }.  sq
2ac30 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65 72  lite3RowSetInser
2ac40 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2ac50 74 2c 20 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20  t, pIn2->u.i);. 
2ac60 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
2ac70 63 6f 64 65 3a 20 52 6f 77 53 65 74 52 65 61 64  code: RowSetRead
2ac80 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
2ac90 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
2aca0 5d 3d 72 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a  ]=rowset(P1).**.
2acb0 2a 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 73  ** Extract the s
2acc0 6d 61 6c 6c 65 73 74 20 76 61 6c 75 65 20 66 72  mallest value fr
2acd0 6f 6d 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78  om boolean index
2ace0 20 50 31 20 61 6e 64 20 70 75 74 20 74 68 61 74   P1 and put that
2acf0 20 76 61 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72   value into.** r
2ad00 65 67 69 73 74 65 72 20 50 33 2e 20 20 4f 72 2c  egister P3.  Or,
2ad10 20 69 66 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65   if boolean inde
2ad20 78 20 50 31 20 69 73 20 69 6e 69 74 69 61 6c 6c  x P1 is initiall
2ad30 79 20 65 6d 70 74 79 2c 20 6c 65 61 76 65 20 50  y empty, leave P
2ad40 33 0a 2a 2a 20 75 6e 63 68 61 6e 67 65 64 20 61  3.** unchanged a
2ad50 6e 64 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  nd jump to instr
2ad60 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
2ad70 73 65 20 4f 50 5f 52 6f 77 53 65 74 52 65 61 64  se OP_RowSetRead
2ad80 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  : {       /* jum
2ad90 70 2c 20 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a  p, in1, out3 */.
2ada0 20 20 69 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49    i64 val;..  pI
2adb0 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2adc0 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  p1];.  if( (pIn1
2add0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2ade0 77 53 65 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20  wSet)==0 .   || 
2adf0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78  sqlite3RowSetNex
2ae00 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65  t(pIn1->u.pRowSe
2ae10 74 2c 20 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b  t, &val)==0.  ){
2ae20 0a 20 20 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c  .    /* The bool
2ae30 65 61 6e 20 69 6e 64 65 78 20 69 73 20 65 6d 70  ean index is emp
2ae40 74 79 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ty */.    sqlite
2ae50 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2ae60 70 49 6e 31 29 3b 0a 20 20 20 20 70 63 20 3d 20  pIn1);.    pc = 
2ae70 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
2ae80 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2ae90 28 31 2c 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  (1,2);.  }else{.
2aea0 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2aeb0 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2aec0 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2aed0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2aee0 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70  tInt64(&aMem[pOp
2aef0 2d 3e 70 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20  ->p3], val);.   
2af00 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2af10 28 30 2c 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74  (0,2);.  }.  got
2af20 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2af30 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2af40 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2af50 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2af60 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2af70 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2af80 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2af90 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2afa0 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2afb0 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2afc0 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2afd0 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2afe0 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2aff0 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2b000 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2b010 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2b020 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2b030 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2b040 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2b050 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2b060 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2b070 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2b080 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2b090 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2b0a0 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2b0b0 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2b0c0 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2b0d0 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2b0e0 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2b0f0 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2b100 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2b110 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2b120 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2b130 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2b140 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2b150 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2b160 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2b170 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2b180 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2b190 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2b1a0 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2b1b0 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2b1c0 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2b1d0 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2b1e0 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2b1f0 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2b200 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2b210 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2b220 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2b230 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2b240 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2b250 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2b260 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2b270 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2b280 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2b290 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2b2a0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2b2b0 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2b2c0 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2b2d0 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2b2e0 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2b2f0 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2b300 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2b310 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2b320 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2b330 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2b340 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2b350 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2b360 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2b370 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2b380 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2b390 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2b3a0 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2b3b0 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2b3c0 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2b3d0 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b3f0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2b400 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2b410 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2b420 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2b430 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2b440 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2b450 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2b460 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2b470 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2b480 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2b490 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2b4a0 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2b4b0 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2b4c0 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2b4d0 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2b4e0 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2b4f0 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2b500 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2b510 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2b520 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b530 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2b540 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2b550 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2b560 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2b570 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2b580 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2b590 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2b5a0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2b5b0 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2b5c0 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2b5d0 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2b5e0 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2b5f0 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2b600 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2b610 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2b620 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2b630 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2b640 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2b650 69 66 28 20 65 78 69 73 74 73 20 29 7b 0a 20 20  if( exists ){.  
2b660 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2b670 20 2d 20 31 3b 0a 20 20 20 20 20 20 62 72 65 61   - 1;.      brea
2b680 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69  k;.    }.  }.  i
2b690 66 28 20 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20  f( iSet>=0 ){.  
2b6a0 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49    sqlite3RowSetI
2b6b0 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52  nsert(pIn1->u.pR
2b6c0 6f 77 53 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69  owSet, pIn3->u.i
2b6d0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
2b6e0 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  }...#ifndef SQLI
2b6f0 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
2b700 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67  ./* Opcode: Prog
2b710 72 61 6d 20 50 31 20 50 32 20 50 33 20 50 34 20  ram P1 P2 P3 P4 
2b720 50 35 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P5.**.** Execute
2b730 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2b740 67 72 61 6d 20 70 61 73 73 65 64 20 61 73 20 50  gram passed as P
2b750 34 20 28 74 79 70 65 20 50 34 5f 53 55 42 50 52  4 (type P4_SUBPR
2b760 4f 47 52 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50  OGRAM). .**.** P
2b770 31 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  1 contains the a
2b780 64 64 72 65 73 73 20 6f 66 20 74 68 65 20 6d 65  ddress of the me
2b790 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63  mory cell that c
2b7a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 66 69 72 73  ontains the firs
2b7b0 74 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c  t memory .** cel
2b7c0 6c 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  l in an array of
2b7d0 20 76 61 6c 75 65 73 20 75 73 65 64 20 61 73 20   values used as 
2b7e0 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
2b7f0 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32   sub-program. P2
2b800 20 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68   .** contains th
2b810 65 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75 6d  e address to jum
2b820 70 20 74 6f 20 69 66 20 74 68 65 20 73 75 62 2d  p to if the sub-
2b830 70 72 6f 67 72 61 6d 20 74 68 72 6f 77 73 20 61  program throws a
2b840 6e 20 49 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63  n IGNORE .** exc
2b850 65 70 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65  eption using the
2b860 20 52 41 49 53 45 28 29 20 66 75 6e 63 74 69 6f   RAISE() functio
2b870 6e 2e 20 52 65 67 69 73 74 65 72 20 50 33 20 63  n. Register P3 c
2b880 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2b890 65 73 73 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d  ess .** of a mem
2b8a0 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68 69 73  ory cell in this
2b8b0 20 28 74 68 65 20 70 61 72 65 6e 74 29 20 56 4d   (the parent) VM
2b8c0 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74 6f   that is used to
2b8d0 20 61 6c 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a   allocate the .*
2b8e0 2a 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  * memory require
2b8f0 64 20 62 79 20 74 68 65 20 73 75 62 2d 76 64 62  d by the sub-vdb
2b900 65 20 61 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a  e at runtime..**
2b910 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2b920 74 65 72 20 74 6f 20 74 68 65 20 56 4d 20 63 6f  ter to the VM co
2b930 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72 69  ntaining the tri
2b940 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a  gger program..**
2b950 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 6e  .** If P5 is non
2b960 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 63 75  -zero, then recu
2b970 72 73 69 76 65 20 70 72 6f 67 72 61 6d 20 69 6e  rsive program in
2b980 76 6f 63 61 74 69 6f 6e 20 69 73 20 65 6e 61 62  vocation is enab
2b990 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  led..*/.case OP_
2b9a0 50 72 6f 67 72 61 6d 3a 20 7b 20 20 20 20 20 20  Program: {      
2b9b0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
2b9c0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
2b9d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
2b9e0 20 6f 66 20 6d 65 6d 6f 72 79 20 72 65 67 69 73   of memory regis
2b9f0 74 65 72 73 20 66 6f 72 20 73 75 62 2d 70 72 6f  ters for sub-pro
2ba00 67 72 61 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  gram */.  int nB
2ba10 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
2ba20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66 20 72 75    /* Bytes of ru
2ba30 6e 74 69 6d 65 20 73 70 61 63 65 20 72 65 71 75  ntime space requ
2ba40 69 72 65 64 20 66 6f 72 20 73 75 62 2d 70 72 6f  ired for sub-pro
2ba50 67 72 61 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  gram */.  Mem *p
2ba60 52 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Rt;             
2ba70 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
2ba80 20 61 6c 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d   allocate runtim
2ba90 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d  e space */.  Mem
2baa0 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20 20   *pMem;         
2bab0 20 20 20 20 20 2f 2a 20 55 73 65 64 20 74 6f 20       /* Used to 
2bac0 69 74 65 72 61 74 65 20 74 68 72 6f 75 67 68 20  iterate through 
2bad0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a  memory cells */.
2bae0 20 20 4d 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20    Mem *pEnd;    
2baf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
2bb00 74 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  t memory cell in
2bb10 20 6e 65 77 20 61 72 72 61 79 20 2a 2f 0a 20 20   new array */.  
2bb20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d  VdbeFrame *pFram
2bb30 65 3b 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 76  e;      /* New v
2bb40 64 62 65 20 66 72 61 6d 65 20 74 6f 20 65 78 65  dbe frame to exe
2bb50 63 75 74 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62  cute in */.  Sub
2bb60 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67 72 61  Program *pProgra
2bb70 6d 3b 20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67  m;   /* Sub-prog
2bb80 72 61 6d 20 74 6f 20 65 78 65 63 75 74 65 20 2a  ram to execute *
2bb90 2f 0a 20 20 76 6f 69 64 20 2a 74 3b 20 20 20 20  /.  void *t;    
2bba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
2bbb0 6f 6b 65 6e 20 69 64 65 6e 74 69 66 79 69 6e 67  oken identifying
2bbc0 20 74 72 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70   trigger */..  p
2bbd0 50 72 6f 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70  Program = pOp->p
2bbe0 34 2e 70 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52  4.pProgram;.  pR
2bbf0 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
2bc00 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 50  3];.  assert( pP
2bc10 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b  rogram->nOp>0 );
2bc20 0a 20 20 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  .  .  /* If the 
2bc30 70 35 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72  p5 flag is clear
2bc40 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69 76 65  , then recursive
2bc50 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2bc60 72 69 67 67 65 72 73 20 69 73 20 0a 20 20 2a 2a  riggers is .  **
2bc70 20 64 69 73 61 62 6c 65 64 20 66 6f 72 20 62 61   disabled for ba
2bc80 63 6b 77 61 72 64 73 20 63 6f 6d 70 61 74 69 62  ckwards compatib
2bc90 69 6c 69 74 79 20 28 70 35 20 69 73 20 73 65 74  ility (p5 is set
2bca0 20 69 66 20 74 68 69 73 20 73 75 62 2d 70 72 6f   if this sub-pro
2bcb0 67 72 61 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61  gram.  ** is rea
2bcc0 6c 6c 79 20 61 20 74 72 69 67 67 65 72 2c 20 6e  lly a trigger, n
2bcd0 6f 74 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  ot a foreign key
2bce0 20 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65   action, and the
2bcf0 20 66 6c 61 67 20 73 65 74 0a 20 20 2a 2a 20 61   flag set.  ** a
2bd00 6e 64 20 63 6c 65 61 72 65 64 20 62 79 20 74 68  nd cleared by th
2bd10 65 20 22 50 52 41 47 4d 41 20 72 65 63 75 72 73  e "PRAGMA recurs
2bd20 69 76 65 5f 74 72 69 67 67 65 72 73 22 20 63 6f  ive_triggers" co
2bd30 6d 6d 61 6e 64 20 69 73 20 63 6c 65 61 72 29 2e  mmand is clear).
2bd40 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69  .  ** .  ** It i
2bd50 73 20 72 65 63 75 72 73 69 76 65 20 69 6e 76 6f  s recursive invo
2bd60 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67 67 65  cation of trigge
2bd70 72 73 2c 20 61 74 20 74 68 65 20 53 51 4c 20 6c  rs, at the SQL l
2bd80 65 76 65 6c 2c 20 74 68 61 74 20 69 73 20 0a 20  evel, that is . 
2bd90 20 2a 2a 20 64 69 73 61 62 6c 65 64 2e 20 49 6e   ** disabled. In
2bda0 20 73 6f 6d 65 20 63 61 73 65 73 20 61 20 73 69   some cases a si
2bdb0 6e 67 6c 65 20 74 72 69 67 67 65 72 20 6d 61 79  ngle trigger may
2bdc0 20 67 65 6e 65 72 61 74 65 20 6d 6f 72 65 20 74   generate more t
2bdd0 68 61 6e 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75  han one .  ** Su
2bde0 62 50 72 6f 67 72 61 6d 20 28 69 66 20 74 68 65  bProgram (if the
2bdf0 20 74 72 69 67 67 65 72 20 6d 61 79 20 62 65 20   trigger may be 
2be00 65 78 65 63 75 74 65 64 20 77 69 74 68 20 6d 6f  executed with mo
2be10 72 65 20 74 68 61 6e 20 6f 6e 65 20 64 69 66 66  re than one diff
2be20 65 72 65 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43  erent .  ** ON C
2be30 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
2be40 6d 29 2e 20 53 75 62 50 72 6f 67 72 61 6d 20 73  m). SubProgram s
2be50 74 72 75 63 74 75 72 65 73 20 61 73 73 6f 63 69  tructures associ
2be60 61 74 65 64 20 77 69 74 68 20 61 0a 20 20 2a 2a  ated with a.  **
2be70 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65 72 20   single trigger 
2be80 61 6c 6c 20 68 61 76 65 20 74 68 65 20 73 61 6d  all have the sam
2be90 65 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  e value for the 
2bea0 53 75 62 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e  SubProgram.token
2beb0 20 0a 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e   .  ** variable.
2bec0 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e    */.  if( pOp->
2bed0 70 35 20 29 7b 0a 20 20 20 20 74 20 3d 20 70 50  p5 ){.    t = pP
2bee0 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20  rogram->token;. 
2bef0 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d     for(pFrame=p-
2bf00 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 20  >pFrame; pFrame 
2bf10 26 26 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e  && pFrame->token
2bf20 21 3d 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  !=t; pFrame=pFra
2bf30 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
2bf40 20 20 69 66 28 20 70 46 72 61 6d 65 20 29 20 62    if( pFrame ) b
2bf50 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  reak;.  }..  if(
2bf60 20 70 2d 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e   p->nFrame>=db->
2bf70 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
2bf80 4d 49 54 5f 54 52 49 47 47 45 52 5f 44 45 50 54  MIT_TRIGGER_DEPT
2bf90 48 5d 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  H] ){.    rc = S
2bfa0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2bfb0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2bfc0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
2bfd0 62 2c 20 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76  b, "too many lev
2bfe0 65 6c 73 20 6f 66 20 74 72 69 67 67 65 72 20 72  els of trigger r
2bff0 65 63 75 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20  ecursion");.    
2c000 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
2c010 20 52 65 67 69 73 74 65 72 20 70 52 74 20 69 73   Register pRt is
2c020 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
2c030 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2c040 65 64 20 74 6f 20 73 61 76 65 20 74 68 65 20 73  ed to save the s
2c050 74 61 74 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65  tate.  ** of the
2c060 20 63 75 72 72 65 6e 74 20 70 72 6f 67 72 61 6d   current program
2c070 2c 20 61 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79  , and the memory
2c080 20 72 65 71 75 69 72 65 64 20 61 74 20 72 75 6e   required at run
2c090 74 69 6d 65 20 74 6f 20 65 78 65 63 75 74 65 0a  time to execute.
2c0a0 20 20 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72    ** the trigger
2c0b0 20 70 72 6f 67 72 61 6d 2e 20 49 66 20 74 68 69   program. If thi
2c0c0 73 20 74 72 69 67 67 65 72 20 68 61 73 20 62 65  s trigger has be
2c0d0 65 6e 20 66 69 72 65 64 20 62 65 66 6f 72 65 2c  en fired before,
2c0e0 20 74 68 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20   then pRt .  ** 
2c0f0 69 73 20 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63  is already alloc
2c100 61 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c  ated. Otherwise,
2c110 20 69 74 20 6d 75 73 74 20 62 65 20 69 6e 69 74   it must be init
2c120 69 61 6c 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69  ialized.  */.  i
2c130 66 28 20 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d  f( (pRt->flags&M
2c140 45 4d 5f 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a  EM_Frame)==0 ){.
2c150 20 20 20 20 2f 2a 20 53 75 62 50 72 6f 67 72 61      /* SubProgra
2c160 6d 2e 6e 4d 65 6d 20 69 73 20 73 65 74 20 74 6f  m.nMem is set to
2c170 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d   the number of m
2c180 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64  emory cells used
2c190 20 62 79 20 74 68 65 20 0a 20 20 20 20 2a 2a 20   by the .    ** 
2c1a0 70 72 6f 67 72 61 6d 20 73 74 6f 72 65 64 20 69  program stored i
2c1b0 6e 20 53 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70  n SubProgram.aOp
2c1c0 2e 20 41 73 20 77 65 6c 6c 20 61 73 20 74 68 65  . As well as the
2c1d0 73 65 2c 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20  se, one memory. 
2c1e0 20 20 20 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65     ** cell is re
2c1f0 71 75 69 72 65 64 20 66 6f 72 20 65 61 63 68 20  quired for each 
2c200 63 75 72 73 6f 72 20 75 73 65 64 20 62 79 20 74  cursor used by t
2c210 68 65 20 70 72 6f 67 72 61 6d 2e 20 53 65 74 20  he program. Set 
2c220 6c 6f 63 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72  local.    ** var
2c230 69 61 62 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20  iable nMem (and 
2c240 6c 61 74 65 72 2c 20 56 64 62 65 46 72 61 6d 65  later, VdbeFrame
2c250 2e 6e 43 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74  .nChildMem) to t
2c260 68 69 73 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a  his value..    *
2c270 2f 0a 20 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72  /.    nMem = pPr
2c280 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50  ogram->nMem + pP
2c290 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20  rogram->nCsr;.  
2c2a0 20 20 6e 42 79 74 65 20 3d 20 52 4f 55 4e 44 38    nByte = ROUND8
2c2b0 28 73 69 7a 65 6f 66 28 56 64 62 65 46 72 61 6d  (sizeof(VdbeFram
2c2c0 65 29 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  e)).            
2c2d0 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f    + nMem * sizeo
2c2e0 66 28 4d 65 6d 29 0a 20 20 20 20 20 20 20 20 20  f(Mem).         
2c2f0 20 20 20 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d       + pProgram-
2c300 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f 66 28 56  >nCsr * sizeof(V
2c310 64 62 65 43 75 72 73 6f 72 20 2a 29 0a 20 20 20  dbeCursor *).   
2c320 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
2c330 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73  ogram->nOnce * s
2c340 69 7a 65 6f 66 28 75 38 29 3b 0a 20 20 20 20 70  izeof(u8);.    p
2c350 46 72 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 44  Frame = sqlite3D
2c360 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20  bMallocZero(db, 
2c370 6e 42 79 74 65 29 3b 0a 20 20 20 20 69 66 28 20  nByte);.    if( 
2c380 21 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 20  !pFrame ){.     
2c390 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2c3a0 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
2c3b0 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 70 52  dbeMemRelease(pR
2c3c0 74 29 3b 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61  t);.    pRt->fla
2c3d0 67 73 20 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a  gs = MEM_Frame;.
2c3e0 20 20 20 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d      pRt->u.pFram
2c3f0 65 20 3d 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20  e = pFrame;..   
2c400 20 70 46 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a   pFrame->v = p;.
2c410 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69      pFrame->nChi
2c420 6c 64 4d 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20  ldMem = nMem;.  
2c430 20 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64    pFrame->nChild
2c440 43 73 72 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Csr = pProgram->
2c450 6e 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  nCsr;.    pFrame
2c460 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 70  ->pc = pc;.    p
2c470 46 72 61 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d  Frame->aMem = p-
2c480 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >aMem;.    pFram
2c490 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65  e->nMem = p->nMe
2c4a0 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  m;.    pFrame->a
2c4b0 70 43 73 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b  pCsr = p->apCsr;
2c4c0 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75  .    pFrame->nCu
2c4d0 72 73 6f 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f  rsor = p->nCurso
2c4e0 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61  r;.    pFrame->a
2c4f0 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
2c500 20 70 46 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70   pFrame->nOp = p
2c510 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d  ->nOp;.    pFram
2c520 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67  e->token = pProg
2c530 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2c540 70 46 72 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61  pFrame->aOnceFla
2c550 67 20 3d 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  g = p->aOnceFlag
2c560 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2c570 6e 63 65 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e  nceFlag = p->nOn
2c580 63 65 46 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e  ceFlag;..    pEn
2c590 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  d = &VdbeFrameMe
2c5a0 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d 65  m(pFrame)[pFrame
2c5b0 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20  ->nChildMem];.  
2c5c0 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46    for(pMem=VdbeF
2c5d0 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b  rameMem(pFrame);
2c5e0 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65   pMem!=pEnd; pMe
2c5f0 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d  m++){.      pMem
2c600 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
2c610 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20 70  defined;.      p
2c620 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20  Mem->db = db;.  
2c630 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
2c640 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75   pFrame = pRt->u
2c650 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73 73  .pFrame;.    ass
2c660 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2c670 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43  Mem+pProgram->nC
2c680 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69  sr==pFrame->nChi
2c690 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73 73  ldMem );.    ass
2c6a0 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e  ert( pProgram->n
2c6b0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2c6c0 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73  ildCsr );.    as
2c6d0 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d 65  sert( pc==pFrame
2c6e0 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70  ->pc );.  }..  p
2c6f0 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46  ->nFrame++;.  pF
2c700 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20  rame->pParent = 
2c710 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46 72  p->pFrame;.  pFr
2c720 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d  ame->lastRowid =
2c730 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46   lastRowid;.  pF
2c740 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
2c750 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d  p->nChange;.  p-
2c760 3e 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20  >nChange = 0;.  
2c770 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
2c780 6d 65 3b 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20  me;.  p->aMem = 
2c790 61 4d 65 6d 20 3d 20 26 56 64 62 65 46 72 61 6d  aMem = &VdbeFram
2c7a0 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d  eMem(pFrame)[-1]
2c7b0 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
2c7c0 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
2c7d0 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
2c7e0 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
2c7f0 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
2c800 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
2c810 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
2c820 6d 2b 31 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d  m+1];.  p->aOp =
2c830 20 61 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d   aOp = pProgram-
2c840 3e 61 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d  >aOp;.  p->nOp =
2c850 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a   pProgram->nOp;.
2c860 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d    p->aOnceFlag =
2c870 20 28 75 38 20 2a 29 26 70 2d 3e 61 70 43 73 72   (u8 *)&p->apCsr
2c880 5b 70 2d 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20  [p->nCursor];.  
2c890 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  p->nOnceFlag = p
2c8a0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a  Program->nOnce;.
2c8b0 20 20 70 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d    pc = -1;.  mem
2c8c0 73 65 74 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67  set(p->aOnceFlag
2c8d0 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61  , 0, p->nOnceFla
2c8e0 67 29 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  g);..  break;.}.
2c8f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
2c900 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
2c910 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2c920 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
2c930 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
2c940 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
2c950 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
2c960 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
2c970 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
2c980 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
2c990 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
2c9a0 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
2c9b0 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
2c9c0 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
2c9d0 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
2c9e0 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
2c9f0 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
2ca00 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
2ca10 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
2ca20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
2ca30 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
2ca40 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
2ca50 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
2ca60 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
2ca70 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
2ca80 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
2ca90 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
2caa0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2cab0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
2cac0 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
2cad0 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
2cae0 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2caf0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
2cb00 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
2cb10 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
2cb20 65 61 73 65 20 2a 2f 0a 20 20 56 64 62 65 46 72  ease */.  VdbeFr
2cb30 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d  ame *pFrame;.  M
2cb40 65 6d 20 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d  em *pIn;.  pFram
2cb50 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20  e = p->pFrame;. 
2cb60 20 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e   pIn = &pFrame->
2cb70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70  aMem[pOp->p1 + p
2cb80 46 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d  Frame->aOp[pFram
2cb90 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20  e->pc].p1];   . 
2cba0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2cbb0 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
2cbc0 20 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29   pIn, MEM_Ephem)
2cbd0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65  ;.  break;.}..#e
2cbe0 6e 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20  ndif /* #ifndef 
2cbf0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2cc00 47 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  GER */..#ifndef 
2cc10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
2cc20 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64  IGN_KEY./* Opcod
2cc30 65 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20  e: FkCounter P1 
2cc40 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2cc50 70 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b  psis: fkctr[P1]+
2cc60 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d  =P2.**.** Increm
2cc70 65 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e  ent a "constrain
2cc80 74 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32  t counter" by P2
2cc90 20 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61   (P2 may be nega
2cca0 74 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65  tive or positive
2ccb0 29 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e  )..** If P1 is n
2ccc0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74  on-zero, the dat
2ccd0 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74  abase constraint
2cce0 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72   counter is incr
2ccf0 65 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66  emented .** (def
2cd00 65 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65  erred foreign ke
2cd10 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20  y constraints). 
2cd20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31  Otherwise, if P1
2cd30 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a   is zero, the .*
2cd40 2a 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e  * statement coun
2cd50 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ter is increment
2cd60 65 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ed (immediate fo
2cd70 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2cd80 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20  aints)..*/.case 
2cd90 4f 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a  OP_FkCounter: {.
2cda0 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20    if( db->flags 
2cdb0 26 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b  & SQLITE_DeferFK
2cdc0 73 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  s ){.    db->nDe
2cdd0 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d  ferredImmCons +=
2cde0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73   pOp->p2;.  }els
2cdf0 65 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b  e if( pOp->p1 ){
2ce00 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72  .    db->nDeferr
2ce10 65 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70  edCons += pOp->p
2ce20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
2ce30 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
2ce40 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d   += pOp->p2;.  }
2ce50 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2ce60 4f 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f  Opcode: FkIfZero
2ce70 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2ce80 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63  Synopsis: if fkc
2ce90 74 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50  tr[P1]==0 goto P
2cea0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
2ceb0 6f 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66  ode tests if a f
2cec0 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
2ced0 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73  raint-counter is
2cee0 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e   currently zero.
2cef0 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20  .** If so, jump 
2cf00 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50  to instruction P
2cf10 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61  2. Otherwise, fa
2cf20 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2cf30 65 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72  e next .** instr
2cf40 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  uction..**.** If
2cf50 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P1 is non-zero,
2cf60 20 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69   then the jump i
2cf70 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64  s taken if the d
2cf80 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69  atabase constrai
2cf90 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73  nt-counter.** is
2cfa0 20 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74   zero (the one t
2cfb0 68 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72  hat counts defer
2cfc0 72 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76  red constraint v
2cfd0 69 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50  iolations). If P
2cfe0 31 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68  1 is.** zero, th
2cff0 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
2d000 69 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  if the statement
2d010 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
2d020 74 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28  ter is zero.** (
2d030 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67  immediate foreig
2d040 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d050 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f   violations)..*/
2d060 0a 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72  .case OP_FkIfZer
2d070 6f 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  o: {         /* 
2d080 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f  jump */.  if( pO
2d090 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62  p->p1 ){.    Vdb
2d0a0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d  eBranchTaken(db-
2d0b0 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d  >nDeferredCons==
2d0c0 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72  0 && db->nDeferr
2d0d0 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29  edImmCons==0, 2)
2d0e0 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44  ;.    if( db->nD
2d0f0 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2d100 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2d110 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d  mmCons==0 ) pc =
2d120 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65   pOp->p2-1;.  }e
2d130 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
2d140 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
2d150 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2d160 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2d170 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
2d180 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
2d190 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
2d1a0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
2d1b0 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  ==0 ) pc = pOp->
2d1c0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
2d1d0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23  k;.}.#endif /* #
2d1e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2d1f0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a  IT_FOREIGN_KEY *
2d200 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
2d210 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2d220 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  MENT./* Opcode: 
2d230 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20 2a  MemMax P1 P2 * *
2d240 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2d250 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c  r[P1]=max(r[P1],
2d260 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20  r[P2]).**.** P1 
2d270 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69 6e  is a register in
2d280 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20   the root frame 
2d290 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65 20  of this VM (the 
2d2a0 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a  root frame is.**
2d2b0 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d 20   different from 
2d2c0 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d  the current fram
2d2d0 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72 75  e if this instru
2d2e0 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20 65  ction is being e
2d2f0 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68 69  xecuted.** withi
2d300 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d 29  n a sub-program)
2d310 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65 20  . Set the value 
2d320 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20 74  of register P1 t
2d330 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  o the maximum of
2d340 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e 74   .** its current
2d350 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20 76   value and the v
2d360 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
2d370 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
2d380 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72 6f  instruction thro
2d390 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20 74  ws an error if t
2d3a0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69  he memory cell i
2d3b0 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a  s not initially.
2d3c0 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ** an integer..*
2d3d0 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78  /.case OP_MemMax
2d3e0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69 6e  : {        /* in
2d3f0 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  2 */.  VdbeFrame
2d400 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28 20   *pFrame;.  if( 
2d410 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
2d420 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70   for(pFrame=p->p
2d430 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70  Frame; pFrame->p
2d440 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70  Parent; pFrame=p
2d450 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b  Frame->pParent);
2d460 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46 72  .    pIn1 = &pFr
2d470 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70  ame->aMem[pOp->p
2d480 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
2d490 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2d4a0 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73  p->p1];.  }.  as
2d4b0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
2d4c0 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69  (pIn1) );.  sqli
2d4d0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
2d4e0 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
2d4f0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
2d500 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
2d510 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
2d520 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  pIn2);.  if( pIn
2d530 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69  1->u.i<pIn2->u.i
2d540 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69  ){.    pIn1->u.i
2d550 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20   = pIn2->u.i;.  
2d560 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
2d570 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
2d580 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  IT_AUTOINCREMENT
2d590 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2d5a0 49 66 50 6f 73 20 50 31 20 50 32 20 2a 20 2a 20  IfPos P1 P2 * * 
2d5b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  *.** Synopsis: i
2d5c0 66 20 72 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50  f r[P1]>0 goto P
2d5d0 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76  2.**.** If the v
2d5e0 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
2d5f0 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65 61   P1 is 1 or grea
2d600 74 65 72 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ter, jump to P2.
2d610 0a 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c  .**.** It is ill
2d620 65 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73  egal to use this
2d630 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20   instruction on 
2d640 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
2d650 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74  does.** not cont
2d660 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20  ain an integer. 
2d670 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61   An assertion fa
2d680 75 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20  ult will result 
2d690 69 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63  if you try..*/.c
2d6a0 61 73 65 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20  ase OP_IfPos: { 
2d6b0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2d6c0 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2d6d0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2d6e0 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2d6f0 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2d700 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
2d710 65 6e 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c  en( pIn1->u.i>0,
2d720 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2d730 3e 75 2e 69 3e 30 20 29 7b 0a 20 20 20 20 20 70  >u.i>0 ){.     p
2d740 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2d750 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d760 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65  ./* Opcode: IfNe
2d770 67 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  g P1 P2 P3 * *.*
2d780 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31  * Synopsis: r[P1
2d790 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d 3c  ]+=P3, if r[P1]<
2d7a0 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  0 goto P2.**.** 
2d7b0 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73 74  Register P1 must
2d7c0 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65   contain an inte
2d7d0 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72 61  ger.  Add litera
2d7e0 6c 20 50 33 20 74 6f 20 74 68 65 20 76 61 6c 75  l P3 to the valu
2d7f0 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  e in.** register
2d800 20 50 31 20 74 68 65 6e 20 69 66 20 74 68 65 20   P1 then if the 
2d810 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
2d820 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61  r P1 is less tha
2d830 6e 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20  n zero, jump to 
2d840 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P2. .*/.case OP_
2d850 49 66 4e 65 67 3a 20 7b 20 20 20 20 20 20 20 20  IfNeg: {        
2d860 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2d870 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2d880 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2d890 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2d8a0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31  EM_Int );.  pIn1
2d8b0 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33  ->u.i += pOp->p3
2d8c0 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
2d8d0 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c  ken(pIn1->u.i<0,
2d8e0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
2d8f0 3e 75 2e 69 3c 30 20 29 7b 0a 20 20 20 20 20 70  >u.i<0 ){.     p
2d900 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
2d910 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d920 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 5a 65  ./* Opcode: IfZe
2d930 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ro P1 P2 P3 * *.
2d940 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2d950 31 5d 2b 3d 50 33 2c 20 69 66 20 72 5b 50 31 5d  1]+=P3, if r[P1]
2d960 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  ==0 goto P2.**.*
2d970 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50  * The register P
2d980 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  1 must contain a
2d990 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 64 64 20  n integer.  Add 
2d9a0 6c 69 74 65 72 61 6c 20 50 33 20 74 6f 20 74 68  literal P3 to th
2d9b0 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65  e.** value in re
2d9c0 67 69 73 74 65 72 20 50 31 2e 20 20 49 66 20 74  gister P1.  If t
2d9d0 68 65 20 72 65 73 75 6c 74 20 69 73 20 65 78 61  he result is exa
2d9e0 63 74 6c 79 20 30 2c 20 6a 75 6d 70 20 74 6f 20  ctly 0, jump to 
2d9f0 50 32 2e 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  P2. .*/.case OP_
2da00 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20  IfZero: {       
2da10 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
2da20 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2da30 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
2da40 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26  rt( pIn1->flags&
2da50 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 49 6e  MEM_Int );.  pIn
2da60 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70  1->u.i += pOp->p
2da70 33 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  3;.  VdbeBranchT
2da80 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d  aken(pIn1->u.i==
2da90 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e  0, 2);.  if( pIn
2daa0 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20 20 20  1->u.i==0 ){.   
2dab0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
2dac0 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
2dad0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2dae0 67 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50  ggStep * P2 P3 P
2daf0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2db00 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
2db10 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
2db20 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
2db30 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
2db40 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
2db50 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
2db60 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
2db70 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
2db80 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2db90 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
2dba0 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
2dbb0 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73  he function.  Us
2dbc0 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33  e register.** P3
2dbd0 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61   as the accumula
2dbe0 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  tor..**.** The P
2dbf0 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20  5 arguments are 
2dc00 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
2dc10 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a  ter P2 and its.*
2dc20 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f  * successors..*/
2dc30 0a 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70  .case OP_AggStep
2dc40 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69  : {.  int n;.  i
2dc50 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65  nt i;.  Mem *pMe
2dc60 6d 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a  m;.  Mem *pRec;.
2dc70 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
2dc80 74 20 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33  t ctx;.  sqlite3
2dc90 5f 76 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a  _value **apVal;.
2dca0 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
2dcb0 20 20 61 73 73 65 72 74 28 20 6e 3e 3d 30 20 29    assert( n>=0 )
2dcc0 3b 0a 20 20 70 52 65 63 20 3d 20 26 61 4d 65 6d  ;.  pRec = &aMem
2dcd0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 70 56  [pOp->p2];.  apV
2dce0 61 6c 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  al = p->apArg;. 
2dcf0 20 61 73 73 65 72 74 28 20 61 70 56 61 6c 20 7c   assert( apVal |
2dd00 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20 66 6f 72 28  | n==0 );.  for(
2dd10 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70  i=0; i<n; i++, p
2dd20 52 65 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  Rec++){.    asse
2dd30 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
2dd40 52 65 63 29 20 29 3b 0a 20 20 20 20 61 70 56 61  Rec) );.    apVa
2dd50 6c 5b 69 5d 20 3d 20 70 52 65 63 3b 0a 20 20 20  l[i] = pRec;.   
2dd60 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
2dd70 65 28 70 2c 20 70 52 65 63 29 3b 0a 20 20 7d 0a  e(p, pRec);.  }.
2dd80 20 20 63 74 78 2e 70 46 75 6e 63 20 3d 20 70 4f    ctx.pFunc = pO
2dd90 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 61  p->p4.pFunc;.  a
2dda0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ddb0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
2ddc0 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2ddd0 29 20 29 3b 0a 20 20 63 74 78 2e 70 4d 65 6d 20  ) );.  ctx.pMem 
2dde0 3d 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  = pMem = &aMem[p
2ddf0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 4d 65 6d 2d  Op->p3];.  pMem-
2de00 3e 6e 2b 2b 3b 0a 20 20 63 74 78 2e 73 2e 66 6c  >n++;.  ctx.s.fl
2de10 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
2de20 20 20 63 74 78 2e 73 2e 7a 20 3d 20 30 3b 0a 20    ctx.s.z = 0;. 
2de30 20 63 74 78 2e 73 2e 7a 4d 61 6c 6c 6f 63 20 3d   ctx.s.zMalloc =
2de40 20 30 3b 0a 20 20 63 74 78 2e 73 2e 78 44 65 6c   0;.  ctx.s.xDel
2de50 20 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 64 62   = 0;.  ctx.s.db
2de60 20 3d 20 64 62 3b 0a 20 20 63 74 78 2e 69 73 45   = db;.  ctx.isE
2de70 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2de80 70 43 6f 6c 6c 20 3d 20 30 3b 0a 20 20 63 74 78  pColl = 0;.  ctx
2de90 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2dea0 20 69 66 28 20 63 74 78 2e 70 46 75 6e 63 2d 3e   if( ctx.pFunc->
2deb0 66 75 6e 63 46 6c 61 67 73 20 26 20 53 51 4c 49  funcFlags & SQLI
2dec0 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
2ded0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2dee0 70 4f 70 3e 70 2d 3e 61 4f 70 20 29 3b 0a 20 20  pOp>p->aOp );.  
2def0 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2df00 5d 2e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ].p4type==P4_COL
2df10 4c 53 45 51 20 29 3b 0a 20 20 20 20 61 73 73 65  LSEQ );.    asse
2df20 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2df30 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2df40 3b 0a 20 20 20 20 63 74 78 2e 70 43 6f 6c 6c 20  ;.    ctx.pColl 
2df50 3d 20 70 4f 70 5b 2d 31 5d 2e 70 34 2e 70 43 6f  = pOp[-1].p4.pCo
2df60 6c 6c 3b 0a 20 20 7d 0a 20 20 28 63 74 78 2e 70  ll;.  }.  (ctx.p
2df70 46 75 6e 63 2d 3e 78 53 74 65 70 29 28 26 63 74  Func->xStep)(&ct
2df80 78 2c 20 6e 2c 20 61 70 56 61 6c 29 3b 20 2f 2a  x, n, apVal); /*
2df90 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33   IMP: R-24505-23
2dfa0 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 63 74 78  230 */.  if( ctx
2dfb0 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  .isError ){.    
2dfc0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
2dfd0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
2dfe0 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f  , "%s", sqlite3_
2dff0 76 61 6c 75 65 5f 74 65 78 74 28 26 63 74 78 2e  value_text(&ctx.
2e000 73 29 29 3b 0a 20 20 20 20 72 63 20 3d 20 63 74  s));.    rc = ct
2e010 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20  x.isError;.  }. 
2e020 20 69 66 28 20 63 74 78 2e 73 6b 69 70 46 6c 61   if( ctx.skipFla
2e030 67 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  g ){.    assert(
2e040 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d   pOp[-1].opcode=
2e050 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29 3b 0a 20  =OP_CollSeq );. 
2e060 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70     i = pOp[-1].p
2e070 31 3b 0a 20 20 20 20 69 66 28 20 69 20 29 20 73  1;.    if( i ) s
2e080 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2e090 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69 5d 2c 20  Int64(&aMem[i], 
2e0a0 31 29 3b 0a 20 20 7d 0a 0a 20 20 73 71 6c 69 74  1);.  }..  sqlit
2e0b0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
2e0c0 28 26 63 74 78 2e 73 29 3b 0a 0a 20 20 62 72 65  (&ctx.s);..  bre
2e0d0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e0e0 3a 20 41 67 67 46 69 6e 61 6c 20 50 31 20 50 32  : AggFinal P1 P2
2e0f0 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
2e100 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d  sis: accum=r[P1]
2e110 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63   N=P2.**.** Exec
2e120 75 74 65 20 74 68 65 20 66 69 6e 61 6c 69 7a 65  ute the finalize
2e130 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  r function for a
2e140 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 50 31  n aggregate.  P1
2e150 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72   is.** the memor
2e160 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68 61 74 20  y location that 
2e170 69 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  is the accumulat
2e180 6f 72 20 66 6f 72 20 74 68 65 20 61 67 67 72 65  or for the aggre
2e190 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69  gate..**.** P2 i
2e1a0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2e1b0 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 74  arguments that t
2e1c0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2e1d0 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34   takes and.** P4
2e1e0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
2e1f0 20 74 68 65 20 46 75 6e 63 44 65 66 20 66 6f 72   the FuncDef for
2e200 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20   this function. 
2e210 20 54 68 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d   The P2.** argum
2e220 65 6e 74 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ent is not used 
2e230 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
2e240 20 49 74 20 69 73 20 6f 6e 6c 79 20 74 68 65 72   It is only ther
2e250 65 20 74 6f 20 64 69 73 61 6d 62 69 67 75 61 74  e to disambiguat
2e260 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74  e.** functions t
2e270 68 61 74 20 63 61 6e 20 74 61 6b 65 20 76 61 72  hat can take var
2e280 79 69 6e 67 20 6e 75 6d 62 65 72 73 20 6f 66 20  ying numbers of 
2e290 61 72 67 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a  arguments.  The.
2e2a0 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69  ** P4 argument i
2e2b0 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f  s only needed fo
2e2c0 72 20 74 68 65 20 64 65 67 65 6e 65 72 61 74 65  r the degenerate
2e2d0 20 63 61 73 65 20 77 68 65 72 65 0a 2a 2a 20 74   case where.** t
2e2e0 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f 6e  he step function
2e2f0 20 77 61 73 20 6e 6f 74 20 70 72 65 76 69 6f 75   was not previou
2e300 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63  sly called..*/.c
2e310 61 73 65 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a  ase OP_AggFinal:
2e320 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a   {.  Mem *pMem;.
2e330 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2e340 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d  1>0 && pOp->p1<=
2e350 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2e360 73 6f 72 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d  sor) );.  pMem =
2e370 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2e380 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2e390 2d 3e 66 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f  ->flags & ~(MEM_
2e3a0 4e 75 6c 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d  Null|MEM_Agg))==
2e3b0 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  0 );.  rc = sqli
2e3c0 74 65 33 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69  te3VdbeMemFinali
2e3d0 7a 65 28 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34  ze(pMem, pOp->p4
2e3e0 2e 70 46 75 6e 63 29 3b 0a 20 20 69 66 28 20 72  .pFunc);.  if( r
2e3f0 63 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  c ){.    sqlite3
2e400 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
2e410 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
2e420 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
2e430 65 78 74 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a  ext(pMem));.  }.
2e440 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
2e450 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d  ngeEncoding(pMem
2e460 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
2e470 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
2e480 5a 45 28 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20  ZE(pMem);.  if( 
2e490 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
2e4a0 6f 42 69 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20  oBig(pMem) ){.  
2e4b0 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
2e4c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2e4d0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2e4e0 4d 49 54 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64  MIT_WAL./* Opcod
2e4f0 65 3a 20 43 68 65 63 6b 70 6f 69 6e 74 20 50 31  e: Checkpoint P1
2e500 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
2e510 20 43 68 65 63 6b 70 6f 69 6e 74 20 64 61 74 61   Checkpoint data
2e520 62 61 73 65 20 50 31 2e 20 54 68 69 73 20 69 73  base P1. This is
2e530 20 61 20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69   a no-op if P1 i
2e540 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20  s not currently 
2e550 69 6e 0a 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20  in.** WAL mode. 
2e560 50 61 72 61 6d 65 74 65 72 20 50 32 20 69 73 20  Parameter P2 is 
2e570 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 43 48  one of SQLITE_CH
2e580 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
2e590 2c 20 46 55 4c 4c 0a 2a 2a 20 6f 72 20 52 45 53  , FULL.** or RES
2e5a0 54 41 52 54 2e 20 20 57 72 69 74 65 20 31 20 6f  TART.  Write 1 o
2e5b0 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 5d  r 0 into mem[P3]
2e5c0 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f 69   if the checkpoi
2e5d0 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53 51  nt returns.** SQ
2e5e0 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f 74  LITE_BUSY or not
2e5f0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
2e600 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62 65   Write the numbe
2e610 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
2e620 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20 74  e.** WAL after t
2e630 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69 6e  he checkpoint in
2e640 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e 64  to mem[P3+1] and
2e650 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
2e660 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 57  ages.** in the W
2e670 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65 65  AL that have bee
2e680 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20 61  n checkpointed a
2e690 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2e6a0 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 73  int.** completes
2e6b0 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d 2e   into mem[P3+2].
2e6c0 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e 20    However on an 
2e6d0 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31 5d  error, mem[P3+1]
2e6e0 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b 32   and.** mem[P3+2
2e6f0 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65  ] are initialize
2e700 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73 65  d to -1..*/.case
2e710 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a 20   OP_Checkpoint: 
2e720 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  {.  int i;      
2e730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e740 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2e750 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52 65  ter */.  int aRe
2e760 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20 20  s[3];           
2e770 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
2e780 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d  lts */.  Mem *pM
2e790 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
2e7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69 74           /* Writ
2e7b0 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20 2a  e results here *
2e7c0 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  /..  assert( p->
2e7d0 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20  readOnly==0 );. 
2e7e0 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20 20   aRes[0] = 0;.  
2e7f0 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b 32  aRes[1] = aRes[2
2e800 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72 74  ] = -1;.  assert
2e810 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
2e820 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53  E_CHECKPOINT_PAS
2e830 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20 70  SIVE.       || p
2e840 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2e850 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a 20  HECKPOINT_FULL. 
2e860 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32        || pOp->p2
2e870 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  ==SQLITE_CHECKPO
2e880 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 29 3b  INT_RESTART.  );
2e890 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43  .  rc = sqlite3C
2e8a0 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f  heckpoint(db, pO
2e8b0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
2e8c0 26 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b  &aRes[1], &aRes[
2e8d0 32 5d 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  2]);.  if( rc==S
2e8e0 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
2e8f0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
2e900 3b 0a 20 20 20 20 61 52 65 73 5b 30 5d 20 3d 20  ;.    aRes[0] = 
2e910 31 3b 0a 20 20 7d 0a 20 20 66 6f 72 28 69 3d 30  1;.  }.  for(i=0
2e920 2c 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70  , pMem = &aMem[p
2e930 4f 70 2d 3e 70 33 5d 3b 20 69 3c 33 3b 20 69 2b  Op->p3]; i<3; i+
2e940 2b 2c 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20  +, pMem++){.    
2e950 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2e960 74 49 6e 74 36 34 28 70 4d 65 6d 2c 20 28 69 36  tInt64(pMem, (i6
2e970 34 29 61 52 65 73 5b 69 5d 29 3b 0a 20 20 7d 20  4)aRes[i]);.  } 
2e980 20 20 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 20     .  break;.}; 
2e990 20 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65   .#endif..#ifnde
2e9a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  f SQLITE_OMIT_PR
2e9b0 41 47 4d 41 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  AGMA./* Opcode: 
2e9c0 4a 6f 75 72 6e 61 6c 4d 6f 64 65 20 50 31 20 50  JournalMode P1 P
2e9d0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43  2 P3 * *.**.** C
2e9e0 68 61 6e 67 65 20 74 68 65 20 6a 6f 75 72 6e 61  hange the journa
2e9f0 6c 20 6d 6f 64 65 20 6f 66 20 64 61 74 61 62 61  l mode of databa
2ea00 73 65 20 50 31 20 74 6f 20 50 33 2e 20 50 33 20  se P1 to P3. P3 
2ea10 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20 74  must be one of t
2ea20 68 65 0a 2a 2a 20 50 41 47 45 52 5f 4a 4f 55 52  he.** PAGER_JOUR
2ea30 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 76 61 6c 75  NALMODE_XXX valu
2ea40 65 73 2e 20 49 66 20 63 68 61 6e 67 69 6e 67 20  es. If changing 
2ea50 62 65 74 77 65 65 6e 20 74 68 65 20 76 61 72 69  between the vari
2ea60 6f 75 73 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20  ous rollback.** 
2ea70 6d 6f 64 65 73 20 28 64 65 6c 65 74 65 2c 20 74  modes (delete, t
2ea80 72 75 6e 63 61 74 65 2c 20 70 65 72 73 69 73 74  runcate, persist
2ea90 2c 20 6f 66 66 20 61 6e 64 20 6d 65 6d 6f 72 79  , off and memory
2eaa0 29 2c 20 74 68 69 73 20 69 73 20 61 20 73 69 6d  ), this is a sim
2eab0 70 6c 65 0a 2a 2a 20 6f 70 65 72 61 74 69 6f 6e  ple.** operation
2eac0 2e 20 4e 6f 20 49 4f 20 69 73 20 72 65 71 75 69  . No IO is requi
2ead0 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 63 68  red..**.** If ch
2eae0 61 6e 67 69 6e 67 20 69 6e 74 6f 20 6f 72 20 6f  anging into or o
2eaf0 75 74 20 6f 66 20 57 41 4c 20 6d 6f 64 65 20 74  ut of WAL mode t
2eb00 68 65 20 70 72 6f 63 65 64 75 72 65 20 69 73 20  he procedure is 
2eb10 6d 6f 72 65 20 63 6f 6d 70 6c 69 63 61 74 65 64  more complicated
2eb20 2e 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  ..**.** Write a 
2eb30 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e  string containin
2eb40 67 20 74 68 65 20 66 69 6e 61 6c 20 6a 6f 75 72  g the final jour
2eb50 6e 61 6c 2d 6d 6f 64 65 20 74 6f 20 72 65 67 69  nal-mode to regi
2eb60 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
2eb70 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f 64 65 3a   OP_JournalMode:
2eb80 20 7b 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72   {    /* out2-pr
2eb90 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74  erelease */.  Bt
2eba0 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20  ree *pBt;       
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2ebc0 20 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65   Btree to change
2ebd0 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66   journal mode of
2ebe0 20 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61   */.  Pager *pPa
2ebf0 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ger;            
2ec00 20 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61        /* Pager a
2ec10 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70  ssociated with p
2ec20 42 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77  Bt */.  int eNew
2ec30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2ec40 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a          /* New j
2ec50 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20  ournal mode */. 
2ec60 20 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20   int eOld;      
2ec70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ec80 20 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72   /* The old jour
2ec90 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e  nal mode */.#ifn
2eca0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2ecb0 57 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  WAL.  const char
2ecc0 20 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20   *zFilename;    
2ecd0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
2ece0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66   database file f
2ecf0 6f 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e  or pPager */.#en
2ed00 64 69 66 0a 0a 20 20 65 4e 65 77 20 3d 20 70 4f  dif..  eNew = pO
2ed10 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
2ed20 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ed30 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
2ed40 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
2ed50 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ed60 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
2ed70 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2ed80 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
2ed90 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
2eda0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
2edb0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
2edc0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2edd0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2ede0 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
2edf0 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2ee00 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2ee10 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2ee20 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
2ee30 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
2ee40 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2ee50 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
2ee60 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
2ee70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2ee80 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
2ee90 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
2eea0 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
2eeb0 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
2eec0 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
2eed0 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
2eee0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
2eef0 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
2ef00 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
2ef10 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
2ef20 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
2ef30 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
2ef40 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
2ef50 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
2ef60 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
2ef70 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
2ef80 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
2ef90 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
2efa0 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
2efb0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
2efc0 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
2efd0 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
2efe0 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
2eff0 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
2f000 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
2f010 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
2f020 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
2f030 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
2f040 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f050 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
2f060 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
2f070 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
2f080 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
2f090 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
2f0a0 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
2f0b0 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
2f0c0 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
2f0d0 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
2f0e0 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
2f0f0 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2f100 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
2f110 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
2f120 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
2f130 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
2f140 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f150 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
2f160 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
2f170 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
2f180 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
2f190 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
2f1a0 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
2f1b0 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70  ite3SetString(&p
2f1c0 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 0a  ->zErrMsg, db, .
2f1d0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
2f1e0 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c 20  t change %s wal 
2f1f0 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69 6e  mode from within
2f200 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 2c   a transaction",
2f210 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65 77  .          (eNew
2f220 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f230 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f 22  ODE_WAL ? "into"
2f240 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20 20   : "out of").   
2f250 20 20 20 29 3b 0a 20 20 20 20 20 20 62 72 65 61     );.      brea
2f260 6b 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a  k;.    }else{. .
2f270 20 20 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d        if( eOld==
2f280 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
2f290 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20  E_WAL ){.       
2f2a0 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57   /* If leaving W
2f2b0 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74  AL mode, close t
2f2c0 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20  he log file. If 
2f2d0 73 75 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20  successful, the 
2f2e0 63 61 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20  call.        ** 
2f2f0 74 6f 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c  to PagerCloseWal
2f300 28 29 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61  () checkpoints a
2f310 6e 64 20 64 65 6c 65 74 65 73 20 74 68 65 20 77  nd deletes the w
2f320 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a  rite-ahead-log .
2f330 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
2f340 20 41 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f   An EXCLUSIVE lo
2f350 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20  ck may still be 
2f360 68 65 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61  held on the data
2f370 62 61 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20  base file .     
2f380 20 20 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75     ** after a su
2f390 63 63 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e  ccessful return.
2f3a0 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20   .        */.   
2f3b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
2f3c0 33 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70  3PagerCloseWal(p
2f3d0 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 20 20  Pager);.        
2f3e0 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
2f3f0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  K ){.          s
2f400 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f  qlite3PagerSetJo
2f410 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72  urnalMode(pPager
2f420 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20 20 20  , eNew);.       
2f430 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69   }.      }else i
2f440 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a  f( eOld==PAGER_J
2f450 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
2f460 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  Y ){.        /* 
2f470 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74 69 6f  Cannot transitio
2f480 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f 6d 20  n directly from 
2f490 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e 20 20  MEMORY to WAL.  
2f4a0 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20 20 20  Use mode OFF.   
2f4b0 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20 69 6e       ** as an in
2f4c0 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a 20 20  termediate */.  
2f4d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
2f4e0 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
2f4f0 28 70 50 61 67 65 72 2c 20 50 41 47 45 52 5f 4a  (pPager, PAGER_J
2f500 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 29 3b  OURNALMODE_OFF);
2f510 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20 20  .      }.  .    
2f520 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72 61 6e    /* Open a tran
2f530 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 20 64  saction on the d
2f540 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 52 65  atabase file. Re
2f550 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
2f560 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  journal.      **
2f570 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72 61 6e   mode, this tran
2f580 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73 20 75  saction always u
2f590 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a  ses a rollback j
2f5a0 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20 2a 2f  ournal..      */
2f5b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
2f5c0 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 54  qlite3BtreeIsInT
2f5d0 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29 3b 0a  rans(pBt)==0 );.
2f5e0 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2f5f0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2f600 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2f610 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e 28 70  treeSetVersion(p
2f620 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47 45 52  Bt, (eNew==PAGER
2f630 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2f640 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20 20 20   ? 2 : 1));.    
2f650 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65    }.    }.  }.#e
2f660 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66 20 53  ndif /* ifndef S
2f670 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 20 2a  QLITE_OMIT_WAL *
2f680 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20  /..  if( rc ){. 
2f690 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
2f6a0 20 20 7d 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c    }.  eNew = sql
2f6b0 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
2f6c0 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
2f6d0 65 4e 65 77 29 3b 0a 0a 20 20 70 4f 75 74 20 3d  eNew);..  pOut =
2f6e0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2f6f0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
2f700 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
2f710 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
2f720 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
2f730 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
2f740 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
2f750 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
2f760 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
2f770 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
2f780 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
2f790 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
2f7a0 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
2f7b0 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
2f7c0 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65 6e 64 69 66  break;.};.#endif
2f7d0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2f7e0 50 52 41 47 4d 41 20 2a 2f 0a 0a 23 69 66 20 21  PRAGMA */..#if !
2f7f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f800 4d 49 54 5f 56 41 43 55 55 4d 29 20 26 26 20 21  MIT_VACUUM) && !
2f810 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2f820 4d 49 54 5f 41 54 54 41 43 48 29 0a 2f 2a 20 4f  MIT_ATTACH)./* O
2f830 70 63 6f 64 65 3a 20 56 61 63 75 75 6d 20 2a 20  pcode: Vacuum * 
2f840 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 56 61  * * * *.**.** Va
2f850 63 75 75 6d 20 74 68 65 20 65 6e 74 69 72 65 20  cuum the entire 
2f860 64 61 74 61 62 61 73 65 2e 20 20 54 68 69 73 20  database.  This 
2f870 6f 70 63 6f 64 65 20 77 69 6c 6c 20 63 61 75 73  opcode will caus
2f880 65 20 6f 74 68 65 72 20 76 69 72 74 75 61 6c 0a  e other virtual.
2f890 2a 2a 20 6d 61 63 68 69 6e 65 73 20 74 6f 20 62  ** machines to b
2f8a0 65 20 63 72 65 61 74 65 64 20 61 6e 64 20 72 75  e created and ru
2f8b0 6e 2e 20 20 49 74 20 6d 61 79 20 6e 6f 74 20 62  n.  It may not b
2f8c0 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69  e called from wi
2f8d0 74 68 69 6e 0a 2a 2a 20 61 20 74 72 61 6e 73 61  thin.** a transa
2f8e0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
2f8f0 50 5f 56 61 63 75 75 6d 3a 20 7b 0a 20 20 61 73  P_Vacuum: {.  as
2f900 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
2f910 79 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  y==0 );.  rc = s
2f920 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d 28  qlite3RunVacuum(
2f930 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 29  &p->zErrMsg, db)
2f940 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
2f950 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69 6e 65  dif..#if !define
2f960 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2f970 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f 70 63  TOVACUUM)./* Opc
2f980 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75 6d 20  ode: IncrVacuum 
2f990 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
2f9a0 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69 6e 67  * Perform a sing
2f9b0 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65 20 69  le step of the i
2f9c0 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63 75 75  ncremental vacuu
2f9d0 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e 0a 2a  m procedure on.*
2f9e0 2a 20 74 68 65 20 50 31 20 64 61 74 61 62 61 73  * the P1 databas
2f9f0 65 2e 20 49 66 20 74 68 65 20 76 61 63 75 75 6d  e. If the vacuum
2fa00 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c 20 6a   has finished, j
2fa10 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2fa20 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65 72 77  on.** P2. Otherw
2fa30 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  ise, fall throug
2fa40 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
2fa50 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
2fa60 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d  se OP_IncrVacuum
2fa70 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
2fa80 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  mp */.  Btree *p
2fa90 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Bt;..  assert( p
2faa0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2fab0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
2fac0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2fad0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2fae0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
2faf0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
2fb00 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 42 74  Only==0 );.  pBt
2fb10 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e   = db->aDb[pOp->
2fb20 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20 3d 20  p1].pBt;.  rc = 
2fb30 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 63 72  sqlite3BtreeIncr
2fb40 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20 20 56  Vacuum(pBt);.  V
2fb50 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
2fb60 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 2c 32  c==SQLITE_DONE,2
2fb70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  );.  if( rc==SQL
2fb80 49 54 45 5f 44 4f 4e 45 20 29 7b 0a 20 20 20 20  ITE_DONE ){.    
2fb90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2fba0 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
2fbb0 45 5f 4f 4b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  E_OK;.  }.  brea
2fbc0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
2fbd0 4f 70 63 6f 64 65 3a 20 45 78 70 69 72 65 20 50  Opcode: Expire P
2fbe0 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
2fbf0 43 61 75 73 65 20 70 72 65 63 6f 6d 70 69 6c 65  Cause precompile
2fc00 64 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  d statements to 
2fc10 65 78 70 69 72 65 2e 20 20 57 68 65 6e 20 61 6e  expire.  When an
2fc20 20 65 78 70 69 72 65 64 20 73 74 61 74 65 6d 65   expired stateme
2fc30 6e 74 0a 2a 2a 20 69 73 20 65 78 65 63 75 74 65  nt.** is execute
2fc40 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
2fc50 73 74 65 70 28 29 20 69 74 20 77 69 6c 6c 20 65  step() it will e
2fc60 69 74 68 65 72 20 61 75 74 6f 6d 61 74 69 63 61  ither automatica
2fc70 6c 6c 79 0a 2a 2a 20 72 65 70 72 65 70 61 72 65  lly.** reprepare
2fc80 20 69 74 73 65 6c 66 20 28 69 66 20 69 74 20 77   itself (if it w
2fc90 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 72  as originally cr
2fca0 65 61 74 65 64 20 75 73 69 6e 67 20 73 71 6c 69  eated using sqli
2fcb0 74 65 33 5f 70 72 65 70 61 72 65 5f 76 32 28 29  te3_prepare_v2()
2fcc0 29 0a 2a 2a 20 6f 72 20 69 74 20 77 69 6c 6c 20  ).** or it will 
2fcd0 66 61 69 6c 20 77 69 74 68 20 53 51 4c 49 54 45  fail with SQLITE
2fce0 5f 53 43 48 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20  _SCHEMA..** .** 
2fcf0 49 66 20 50 31 20 69 73 20 30 2c 20 74 68 65 6e  If P1 is 0, then
2fd00 20 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65   all SQL stateme
2fd10 6e 74 73 20 62 65 63 6f 6d 65 20 65 78 70 69 72  nts become expir
2fd20 65 64 2e 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  ed. If P1 is non
2fd30 2d 7a 65 72 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f  -zero,.** then o
2fd40 6e 6c 79 20 74 68 65 20 63 75 72 72 65 6e 74 6c  nly the currentl
2fd50 79 20 65 78 65 63 75 74 69 6e 67 20 73 74 61 74  y executing stat
2fd60 65 6d 65 6e 74 20 69 73 20 65 78 70 69 72 65 64  ement is expired
2fd70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 78 70  ..*/.case OP_Exp
2fd80 69 72 65 3a 20 7b 0a 20 20 69 66 28 20 21 70 4f  ire: {.  if( !pO
2fd90 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
2fda0 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
2fdb0 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
2fdc0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
2fdd0 2d 3e 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20  ->expired = 1;. 
2fde0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23   }.  break;.}..#
2fdf0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2fe00 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a  IT_SHARED_CACHE.
2fe10 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 61 62 6c 65  /* Opcode: Table
2fe20 4c 6f 63 6b 20 50 31 20 50 32 20 50 33 20 50 34  Lock P1 P2 P3 P4
2fe30 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2fe40 69 44 62 3d 50 31 20 72 6f 6f 74 3d 50 32 20 77  iDb=P1 root=P2 w
2fe50 72 69 74 65 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62  rite=P3.**.** Ob
2fe60 74 61 69 6e 20 61 20 6c 6f 63 6b 20 6f 6e 20 61  tain a lock on a
2fe70 20 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c   particular tabl
2fe80 65 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  e. This instruct
2fe90 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ion is only used
2fea0 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 73 68 61   when.** the sha
2feb0 72 65 64 2d 63 61 63 68 65 20 66 65 61 74 75 72  red-cache featur
2fec0 65 20 69 73 20 65 6e 61 62 6c 65 64 2e 20 0a 2a  e is enabled. .*
2fed0 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
2fee0 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61  ndex of the data
2fef0 62 61 73 65 20 69 6e 20 73 71 6c 69 74 65 33 2e  base in sqlite3.
2ff00 61 44 62 5b 5d 20 6f 66 20 74 68 65 20 64 61 74  aDb[] of the dat
2ff10 61 62 61 73 65 0a 2a 2a 20 6f 6e 20 77 68 69 63  abase.** on whic
2ff20 68 20 74 68 65 20 6c 6f 63 6b 20 69 73 20 61 63  h the lock is ac
2ff30 71 75 69 72 65 64 2e 20 20 41 20 72 65 61 64 6c  quired.  A readl
2ff40 6f 63 6b 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ock is obtained 
2ff50 69 66 20 50 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61  if P3==0 or.** a
2ff60 20 77 72 69 74 65 20 6c 6f 63 6b 20 69 66 20 50   write lock if P
2ff70 33 3d 3d 31 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63  3==1..**.** P2 c
2ff80 6f 6e 74 61 69 6e 73 20 74 68 65 20 72 6f 6f 74  ontains the root
2ff90 2d 70 61 67 65 20 6f 66 20 74 68 65 20 74 61 62  -page of the tab
2ffa0 6c 65 20 74 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a  le to lock..**.*
2ffb0 2a 20 50 34 20 63 6f 6e 74 61 69 6e 73 20 61 20  * P4 contains a 
2ffc0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 6e  pointer to the n
2ffd0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
2ffe0 20 62 65 69 6e 67 20 6c 6f 63 6b 65 64 2e 20 54   being locked. T
2fff0 68 69 73 20 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75  his is only.** u
30000 73 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  sed to generate 
30010 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  an error message
30020 20 69 66 20 74 68 65 20 6c 6f 63 6b 20 63 61 6e   if the lock can
30030 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e 65 64 2e  not be obtained.
30040 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 61 62 6c  .*/.case OP_Tabl
30050 65 4c 6f 63 6b 3a 20 7b 0a 20 20 75 38 20 69 73  eLock: {.  u8 is
30060 57 72 69 74 65 4c 6f 63 6b 20 3d 20 28 75 38 29  WriteLock = (u8)
30070 70 4f 70 2d 3e 70 33 3b 0a 20 20 69 66 28 20 69  pOp->p3;.  if( i
30080 73 57 72 69 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d  sWriteLock || 0=
30090 3d 28 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49  =(db->flags&SQLI
300a0 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
300b0 65 64 29 20 29 7b 0a 20 20 20 20 69 6e 74 20 70  ed) ){.    int p
300c0 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 20 0a 20 20  1 = pOp->p1; .  
300d0 20 20 61 73 73 65 72 74 28 20 70 31 3e 3d 30 20    assert( p1>=0 
300e0 26 26 20 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  && p1<db->nDb );
300f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62 4d  .    assert( DbM
30100 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
30110 4d 61 73 6b 2c 20 70 31 29 20 29 3b 0a 20 20 20  Mask, p1) );.   
30120 20 61 73 73 65 72 74 28 20 69 73 57 72 69 74 65   assert( isWrite
30130 4c 6f 63 6b 3d 3d 30 20 7c 7c 20 69 73 57 72 69  Lock==0 || isWri
30140 74 65 4c 6f 63 6b 3d 3d 31 20 29 3b 0a 20 20 20  teLock==1 );.   
30150 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
30160 65 65 4c 6f 63 6b 54 61 62 6c 65 28 64 62 2d 3e  eeLockTable(db->
30170 61 44 62 5b 70 31 5d 2e 70 42 74 2c 20 70 4f 70  aDb[p1].pBt, pOp
30180 2d 3e 70 32 2c 20 69 73 57 72 69 74 65 4c 6f 63  ->p2, isWriteLoc
30190 6b 29 3b 0a 20 20 20 20 69 66 28 20 28 72 63 26  k);.    if( (rc&
301a0 30 78 46 46 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f  0xFF)==SQLITE_LO
301b0 43 4b 45 44 20 29 7b 0a 20 20 20 20 20 20 63 6f  CKED ){.      co
301c0 6e 73 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f  nst char *z = pO
301d0 70 2d 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 73  p->p4.z;.      s
301e0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
301f0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
30200 20 22 64 61 74 61 62 61 73 65 20 74 61 62 6c 65   "database table
30210 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c   is locked: %s",
30220 20 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   z);.    }.  }. 
30230 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
30240 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
30250 53 48 41 52 45 44 5f 43 41 43 48 45 20 2a 2f 0a  SHARED_CACHE */.
30260 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
30270 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
30280 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 42 65  E./* Opcode: VBe
30290 67 69 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a  gin * * * P4 *.*
302a0 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61  *.** P4 may be a
302b0 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 6e 20 73   pointer to an s
302c0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
302d0 63 74 75 72 65 2e 20 49 66 20 73 6f 2c 20 63 61  cture. If so, ca
302e0 6c 6c 20 74 68 65 20 0a 2a 2a 20 78 42 65 67 69  ll the .** xBegi
302f0 6e 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  n method for tha
30300 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41  t table..**.** A
30310 6c 73 6f 2c 20 77 68 65 74 68 65 72 20 6f 72 20  lso, whether or 
30320 6e 6f 74 20 50 34 20 69 73 20 73 65 74 2c 20 63  not P4 is set, c
30330 68 65 63 6b 20 74 68 61 74 20 74 68 69 73 20 69  heck that this i
30340 73 20 6e 6f 74 20 62 65 69 6e 67 20 63 61 6c 6c  s not being call
30350 65 64 20 66 72 6f 6d 0a 2a 2a 20 77 69 74 68 69  ed from.** withi
30360 6e 20 61 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  n a callback to 
30370 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  a virtual table 
30380 78 53 79 6e 63 28 29 20 6d 65 74 68 6f 64 2e 20  xSync() method. 
30390 49 66 20 69 74 20 69 73 2c 20 74 68 65 20 65 72  If it is, the er
303a0 72 6f 72 0a 2a 2a 20 63 6f 64 65 20 77 69 6c 6c  ror.** code will
303b0 20 62 65 20 73 65 74 20 74 6f 20 53 51 4c 49 54   be set to SQLIT
303c0 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f 0a 63 61 73  E_LOCKED..*/.cas
303d0 65 20 4f 50 5f 56 42 65 67 69 6e 3a 20 7b 0a 20  e OP_VBegin: {. 
303e0 20 56 54 61 62 6c 65 20 2a 70 56 54 61 62 3b 0a   VTable *pVTab;.
303f0 20 20 70 56 54 61 62 20 3d 20 70 4f 70 2d 3e 70    pVTab = pOp->p
30400 34 2e 70 56 74 61 62 3b 0a 20 20 72 63 20 3d 20  4.pVtab;.  rc = 
30410 73 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e  sqlite3VtabBegin
30420 28 64 62 2c 20 70 56 54 61 62 29 3b 0a 20 20 69  (db, pVTab);.  i
30430 66 28 20 70 56 54 61 62 20 29 20 73 71 6c 69 74  f( pVTab ) sqlit
30440 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
30450 73 67 28 70 2c 20 70 56 54 61 62 2d 3e 70 56 74  sg(p, pVTab->pVt
30460 61 62 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ab);.  break;.}.
30470 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30480 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
30490 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
304a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
304b0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
304c0 65 3a 20 56 43 72 65 61 74 65 20 50 31 20 2a 20  e: VCreate P1 * 
304d0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20  * P4 *.**.** P4 
304e0 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61  is the name of a
304f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69   virtual table i
30500 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 43  n database P1. C
30510 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
30520 6d 65 74 68 6f 64 0a 2a 2a 20 66 6f 72 20 74 68  method.** for th
30530 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
30540 65 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a  e OP_VCreate: {.
30550 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
30560 61 62 43 61 6c 6c 43 72 65 61 74 65 28 64 62 2c  abCallCreate(db,
30570 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
30580 34 2e 7a 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  4.z, &p->zErrMsg
30590 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  );.  break;.}.#e
305a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
305b0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
305c0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
305d0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
305e0 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
305f0 20 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a   VDestroy P1 * *
30600 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
30610 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  s the name of a 
30620 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e  virtual table in
30630 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43   database P1.  C
30640 61 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79  all the xDestroy
30650 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68   method.** of th
30660 61 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73  at table..*/.cas
30670 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b  e OP_VDestroy: {
30680 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68  .  p->inVtabMeth
30690 6f 64 20 3d 20 32 3b 0a 20 20 72 63 20 3d 20 73  od = 2;.  rc = s
306a0 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
306b0 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
306c0 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
306d0 20 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64   p->inVtabMethod
306e0 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   = 0;.  break;.}
306f0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
30700 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
30710 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
30720 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30730 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
30740 64 65 3a 20 56 4f 70 65 6e 20 50 31 20 2a 20 2a  de: VOpen P1 * *
30750 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
30760 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
30770 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
30780 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
30790 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
307a0 2e 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75 72  ..** P1 is a cur
307b0 73 6f 72 20 6e 75 6d 62 65 72 2e 20 20 54 68 69  sor number.  Thi
307c0 73 20 6f 70 63 6f 64 65 20 6f 70 65 6e 73 20 61  s opcode opens a
307d0 20 63 75 72 73 6f 72 20 74 6f 20 74 68 65 20 76   cursor to the v
307e0 69 72 74 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  irtual.** table 
307f0 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61 74 20  and stores that 
30800 63 75 72 73 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f  cursor in P1..*/
30810 0a 63 61 73 65 20 4f 50 5f 56 4f 70 65 6e 3a 20  .case OP_VOpen: 
30820 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
30830 70 43 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pCur;.  sqlite3_
30840 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 74  vtab_cursor *pVt
30850 61 62 43 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69  abCursor;.  sqli
30860 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
30870 0a 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  .  sqlite3_modul
30880 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 61  e *pModule;..  a
30890 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
308a0 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  der );.  pCur = 
308b0 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73 6f 72  0;.  pVtabCursor
308c0 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
308d0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
308e0 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
308f0 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
30900 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
30910 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 70 56 74  le;.  assert(pVt
30920 61 62 20 26 26 20 70 4d 6f 64 75 6c 65 29 3b 0a  ab && pModule);.
30930 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
30940 78 4f 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56  xOpen(pVtab, &pV
30950 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 73 71  tabCursor);.  sq
30960 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
30970 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
30980 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b  .  if( SQLITE_OK
30990 3d 3d 72 63 20 29 7b 0a 20 20 20 20 2f 2a 20 49  ==rc ){.    /* I
309a0 6e 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65  nitialize sqlite
309b0 33 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61  3_vtab_cursor ba
309c0 73 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 20 20  se class */.    
309d0 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
309e0 61 62 20 3d 20 70 56 74 61 62 3b 0a 0a 20 20 20  ab = pVtab;..   
309f0 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 76   /* Initialize v
30a00 64 62 65 20 63 75 72 73 6f 72 20 6f 62 6a 65 63  dbe cursor objec
30a10 74 20 2a 2f 0a 20 20 20 20 70 43 75 72 20 3d 20  t */.    pCur = 
30a20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
30a30 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 2d 31  , pOp->p1, 0, -1
30a40 2c 20 30 29 3b 0a 20 20 20 20 69 66 28 20 70 43  , 0);.    if( pC
30a50 75 72 20 29 7b 0a 20 20 20 20 20 20 70 43 75 72  ur ){.      pCur
30a60 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20  ->pVtabCursor = 
30a70 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20 20 20  pVtabCursor;.   
30a80 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62   }else{.      db
30a90 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d  ->mallocFailed =
30aa0 20 31 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c   1;.      pModul
30ab0 65 2d 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43  e->xClose(pVtabC
30ac0 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
30ad0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
30ae0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
30af0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
30b00 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
30b10 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
30b20 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
30b30 56 46 69 6c 74 65 72 20 50 31 20 50 32 20 50 33  VFilter P1 P2 P3
30b40 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
30b50 73 3a 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a  s: iplan=r[P3] z
30b60 70 6c 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20  plan='P4'.**.** 
30b70 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f  P1 is a cursor o
30b80 70 65 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65  pened using VOpe
30b90 6e 2e 20 20 50 32 20 69 73 20 61 6e 20 61 64 64  n.  P2 is an add
30ba0 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20  ress to jump to 
30bb0 69 66 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72  if.** the filter
30bc0 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 69 73  ed result set is
30bd0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34   empty..**.** P4
30be0 20 69 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20   is either NULL 
30bf0 6f 72 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  or a string that
30c00 20 77 61 73 20 67 65 6e 65 72 61 74 65 64 20 62   was generated b
30c10 79 20 74 68 65 20 78 42 65 73 74 49 6e 64 65 78  y the xBestIndex
30c20 0a 2a 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68  .** method of th
30c30 65 20 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69  e module.  The i
30c40 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
30c50 20 74 68 65 20 50 34 20 73 74 72 69 6e 67 20 69   the P4 string i
30c60 73 20 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65  s left.** to the
30c70 20 6d 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e   module implemen
30c80 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
30c90 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
30ca0 73 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  s the xFilter me
30cb0 74 68 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74  thod on the virt
30cc0 75 61 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66  ual table specif
30cd0 69 65 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54  ied.** by P1.  T
30ce0 68 65 20 69 6e 74 65 67 65 72 20 71 75 65 72 79  he integer query
30cf0 20 70 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20   plan parameter 
30d00 74 6f 20 78 46 69 6c 74 65 72 20 69 73 20 73 74  to xFilter is st
30d10 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72  ored in register
30d20 0a 2a 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72  .** P3. Register
30d30 20 50 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65   P3+1 stores the
30d40 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 20   argc parameter 
30d50 74 6f 20 62 65 20 70 61 73 73 65 64 20 74 6f 20  to be passed to 
30d60 74 68 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d  the.** xFilter m
30d70 65 74 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73  ethod. Registers
30d80 20 50 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63   P3+2..P3+1+argc
30d90 20 61 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a   are the argc.**
30da0 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61   additional para
30db0 6d 65 74 65 72 73 20 77 68 69 63 68 20 61 72 65  meters which are
30dc0 20 70 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46   passed to.** xF
30dd0 69 6c 74 65 72 20 61 73 20 61 72 67 76 2e 20 52  ilter as argv. R
30de0 65 67 69 73 74 65 72 20 50 33 2b 32 20 62 65 63  egister P3+2 bec
30df0 6f 6d 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65  omes argv[0] whe
30e00 6e 20 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c  n passed to xFil
30e10 74 65 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d  ter..**.** A jum
30e20 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20  p is made to P2 
30e30 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  if the result se
30e40 74 20 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e  t after filterin
30e50 67 20 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79  g would be empty
30e60 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69  ..*/.case OP_VFi
30e70 6c 74 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  lter: {   /* jum
30e80 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b  p */.  int nArg;
30e90 0a 20 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20  .  int iQuery;. 
30ea0 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
30eb0 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
30ec0 20 20 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20    Mem *pQuery;. 
30ed0 20 4d 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73   Mem *pArgc;.  s
30ee0 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73  qlite3_vtab_curs
30ef0 6f 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b  or *pVtabCursor;
30f00 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
30f10 2a 70 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75  *pVtab;.  VdbeCu
30f20 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e  rsor *pCur;.  in
30f30 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a  t res;.  int i;.
30f40 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a    Mem **apArg;..
30f50 20 20 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d    pQuery = &aMem
30f60 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72  [pOp->p3];.  pAr
30f70 67 63 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b  gc = &pQuery[1];
30f80 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43  .  pCur = p->apC
30f90 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
30fa0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
30fb0 64 28 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52  d(pQuery) );.  R
30fc0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
30fd0 70 2d 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a  p->p3, pQuery);.
30fe0 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
30ff0 70 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20  pVtabCursor );. 
31000 20 70 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70   pVtabCursor = p
31010 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
31020 3b 0a 20 20 70 56 74 61 62 20 3d 20 70 56 74 61  ;.  pVtab = pVta
31030 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
31040 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
31050 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f  b->pModule;..  /
31060 2a 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78  * Grab the index
31070 20 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63   number and argc
31080 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
31090 20 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79   assert( (pQuery
310a0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
310b0 21 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c  !=0 && pArgc->fl
310c0 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
310d0 20 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41    nArg = (int)pA
310e0 72 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65  rgc->u.i;.  iQue
310f0 72 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79  ry = (int)pQuery
31100 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76  ->u.i;..  /* Inv
31110 6f 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20  oke the xFilter 
31120 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20  method */.  {.  
31130 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61    res = 0;.    a
31140 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
31150 0a 20 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20  .    for(i = 0; 
31160 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
31170 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26      apArg[i] = &
31180 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20  pArgc[i+1];.    
31190 7d 0a 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61 62  }..    p->inVtab
311a0 4d 65 74 68 6f 64 20 3d 20 31 3b 0a 20 20 20 20  Method = 1;.    
311b0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 46  rc = pModule->xF
311c0 69 6c 74 65 72 28 70 56 74 61 62 43 75 72 73 6f  ilter(pVtabCurso
311d0 72 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e  r, iQuery, pOp->
311e0 70 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72  p4.z, nArg, apAr
311f0 67 29 3b 0a 20 20 20 20 70 2d 3e 69 6e 56 74 61  g);.    p->inVta
31200 62 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 20  bMethod = 0;.   
31210 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
31220 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
31230 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
31240 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
31250 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65     res = pModule
31260 2d 3e 78 45 6f 66 28 70 56 74 61 62 43 75 72 73  ->xEof(pVtabCurs
31270 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 56  or);.    }.    V
31280 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
31290 65 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66  es!=0,2);.    if
312a0 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20 20 70  ( res ){.      p
312b0 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
312c0 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 75  .    }.  }.  pCu
312d0 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a  r->nullRow = 0;.
312e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
312f0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
31300 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
31310 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
31320 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
31330 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
31340 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
31350 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31360 20 72 5b 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50   r[P3]=vcolumn(P
31370 32 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74  2).**.** Store t
31380 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
31390 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a  P2-th column of.
313a0 2a 2a 20 74 68 65 20 72 6f 77 20 6f 66 20 74 68  ** the row of th
313b0 65 20 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 20  e virtual-table 
313c0 74 68 61 74 20 74 68 65 20 0a 2a 2a 20 50 31 20  that the .** P1 
313d0 63 75 72 73 6f 72 20 69 73 20 70 6f 69 6e 74 69  cursor is pointi
313e0 6e 67 20 74 6f 20 69 6e 74 6f 20 72 65 67 69 73  ng to into regis
313f0 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20  ter P3..*/.case 
31400 4f 50 5f 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20  OP_VColumn: {.  
31410 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
31420 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
31430 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
31440 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65  dule;.  Mem *pDe
31450 73 74 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f  st;.  sqlite3_co
31460 6e 74 65 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a  ntext sContext;.
31470 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
31480 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
31490 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
314a0 74 28 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75  t( pCur->pVtabCu
314b0 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
314c0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
314d0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
314e0 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
314f0 20 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b    pDest = &aMem[
31500 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
31510 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
31520 70 44 65 73 74 29 3b 0a 20 20 69 66 28 20 70 43  pDest);.  if( pC
31530 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  ur->nullRow ){. 
31540 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
31550 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b  mSetNull(pDest);
31560 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
31570 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
31580 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70 56 74  pVtabCursor->pVt
31590 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
315a0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
315b0 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
315c0 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20  e->xColumn );.  
315d0 6d 65 6d 73 65 74 28 26 73 43 6f 6e 74 65 78 74  memset(&sContext
315e0 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 43 6f 6e  , 0, sizeof(sCon
315f0 74 65 78 74 29 29 3b 0a 0a 20 20 2f 2a 20 54 68  text));..  /* Th
31600 65 20 6f 75 74 70 75 74 20 63 65 6c 6c 20 6d 61  e output cell ma
31610 79 20 61 6c 72 65 61 64 79 20 68 61 76 65 20 61  y already have a
31620 20 62 75 66 66 65 72 20 61 6c 6c 6f 63 61 74 65   buffer allocate
31630 64 2e 20 4d 6f 76 65 0a 20 20 2a 2a 20 74 68 65  d. Move.  ** the
31640 20 63 75 72 72 65 6e 74 20 63 6f 6e 74 65 6e 74   current content
31650 73 20 74 6f 20 73 43 6f 6e 74 65 78 74 2e 73 20  s to sContext.s 
31660 73 6f 20 69 6e 20 63 61 73 65 20 74 68 65 20 75  so in case the u
31670 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 0a 20 20  ser-function .  
31680 2a 2a 20 63 61 6e 20 75 73 65 20 74 68 65 20 61  ** can use the a
31690 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
316a0 20 62 75 66 66 65 72 20 69 6e 73 74 65 61 64 20   buffer instead 
316b0 6f 66 20 61 6c 6c 6f 63 61 74 69 6e 67 20 61 20  of allocating a 
316c0 0a 20 20 2a 2a 20 6e 65 77 20 6f 6e 65 2e 0a 20  .  ** new one.. 
316d0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
316e0 65 4d 65 6d 4d 6f 76 65 28 26 73 43 6f 6e 74 65  eMemMove(&sConte
316f0 78 74 2e 73 2c 20 70 44 65 73 74 29 3b 0a 20 20  xt.s, pDest);.  
31700 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
31710 73 43 6f 6e 74 65 78 74 2e 73 2c 20 4d 45 4d 5f  sContext.s, MEM_
31720 4e 75 6c 6c 29 3b 0a 0a 20 20 72 63 20 3d 20 70  Null);..  rc = p
31730 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
31740 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31750 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f  r, &sContext, pO
31760 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69 74 65  p->p2);.  sqlite
31770 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
31780 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
31790 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72  f( sContext.isEr
317a0 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  ror ){.    rc = 
317b0 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
317c0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 43 6f 70 79  ;.  }..  /* Copy
317d0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74   the result of t
317e0 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 74  he function to t
317f0 68 65 20 50 33 20 72 65 67 69 73 74 65 72 2e 20  he P3 register. 
31800 57 65 0a 20 20 2a 2a 20 64 6f 20 74 68 69 73 20  We.  ** do this 
31810 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
31820 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
31830 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20 74  error occurred t
31840 6f 20 65 6e 73 75 72 65 20 61 6e 79 0a 20 20 2a  o ensure any.  *
31850 2a 20 64 79 6e 61 6d 69 63 20 61 6c 6c 6f 63 61  * dynamic alloca
31860 74 69 6f 6e 20 69 6e 20 73 43 6f 6e 74 65 78 74  tion in sContext
31870 2e 73 20 28 61 20 4d 65 6d 20 73 74 72 75 63 74  .s (a Mem struct
31880 29 20 69 73 20 20 72 65 6c 65 61 73 65 64 2e 0a  ) is  released..
31890 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64    */.  sqlite3Vd
318a0 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67  beChangeEncoding
318b0 28 26 73 43 6f 6e 74 65 78 74 2e 73 2c 20 65 6e  (&sContext.s, en
318c0 63 6f 64 69 6e 67 29 3b 0a 20 20 73 71 6c 69 74  coding);.  sqlit
318d0 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 44  e3VdbeMemMove(pD
318e0 65 73 74 2c 20 26 73 43 6f 6e 74 65 78 74 2e 73  est, &sContext.s
318f0 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
31900 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65  ACE(pOp->p3, pDe
31910 73 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  st);.  UPDATE_MA
31920 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74  X_BLOBSIZE(pDest
31930 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65  );..  if( sqlite
31940 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70  3VdbeMemTooBig(p
31950 44 65 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74  Dest) ){.    got
31960 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
31970 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
31980 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
31990 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
319a0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
319b0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
319c0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 4e 65  E./* Opcode: VNe
319d0 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  xt P1 P2 * * *.*
319e0 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76 69 72  *.** Advance vir
319f0 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20 74 6f  tual table P1 to
31a00 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20 69 6e   the next row in
31a10 20 69 74 73 20 72 65 73 75 6c 74 20 73 65 74 20   its result set 
31a20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 69  and.** jump to i
31a30 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 20  nstruction P2.  
31a40 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72 74 75  Or, if the virtu
31a50 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72 65 61  al table has rea
31a60 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e 64 20  ched.** the end 
31a70 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  of its result se
31a80 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  t, then fall thr
31a90 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
31aa0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
31ab0 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74 3a 20  .case OP_VNext: 
31ac0 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20  {   /* jump */. 
31ad0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
31ae0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
31af0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
31b00 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72 65 73  odule;.  int res
31b10 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  ;.  VdbeCursor *
31b20 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d 20 30  pCur;..  res = 0
31b30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e 61 70  ;.  pCur = p->ap
31b40 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
31b50 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
31b60 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  tabCursor );.  i
31b70 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  f( pCur->nullRow
31b80 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
31b90 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70 43 75   }.  pVtab = pCu
31ba0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 2d 3e  r->pVtabCursor->
31bb0 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65  pVtab;.  pModule
31bc0 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c   = pVtab->pModul
31bd0 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f  e;.  assert( pMo
31be0 64 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a  dule->xNext );..
31bf0 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
31c00 78 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f  xNext() method o
31c10 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68  f the module. Th
31c20 65 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f  ere is no way fo
31c30 72 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72  r the.  ** under
31c40 6c 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61  lying implementa
31c50 74 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61  tion to return a
31c60 6e 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f  n error if one o
31c70 63 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a  ccurs during.  *
31c80 2a 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65  * xNext(). Inste
31c90 61 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20  ad, if an error 
31ca0 6f 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20  occurs, true is 
31cb0 72 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61  returned (indica
31cc0 74 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20  ting that .  ** 
31cd0 64 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c  data is availabl
31ce0 65 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72  e) and the error
31cf0 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77   code returned w
31d00 68 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20  hen xColumn or. 
31d10 20 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d   ** some other m
31d20 65 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e  ethod is next in
31d30 76 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76  voked on the sav
31d40 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
31d50 63 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 70  cursor..  */.  p
31d60 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d  ->inVtabMethod =
31d70 20 31 3b 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75   1;.  rc = pModu
31d80 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72 2d 3e  le->xNext(pCur->
31d90 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
31da0 70 2d 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20  p->inVtabMethod 
31db0 3d 20 30 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  = 0;.  sqlite3Vt
31dc0 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
31dd0 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
31de0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
31df0 0a 20 20 20 20 72 65 73 20 3d 20 70 4d 6f 64 75  .    res = pModu
31e00 6c 65 2d 3e 78 45 6f 66 28 70 43 75 72 2d 3e 70  le->xEof(pCur->p
31e10 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 7d  VtabCursor);.  }
31e20 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
31e30 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20 69 66  en(!res,2);.  if
31e40 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a  ( !res ){.    /*
31e50 20 49 66 20 74 68 65 72 65 20 69 73 20 64 61 74   If there is dat
31e60 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f  a, jump to P2 */
31e70 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
31e80 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 67 6f 74  2 - 1;.  }.  got
31e90 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
31ea0 72 72 75 70 74 3b 0a 7d 0a 23 65 6e 64 69 66 20  rrupt;.}.#endif 
31eb0 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
31ec0 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
31ed0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31ee0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
31ef0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 52 65 6e  ./* Opcode: VRen
31f00 61 6d 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  ame P1 * * P4 *.
31f10 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  **.** P4 is a po
31f20 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75  inter to a virtu
31f30 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c  al table object,
31f40 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62   an sqlite3_vtab
31f50 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54   structure..** T
31f60 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b  his opcode invok
31f70 65 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  es the correspon
31f80 64 69 6e 67 20 78 52 65 6e 61 6d 65 20 6d 65 74  ding xRename met
31f90 68 6f 64 2e 20 54 68 65 20 76 61 6c 75 65 0a 2a  hod. The value.*
31fa0 2a 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  * in register P1
31fb0 20 69 73 20 70 61 73 73 65 64 20 61 73 20 74 68   is passed as th
31fc0 65 20 7a 4e 61 6d 65 20 61 72 67 75 6d 65 6e 74  e zName argument
31fd0 20 74 6f 20 74 68 65 20 78 52 65 6e 61 6d 65 20   to the xRename 
31fe0 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63 61 73 65 20  method..*/.case 
31ff0 4f 50 5f 56 52 65 6e 61 6d 65 3a 20 7b 0a 20 20  OP_VRename: {.  
32000 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
32010 74 61 62 3b 0a 20 20 4d 65 6d 20 2a 70 4e 61 6d  tab;.  Mem *pNam
32020 65 3b 0a 0a 20 20 70 56 74 61 62 20 3d 20 70 4f  e;..  pVtab = pO
32030 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70 56 74  p->p4.pVtab->pVt
32040 61 62 3b 0a 20 20 70 4e 61 6d 65 20 3d 20 26 61  ab;.  pName = &a
32050 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
32060 61 73 73 65 72 74 28 20 70 56 74 61 62 2d 3e 70  assert( pVtab->p
32070 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 20  Module->xRename 
32080 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  );.  assert( mem
32090 49 73 56 61 6c 69 64 28 70 4e 61 6d 65 29 20 29  IsValid(pName) )
320a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  ;.  assert( p->r
320b0 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
320c0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
320d0 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d 65 29 3b 0a  Op->p1, pName);.
320e0 20 20 61 73 73 65 72 74 28 20 70 4e 61 6d 65 2d    assert( pName-
320f0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72  >flags & MEM_Str
32100 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
32110 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
32120 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 74 65 73  TE_UTF8 );.  tes
32130 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
32140 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 42  c==SQLITE_UTF16B
32150 45 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  E );.  testcase(
32160 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c   pName->enc==SQL
32170 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20  ITE_UTF16LE );. 
32180 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
32190 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28  eChangeEncoding(
321a0 70 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 55 54  pName, SQLITE_UT
321b0 46 38 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  F8);.  if( rc==S
321c0 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
321d0 72 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64  rc = pVtab->pMod
321e0 75 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74  ule->xRename(pVt
321f0 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20  ab, pName->z);. 
32200 20 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d     sqlite3VtabIm
32210 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56  portErrmsg(p, pV
32220 74 61 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  tab);.    p->exp
32230 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
32240 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
32250 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
32260 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32270 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
32280 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
32290 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
322a0 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
322b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
322c0 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
322d0 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
322e0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
322f0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
32300 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
32310 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
32320 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
32330 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
32340 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
32350 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
32360 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
32370 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
32380 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
32390 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
323a0 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
323b0 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
323c0 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
323d0 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
323e0 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
323f0 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
32400 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
32410 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
32420 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
32430 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
32440 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
32450 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
32460 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
32470 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
32480 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
32490 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
324a0 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
324b0 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
324c0 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
324d0 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
324e0 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
324f0 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
32500 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
32510 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
32520 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
32530 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
32540 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
32550 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
32560 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
32570 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
32580 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
32590 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
325a0 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
325b0 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
325c0 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
325d0 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
325e0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
325f0 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
32600 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
32610 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
32620 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
32630 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
32640 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
32650 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
32660 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
32670 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
32680 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
32690 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
326a0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
326b0 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
326c0 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
326d0 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
326e0 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
326f0 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
32700 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
32710 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
32720 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
32730 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
32740 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
32750 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
32760 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
32770 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
32780 62 20 2a 70 56 74 61 62 3b 0a 20 20 73 71 6c 69  b *pVtab;.  sqli
32790 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64  te3_module *pMod
327a0 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ule;.  int nArg;
327b0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
327c0 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b 0a  te_int64 rowid;.
327d0 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 20    Mem **apArg;. 
327e0 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73 73   Mem *pX;..  ass
327f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31 20  ert( pOp->p2==1 
32800 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
32810 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c 20  5==OE_Fail   || 
32820 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c 6c  pOp->p5==OE_Roll
32830 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c 20  back .       || 
32840 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f 72  pOp->p5==OE_Abor
32850 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45  t || pOp->p5==OE
32860 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d 3e  _Ignore || pOp->
32870 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a 20  p5==OE_Replace. 
32880 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
32890 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
328a0 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70    pVtab = pOp->p
328b0 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a  4.pVtab->pVtab;.
328c0 20 20 70 4d 6f 64 75 6c 65 20 3d 20 28 73 71 6c    pModule = (sql
328d0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 29 70 56  ite3_module *)pV
328e0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
328f0 6e 41 72 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a  nArg = pOp->p2;.
32900 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
32910 34 74 79 70 65 3d 3d 50 34 5f 56 54 41 42 20 29  4type==P4_VTAB )
32920 3b 0a 20 20 69 66 28 20 41 4c 57 41 59 53 28 70  ;.  if( ALWAYS(p
32930 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 29  Module->xUpdate)
32940 20 29 7b 0a 20 20 20 20 75 38 20 76 74 61 62 4f   ){.    u8 vtabO
32950 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 64 62 2d 3e  nConflict = db->
32960 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a  vtabOnConflict;.
32970 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e 61      apArg = p->a
32980 70 41 72 67 3b 0a 20 20 20 20 70 58 20 3d 20 26  pArg;.    pX = &
32990 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
329a0 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 41     for(i=0; i<nA
329b0 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  rg; i++){.      
329c0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
329d0 69 64 28 70 58 29 20 29 3b 0a 20 20 20 20 20 20  id(pX) );.      
329e0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
329f0 28 70 2c 20 70 58 29 3b 0a 20 20 20 20 20 20 61  (p, pX);.      a
32a00 70 41 72 67 5b 69 5d 20 3d 20 70 58 3b 0a 20 20  pArg[i] = pX;.  
32a10 20 20 20 20 70 58 2b 2b 3b 0a 20 20 20 20 7d 0a      pX++;.    }.
32a20 20 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f      db->vtabOnCo
32a30 6e 66 6c 69 63 74 20 3d 20 70 4f 70 2d 3e 70 35  nflict = pOp->p5
32a40 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
32a50 6c 65 2d 3e 78 55 70 64 61 74 65 28 70 56 74 61  le->xUpdate(pVta
32a60 62 2c 20 6e 41 72 67 2c 20 61 70 41 72 67 2c 20  b, nArg, apArg, 
32a70 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 64 62 2d  &rowid);.    db-
32a80 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20  >vtabOnConflict 
32a90 3d 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74  = vtabOnConflict
32aa0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74 61  ;.    sqlite3Vta
32ab0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
32ac0 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66 28   pVtab);.    if(
32ad0 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
32ae0 26 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  & pOp->p1 ){.   
32af0 20 20 20 61 73 73 65 72 74 28 20 6e 41 72 67 3e     assert( nArg>
32b00 31 20 26 26 20 61 70 41 72 67 5b 30 5d 20 26 26  1 && apArg[0] &&
32b10 20 28 61 70 41 72 67 5b 30 5d 2d 3e 66 6c 61 67   (apArg[0]->flag
32b20 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20 29 3b 0a 20  s&MEM_Null) );. 
32b30 20 20 20 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77       db->lastRow
32b40 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64 20 3d  id = lastRowid =
32b50 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
32b60 20 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d    if( (rc&0xff)=
32b70 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49  =SQLITE_CONSTRAI
32b80 4e 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56  NT && pOp->p4.pV
32b90 74 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74  tab->bConstraint
32ba0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f   ){.      if( pO
32bb0 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65  p->p5==OE_Ignore
32bc0 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
32bd0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
32be0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
32bf0 20 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20   p->errorAction 
32c00 3d 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  = ((pOp->p5==OE_
32c10 52 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62  Replace) ? OE_Ab
32c20 6f 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a  ort : pOp->p5);.
32c30 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
32c40 65 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61  e{.      p->nCha
32c50 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d  nge++;.    }.  }
32c60 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
32c70 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
32c80 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
32c90 2f 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  /..#ifndef  SQLI
32ca0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
32cb0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
32cc0 20 50 61 67 65 63 6f 75 6e 74 20 50 31 20 50 32   Pagecount P1 P2
32cd0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
32ce0 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e  te the current n
32cf0 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
32d00 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 74 6f  n database P1 to
32d10 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 32 2e   memory cell P2.
32d20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 67 65  .*/.case OP_Page
32d30 63 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20 20  count: {        
32d40 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
32d50 65 6c 65 61 73 65 20 2a 2f 0a 20 20 70 4f 75 74  elease */.  pOut
32d60 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33 42  ->u.i = sqlite3B
32d70 74 72 65 65 4c 61 73 74 50 61 67 65 28 64 62 2d  treeLastPage(db-
32d80 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
32d90 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  t);.  break;.}.#
32da0 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20  endif...#ifndef 
32db0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
32dc0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
32dd0 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74 20 50  code: MaxPgcnt P
32de0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
32df0 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74 68 65  * Try to set the
32e00 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
32e10 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61 73 65  unt for database
32e20 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
32e30 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20 6e 6f   in P3..** Do no
32e40 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69 6d 75  t let the maximu
32e50 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66 61 6c  m page count fal
32e60 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75 72 72  l below the curr
32e70 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74 20 61  ent page count a
32e80 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63 68 61  nd.** do not cha
32e90 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  nge the maximum 
32ea0 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c 75 65  page count value
32eb0 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a 2a 2a   if P3==0..**.**
32ec0 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78 69 6d   Store the maxim
32ed0 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 61 66  um page count af
32ee0 74 65 72 20 74 68 65 20 63 68 61 6e 67 65 20 69  ter the change i
32ef0 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
32f00 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50 67 63  /.case OP_MaxPgc
32f10 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  nt: {           
32f20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
32f30 61 73 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ase */.  unsigne
32f40 64 20 69 6e 74 20 6e 65 77 4d 61 78 3b 0a 20 20  d int newMax;.  
32f50 42 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 70  Btree *pBt;..  p
32f60 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
32f70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 6e 65 77  ->p1].pBt;.  new
32f80 4d 61 78 20 3d 20 30 3b 0a 20 20 69 66 28 20 70  Max = 0;.  if( p
32f90 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 6e 65  Op->p3 ){.    ne
32fa0 77 4d 61 78 20 3d 20 73 71 6c 69 74 65 33 42 74  wMax = sqlite3Bt
32fb0 72 65 65 4c 61 73 74 50 61 67 65 28 70 42 74 29  reeLastPage(pBt)
32fc0 3b 0a 20 20 20 20 69 66 28 20 6e 65 77 4d 61 78  ;.    if( newMax
32fd0 20 3c 20 28 75 6e 73 69 67 6e 65 64 29 70 4f 70   < (unsigned)pOp
32fe0 2d 3e 70 33 20 29 20 6e 65 77 4d 61 78 20 3d 20  ->p3 ) newMax = 
32ff0 28 75 6e 73 69 67 6e 65 64 29 70 4f 70 2d 3e 70  (unsigned)pOp->p
33000 33 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75  3;.  }.  pOut->u
33010 2e 69 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  .i = sqlite3Btre
33020 65 4d 61 78 50 61 67 65 43 6f 75 6e 74 28 70 42  eMaxPageCount(pB
33030 74 2c 20 6e 65 77 4d 61 78 29 3b 0a 20 20 62 72  t, newMax);.  br
33040 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a  eak;.}.#endif...
33050 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 20  /* Opcode: Init 
33060 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
33070 79 6e 6f 70 73 69 73 3a 20 20 53 74 61 72 74 20  ynopsis:  Start 
33080 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20 50 72 6f 67  at P2.**.** Prog
33090 72 61 6d 73 20 63 6f 6e 74 61 69 6e 20 61 20 73  rams contain a s
330a0 69 6e 67 6c 65 20 69 6e 73 74 61 6e 63 65 20 6f  ingle instance o
330b0 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 73  f this opcode as
330c0 20 74 68 65 20 76 65 72 79 20 66 69 72 73 74 0a   the very first.
330d0 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a  ** opcode..**.**
330e0 20 49 66 20 74 72 61 63 69 6e 67 20 69 73 20 65   If tracing is e
330f0 6e 61 62 6c 65 64 20 28 62 79 20 74 68 65 20 73  nabled (by the s
33100 71 6c 69 74 65 33 5f 74 72 61 63 65 28 29 29 20  qlite3_trace()) 
33110 69 6e 74 65 72 66 61 63 65 2c 20 74 68 65 6e 0a  interface, then.
33120 2a 2a 20 74 68 65 20 55 54 46 2d 38 20 73 74 72  ** the UTF-8 str
33130 69 6e 67 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  ing contained in
33140 20 50 34 20 69 73 20 65 6d 69 74 74 65 64 20 6f   P4 is emitted o
33150 6e 20 74 68 65 20 74 72 61 63 65 20 63 61 6c 6c  n the trace call
33160 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20 69 66 20 50  back..** Or if P
33170 34 20 69 73 20 62 6c 61 6e 6b 2c 20 75 73 65 20  4 is blank, use 
33180 74 68 65 20 73 74 72 69 6e 67 20 72 65 74 75 72  the string retur
33190 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73  ned by sqlite3_s
331a0 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  ql()..**.** If P
331b0 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 6a  2 is not zero, j
331c0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
331d0 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
331e0 50 5f 49 6e 69 74 3a 20 7b 20 20 20 20 20 20 20  P_Init: {       
331f0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
33200 63 68 61 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20  char *zTrace;.  
33210 63 68 61 72 20 2a 7a 3b 0a 0a 20 20 69 66 28 20  char *z;..  if( 
33220 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20 20 70  pOp->p2 ){.    p
33230 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
33240 0a 20 20 7d 0a 23 69 66 6e 64 65 66 20 53 51 4c  .  }.#ifndef SQL
33250 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43 45 0a 20  ITE_OMIT_TRACE. 
33260 20 69 66 28 20 64 62 2d 3e 78 54 72 61 63 65 0a   if( db->xTrace.
33270 20 20 20 26 26 20 21 70 2d 3e 64 6f 69 6e 67 52     && !p->doingR
33280 65 72 75 6e 0a 20 20 20 26 26 20 28 7a 54 72 61  erun.   && (zTra
33290 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20  ce = (pOp->p4.z 
332a0 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d  ? pOp->p4.z : p-
332b0 3e 7a 53 71 6c 29 29 21 3d 30 0a 20 20 29 7b 0a  >zSql))!=0.  ){.
332c0 20 20 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 56      z = sqlite3V
332d0 64 62 65 45 78 70 61 6e 64 53 71 6c 28 70 2c 20  dbeExpandSql(p, 
332e0 7a 54 72 61 63 65 29 3b 0a 20 20 20 20 64 62 2d  zTrace);.    db-
332f0 3e 78 54 72 61 63 65 28 64 62 2d 3e 70 54 72 61  >xTrace(db->pTra
33300 63 65 41 72 67 2c 20 7a 29 3b 0a 20 20 20 20 73  ceArg, z);.    s
33310 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
33320 20 7a 29 3b 0a 20 20 7d 0a 23 69 66 64 65 66 20   z);.  }.#ifdef 
33330 53 51 4c 49 54 45 5f 55 53 45 5f 46 43 4e 54 4c  SQLITE_USE_FCNTL
33340 5f 54 52 41 43 45 0a 20 20 7a 54 72 61 63 65 20  _TRACE.  zTrace 
33350 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70  = (pOp->p4.z ? p
33360 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53  Op->p4.z : p->zS
33370 71 6c 29 3b 0a 20 20 69 66 28 20 7a 54 72 61 63  ql);.  if( zTrac
33380 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  e ){.    int i;.
33390 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
333a0 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
333b0 20 20 20 20 69 66 28 20 44 62 4d 61 73 6b 54 65      if( DbMaskTe
333c0 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
333d0 20 69 29 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75   i)==0 ) continu
333e0 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
333f0 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
33400 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
33410 6d 65 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  me, SQLITE_FCNTL
33420 5f 54 52 41 43 45 2c 20 7a 54 72 61 63 65 29 3b  _TRACE, zTrace);
33430 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
33440 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 5f  f /* SQLITE_USE_
33450 46 43 4e 54 4c 5f 54 52 41 43 45 20 2a 2f 0a 23  FCNTL_TRACE */.#
33460 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
33470 55 47 0a 20 20 69 66 28 20 28 64 62 2d 3e 66 6c  UG.  if( (db->fl
33480 61 67 73 20 26 20 53 51 4c 49 54 45 5f 53 71 6c  ags & SQLITE_Sql
33490 54 72 61 63 65 29 21 3d 30 0a 20 20 20 26 26 20  Trace)!=0.   && 
334a0 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e  (zTrace = (pOp->
334b0 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a  p4.z ? pOp->p4.z
334c0 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a   : p->zSql))!=0.
334d0 20 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33    ){.    sqlite3
334e0 44 65 62 75 67 50 72 69 6e 74 66 28 22 53 51 4c  DebugPrintf("SQL
334f0 2d 74 72 61 63 65 3a 20 25 73 5c 6e 22 2c 20 7a  -trace: %s\n", z
33500 54 72 61 63 65 29 3b 0a 20 20 7d 0a 23 65 6e 64  Trace);.  }.#end
33510 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  if /* SQLITE_DEB
33520 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20  UG */.#endif /* 
33530 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41 43  SQLITE_OMIT_TRAC
33540 45 20 2a 2f 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  E */.  break;.}.
33550 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 6f  ../* Opcode: Noo
33560 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  p * * * * *.**.*
33570 2a 20 44 6f 20 6e 6f 74 68 69 6e 67 2e 20 20 54  * Do nothing.  T
33580 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
33590 69 73 20 6f 66 74 65 6e 20 75 73 65 66 75 6c 20  is often useful 
335a0 61 73 20 61 20 6a 75 6d 70 0a 2a 2a 20 64 65 73  as a jump.** des
335b0 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 0a  tination..*/./*.
335c0 2a 2a 20 54 68 65 20 6d 61 67 69 63 20 45 78 70  ** The magic Exp
335d0 6c 61 69 6e 20 6f 70 63 6f 64 65 20 61 72 65 20  lain opcode are 
335e0 6f 6e 6c 79 20 69 6e 73 65 72 74 65 64 20 77 68  only inserted wh
335f0 65 6e 20 65 78 70 6c 61 69 6e 3d 3d 32 20 28 77  en explain==2 (w
33600 68 69 63 68 0a 2a 2a 20 69 73 20 74 6f 20 73 61  hich.** is to sa
33610 79 20 77 68 65 6e 20 74 68 65 20 45 58 50 4c 41  y when the EXPLA
33620 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 73 79  IN QUERY PLAN sy
33630 6e 74 61 78 20 69 73 20 75 73 65 64 2e 29 0a 2a  ntax is used.).*
33640 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65  * This opcode re
33650 63 6f 72 64 73 20 69 6e 66 6f 72 6d 61 74 69 6f  cords informatio
33660 6e 20 66 72 6f 6d 20 74 68 65 20 6f 70 74 69 6d  n from the optim
33670 69 7a 65 72 2e 20 20 49 74 20 69 73 20 74 68 65  izer.  It is the
33680 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 61 73 20  .** the same as 
33690 61 20 6e 6f 2d 6f 70 2e 20 20 54 68 69 73 20 6f  a no-op.  This o
336a0 70 63 6f 64 65 73 6e 65 76 65 72 20 61 70 70 65  pcodesnever appe
336b0 61 72 73 20 69 6e 20 61 20 72 65 61 6c 20 56 4d  ars in a real VM
336c0 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 64 65 66   program..*/.def
336d0 61 75 6c 74 3a 20 7b 20 20 20 20 20 20 20 20 20  ault: {         
336e0 20 2f 2a 20 54 68 69 73 20 69 73 20 72 65 61 6c   /* This is real
336f0 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61 6e 64 20 4f  ly OP_Noop and O
33700 50 5f 45 78 70 6c 61 69 6e 20 2a 2f 0a 20 20 61  P_Explain */.  a
33710 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
33720 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20 7c 7c 20 70  de==OP_Noop || p
33730 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
33740 78 70 6c 61 69 6e 20 29 3b 0a 20 20 62 72 65 61  xplain );.  brea
33750 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a  k;.}../*********
33760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33780 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33790 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
337a0 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 61 73 65  ****.** The case
337b0 73 20 6f 66 20 74 68 65 20 73 77 69 74 63 68 20  s of the switch 
337c0 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 76 65 20  statement above 
337d0 74 68 69 73 20 6c 69 6e 65 20 73 68 6f 75 6c 64  this line should
337e0 20 61 6c 6c 20 62 65 20 69 6e 64 65 6e 74 65 64   all be indented
337f0 0a 2a 2a 20 62 79 20 36 20 73 70 61 63 65 73 2e  .** by 6 spaces.
33800 20 20 42 75 74 20 74 68 65 20 6c 65 66 74 2d 6d    But the left-m
33810 6f 73 74 20 36 20 73 70 61 63 65 73 20 68 61 76  ost 6 spaces hav
33820 65 20 62 65 65 6e 20 72 65 6d 6f 76 65 64 20 74  e been removed t
33830 6f 20 69 6d 70 72 6f 76 65 20 74 68 65 0a 2a 2a  o improve the.**
33840 20 72 65 61 64 61 62 69 6c 69 74 79 2e 20 20 46   readability.  F
33850 72 6f 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 6f  rom this point o
33860 6e 20 64 6f 77 6e 2c 20 74 68 65 20 6e 6f 72 6d  n down, the norm
33870 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 72  al indentation r
33880 75 6c 65 73 20 61 72 65 0a 2a 2a 20 72 65 73 74  ules are.** rest
33890 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ored..**********
338a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
338e0 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a 23 69 66 64  ***/.    }..#ifd
338f0 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a  ef VDBE_PROFILE.
33900 20 20 20 20 7b 0a 20 20 20 20 20 20 75 36 34 20      {.      u64 
33910 65 6e 64 54 69 6d 65 20 3d 20 73 71 6c 69 74 65  endTime = sqlite
33920 33 48 77 74 69 6d 65 28 29 3b 0a 20 20 20 20 20  3Hwtime();.     
33930 20 69 66 28 20 65 6e 64 54 69 6d 65 3e 73 74 61   if( endTime>sta
33940 72 74 20 29 20 70 4f 70 2d 3e 63 79 63 6c 65 73  rt ) pOp->cycles
33950 20 2b 3d 20 65 6e 64 54 69 6d 65 20 2d 20 73 74   += endTime - st
33960 61 72 74 3b 0a 20 20 20 20 20 20 70 4f 70 2d 3e  art;.      pOp->
33970 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d 0a 23 65 6e  cnt++;.    }.#en
33980 64 69 66 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20  dif..    /* The 
33990 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 64 65 20 61  following code a
339a0 64 64 73 20 6e 6f 74 68 69 6e 67 20 74 6f 20 74  dds nothing to t
339b0 68 65 20 61 63 74 75 61 6c 20 66 75 6e 63 74 69  he actual functi
339c0 6f 6e 61 6c 69 74 79 0a 20 20 20 20 2a 2a 20 6f  onality.    ** o
339d0 66 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 20 20  f the program.  
339e0 49 74 20 69 73 20 6f 6e 6c 79 20 68 65 72 65 20  It is only here 
339f0 66 6f 72 20 74 65 73 74 69 6e 67 20 61 6e 64 20  for testing and 
33a00 64 65 62 75 67 67 69 6e 67 2e 0a 20 20 20 20 2a  debugging..    *
33a10 2a 20 4f 6e 20 74 68 65 20 6f 74 68 65 72 20 68  * On the other h
33a20 61 6e 64 2c 20 69 74 20 64 6f 65 73 20 62 75 72  and, it does bur
33a30 6e 20 43 50 55 20 63 79 63 6c 65 73 20 65 76 65  n CPU cycles eve
33a40 72 79 20 74 69 6d 65 20 74 68 72 6f 75 67 68 0a  ry time through.
33a50 20 20 20 20 2a 2a 20 74 68 65 20 65 76 61 6c 75      ** the evalu
33a60 61 74 6f 72 20 6c 6f 6f 70 2e 20 20 53 6f 20 77  ator loop.  So w
33a70 65 20 63 61 6e 20 6c 65 61 76 65 20 69 74 20 6f  e can leave it o
33a80 75 74 20 77 68 65 6e 20 4e 44 45 42 55 47 20 69  ut when NDEBUG i
33a90 73 20 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a  s defined..    *
33aa0 2f 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  /.#ifndef NDEBUG
33ab0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 63 3e  .    assert( pc>
33ac0 3d 2d 31 20 26 26 20 70 63 3c 70 2d 3e 6e 4f 70  =-1 && pc<p->nOp
33ad0 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49   );..#ifdef SQLI
33ae0 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
33af0 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
33b00 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
33b10 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 30  .      if( rc!=0
33b20 20 29 20 70 72 69 6e 74 66 28 22 72 63 3d 25 64   ) printf("rc=%d
33b30 5c 6e 22 2c 72 63 29 3b 0a 20 20 20 20 20 20 69  \n",rc);.      i
33b40 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
33b50 26 20 28 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52  & (OPFLG_OUT2_PR
33b60 45 52 45 4c 45 41 53 45 7c 4f 50 46 4c 47 5f 4f  ERELEASE|OPFLG_O
33b70 55 54 32 29 20 29 7b 0a 20 20 20 20 20 20 20 20  UT2) ){.        
33b80 72 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f  registerTrace(pO
33b90 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p2, &aMem[pOp
33ba0 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  ->p2]);.      }.
33bb0 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f        if( pOp->o
33bc0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
33bd0 55 54 33 20 29 7b 0a 20 20 20 20 20 20 20 20 72  UT3 ){.        r
33be0 65 67 69 73 74 65 72 54 72 61 63 65 28 70 4f 70  egisterTrace(pOp
33bf0 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d  ->p3, &aMem[pOp-
33c00 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20  >p3]);.      }. 
33c10 20 20 20 7d 0a 23 65 6e 64 69 66 20 20 2f 2a 20     }.#endif  /* 
33c20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a  SQLITE_DEBUG */.
33c30 23 65 6e 64 69 66 20 20 2f 2a 20 4e 44 45 42 55  #endif  /* NDEBU
33c40 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a 20 54 68 65  G */.  }  /* The
33c50 20 65 6e 64 20 6f 66 20 74 68 65 20 66 6f 72 28   end of the for(
33c60 3b 3b 29 20 6c 6f 6f 70 20 74 68 65 20 6c 6f 6f  ;;) loop the loo
33c70 70 73 20 74 68 72 6f 75 67 68 20 6f 70 63 6f 64  ps through opcod
33c80 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 77  es */..  /* If w
33c90 65 20 72 65 61 63 68 20 74 68 69 73 20 70 6f 69  e reach this poi
33ca0 6e 74 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  nt, it means tha
33cb0 74 20 65 78 65 63 75 74 69 6f 6e 20 69 73 20 66  t execution is f
33cc0 69 6e 69 73 68 65 64 20 77 69 74 68 0a 20 20 2a  inished with.  *
33cd0 2a 20 61 6e 20 65 72 72 6f 72 20 6f 66 20 73 6f  * an error of so
33ce0 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a 2f 0a 76 64  me kind..  */.vd
33cf0 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3a 0a 20  be_error_halt:. 
33d00 20 61 73 73 65 72 74 28 20 72 63 20 29 3b 0a 20   assert( rc );. 
33d10 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 74   p->rc = rc;.  t
33d20 65 73 74 63 61 73 65 28 20 73 71 6c 69 74 65 33  estcase( sqlite3
33d30 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 4c 6f  GlobalConfig.xLo
33d40 67 21 3d 30 20 29 3b 0a 20 20 73 71 6c 69 74 65  g!=0 );.  sqlite
33d50 33 5f 6c 6f 67 28 72 63 2c 20 22 73 74 61 74 65  3_log(rc, "state
33d60 6d 65 6e 74 20 61 62 6f 72 74 73 20 61 74 20 25  ment aborts at %
33d70 64 3a 20 5b 25 73 5d 20 25 73 22 2c 20 0a 20 20  d: [%s] %s", .  
33d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33d90 20 70 63 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70 2d   pc, p->zSql, p-
33da0 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 73 71 6c  >zErrMsg);.  sql
33db0 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29 3b  ite3VdbeHalt(p);
33dc0 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54  .  if( rc==SQLIT
33dd0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 20  E_IOERR_NOMEM ) 
33de0 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
33df0 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 53 51 4c   = 1;.  rc = SQL
33e00 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 69 66 28  ITE_ERROR;.  if(
33e10 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
33e20 75 6c 74 3e 30 20 29 7b 0a 20 20 20 20 73 71 6c  ult>0 ){.    sql
33e30 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65  ite3ResetOneSche
33e40 6d 61 28 64 62 2c 20 72 65 73 65 74 53 63 68 65  ma(db, resetSche
33e50 6d 61 4f 6e 46 61 75 6c 74 2d 31 29 3b 0a 20 20  maOnFault-1);.  
33e60 7d 0a 0a 20 20 2f 2a 20 54 68 69 73 20 69 73 20  }..  /* This is 
33e70 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 6f 75 74  the only way out
33e80 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75   of this procedu
33e90 72 65 2e 20 20 57 65 20 68 61 76 65 20 74 6f 0a  re.  We have to.
33ea0 20 20 2a 2a 20 72 65 6c 65 61 73 65 20 74 68 65    ** release the
33eb0 20 6d 75 74 65 78 65 73 20 6f 6e 20 62 74 72 65   mutexes on btre
33ec0 65 73 20 74 68 61 74 20 77 65 72 65 20 61 63 71  es that were acq
33ed0 75 69 72 65 64 20 61 74 20 74 68 65 0a 20 20 2a  uired at the.  *
33ee0 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64 62 65 5f 72  * top. */.vdbe_r
33ef0 65 74 75 72 6e 3a 0a 20 20 64 62 2d 3e 6c 61 73  eturn:.  db->las
33f00 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
33f10 69 64 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20  id;.  testcase( 
33f20 6e 56 6d 53 74 65 70 3e 30 20 29 3b 0a 20 20 70  nVmStep>0 );.  p
33f30 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54  ->aCounter[SQLIT
33f40 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f  E_STMTSTATUS_VM_
33f50 53 54 45 50 5d 20 2b 3d 20 28 69 6e 74 29 6e 56  STEP] += (int)nV
33f60 6d 53 74 65 70 3b 0a 20 20 73 71 6c 69 74 65 33  mStep;.  sqlite3
33f70 56 64 62 65 4c 65 61 76 65 28 70 29 3b 0a 20 20  VdbeLeave(p);.  
33f80 72 65 74 75 72 6e 20 72 63 3b 0a 0a 20 20 2f 2a  return rc;..  /*
33f90 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69 66   Jump to here if
33fa0 20 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f   a string or blo
33fb0 62 20 6c 61 72 67 65 72 20 74 68 61 6e 20 53 51  b larger than SQ
33fc0 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48 0a  LITE_MAX_LENGTH.
33fd0 20 20 2a 2a 20 69 73 20 65 6e 63 6f 75 6e 74 65    ** is encounte
33fe0 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f 6f 5f 62 69  red..  */.too_bi
33ff0 67 3a 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  g:.  sqlite3SetS
34000 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
34010 67 2c 20 64 62 2c 20 22 73 74 72 69 6e 67 20 6f  g, db, "string o
34020 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 29  r blob too big")
34030 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  ;.  rc = SQLITE_
34040 54 4f 4f 42 49 47 3b 0a 20 20 67 6f 74 6f 20 76  TOOBIG;.  goto v
34050 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
34060 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
34070 72 65 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29  re if a malloc()
34080 20 66 61 69 6c 73 2e 0a 20 20 2a 2f 0a 6e 6f 5f   fails..  */.no_
34090 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d 61 6c 6c 6f  mem:.  db->mallo
340a0 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 73  cFailed = 1;.  s
340b0 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
340c0 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
340d0 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
340e0 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c 49 54 45  );.  rc = SQLITE
340f0 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f 74 6f 20 76  _NOMEM;.  goto v
34100 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a  dbe_error_halt;.
34110 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65  .  /* Jump to he
34120 72 65 20 66 6f 72 20 61 6e 79 20 6f 74 68 65 72  re for any other
34130 20 6b 69 6e 64 20 6f 66 20 66 61 74 61 6c 20 65   kind of fatal e
34140 72 72 6f 72 2e 20 20 54 68 65 20 22 72 63 22 20  rror.  The "rc" 
34150 76 61 72 69 61 62 6c 65 0a 20 20 2a 2a 20 73 68  variable.  ** sh
34160 6f 75 6c 64 20 68 6f 6c 64 20 74 68 65 20 65 72  ould hold the er
34170 72 6f 72 20 6e 75 6d 62 65 72 2e 0a 20 20 2a 2f  ror number..  */
34180 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72  .abort_due_to_er
34190 72 6f 72 3a 0a 20 20 61 73 73 65 72 74 28 20 70  ror:.  assert( p
341a0 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30 20 29 3b 0a  ->zErrMsg==0 );.
341b0 20 20 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63    if( db->malloc
341c0 46 61 69 6c 65 64 20 29 20 72 63 20 3d 20 53 51  Failed ) rc = SQ
341d0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 69 66  LITE_NOMEM;.  if
341e0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 49 4f 45  ( rc!=SQLITE_IOE
341f0 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20  RR_NOMEM ){.    
34200 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
34210 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
34220 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
34230 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 7d 0a  rrStr(rc));.  }.
34240 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
34250 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75  r_halt;..  /* Ju
34260 6d 70 20 74 6f 20 68 65 72 65 20 69 66 20 74 68  mp to here if th
34270 65 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  e sqlite3_interr
34280 75 70 74 28 29 20 41 50 49 20 73 65 74 73 20 74  upt() API sets t
34290 68 65 20 69 6e 74 65 72 72 75 70 74 0a 20 20 2a  he interrupt.  *
342a0 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f 0a 61 62 6f  * flag..  */.abo
342b0 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72  rt_due_to_interr
342c0 75 70 74 3a 0a 20 20 61 73 73 65 72 74 28 20 64  upt:.  assert( d
342d0 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75 70  b->u1.isInterrup
342e0 74 65 64 20 29 3b 0a 20 20 72 63 20 3d 20 53 51  ted );.  rc = SQ
342f0 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
34300 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
34310 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
34320 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
34330 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 45  , "%s", sqlite3E
34340 72 72 53 74 72 28 72 63 29 29 3b 0a 20 20 67 6f  rrStr(rc));.  go
34350 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34360 6c 74 3b 0a 7d 0a                                lt;.}.