/ Hex Artifact Content
Login

Artifact 1e2abdaedcbd3697994c4f244ae388b2afbe1e1023537a78abdf0bbf70ef23a7:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f  ******.** The co
0180: 64 65 20 69 6e 20 74 68 69 73 20 66 69 6c 65 20  de in this file 
0190: 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65 20 66  implements the f
01a0: 75 6e 63 74 69 6f 6e 20 74 68 61 74 20 72 75 6e  unction that run
01b0: 73 20 74 68 65 0a 2a 2a 20 62 79 74 65 63 6f 64  s the.** bytecod
01c0: 65 20 6f 66 20 61 20 70 72 65 70 61 72 65 64 20  e of a prepared 
01d0: 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a  statement..**.**
01e0: 20 56 61 72 69 6f 75 73 20 73 63 72 69 70 74 73   Various scripts
01f0: 20 73 63 61 6e 20 74 68 69 73 20 73 6f 75 72 63   scan this sourc
0200: 65 20 66 69 6c 65 20 69 6e 20 6f 72 64 65 72 20  e file in order 
0210: 74 6f 20 67 65 6e 65 72 61 74 65 20 48 54 4d 4c  to generate HTML
0220: 0a 2a 2a 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  .** documentatio
0230: 6e 2c 20 68 65 61 64 65 72 73 20 66 69 6c 65 73  n, headers files
0240: 2c 20 6f 72 20 6f 74 68 65 72 20 64 65 72 69 76  , or other deriv
0250: 65 64 20 66 69 6c 65 73 2e 20 20 54 68 65 20 66  ed files.  The f
0260: 6f 72 6d 61 74 74 69 6e 67 0a 2a 2a 20 6f 66 20  ormatting.** of 
0270: 74 68 65 20 63 6f 64 65 20 69 6e 20 74 68 69 73  the code in this
0280: 20 66 69 6c 65 20 69 73 2c 20 74 68 65 72 65 66   file is, theref
0290: 6f 72 65 2c 20 69 6d 70 6f 72 74 61 6e 74 2e 20  ore, important. 
02a0: 20 53 65 65 20 6f 74 68 65 72 20 63 6f 6d 6d 65   See other comme
02b0: 6e 74 73 0a 2a 2a 20 69 6e 20 74 68 69 73 20 66  nts.** in this f
02c0: 69 6c 65 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  ile for details.
02d0: 20 20 49 66 20 69 6e 20 64 6f 75 62 74 2c 20 64    If in doubt, d
02e0: 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20 66 72  o not deviate fr
02f0: 6f 6d 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 63  om existing.** c
0300: 6f 6d 6d 65 6e 74 69 6e 67 20 61 6e 64 20 69 6e  ommenting and in
0310: 64 65 6e 74 61 74 69 6f 6e 20 70 72 61 63 74 69  dentation practi
0320: 63 65 73 20 77 68 65 6e 20 63 68 61 6e 67 69 6e  ces when changin
0330: 67 20 6f 72 20 61 64 64 69 6e 67 20 63 6f 64 65  g or adding code
0340: 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73  ..*/.#include "s
0350: 71 6c 69 74 65 49 6e 74 2e 68 22 0a 23 69 6e 63  qliteInt.h".#inc
0360: 6c 75 64 65 20 22 76 64 62 65 49 6e 74 2e 68 22  lude "vdbeInt.h"
0370: 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74  ../*.** Invoke t
0380: 68 69 73 20 6d 61 63 72 6f 20 6f 6e 20 6d 65 6d  his macro on mem
0390: 6f 72 79 20 63 65 6c 6c 73 20 6a 75 73 74 20 70  ory cells just p
03a0: 72 69 6f 72 20 74 6f 20 63 68 61 6e 67 69 6e 67  rior to changing
03b0: 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 6f 66   the.** value of
03c0: 20 74 68 65 20 63 65 6c 6c 2e 20 20 54 68 69 73   the cell.  This
03d0: 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73 20   macro verifies 
03e0: 74 68 61 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70  that shallow cop
03f0: 69 65 73 20 61 72 65 0a 2a 2a 20 6e 6f 74 20 6d  ies are.** not m
0400: 69 73 75 73 65 64 2e 20 20 41 20 73 68 61 6c 6c  isused.  A shall
0410: 6f 77 20 63 6f 70 79 20 6f 66 20 61 20 73 74 72  ow copy of a str
0420: 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6a 75 73 74  ing or blob just
0430: 20 63 6f 70 69 65 73 20 61 0a 2a 2a 20 70 6f 69   copies a.** poi
0440: 6e 74 65 72 20 74 6f 20 74 68 65 20 73 74 72 69  nter to the stri
0450: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 6e 6f 74 20  ng or blob, not 
0460: 74 68 65 20 63 6f 6e 74 65 6e 74 2e 20 20 49 66  the content.  If
0470: 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 2a 2a   the original.**
0480: 20 69 73 20 63 68 61 6e 67 65 64 20 77 68 69 6c   is changed whil
0490: 65 20 74 68 65 20 63 6f 70 79 20 69 73 20 73 74  e the copy is st
04a0: 69 6c 6c 20 69 6e 20 75 73 65 2c 20 74 68 65 20  ill in use, the 
04b0: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
04c0: 69 67 68 74 0a 2a 2a 20 62 65 20 63 68 61 6e 67  ight.** be chang
04d0: 65 64 20 6f 75 74 20 66 72 6f 6d 20 75 6e 64 65  ed out from unde
04e0: 72 20 74 68 65 20 63 6f 70 79 2e 20 20 54 68 69  r the copy.  Thi
04f0: 73 20 6d 61 63 72 6f 20 76 65 72 69 66 69 65 73  s macro verifies
0500: 20 74 68 61 74 20 6e 6f 74 68 69 6e 67 0a 2a 2a   that nothing.**
0510: 20 6c 69 6b 65 20 74 68 61 74 20 65 76 65 72 20   like that ever 
0520: 68 61 70 70 65 6e 73 2e 0a 2a 2f 0a 23 69 66 64  happens..*/.#ifd
0530: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
0540: 23 20 64 65 66 69 6e 65 20 6d 65 6d 41 62 6f 75  # define memAbou
0550: 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 20 73  tToChange(P,M) s
0560: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 41 62 6f  qlite3VdbeMemAbo
0570: 75 74 54 6f 43 68 61 6e 67 65 28 50 2c 4d 29 0a  utToChange(P,M).
0580: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 6d  #else.# define m
0590: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
05a0: 50 2c 4d 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  P,M).#endif../*.
05b0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
05c0: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
05d0: 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
05e0: 65 76 65 72 79 20 74 69 6d 65 20 61 20 63 75 72  every time a cur
05f0: 73 6f 72 0a 2a 2a 20 6d 6f 76 65 73 2c 20 65 69  sor.** moves, ei
0600: 74 68 65 72 20 62 79 20 74 68 65 20 4f 50 5f 53  ther by the OP_S
0610: 65 65 6b 58 58 2c 20 4f 50 5f 4e 65 78 74 2c 20  eekXX, OP_Next, 
0620: 6f 72 20 4f 50 5f 50 72 65 76 20 6f 70 63 6f 64  or OP_Prev opcod
0630: 65 73 2e 20 20 54 68 65 20 74 65 73 74 0a 2a 2a  es.  The test.**
0640: 20 70 72 6f 63 65 64 75 72 65 73 20 75 73 65 20   procedures use 
0650: 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  this information
0660: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 74 68   to make sure th
0670: 61 74 20 69 6e 64 69 63 65 73 20 61 72 65 0a 2a  at indices are.*
0680: 2a 20 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63  * working correc
0690: 74 6c 79 2e 20 20 54 68 69 73 20 76 61 72 69 61  tly.  This varia
06a0: 62 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74  ble has no funct
06b0: 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74  ion other than t
06c0: 6f 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79  o.** help verify
06d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
06e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69  ration of the li
06f0: 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66  brary..*/.#ifdef
0700: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74   SQLITE_TEST.int
0710: 20 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f   sqlite3_search_
0720: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0730: 66 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 74 68  f../*.** When th
0740: 69 73 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  is global variab
0750: 6c 65 20 69 73 20 70 6f 73 69 74 69 76 65 2c 20  le is positive, 
0760: 69 74 20 67 65 74 73 20 64 65 63 72 65 6d 65 6e  it gets decremen
0770: 74 65 64 20 6f 6e 63 65 20 62 65 66 6f 72 65 0a  ted once before.
0780: 2a 2a 20 65 61 63 68 20 69 6e 73 74 72 75 63 74  ** each instruct
0790: 69 6f 6e 20 69 6e 20 74 68 65 20 56 44 42 45 2e  ion in the VDBE.
07a0: 20 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65    When it reache
07b0: 73 20 7a 65 72 6f 2c 20 74 68 65 20 75 31 2e 69  s zero, the u1.i
07c0: 73 49 6e 74 65 72 72 75 70 74 65 64 0a 2a 2a 20  sInterrupted.** 
07d0: 66 69 65 6c 64 20 6f 66 20 74 68 65 20 73 71 6c  field of the sql
07e0: 69 74 65 33 20 73 74 72 75 63 74 75 72 65 20 69  ite3 structure i
07f0: 73 20 73 65 74 20 69 6e 20 6f 72 64 65 72 20 74  s set in order t
0800: 6f 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e  o simulate an in
0810: 74 65 72 72 75 70 74 2e 0a 2a 2a 0a 2a 2a 20 54  terrupt..**.** T
0820: 68 69 73 20 66 61 63 69 6c 69 74 79 20 69 73 20  his facility is 
0830: 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67  used for testing
0840: 20 70 75 72 70 6f 73 65 73 20 6f 6e 6c 79 2e 20   purposes only. 
0850: 20 49 74 20 64 6f 65 73 20 6e 6f 74 20 66 75 6e   It does not fun
0860: 63 74 69 6f 6e 0a 2a 2a 20 69 6e 20 61 6e 20 6f  ction.** in an o
0870: 72 64 69 6e 61 72 79 20 62 75 69 6c 64 2e 0a 2a  rdinary build..*
0880: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
0890: 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65 33  TEST.int sqlite3
08a0: 5f 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74  _interrupt_count
08b0: 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a   = 0;.#endif../*
08c0: 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f  .** The next glo
08d0: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20  bal variable is 
08e0: 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68  incremented each
08f0: 20 74 79 70 65 20 74 68 65 20 4f 50 5f 53 6f 72   type the OP_Sor
0900: 74 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  t opcode.** is e
0910: 78 65 63 75 74 65 64 2e 20 20 54 68 65 20 74 65  xecuted.  The te
0920: 73 74 20 70 72 6f 63 65 64 75 72 65 73 20 75 73  st procedures us
0930: 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
0940: 6f 6e 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20  on to make sure 
0950: 74 68 61 74 0a 2a 2a 20 73 6f 72 74 69 6e 67 20  that.** sorting 
0960: 69 73 20 6f 63 63 75 72 72 69 6e 67 20 6f 72 20  is occurring or 
0970: 6e 6f 74 20 6f 63 63 75 72 72 69 6e 67 20 61 74  not occurring at
0980: 20 61 70 70 72 6f 70 72 69 61 74 65 20 74 69 6d   appropriate tim
0990: 65 73 2e 20 20 20 54 68 69 73 20 76 61 72 69 61  es.   This varia
09a0: 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75  ble.** has no fu
09b0: 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61  nction other tha
09c0: 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79  n to help verify
09d0: 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65   the correct ope
09e0: 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  ration of the.**
09f0: 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66   library..*/.#if
0a00: 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
0a10: 69 6e 74 20 73 71 6c 69 74 65 33 5f 73 6f 72 74  int sqlite3_sort
0a20: 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64  _count = 0;.#end
0a30: 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65  if../*.** The ne
0a40: 78 74 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  xt global variab
0a50: 6c 65 20 72 65 63 6f 72 64 73 20 74 68 65 20 73  le records the s
0a60: 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
0a70: 73 74 20 4d 45 4d 5f 42 6c 6f 62 0a 2a 2a 20 6f  st MEM_Blob.** o
0a80: 72 20 4d 45 4d 5f 53 74 72 20 74 68 61 74 20 68  r MEM_Str that h
0a90: 61 73 20 62 65 65 6e 20 75 73 65 64 20 62 79 20  as been used by 
0aa0: 61 20 56 44 42 45 20 6f 70 63 6f 64 65 2e 20 20  a VDBE opcode.  
0ab0: 54 68 65 20 74 65 73 74 20 70 72 6f 63 65 64 75  The test procedu
0ac0: 72 65 73 0a 2a 2a 20 75 73 65 20 74 68 69 73 20  res.** use this 
0ad0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 6f 20 6d  information to m
0ae0: 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 74 68  ake sure that th
0af0: 65 20 7a 65 72 6f 2d 62 6c 6f 62 20 66 75 6e 63  e zero-blob func
0b00: 74 69 6f 6e 61 6c 69 74 79 0a 2a 2a 20 69 73 20  tionality.** is 
0b10: 77 6f 72 6b 69 6e 67 20 63 6f 72 72 65 63 74 6c  working correctl
0b20: 79 2e 20 20 20 54 68 69 73 20 76 61 72 69 61 62  y.   This variab
0b30: 6c 65 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69  le has no functi
0b40: 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f  on other than to
0b50: 0a 2a 2a 20 68 65 6c 70 20 76 65 72 69 66 79 20  .** help verify 
0b60: 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72  the correct oper
0b70: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6c 69 62  ation of the lib
0b80: 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  rary..*/.#ifdef 
0b90: 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20  SQLITE_TEST.int 
0ba0: 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62  sqlite3_max_blob
0bb0: 73 69 7a 65 20 3d 20 30 3b 0a 73 74 61 74 69 63  size = 0;.static
0bc0: 20 76 6f 69 64 20 75 70 64 61 74 65 4d 61 78 42   void updateMaxB
0bd0: 6c 6f 62 73 69 7a 65 28 4d 65 6d 20 2a 70 29 7b  lobsize(Mem *p){
0be0: 0a 20 20 69 66 28 20 28 70 2d 3e 66 6c 61 67 73  .  if( (p->flags
0bf0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
0c00: 42 6c 6f 62 29 29 21 3d 30 20 26 26 20 70 2d 3e  Blob))!=0 && p->
0c10: 6e 3e 73 71 6c 69 74 65 33 5f 6d 61 78 5f 62 6c  n>sqlite3_max_bl
0c20: 6f 62 73 69 7a 65 20 29 7b 0a 20 20 20 20 73 71  obsize ){.    sq
0c30: 6c 69 74 65 33 5f 6d 61 78 5f 62 6c 6f 62 73 69  lite3_max_blobsi
0c40: 7a 65 20 3d 20 70 2d 3e 6e 3b 0a 20 20 7d 0a 7d  ze = p->n;.  }.}
0c50: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
0c60: 68 65 20 6e 65 78 74 20 67 6c 6f 62 61 6c 20 76  he next global v
0c70: 61 72 69 61 62 6c 65 20 69 73 20 69 6e 63 72 65  ariable is incre
0c80: 6d 65 6e 74 65 64 20 65 61 63 68 20 74 69 6d 65  mented each time
0c90: 20 74 68 65 20 4f 50 5f 46 6f 75 6e 64 20 6f 70   the OP_Found op
0ca0: 63 6f 64 65 0a 2a 2a 20 69 73 20 65 78 65 63 75  code.** is execu
0cb0: 74 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65  ted. This is use
0cc0: 64 20 74 6f 20 74 65 73 74 20 77 68 65 74 68 65  d to test whethe
0cd0: 72 20 6f 72 20 6e 6f 74 20 74 68 65 20 66 6f 72  r or not the for
0ce0: 65 69 67 6e 20 6b 65 79 0a 2a 2a 20 6f 70 65 72  eign key.** oper
0cf0: 61 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 65  ation implemente
0d00: 64 20 75 73 69 6e 67 20 4f 50 5f 46 6b 49 73 5a  d using OP_FkIsZ
0d10: 65 72 6f 20 69 73 20 77 6f 72 6b 69 6e 67 2e 20  ero is working. 
0d20: 54 68 69 73 20 76 61 72 69 61 62 6c 65 0a 2a 2a  This variable.**
0d30: 20 68 61 73 20 6e 6f 20 66 75 6e 63 74 69 6f 6e   has no function
0d40: 20 6f 74 68 65 72 20 74 68 61 6e 20 74 6f 20 68   other than to h
0d50: 65 6c 70 20 76 65 72 69 66 79 20 74 68 65 20 63  elp verify the c
0d60: 6f 72 72 65 63 74 20 6f 70 65 72 61 74 69 6f 6e  orrect operation
0d70: 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 62 72 61   of the.** libra
0d80: 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ry..*/.#ifdef SQ
0d90: 4c 49 54 45 5f 54 45 53 54 0a 69 6e 74 20 73 71  LITE_TEST.int sq
0da0: 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e  lite3_found_coun
0db0: 74 20 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 0a 2f  t = 0;.#endif../
0dc0: 2a 0a 2a 2a 20 54 65 73 74 20 61 20 72 65 67 69  *.** Test a regi
0dd0: 73 74 65 72 20 74 6f 20 73 65 65 20 69 66 20 69  ster to see if i
0de0: 74 20 65 78 63 65 65 64 73 20 74 68 65 20 63 75  t exceeds the cu
0df0: 72 72 65 6e 74 20 6d 61 78 69 6d 75 6d 20 62 6c  rrent maximum bl
0e00: 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20 49 66 20 69  ob size..** If i
0e10: 74 20 64 6f 65 73 2c 20 72 65 63 6f 72 64 20 74  t does, record t
0e20: 68 65 20 6e 65 77 20 6d 61 78 69 6d 75 6d 20 62  he new maximum b
0e30: 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f 0a 23 69 66  lob size..*/.#if
0e40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0e50: 54 45 53 54 29 20 26 26 20 21 64 65 66 69 6e 65  TEST) && !define
0e60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  d(SQLITE_OMIT_BU
0e70: 49 4c 54 49 4e 5f 54 45 53 54 29 0a 23 20 64 65  ILTIN_TEST).# de
0e80: 66 69 6e 65 20 55 50 44 41 54 45 5f 4d 41 58 5f  fine UPDATE_MAX_
0e90: 42 4c 4f 42 53 49 5a 45 28 50 29 20 20 75 70 64  BLOBSIZE(P)  upd
0ea0: 61 74 65 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50  ateMaxBlobsize(P
0eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
0ec0: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
0ed0: 53 49 5a 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a  SIZE(P).#endif..
0ee0: 2f 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65  /*.** Invoke the
0ef0: 20 56 44 42 45 20 63 6f 76 65 72 61 67 65 20 63   VDBE coverage c
0f00: 61 6c 6c 62 61 63 6b 2c 20 69 66 20 74 68 61 74  allback, if that
0f10: 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 64 65 66   callback is def
0f20: 69 6e 65 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66  ined.  This.** f
0f30: 65 61 74 75 72 65 20 69 73 20 75 73 65 64 20 66  eature is used f
0f40: 6f 72 20 74 65 73 74 20 73 75 69 74 65 20 76 61  or test suite va
0f50: 6c 69 64 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e  lidation only an
0f60: 64 20 64 6f 65 73 20 6e 6f 74 20 61 70 70 65 61  d does not appea
0f70: 72 20 61 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69  r an.** producti
0f80: 6f 6e 20 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a  on builds..**.**
0f90: 20 4d 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72   M is an integer
0fa0: 2c 20 32 20 6f 72 20 33 2c 20 74 68 61 74 20 69  , 2 or 3, that i
0fb0: 6e 64 69 63 65 73 20 68 6f 77 20 6d 61 6e 79 20  ndices how many 
0fc0: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 74  different ways t
0fd0: 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e  he.** branch can
0fe0: 20 67 6f 2e 20 20 49 74 20 69 73 20 75 73 75 61   go.  It is usua
0ff0: 6c 6c 79 20 32 2e 20 20 22 49 22 20 69 73 20 74  lly 2.  "I" is t
1000: 68 65 20 64 69 72 65 63 74 69 6f 6e 20 74 68 65  he direction the
1010: 20 62 72 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e   branch.** goes.
1020: 20 20 30 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20    0 means falls 
1030: 74 68 72 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e  through.  1 mean
1040: 73 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b 65  s branch is take
1050: 6e 2e 20 20 32 20 6d 65 61 6e 73 20 74 68 65 0a  n.  2 means the.
1060: 2a 2a 20 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e  ** second altern
1070: 61 74 69 76 65 20 62 72 61 6e 63 68 20 69 73 20  ative branch is 
1080: 74 61 6b 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72  taken..**.** iSr
1090: 63 4c 69 6e 65 20 69 73 20 74 68 65 20 73 6f 75  cLine is the sou
10a0: 72 63 65 20 63 6f 64 65 20 6c 69 6e 65 20 28 66  rce code line (f
10b0: 72 6f 6d 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f  rom the __LINE__
10c0: 20 6d 61 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20   macro) that.** 
10d0: 67 65 6e 65 72 61 74 65 64 20 74 68 65 20 56 44  generated the VD
10e0: 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  BE instruction. 
10f0: 20 54 68 69 73 20 69 6e 73 74 72 75 6d 65 6e 74   This instrument
1100: 61 74 69 6f 6e 20 61 73 73 75 6d 65 73 20 74 68  ation assumes th
1110: 61 74 20 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65  at all.** source
1120: 20 63 6f 64 65 20 69 73 20 69 6e 20 61 20 73 69   code is in a si
1130: 6e 67 6c 65 20 66 69 6c 65 20 28 74 68 65 20 61  ngle file (the a
1140: 6d 61 6c 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53  malgamation).  S
1150: 70 65 63 69 61 6c 20 76 61 6c 75 65 73 20 31 0a  pecial values 1.
1160: 2a 2a 20 61 6e 64 20 32 20 66 6f 72 20 74 68 65  ** and 2 for the
1170: 20 69 53 72 63 4c 69 6e 65 20 70 61 72 61 6d 65   iSrcLine parame
1180: 74 65 72 20 6d 65 61 6e 20 74 68 61 74 20 74 68  ter mean that th
1190: 69 73 20 70 61 72 74 69 63 75 6c 61 72 20 62 72  is particular br
11a0: 61 6e 63 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79  anch is.** alway
11b0: 73 20 74 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72  s taken or never
11c0: 20 74 61 6b 65 6e 2c 20 72 65 73 70 65 63 74 69   taken, respecti
11d0: 76 65 6c 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  vely..*/.#if !de
11e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 56 44 42  fined(SQLITE_VDB
11f0: 45 5f 43 4f 56 45 52 41 47 45 29 0a 23 20 64 65  E_COVERAGE).# de
1200: 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68 54  fine VdbeBranchT
1210: 61 6b 65 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a  aken(I,M).#else.
1220: 23 20 64 65 66 69 6e 65 20 56 64 62 65 42 72 61  # define VdbeBra
1230: 6e 63 68 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64  nchTaken(I,M) vd
1240: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 70 4f 70  beTakeBranch(pOp
1250: 2d 3e 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a  ->iSrcLine,I,M).
1260: 20 20 73 74 61 74 69 63 20 76 6f 69 64 20 76 64    static void vd
1270: 62 65 54 61 6b 65 42 72 61 6e 63 68 28 69 6e 74  beTakeBranch(int
1280: 20 69 53 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c   iSrcLine, u8 I,
1290: 20 75 38 20 4d 29 7b 0a 20 20 20 20 69 66 28 20   u8 M){.    if( 
12a0: 69 53 72 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41  iSrcLine<=2 && A
12b0: 4c 57 41 59 53 28 69 53 72 63 4c 69 6e 65 3e 30  LWAYS(iSrcLine>0
12c0: 29 20 29 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69  ) ){.      M = i
12d0: 53 72 63 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f  SrcLine;.      /
12e0: 2a 20 41 73 73 65 72 74 20 74 68 65 20 74 72 75  * Assert the tru
12f0: 74 68 20 6f 66 20 56 64 62 65 43 6f 76 65 72 61  th of VdbeCovera
1300: 67 65 41 6c 77 61 79 73 54 61 6b 65 6e 28 29 20  geAlwaysTaken() 
1310: 61 6e 64 20 0a 20 20 20 20 20 20 2a 2a 20 56 64  and .      ** Vd
1320: 62 65 43 6f 76 65 72 61 67 65 4e 65 76 65 72 54  beCoverageNeverT
1330: 61 6b 65 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20  aken() */.      
1340: 61 73 73 65 72 74 28 20 28 4d 20 26 20 49 29 3d  assert( (M & I)=
1350: 3d 49 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =I );.    }else{
1360: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
1370: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
1380: 56 64 62 65 42 72 61 6e 63 68 3d 3d 30 20 29 20  VdbeBranch==0 ) 
1390: 72 65 74 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45  return;  /*NO_TE
13a0: 53 54 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74  ST*/.      sqlit
13b0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78  e3GlobalConfig.x
13c0: 56 64 62 65 42 72 61 6e 63 68 28 73 71 6c 69 74  VdbeBranch(sqlit
13d0: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70  e3GlobalConfig.p
13e0: 56 64 62 65 42 72 61 6e 63 68 41 72 67 2c 0a 20  VdbeBranchArg,. 
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1410: 20 20 20 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c       iSrcLine,I,
1420: 4d 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65  M);.    }.  }.#e
1430: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76  ndif../*.** Conv
1440: 65 72 74 20 74 68 65 20 67 69 76 65 6e 20 72 65  ert the given re
1450: 67 69 73 74 65 72 20 69 6e 74 6f 20 61 20 73 74  gister into a st
1460: 72 69 6e 67 20 69 66 20 69 74 20 69 73 6e 27 74  ring if it isn't
1470: 20 6f 6e 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e   one.** already.
1480: 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   Return non-zero
1490: 20 69 66 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66   if a malloc() f
14a0: 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ails..*/.#define
14b0: 20 53 74 72 69 6e 67 69 66 79 28 50 2c 20 65 6e   Stringify(P, en
14c0: 63 29 20 5c 0a 20 20 20 69 66 28 28 28 50 29 2d  c) \.   if(((P)-
14d0: 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c  >flags&(MEM_Str|
14e0: 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26  MEM_Blob))==0 &&
14f0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
1500: 74 72 69 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30  tringify(P,enc,0
1510: 29 29 20 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f  )) \.     { goto
1520: 20 6e 6f 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a   no_mem; }../*.*
1530: 2a 20 41 6e 20 65 70 68 65 6d 65 72 61 6c 20 73  * An ephemeral s
1540: 74 72 69 6e 67 20 76 61 6c 75 65 20 28 73 69 67  tring value (sig
1550: 6e 69 66 69 65 64 20 62 79 20 74 68 65 20 4d 45  nified by the ME
1560: 4d 5f 45 70 68 65 6d 20 66 6c 61 67 29 20 63 6f  M_Ephem flag) co
1570: 6e 74 61 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e  ntains.** a poin
1580: 74 65 72 20 74 6f 20 61 20 64 79 6e 61 6d 69 63  ter to a dynamic
1590: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 73  ally allocated s
15a0: 74 72 69 6e 67 20 77 68 65 72 65 20 73 6f 6d 65  tring where some
15b0: 20 6f 74 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a   other entity.**
15c0: 20 69 73 20 72 65 73 70 6f 6e 73 69 62 6c 65 20   is responsible 
15d0: 66 6f 72 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  for deallocating
15e0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 42   that string.  B
15f0: 65 63 61 75 73 65 20 74 68 65 20 72 65 67 69 73  ecause the regis
1600: 74 65 72 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20  ter.** does not 
1610: 63 6f 6e 74 72 6f 6c 20 74 68 65 20 73 74 72 69  control the stri
1620: 6e 67 2c 20 69 74 20 6d 69 67 68 74 20 62 65 20  ng, it might be 
1630: 64 65 6c 65 74 65 64 20 77 69 74 68 6f 75 74 20  deleted without 
1640: 74 68 65 20 72 65 67 69 73 74 65 72 0a 2a 2a 20  the register.** 
1650: 6b 6e 6f 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a  knowing it..**.*
1660: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 63  * This routine c
1670: 6f 6e 76 65 72 74 73 20 61 6e 20 65 70 68 65 6d  onverts an ephem
1680: 65 72 61 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f  eral string into
1690: 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61   a dynamically a
16a0: 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 73 74 72 69  llocated.** stri
16b0: 6e 67 20 74 68 61 74 20 74 68 65 20 72 65 67 69  ng that the regi
16c0: 73 74 65 72 20 69 74 73 65 6c 66 20 63 6f 6e 74  ster itself cont
16d0: 72 6f 6c 73 2e 20 20 49 6e 20 6f 74 68 65 72 20  rols.  In other 
16e0: 77 6f 72 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e  words, it.** con
16f0: 76 65 72 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68  verts an MEM_Eph
1700: 65 6d 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61  em string into a
1710: 20 73 74 72 69 6e 67 20 77 69 74 68 20 50 2e 7a   string with P.z
1720: 3d 3d 50 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a  ==P.zMalloc..*/.
1730: 23 64 65 66 69 6e 65 20 44 65 65 70 68 65 6d 65  #define Deepheme
1740: 72 61 6c 69 7a 65 28 50 29 20 5c 0a 20 20 20 69  ralize(P) \.   i
1750: 66 28 20 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d  f( ((P)->flags&M
1760: 45 4d 5f 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20  EM_Ephem)!=0 \. 
1770: 20 20 20 20 20 20 26 26 20 73 71 6c 69 74 65 33        && sqlite3
1780: 56 64 62 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65  VdbeMemMakeWrite
1790: 61 62 6c 65 28 50 29 20 29 7b 20 67 6f 74 6f 20  able(P) ){ goto 
17a0: 6e 6f 5f 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74  no_mem;}../* Ret
17b0: 75 72 6e 20 74 72 75 65 20 69 66 20 74 68 65 20  urn true if the 
17c0: 63 75 72 73 6f 72 20 77 61 73 20 6f 70 65 6e 65  cursor was opene
17d0: 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f  d using the OP_O
17e0: 70 65 6e 53 6f 72 74 65 72 20 6f 70 63 6f 64 65  penSorter opcode
17f0: 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 69 73 53  . */.#define isS
1800: 6f 72 74 65 72 28 78 29 20 28 28 78 29 2d 3e 70  orter(x) ((x)->p
1810: 53 6f 72 74 65 72 21 3d 30 29 0a 0a 2f 2a 0a 2a  Sorter!=0)../*.*
1820: 2a 20 41 6c 6c 6f 63 61 74 65 20 56 64 62 65 43  * Allocate VdbeC
1830: 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 69 43 75  ursor number iCu
1840: 72 2e 20 20 52 65 74 75 72 6e 20 61 20 70 6f 69  r.  Return a poi
1850: 6e 74 65 72 20 74 6f 20 69 74 2e 20 20 52 65 74  nter to it.  Ret
1860: 75 72 6e 20 4e 55 4c 4c 0a 2a 2a 20 69 66 20 77  urn NULL.** if w
1870: 65 20 72 75 6e 20 6f 75 74 20 6f 66 20 6d 65 6d  e run out of mem
1880: 6f 72 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 56  ory..*/.static V
1890: 64 62 65 43 75 72 73 6f 72 20 2a 61 6c 6c 6f 63  dbeCursor *alloc
18a0: 61 74 65 43 75 72 73 6f 72 28 0a 20 20 56 64 62  ateCursor(.  Vdb
18b0: 65 20 2a 70 2c 20 20 20 20 20 20 20 20 20 20 20  e *p,           
18c0: 20 20 20 2f 2a 20 54 68 65 20 76 69 72 74 75 61     /* The virtua
18d0: 6c 20 6d 61 63 68 69 6e 65 20 2a 2f 0a 20 20 69  l machine */.  i
18e0: 6e 74 20 69 43 75 72 2c 20 20 20 20 20 20 20 20  nt iCur,        
18f0: 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
1900: 20 74 68 65 20 6e 65 77 20 56 64 62 65 43 75 72   the new VdbeCur
1910: 73 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46 69  sor */.  int nFi
1920: 65 6c 64 2c 20 20 20 20 20 20 20 20 20 20 20 2f  eld,           /
1930: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c  * Number of fiel
1940: 64 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20  ds in the table 
1950: 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 6e  or index */.  in
1960: 74 20 69 44 62 2c 20 20 20 20 20 20 20 20 20 20  t iDb,          
1970: 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20      /* Database 
1980: 74 68 65 20 63 75 72 73 6f 72 20 62 65 6c 6f 6e  the cursor belon
1990: 67 73 20 74 6f 2c 20 6f 72 20 2d 31 20 2a 2f 0a  gs to, or -1 */.
19a0: 20 20 69 6e 74 20 69 73 42 74 72 65 65 43 75 72    int isBtreeCur
19b0: 73 6f 72 20 20 20 20 20 2f 2a 20 54 72 75 65 20  sor     /* True 
19c0: 66 6f 72 20 42 2d 54 72 65 65 2e 20 20 46 61 6c  for B-Tree.  Fal
19d0: 73 65 20 66 6f 72 20 70 73 65 75 64 6f 2d 74 61  se for pseudo-ta
19e0: 62 6c 65 20 6f 72 20 76 74 61 62 20 2a 2f 0a 29  ble or vtab */.)
19f0: 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20  {.  /* Find the 
1a00: 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61 74  memory cell that
1a10: 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f   will be used to
1a20: 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62 20   store the blob 
1a30: 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20 72  of memory.  ** r
1a40: 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
1a50: 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72 75   VdbeCursor stru
1a60: 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f 6e  cture. It is con
1a70: 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20 61  venient to use a
1a80: 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d 6f   .  ** vdbe memo
1a90: 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61 67  ry cell to manag
1aa0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
1ab0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65 64  ocation required
1ac0: 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62 65   for a.  ** Vdbe
1ad0: 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72 65  Cursor structure
1ae0: 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77 69   for the followi
1af0: 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a 2a  ng reasons:.  **
1b00: 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74 69  .  **   * Someti
1b10: 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  mes cursor numbe
1b20: 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72 20  rs are used for 
1b30: 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66 66  a couple of diff
1b40: 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20 70  erent.  **     p
1b50: 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64 62  urposes in a vdb
1b60: 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20 64  e program. The d
1b70: 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d 69  ifferent uses mi
1b80: 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a 2a  ght require.  **
1b90: 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20 73       different s
1ba0: 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  ized allocations
1bb0: 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 70  . Memory cells p
1bc0: 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65 0a  rovide growable.
1bd0: 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61 74    **     allocat
1be0: 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ions..  **.  ** 
1bf0: 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20 45    * When using E
1c00: 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e  NABLE_MEMORY_MAN
1c10: 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79 20  AGEMENT, memory 
1c20: 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61 6e  cell buffers can
1c30: 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72 65  .  **     be fre
1c40: 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74 68  ed lazily via th
1c50: 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73  e sqlite3_releas
1c60: 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e 20  e_memory() API. 
1c70: 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d 69  This.  **     mi
1c80: 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d 62  nimizes the numb
1c90: 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61 6c  er of malloc cal
1ca0: 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20 73  ls made by the s
1cb0: 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ystem..  **.  **
1cc0: 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 66 6f   Memory cells fo
1cd0: 72 20 63 75 72 73 6f 72 73 20 61 72 65 20 61 6c  r cursors are al
1ce0: 6c 6f 63 61 74 65 64 20 61 74 20 74 68 65 20 74  located at the t
1cf0: 6f 70 20 6f 66 20 74 68 65 20 61 64 64 72 65 73  op of the addres
1d00: 73 0a 20 20 2a 2a 20 73 70 61 63 65 2e 20 4d 65  s.  ** space. Me
1d10: 6d 6f 72 79 20 63 65 6c 6c 20 28 70 2d 3e 6e 4d  mory cell (p->nM
1d20: 65 6d 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  em) corresponds 
1d30: 74 6f 20 63 75 72 73 6f 72 20 30 2e 20 53 70 61  to cursor 0. Spa
1d40: 63 65 20 66 6f 72 0a 20 20 2a 2a 20 63 75 72 73  ce for.  ** curs
1d50: 6f 72 20 31 20 69 73 20 6d 61 6e 61 67 65 64 20  or 1 is managed 
1d60: 62 79 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 28  by memory cell (
1d70: 70 2d 3e 6e 4d 65 6d 2d 31 29 2c 20 65 74 63 2e  p->nMem-1), etc.
1d80: 0a 20 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  .  */.  Mem *pMe
1d90: 6d 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b 70 2d 3e  m = &p->aMem[p->
1da0: 6e 4d 65 6d 2d 69 43 75 72 5d 3b 0a 0a 20 20 69  nMem-iCur];..  i
1db0: 6e 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65  nt nByte;.  Vdbe
1dc0: 43 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b  Cursor *pCx = 0;
1dd0: 0a 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20  .  nByte = .    
1de0: 20 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28    ROUND8(sizeof(
1df0: 56 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32  VdbeCursor)) + 2
1e00: 2a 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69  *sizeof(u32)*nFi
1e10: 65 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 69 73  eld + .      (is
1e20: 42 74 72 65 65 43 75 72 73 6f 72 3f 73 71 6c 69  BtreeCursor?sqli
1e30: 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 53 69  te3BtreeCursorSi
1e40: 7a 65 28 29 3a 30 29 3b 0a 0a 20 20 61 73 73 65  ze():0);..  asse
1e50: 72 74 28 20 69 43 75 72 3c 70 2d 3e 6e 43 75 72  rt( iCur<p->nCur
1e60: 73 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e  sor );.  if( p->
1e70: 61 70 43 73 72 5b 69 43 75 72 5d 20 29 7b 0a 20  apCsr[iCur] ){. 
1e80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72     sqlite3VdbeFr
1e90: 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1ea0: 70 43 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20  pCsr[iCur]);.   
1eb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1ec0: 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53  = 0;.  }.  if( S
1ed0: 51 4c 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65  QLITE_OK==sqlite
1ee0: 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
1ef0: 52 65 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79  Resize(pMem, nBy
1f00: 74 65 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70  te) ){.    p->ap
1f10: 43 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20  Csr[iCur] = pCx 
1f20: 3d 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70  = (VdbeCursor*)p
1f30: 4d 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73  Mem->z;.    mems
1f40: 65 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f  et(pCx, 0, sizeo
1f50: 66 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a  f(VdbeCursor));.
1f60: 20 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69      pCx->iDb = i
1f70: 44 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69  Db;.    pCx->nFi
1f80: 65 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20  eld = nField;.  
1f90: 20 20 70 43 78 2d 3e 61 4f 66 66 73 65 74 20 3d    pCx->aOffset =
1fa0: 20 26 70 43 78 2d 3e 61 54 79 70 65 5b 6e 46 69   &pCx->aType[nFi
1fb0: 65 6c 64 5d 3b 0a 20 20 20 20 69 66 28 20 69 73  eld];.    if( is
1fc0: 42 74 72 65 65 43 75 72 73 6f 72 20 29 7b 0a 20  BtreeCursor ){. 
1fd0: 20 20 20 20 20 70 43 78 2d 3e 70 43 75 72 73 6f       pCx->pCurso
1fe0: 72 20 3d 20 28 42 74 43 75 72 73 6f 72 2a 29 0a  r = (BtCursor*).
1ff0: 20 20 20 20 20 20 20 20 20 20 26 70 4d 65 6d 2d            &pMem-
2000: 3e 7a 5b 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66  >z[ROUND8(sizeof
2010: 28 56 64 62 65 43 75 72 73 6f 72 29 29 2b 32 2a  (VdbeCursor))+2*
2020: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
2030: 6c 64 5d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ld];.      sqlit
2040: 65 33 42 74 72 65 65 43 75 72 73 6f 72 5a 65 72  e3BtreeCursorZer
2050: 6f 28 70 43 78 2d 3e 70 43 75 72 73 6f 72 29 3b  o(pCx->pCursor);
2060: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
2070: 75 72 6e 20 70 43 78 3b 0a 7d 0a 0a 2f 2a 0a 2a  urn pCx;.}../*.*
2080: 2a 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74  * Try to convert
2090: 20 61 20 76 61 6c 75 65 20 69 6e 74 6f 20 61 20   a value into a 
20a0: 6e 75 6d 65 72 69 63 20 72 65 70 72 65 73 65 6e  numeric represen
20b0: 74 61 74 69 6f 6e 20 69 66 20 77 65 20 63 61 6e  tation if we can
20c0: 0a 2a 2a 20 64 6f 20 73 6f 20 77 69 74 68 6f 75  .** do so withou
20d0: 74 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72 6d  t loss of inform
20e0: 61 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72  ation.  In other
20f0: 20 77 6f 72 64 73 2c 20 69 66 20 74 68 65 20 73   words, if the s
2100: 74 72 69 6e 67 0a 2a 2a 20 6c 6f 6f 6b 73 20 6c  tring.** looks l
2110: 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 63 6f  ike a number, co
2120: 6e 76 65 72 74 20 69 74 20 69 6e 74 6f 20 61 20  nvert it into a 
2130: 6e 75 6d 62 65 72 2e 20 20 49 66 20 69 74 20 64  number.  If it d
2140: 6f 65 73 20 6e 6f 74 0a 2a 2a 20 6c 6f 6f 6b 20  oes not.** look 
2150: 6c 69 6b 65 20 61 20 6e 75 6d 62 65 72 2c 20 6c  like a number, l
2160: 65 61 76 65 20 69 74 20 61 6c 6f 6e 65 2e 0a 2a  eave it alone..*
2170: 2a 0a 2a 2a 20 49 66 20 74 68 65 20 62 54 72 79  *.** If the bTry
2180: 46 6f 72 49 6e 74 20 66 6c 61 67 20 69 73 20 74  ForInt flag is t
2190: 72 75 65 2c 20 74 68 65 6e 20 65 78 74 72 61 20  rue, then extra 
21a0: 65 66 66 6f 72 74 20 69 73 20 6d 61 64 65 20 74  effort is made t
21b0: 6f 20 67 69 76 65 0a 2a 2a 20 61 6e 20 69 6e 74  o give.** an int
21c0: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
21d0: 69 6f 6e 2e 20 20 53 74 72 69 6e 67 73 20 74 68  ion.  Strings th
21e0: 61 74 20 6c 6f 6f 6b 20 6c 69 6b 65 20 66 6c 6f  at look like flo
21f0: 61 74 69 6e 67 20 70 6f 69 6e 74 0a 2a 2a 20 76  ating point.** v
2200: 61 6c 75 65 73 20 62 75 74 20 77 68 69 63 68 20  alues but which 
2210: 68 61 76 65 20 6e 6f 20 66 72 61 63 74 69 6f 6e  have no fraction
2220: 61 6c 20 63 6f 6d 70 6f 6e 65 6e 74 20 28 65 78  al component (ex
2230: 61 6d 70 6c 65 3a 20 27 34 38 2e 30 30 27 29 0a  ample: '48.00').
2240: 2a 2a 20 77 69 6c 6c 20 68 61 76 65 20 61 20 4d  ** will have a M
2250: 45 4d 5f 49 6e 74 20 72 65 70 72 65 73 65 6e 74  EM_Int represent
2260: 61 74 69 6f 6e 20 77 68 65 6e 20 62 54 72 79 46  ation when bTryF
2270: 6f 72 49 6e 74 20 69 73 20 74 72 75 65 2e 0a 2a  orInt is true..*
2280: 2a 0a 2a 2a 20 49 66 20 62 54 72 79 46 6f 72 49  *.** If bTryForI
2290: 6e 74 20 69 73 20 66 61 6c 73 65 2c 20 74 68 65  nt is false, the
22a0: 6e 20 69 66 20 74 68 65 20 69 6e 70 75 74 20 73  n if the input s
22b0: 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 61  tring contains a
22c0: 20 64 65 63 69 6d 61 6c 0a 2a 2a 20 70 6f 69 6e   decimal.** poin
22d0: 74 20 6f 72 20 65 78 70 6f 6e 65 6e 74 69 61 6c  t or exponential
22e0: 20 6e 6f 74 61 74 69 6f 6e 2c 20 74 68 65 20 72   notation, the r
22f0: 65 73 75 6c 74 20 69 73 20 6f 6e 6c 79 20 4d 45  esult is only ME
2300: 4d 5f 52 65 61 6c 2c 20 65 76 65 6e 0a 2a 2a 20  M_Real, even.** 
2310: 69 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 65  if there is an e
2320: 78 61 63 74 20 69 6e 74 65 67 65 72 20 72 65 70  xact integer rep
2330: 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74  resentation of t
2340: 68 65 20 71 75 61 6e 74 69 74 79 2e 0a 2a 2f 0a  he quantity..*/.
2350: 73 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c  static void appl
2360: 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
2370: 28 4d 65 6d 20 2a 70 52 65 63 2c 20 69 6e 74 20  (Mem *pRec, int 
2380: 62 54 72 79 46 6f 72 49 6e 74 29 7b 0a 20 20 64  bTryForInt){.  d
2390: 6f 75 62 6c 65 20 72 56 61 6c 75 65 3b 0a 20 20  ouble rValue;.  
23a0: 69 36 34 20 69 56 61 6c 75 65 3b 0a 20 20 75 38  i64 iValue;.  u8
23b0: 20 65 6e 63 20 3d 20 70 52 65 63 2d 3e 65 6e 63   enc = pRec->enc
23c0: 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 52 65  ;.  assert( (pRe
23d0: 63 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  c->flags & (MEM_
23e0: 53 74 72 7c 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  Str|MEM_Int|MEM_
23f0: 52 65 61 6c 29 29 3d 3d 4d 45 4d 5f 53 74 72 20  Real))==MEM_Str 
2400: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
2410: 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26 72  AtoF(pRec->z, &r
2420: 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20  Value, pRec->n, 
2430: 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72 6e  enc)==0 ) return
2440: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
2450: 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e 7a  e3Atoi64(pRec->z
2460: 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63 2d  , &iValue, pRec-
2470: 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20 20  >n, enc) ){.    
2480: 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61 6c  pRec->u.i = iVal
2490: 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c  ue;.    pRec->fl
24a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  ags |= MEM_Int;.
24b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52 65    }else{.    pRe
24c0: 63 2d 3e 75 2e 72 20 3d 20 72 56 61 6c 75 65 3b  c->u.r = rValue;
24d0: 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73  .    pRec->flags
24e0: 20 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20   |= MEM_Real;.  
24f0: 20 20 69 66 28 20 62 54 72 79 46 6f 72 49 6e 74    if( bTryForInt
2500: 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   ) sqlite3VdbeIn
2510: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2520: 65 63 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a  ec);.  }.}../*.*
2530: 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20  * Processing is 
2540: 64 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65  determine by the
2550: 20 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65   affinity parame
2560: 74 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54  ter:.**.** SQLIT
2570: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a  E_AFF_INTEGER:.*
2580: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41  * SQLITE_AFF_REA
2590: 4c 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  L:.** SQLITE_AFF
25a0: 5f 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20  _NUMERIC:.**    
25b0: 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70  Try to convert p
25c0: 52 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65  Rec to an intege
25d0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
25e0: 20 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f   or a .**    flo
25f0: 61 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72  ating-point repr
2600: 65 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e  esentation if an
2610: 20 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65   integer represe
2620: 6e 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73  ntation.**    is
2630: 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20   not possible.  
2640: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e  Note that the in
2650: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
2660: 74 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c  tion is.**    al
2670: 77 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20  ways preferred, 
2680: 65 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69  even if the affi
2690: 6e 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65  nity is REAL, be
26a0: 63 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69  cause.**    an i
26b0: 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74  nteger represent
26c0: 61 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70  ation is more sp
26d0: 61 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e  ace efficient on
26e0: 20 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c   disk..**.** SQL
26f0: 49 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a  ITE_AFF_TEXT:.**
2700: 20 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63      Convert pRec
2710: 20 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65   to a text repre
2720: 73 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  sentation..**.**
2730: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45   SQLITE_AFF_NONE
2740: 3a 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20  :.**    No-op.  
2750: 70 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65  pRec is unchange
2760: 64 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  d..*/.static voi
2770: 64 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28  d applyAffinity(
2780: 0a 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20  .  Mem *pRec,   
2790: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61         /* The va
27a0: 6c 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66  lue to apply aff
27b0: 69 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68  inity to */.  ch
27c0: 61 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20  ar affinity,    
27d0: 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74    /* The affinit
27e0: 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20  y to be applied 
27f0: 2a 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20  */.  u8 enc     
2800: 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20           /* Use 
2810: 74 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69  this text encodi
2820: 6e 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61  ng */.){.  if( a
2830: 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45 5f  ffinity>=SQLITE_
2840: 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a 20  AFF_NUMERIC ){. 
2850: 20 20 20 61 73 73 65 72 74 28 20 61 66 66 69 6e     assert( affin
2860: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2870: 49 4e 54 45 47 45 52 20 7c 7c 20 61 66 66 69 6e  INTEGER || affin
2880: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2890: 52 45 41 4c 0a 20 20 20 20 20 20 20 20 20 20 20  REAL.           
28a0: 20 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53    || affinity==S
28b0: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
28c0: 43 20 29 3b 0a 20 20 20 20 69 66 28 20 28 70 52  C );.    if( (pR
28d0: 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  ec->flags & MEM_
28e0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
28f0: 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61 67   if( (pRec->flag
2900: 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
2910: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
2920: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pRec->flags & ME
2930: 4d 5f 53 74 72 20 29 20 61 70 70 6c 79 4e 75 6d  M_Str ) applyNum
2940: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 52 65  ericAffinity(pRe
2950: 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  c,1);.      }els
2960: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
2970: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
2980: 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20  inity(pRec);.   
2990: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 65 6c     }.    }.  }el
29a0: 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79 3d  se if( affinity=
29b0: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54  =SQLITE_AFF_TEXT
29c0: 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20   ){.    /* Only 
29d0: 61 74 74 65 6d 70 74 20 74 68 65 20 63 6f 6e 76  attempt the conv
29e0: 65 72 73 69 6f 6e 20 74 6f 20 54 45 58 54 20 69  ersion to TEXT i
29f0: 66 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e  f there is an in
2a00: 74 65 67 65 72 20 6f 72 20 72 65 61 6c 0a 20 20  teger or real.  
2a10: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
2a20: 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64 20 4e 55  ion (blob and NU
2a30: 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74 20 63 6f  LL do not get co
2a40: 6e 76 65 72 74 65 64 29 20 62 75 74 20 6e 6f 20  nverted) but no 
2a50: 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65  string.    ** re
2a60: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 0a 20 20  presentation..  
2a70: 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d    */.    if( 0==
2a80: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d  (pRec->flags&MEM
2a90: 5f 53 74 72 29 20 26 26 20 28 70 52 65 63 2d 3e  _Str) && (pRec->
2aa0: 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61 6c 7c  flags&(MEM_Real|
2ab0: 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20 20 20  MEM_Int)) ){.   
2ac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ad0: 6d 53 74 72 69 6e 67 69 66 79 28 70 52 65 63 2c  mStringify(pRec,
2ae0: 20 65 6e 63 2c 20 31 29 3b 0a 20 20 20 20 7d 0a   enc, 1);.    }.
2af0: 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79    }.}../*.** Try
2b00: 20 74 6f 20 63 6f 6e 76 65 72 74 20 74 68 65 20   to convert the 
2b10: 74 79 70 65 20 6f 66 20 61 20 66 75 6e 63 74 69  type of a functi
2b20: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 6f 72 20 61  on argument or a
2b30: 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 0a 2a   result column.*
2b40: 2a 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  * into a numeric
2b50: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2b60: 20 20 55 73 65 20 65 69 74 68 65 72 20 49 4e 54    Use either INT
2b70: 45 47 45 52 20 6f 72 20 52 45 41 4c 20 77 68 69  EGER or REAL whi
2b80: 63 68 65 76 65 72 0a 2a 2a 20 69 73 20 61 70 70  chever.** is app
2b90: 72 6f 70 72 69 61 74 65 2e 20 20 42 75 74 20 6f  ropriate.  But o
2ba0: 6e 6c 79 20 64 6f 20 74 68 65 20 63 6f 6e 76 65  nly do the conve
2bb0: 72 73 69 6f 6e 20 69 66 20 69 74 20 69 73 20 70  rsion if it is p
2bc0: 6f 73 73 69 62 6c 65 20 77 69 74 68 6f 75 74 0a  ossible without.
2bd0: 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66 6f 72  ** loss of infor
2be0: 6d 61 74 69 6f 6e 20 61 6e 64 20 72 65 74 75 72  mation and retur
2bf0: 6e 20 74 68 65 20 72 65 76 69 73 65 64 20 74 79  n the revised ty
2c00: 70 65 20 6f 66 20 74 68 65 20 61 72 67 75 6d 65  pe of the argume
2c10: 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
2c20: 65 33 5f 76 61 6c 75 65 5f 6e 75 6d 65 72 69 63  e3_value_numeric
2c30: 5f 74 79 70 65 28 73 71 6c 69 74 65 33 5f 76 61  _type(sqlite3_va
2c40: 6c 75 65 20 2a 70 56 61 6c 29 7b 0a 20 20 69 6e  lue *pVal){.  in
2c50: 74 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74 65  t eType = sqlite
2c60: 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56 61  3_value_type(pVa
2c70: 6c 29 3b 0a 20 20 69 66 28 20 65 54 79 70 65 3d  l);.  if( eType=
2c80: 3d 53 51 4c 49 54 45 5f 54 45 58 54 20 29 7b 0a  =SQLITE_TEXT ){.
2c90: 20 20 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20      Mem *pMem = 
2ca0: 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a 20 20 20 20  (Mem*)pVal;.    
2cb0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2cc0: 6e 69 74 79 28 70 4d 65 6d 2c 20 30 29 3b 0a 20  nity(pMem, 0);. 
2cd0: 20 20 20 65 54 79 70 65 20 3d 20 73 71 6c 69 74     eType = sqlit
2ce0: 65 33 5f 76 61 6c 75 65 5f 74 79 70 65 28 70 56  e3_value_type(pV
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  al);.  }.  retur
2d00: 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a 2f 2a 0a 2a  n eType;.}../*.*
2d10: 2a 20 45 78 70 6f 72 74 65 64 20 76 65 72 73 69  * Exported versi
2d20: 6f 6e 20 6f 66 20 61 70 70 6c 79 41 66 66 69 6e  on of applyAffin
2d30: 69 74 79 28 29 2e 20 54 68 69 73 20 6f 6e 65 20  ity(). This one 
2d40: 77 6f 72 6b 73 20 6f 6e 20 73 71 6c 69 74 65 33  works on sqlite3
2d50: 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a 20 6e 6f 74  _value*, .** not
2d60: 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 4d 65   the internal Me
2d70: 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a 76 6f 69 64  m* type..*/.void
2d80: 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2d90: 6c 79 41 66 66 69 6e 69 74 79 28 0a 20 20 73 71  lyAffinity(.  sq
2da0: 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 56 61  lite3_value *pVa
2db0: 6c 2c 20 0a 20 20 75 38 20 61 66 66 69 6e 69 74  l, .  u8 affinit
2dc0: 79 2c 20 0a 20 20 75 38 20 65 6e 63 0a 29 7b 0a  y, .  u8 enc.){.
2dd0: 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
2de0: 28 4d 65 6d 20 2a 29 70 56 61 6c 2c 20 61 66 66  (Mem *)pVal, aff
2df0: 69 6e 69 74 79 2c 20 65 6e 63 29 3b 0a 7d 0a 0a  inity, enc);.}..
2e00: 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63 75 72 72 65  /*.** pMem curre
2e10: 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f 6c 64 73 20  ntly only holds 
2e20: 61 20 73 74 72 69 6e 67 20 74 79 70 65 20 28 6f  a string type (o
2e30: 72 20 6d 61 79 62 65 20 61 20 42 4c 4f 42 20 74  r maybe a BLOB t
2e40: 68 61 74 20 77 65 20 63 61 6e 0a 2a 2a 20 69 6e  hat we can.** in
2e50: 74 65 72 70 72 65 74 20 61 73 20 61 20 73 74 72  terpret as a str
2e60: 69 6e 67 20 69 66 20 77 65 20 77 61 6e 74 20 74  ing if we want t
2e70: 6f 29 2e 20 20 43 6f 6d 70 75 74 65 20 69 74 73  o).  Compute its
2e80: 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 0a 2a   corresponding.*
2e90: 2a 20 6e 75 6d 65 72 69 63 20 74 79 70 65 2c 20  * numeric type, 
2ea0: 69 66 20 68 61 73 20 6f 6e 65 2e 20 20 53 65 74  if has one.  Set
2eb0: 20 74 68 65 20 70 4d 65 6d 2d 3e 75 2e 72 20 61   the pMem->u.r a
2ec0: 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69 20 66 69 65  nd pMem->u.i fie
2ed0: 6c 64 73 0a 2a 2a 20 61 63 63 6f 72 64 69 6e 67  lds.** according
2ee0: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75 31  ly..*/.static u1
2ef0: 36 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e  6 SQLITE_NOINLIN
2f00: 45 20 63 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63  E computeNumeric
2f10: 54 79 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b  Type(Mem *pMem){
2f20: 0a 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d  .  assert( (pMem
2f30: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49  ->flags & (MEM_I
2f40: 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d 3d 30  nt|MEM_Real))==0
2f50: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70   );.  assert( (p
2f60: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2f70: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2f80: 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 73 71 6c  !=0 );.  if( sql
2f90: 69 74 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a  ite3AtoF(pMem->z
2fa0: 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72 2c 20 70 4d  , &pMem->u.r, pM
2fb0: 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63  em->n, pMem->enc
2fc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
2fd0: 72 6e 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  rn 0;.  }.  if( 
2fe0: 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 70 4d  sqlite3Atoi64(pM
2ff0: 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e  em->z, &pMem->u.
3000: 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d  i, pMem->n, pMem
3010: 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45 5f 4f  ->enc)==SQLITE_O
3020: 4b 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  K ){.    return 
3030: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 72  MEM_Int;.  }.  r
3040: 65 74 75 72 6e 20 4d 45 4d 5f 52 65 61 6c 3b 0a  eturn MEM_Real;.
3050: 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  }../*.** Return 
3060: 74 68 65 20 6e 75 6d 65 72 69 63 20 74 79 70 65  the numeric type
3070: 20 66 6f 72 20 70 4d 65 6d 2c 20 65 69 74 68 65   for pMem, eithe
3080: 72 20 4d 45 4d 5f 49 6e 74 20 6f 72 20 4d 45 4d  r MEM_Int or MEM
3090: 5f 52 65 61 6c 20 6f 72 20 62 6f 74 68 20 6f 72  _Real or both or
30a0: 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a 2a 2a 0a 2a  .** none.  .**.*
30b0: 2a 20 55 6e 6c 69 6b 65 20 61 70 70 6c 79 4e 75  * Unlike applyNu
30c0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 29 2c  mericAffinity(),
30d0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 64 6f   this routine do
30e0: 65 73 20 6e 6f 74 20 6d 6f 64 69 66 79 20 70 4d  es not modify pM
30f0: 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a 2a 20 42 75  em->flags..** Bu
3100: 74 20 69 74 20 64 6f 65 73 20 73 65 74 20 70 4d  t it does set pM
3110: 65 6d 2d 3e 75 2e 72 20 61 6e 64 20 70 4d 65 6d  em->u.r and pMem
3120: 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72 69 61 74  ->u.i appropriat
3130: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75  ely..*/.static u
3140: 31 36 20 6e 75 6d 65 72 69 63 54 79 70 65 28 4d  16 numericType(M
3150: 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20 69 66 28  em *pMem){.  if(
3160: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28   pMem->flags & (
3170: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
3180: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
3190: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31a0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31b0: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4d 65 6d  ;.  }.  if( pMem
31c0: 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
31d0: 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b 0a  tr|MEM_Blob) ){.
31e0: 20 20 20 20 72 65 74 75 72 6e 20 63 6f 6d 70 75      return compu
31f0: 74 65 4e 75 6d 65 72 69 63 54 79 70 65 28 70 4d  teNumericType(pM
3200: 65 6d 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  em);.  }.  retur
3210: 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53  n 0;.}..#ifdef S
3220: 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
3230: 2a 20 57 72 69 74 65 20 61 20 6e 69 63 65 20 73  * Write a nice s
3240: 74 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 61  tring representa
3250: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e 74  tion of the cont
3260: 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20 70 4d 65  ents of cell pMe
3270: 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66 66 65 72  m.** into buffer
3280: 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68 20 6e 42   zBuf, length nB
3290: 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  uf..*/.void sqli
32a0: 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74 74 79  te3VdbeMemPretty
32b0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d 65 6d 2c  Print(Mem *pMem,
32c0: 20 63 68 61 72 20 2a 7a 42 75 66 29 7b 0a 20 20   char *zBuf){.  
32d0: 63 68 61 72 20 2a 7a 43 73 72 20 3d 20 7a 42 75  char *zCsr = zBu
32e0: 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20 70 4d 65  f;.  int f = pMe
32f0: 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20 73 74 61  m->flags;..  sta
3300: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
3310: 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65 73 5b 5d  const encnames[]
3320: 20 3d 20 7b 22 28 58 29 22 2c 20 22 28 38 29 22   = {"(X)", "(8)"
3330: 2c 20 22 28 31 36 4c 45 29 22 2c 20 22 28 31 36  , "(16LE)", "(16
3340: 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28 20 66 26  BE)"};..  if( f&
3350: 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20 20 20 20  MEM_Blob ){.    
3360: 69 6e 74 20 69 3b 0a 20 20 20 20 63 68 61 72 20  int i;.    char 
3370: 63 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d  c;.    if( f & M
3380: 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20  EM_Dyn ){.      
3390: 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20 61  c = 'z';.      a
33a0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
33b0: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68 65  _Static|MEM_Ephe
33c0: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
33d0: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
33e0: 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20 20  Static ){.      
33f0: 63 20 3d 20 27 74 27 3b 0a 20 20 20 20 20 20 61  c = 't';.      a
3400: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3410: 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65 6d 29 29  _Dyn|MEM_Ephem))
3420: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3430: 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 45 70 68   if( f & MEM_Eph
3440: 65 6d 20 29 7b 0a 20 20 20 20 20 20 63 20 3d 20  em ){.      c = 
3450: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3460: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3470: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
3480: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
3490: 20 20 20 20 20 63 20 3d 20 27 73 27 3b 0a 20 20       c = 's';.  
34a0: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
34b0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
34c0: 43 73 72 2c 20 22 25 63 22 2c 20 63 29 3b 0a 20  Csr, "%c", c);. 
34d0: 20 20 20 7a 43 73 72 20 2b 3d 20 73 71 6c 69 74     zCsr += sqlit
34e0: 65 33 53 74 72 6c 65 6e 33 30 28 7a 43 73 72 29  e3Strlen30(zCsr)
34f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
3500: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3510: 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d 2d 3e 6e  , "%d[", pMem->n
3520: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3530: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3540: 43 73 72 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  Csr);.    for(i=
3550: 30 3b 20 69 3c 31 36 20 26 26 20 69 3c 70 4d 65  0; i<16 && i<pMe
3560: 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  m->n; i++){.    
3570: 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e    sqlite3_snprin
3580: 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 20 22 25  tf(100, zCsr, "%
3590: 30 32 58 22 2c 20 28 28 69 6e 74 29 70 4d 65 6d  02X", ((int)pMem
35a0: 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46 29 29 3b  ->z[i] & 0xFF));
35b0: 0a 20 20 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  .      zCsr += s
35c0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
35d0: 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  Csr);.    }.    
35e0: 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26  for(i=0; i<16 &&
35f0: 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29   i<pMem->n; i++)
3600: 7b 0a 20 20 20 20 20 20 63 68 61 72 20 7a 20 3d  {.      char z =
3610: 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a 20 20 20   pMem->z[i];.   
3620: 20 20 20 69 66 28 20 7a 3c 33 32 20 7c 7c 20 7a     if( z<32 || z
3630: 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b 2b 20 3d  >126 ) *zCsr++ =
3640: 20 27 2e 27 3b 0a 20 20 20 20 20 20 65 6c 73 65   '.';.      else
3650: 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b 0a 20 20   *zCsr++ = z;.  
3660: 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69 74 65 33    }..    sqlite3
3670: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3680: 43 73 72 2c 20 22 5d 25 73 22 2c 20 65 6e 63 6e  Csr, "]%s", encn
3690: 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e 63 5d 29  ames[pMem->enc])
36a0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
36b0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
36c0: 73 72 29 3b 0a 20 20 20 20 69 66 28 20 66 20 26  sr);.    if( f &
36d0: 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20   MEM_Zero ){.   
36e0: 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69     sqlite3_snpri
36f0: 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c 22 2b  ntf(100, zCsr,"+
3700: 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e 6e 5a 65  %dz",pMem->u.nZe
3710: 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  ro);.      zCsr 
3720: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3730: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3740: 20 20 20 20 2a 7a 43 73 72 20 3d 20 27 5c 30 27      *zCsr = '\0'
3750: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20  ;.  }else if( f 
3760: 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  & MEM_Str ){.   
3770: 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20 20 20 7a   int j, k;.    z
3780: 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b 0a 20 20  Buf[0] = ' ';.  
3790: 20 20 69 66 28 20 66 20 26 20 4d 45 4d 5f 44 79    if( f & MEM_Dy
37a0: 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42 75 66 5b  n ){.      zBuf[
37b0: 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20 20 20 20  1] = 'z';.      
37c0: 61 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45  assert( (f & (ME
37d0: 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45 70 68  M_Static|MEM_Eph
37e0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
37f0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
3800: 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20 20 20  _Static ){.     
3810: 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74 27 3b 0a   zBuf[1] = 't';.
3820: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 66        assert( (f
3830: 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f   & (MEM_Dyn|MEM_
3840: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3850: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3860: 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20  MEM_Ephem ){.   
3870: 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 65 27     zBuf[1] = 'e'
3880: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
3890: 28 66 20 26 20 28 4d 45 4d 5f 53 74 61 74 69 63  (f & (MEM_Static
38a0: 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30 20 29 3b  |MEM_Dyn))==0 );
38b0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
38c0: 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 73 27 3b    zBuf[1] = 's';
38d0: 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20 3d 20 32  .    }.    k = 2
38e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e  ;.    sqlite3_sn
38f0: 70 72 69 6e 74 66 28 31 30 30 2c 20 26 7a 42 75  printf(100, &zBu
3900: 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70 4d 65 6d  f[k], "%d", pMem
3910: 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  ->n);.    k += s
3920: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3930: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3940: 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27 3b 0a 20  uf[k++] = '[';. 
3950: 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 31 35     for(j=0; j<15
3960: 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e 3b 20 6a   && j<pMem->n; j
3970: 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38 20 63 20  ++){.      u8 c 
3980: 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b 0a 20 20  = pMem->z[j];.  
3990: 20 20 20 20 69 66 28 20 63 3e 3d 30 78 32 30 20      if( c>=0x20 
39a0: 26 26 20 63 3c 30 78 37 66 20 29 7b 0a 20 20 20  && c<0x7f ){.   
39b0: 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d       zBuf[k++] =
39c0: 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   c;.      }else{
39d0: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
39e0: 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  +] = '.';.      
39f0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a 42 75 66  }.    }.    zBuf
3a00: 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a 20 20 20  [k++] = ']';.   
3a10: 20 73 71 6c 69 74 65 33 5f 73 6e 70 72 69 6e 74   sqlite3_snprint
3a20: 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b 5d 2c 20  f(100,&zBuf[k], 
3a30: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3a40: 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b 3d 20 73  nc]);.    k += s
3a50: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 26  qlite3Strlen30(&
3a60: 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20 20 7a 42  zBuf[k]);.    zB
3a70: 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a 20 20 7d  uf[k++] = 0;.  }
3a80: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3a90: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
3aa0: 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68 65 20 76  *.** Print the v
3ab0: 61 6c 75 65 20 6f 66 20 61 20 72 65 67 69 73 74  alue of a regist
3ac0: 65 72 20 66 6f 72 20 74 72 61 63 69 6e 67 20 70  er for tracing p
3ad0: 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73 74 61 74  urposes:.*/.stat
3ae0: 69 63 20 76 6f 69 64 20 6d 65 6d 54 72 61 63 65  ic void memTrace
3af0: 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29 7b 0a 20  Print(Mem *p){. 
3b00: 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20   if( p->flags & 
3b10: 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 20 29 7b  MEM_Undefined ){
3b20: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 75 6e  .    printf(" un
3b30: 64 65 66 69 6e 65 64 22 29 3b 0a 20 20 7d 65 6c  defined");.  }el
3b40: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3b50: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
3b60: 20 20 70 72 69 6e 74 66 28 22 20 4e 55 4c 4c 22    printf(" NULL"
3b70: 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 28  );.  }else if( (
3b80: 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  p->flags & (MEM_
3b90: 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 28  Int|MEM_Str))==(
3ba0: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3bb0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3bc0: 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75 2e   si:%lld", p->u.
3bd0: 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20  i);.  }else if( 
3be0: 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  p->flags & MEM_I
3bf0: 6e 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66  nt ){.    printf
3c00: 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70 2d 3e 75  (" i:%lld", p->u
3c10: 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  .i);.#ifndef SQL
3c20: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
3c30: 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c 73 65 20  G_POINT.  }else 
3c40: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3c50: 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20 20 70  EM_Real ){.    p
3c60: 72 69 6e 74 66 28 22 20 72 3a 25 67 22 2c 20 70  rintf(" r:%g", p
3c70: 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64 69 66 0a 20  ->u.r);.#endif. 
3c80: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3c90: 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
3ca0: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3cb0: 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20 7d   (rowset)");.  }
3cc0: 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20 7a  else{.    char z
3cd0: 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73 71  Buf[200];.    sq
3ce0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65 74  lite3VdbeMemPret
3cf0: 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66 29  tyPrint(p, zBuf)
3d00: 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 25  ;.    printf(" %
3d10: 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a 7d  s", zBuf);.  }.}
3d20: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65 67  .static void reg
3d30: 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20 69  isterTrace(int i
3d40: 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20 20  Reg, Mem *p){.  
3d50: 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d 20  printf("REG[%d] 
3d60: 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d 65  = ", iReg);.  me
3d70: 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b 0a  mTracePrint(p);.
3d80: 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b 0a    printf("\n");.
3d90: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  }.#endif..#ifdef
3da0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20   SQLITE_DEBUG.# 
3db0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
3dc0: 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28 64  _TRACE(R,M) if(d
3dd0: 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f  b->flags&SQLITE_
3de0: 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73 74  VdbeTrace)regist
3df0: 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65 6c  erTrace(R,M).#el
3e00: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45 47  se.#  define REG
3e10: 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d 29  ISTER_TRACE(R,M)
3e20: 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65 66  .#endif...#ifdef
3e30: 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a 2f   VDBE_PROFILE../
3e40: 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20 63  * .** hwtime.h c
3e50: 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20 61  ontains inline a
3e60: 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66 6f  ssembler code fo
3e70: 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 0a  r implementing .
3e80: 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d 61  ** high-performa
3e90: 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74 69  nce timing routi
3ea0: 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  nes..*/.#include
3eb0: 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65 6e   "hwtime.h"..#en
3ec0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45  dif..#ifndef NDE
3ed0: 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 66  BUG./*.** This f
3ee0: 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20  unction is only 
3ef0: 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74 68  called from with
3f00: 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20 65  in an assert() e
3f10: 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a 2a  xpression. It.**
3f20: 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68 65   checks that the
3f30: 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73 61   sqlite3.nTransa
3f40: 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69  ction variable i
3f50: 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74 20  s correctly set 
3f60: 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72  to.** the number
3f70: 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63 74   of non-transact
3f80: 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20 63  ion savepoints c
3f90: 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65 20  urrently in the 
3fa0: 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20  .** linked list 
3fb0: 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c 69  starting at sqli
3fc0: 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e 0a  te3.pSavepoint..
3fd0: 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a 2a  ** .** Usage:.**
3fe0: 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20  .**     assert( 
3ff0: 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f  checkSavepointCo
4000: 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73 74  unt(db) );.*/.st
4010: 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53 61  atic int checkSa
4020: 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71 6c  vepointCount(sql
4030: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e 74  ite3 *db){.  int
4040: 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70 6f   n = 0;.  Savepo
4050: 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70 3d  int *p;.  for(p=
4060: 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
4070: 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20 6e  p; p=p->pNext) n
4080: 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d  ++;.  assert( n=
4090: 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  =(db->nSavepoint
40a0: 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61 63   + db->isTransac
40b0: 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20 29  tionSavepoint) )
40c0: 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d 0a  ;.  return 1;.}.
40d0: 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 45  #endif.../*.** E
40e0: 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20 6f  xecute as much o
40f0: 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61 6d  f a VDBE program
4100: 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54   as we can..** T
4110: 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65 20  his is the core 
4120: 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  of sqlite3_step(
4130: 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ).  .*/.int sqli
4140: 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20 56  te3VdbeExec(.  V
4150: 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20 20  dbe *p          
4160: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
4170: 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69 6e   VDBE */.){.  in
4180: 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20 20  t pc=0;         
4190: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
41a0: 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20  program counter 
41b0: 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20 70  */.  Op *aOp = p
41c0: 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20 20  ->aOp;          
41d0: 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61 4f  /* Copy of p->aO
41e0: 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b 20  p */.  Op *pOp; 
41f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4200: 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70 65    /* Current ope
4210: 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74 20  ration */.  int 
4220: 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 20  rc = SQLITE_OK; 
4230: 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20         /* Value 
4240: 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 73  to return */.  s
4250: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d 3e  qlite3 *db = p->
4260: 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  db;       /* The
4270: 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75   database */.  u
4280: 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46  8 resetSchemaOnF
4290: 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65 73  ault = 0; /* Res
42a0: 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72 20  et schema after 
42b0: 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73 69  an error if posi
42c0: 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  tive */.  u8 enc
42d0: 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29 3b  oding = ENC(db);
42e0: 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61       /* The data
42f0: 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a 2f  base encoding */
4300: 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65 20  .  int iCompare 
4310: 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  = 0;          /*
4320: 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74 20   Result of last 
4330: 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61  OP_Compare opera
4340: 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  tion */.  unsign
4350: 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b 20  ed nVmStep = 0; 
4360: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
4370: 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  f virtual machin
4380: 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e 64  e steps */.#ifnd
4390: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
43a0: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
43b0: 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f  .  unsigned nPro
43c0: 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b 2f  gressLimit = 0;/
43d0: 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72 65  * Invoke xProgre
43e0: 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74 65  ss() when nVmSte
43f0: 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20 2a  p reaches this *
4400: 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20 2a  /.#endif.  Mem *
4410: 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 20  aMem = p->aMem; 
4420: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
4430: 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d 65   p->aMem */.  Me
4440: 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20 20  m *pIn1 = 0;    
4450: 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
4460: 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f  input operand */
4470: 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20 30  .  Mem *pIn2 = 0
4480: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
4490: 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72 61   2nd input opera
44a0: 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e  nd */.  Mem *pIn
44b0: 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20  3 = 0;          
44c0: 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74 20     /* 3rd input 
44d0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d  operand */.  Mem
44e0: 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20 20   *pOut = 0;     
44f0: 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70 75          /* Outpu
4500: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69  t operand */.  i
4510: 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20 30  nt *aPermute = 0
4520: 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65 72  ;         /* Per
4530: 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c 75  mutation of colu
4540: 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70 61  mns for OP_Compa
4550: 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  re */.  i64 last
4560: 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73 74  Rowid = db->last
4570: 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65 64  Rowid;  /* Saved
4580: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c 61   value of the la
4590: 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44 20  st insert ROWID 
45a0: 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  */.#ifdef VDBE_P
45b0: 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74 61  ROFILE.  u64 sta
45c0: 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rt;             
45d0: 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63 6b      /* CPU clock
45e0: 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74 20   count at start 
45f0: 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65 6e  of opcode */.#en
4600: 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45 52  dif.  /*** INSER
4610: 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48 45  T STACK UNION HE
4620: 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65 72  RE ***/..  asser
4630: 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44 42  t( p->magic==VDB
4640: 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20 20  E_MAGIC_RUN );  
4650: 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  /* sqlite3_step(
4660: 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73 20  ) verifies this 
4670: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  */.  sqlite3Vdbe
4680: 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28 20  Enter(p);.  if( 
4690: 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  p->rc==SQLITE_NO
46a0: 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  MEM ){.    /* Th
46b0: 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61 20  is happens if a 
46c0: 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65 20  malloc() inside 
46d0: 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65  a call to sqlite
46e0: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29 20  3_column_text() 
46f0: 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65  or.    ** sqlite
4700: 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36 28  3_column_text16(
4710: 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20 20  ) failed.  */.  
4720: 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
4730: 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e   }.  assert( p->
4740: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
4750: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 42   p->rc==SQLITE_B
4760: 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  USY );.  assert(
4770: 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c 7c   p->bIsReader ||
4780: 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30 20   p->readOnly!=0 
4790: 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c  );.  p->rc = SQL
47a0: 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43 75  ITE_OK;.  p->iCu
47b0: 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20  rrentTime = 0;. 
47c0: 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c   assert( p->expl
47d0: 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70  ain==0 );.  p->p
47e0: 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20  ResultSet = 0;. 
47f0: 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72   db->busyHandler
4800: 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66  .nBusy = 0;.  if
4810: 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72  ( db->u1.isInter
4820: 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62  rupted ) goto ab
4830: 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72  ort_due_to_inter
4840: 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56  rupt;.  sqlite3V
4850: 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29  dbeIOTraceSql(p)
4860: 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
4870: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
4880: 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62  ALLBACK.  if( db
4890: 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20  ->xProgress ){. 
48a0: 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20 64     assert( 0 < d
48b0: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
48c0: 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73 73  );.    nProgress
48d0: 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e 65  Limit = (unsigne
48e0: 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51  d)p->aCounter[SQ
48f0: 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f  LITE_STMTSTATUS_
4900: 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69 66  VM_STEP];.    if
4910: 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  ( nProgressLimit
4920: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50 72  ==0 ){.      nPr
4930: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64 62  ogressLimit = db
4940: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4950: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
4960: 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20   nProgressLimit 
4970: 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62 2d  %= (unsigned)db-
4980: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a 20  >nProgressOps;. 
4990: 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a     }.  }.#endif.
49a0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
49b0: 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65 67  BUG.  sqlite3Beg
49c0: 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29  inBenignMalloc()
49d0: 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d 30  ;.  if( p->pc==0
49e0: 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e 66  .   && (p->db->f
49f0: 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f 56  lags & (SQLITE_V
4a00: 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49 54  dbeListing|SQLIT
4a10: 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54 45  E_VdbeEQP|SQLITE
4a20: 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30 0a  _VdbeTrace))!=0.
4a30: 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a    ){.    int i;.
4a40: 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20 31      int once = 1
4a50: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
4a60: 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20 20  ePrintSql(p);.  
4a70: 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61    if( p->db->fla
4a80: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4a90: 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20 20  Listing ){.     
4aa0: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50 72   printf("VDBE Pr
4ab0: 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c 6e  ogram Listing:\n
4ac0: 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d  ");.      for(i=
4ad0: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
4ae0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
4af0: 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73 74  e3VdbePrintOp(st
4b00: 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69 5d  dout, i, &aOp[i]
4b10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
4b20: 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e  .    if( p->db->
4b30: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
4b40: 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20 20  dbeEQP ){.      
4b50: 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f  for(i=0; i<p->nO
4b60: 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  p; i++){.       
4b70: 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63 6f   if( aOp[i].opco
4b80: 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29  de==OP_Explain )
4b90: 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
4ba0: 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22 56  once ) printf("V
4bb0: 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a 5c  DBE Query Plan:\
4bc0: 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70  n");.          p
4bd0: 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61 4f  rintf("%s\n", aO
4be0: 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20 20  p[i].p4.z);.    
4bf0: 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b 0a        once = 0;.
4c00: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
4c10: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  }.    }.    if( 
4c20: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4c30: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
4c40: 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20  )  printf("VDBE 
4c50: 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d 0a  Trace:\n");.  }.
4c60: 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69    sqlite3EndBeni
4c70: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e 64  gnMalloc();.#end
4c80: 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e 70  if.  for(pc=p->p
4c90: 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  c; rc==SQLITE_OK
4ca0: 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73 73  ; pc++){.    ass
4cb0: 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70 63  ert( pc>=0 && pc
4cc0: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20 69  <p->nOp );.    i
4cd0: 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  f( db->mallocFai
4ce0: 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  led ) goto no_me
4cf0: 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  m;.#ifdef VDBE_P
4d00: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
4d10: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
4d20: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
4d30: 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70 4f  VmStep++;.    pO
4d40: 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 23 69  p = &aOp[pc];.#i
4d50: 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
4d60: 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
4d70: 55 53 0a 20 20 20 20 69 66 28 20 70 2d 3e 61 6e  US.    if( p->an
4d80: 45 78 65 63 20 29 20 70 2d 3e 61 6e 45 78 65 63  Exec ) p->anExec
4d90: 5b 70 63 5d 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  [pc]++;.#endif..
4da0: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4db0: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4dc0: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4dd0: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4de0: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4df0: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
4e00: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
4e10: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
4e20: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
4e30: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
4e40: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
4e50: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4e60: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4e70: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4e80: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4e90: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4ea0: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4eb0: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4ec0: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4ed0: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4ee0: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4ef0: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4f00: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4f10: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4f20: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4f30: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4f40: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4f50: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4f60: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4f70: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4f80: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4f90: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4fa0: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4fb0: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4fc0: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4fd0: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4fe0: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4ff0: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
5000: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
5010: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
5020: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
5030: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
5040: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
5050: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
5060: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
5070: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
5080: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
5090: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
50a0: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
50b0: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
50c0: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
50d0: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
50e0: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
50f0: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
5100: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
5110: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
5120: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5130: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
5140: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
5150: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
5160: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
5170: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
5180: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 56 64 62  );.      if( Vdb
5190: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
51a0: 29 20 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ) ) sqlite3VdbeM
51b0: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
51c0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  .      pOut->fla
51d0: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
51e0: 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69    }..    /* Sani
51f0: 74 79 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f  ty checking on o
5200: 74 68 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  ther operands */
5210: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
5220: 45 42 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f  EBUG.    if( (pO
5230: 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
5240: 4c 47 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20  LG_IN1)!=0 ){.  
5250: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5260: 3e 70 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61  >p1>0 );.      a
5270: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d  ssert( pOp->p1<=
5280: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
5290: 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73  sor) );.      as
52a0: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
52b0: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
52c0: 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
52d0: 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 65  ( sqlite3VdbeChe
52e0: 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28  ckMemInvariants(
52f0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20  &aMem[pOp->p1]) 
5300: 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54 45  );.      REGISTE
5310: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
5320: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29   &aMem[pOp->p1])
5330: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
5340: 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20  (pOp->opflags & 
5350: 4f 50 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b  OPFLG_IN2)!=0 ){
5360: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5370: 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20  Op->p2>0 );.    
5380: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5390: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
53a0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
53b0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
53c0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
53d0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73  2]) );.      ass
53e0: 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65  ert( sqlite3Vdbe
53f0: 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e  CheckMemInvarian
5400: 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32  ts(&aMem[pOp->p2
5410: 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49  ]) );.      REGI
5420: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
5430: 70 32 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  p2, &aMem[pOp->p
5440: 32 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69  2]);.    }.    i
5450: 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73  f( (pOp->opflags
5460: 20 26 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30   & OPFLG_IN3)!=0
5470: 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
5480: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20  ( pOp->p3>0 );. 
5490: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
54a0: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
54b0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
54c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
54d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
54e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
54f0: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56  assert( sqlite3V
5500: 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72  dbeCheckMemInvar
5510: 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d  iants(&aMem[pOp-
5520: 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52  >p3]) );.      R
5530: 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
5540: 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70  p->p3, &aMem[pOp
5550: 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  ->p3]);.    }.  
5560: 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c    if( (pOp->opfl
5570: 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32  ags & OPFLG_OUT2
5580: 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73  )!=0 ){.      as
5590: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20  sert( pOp->p2>0 
55a0: 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
55b0: 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d   pOp->p2<=(p->nM
55c0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
55d0: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
55e0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
55f0: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5600: 20 7d 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d   }.    if( (pOp-
5610: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
5620: 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20  _OUT3)!=0 ){.   
5630: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5640: 70 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73  p3>0 );.      as
5650: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28  sert( pOp->p3<=(
5660: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
5670: 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  or) );.      mem
5680: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
56a0: 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
56b0: 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f   .    switch( pO
56c0: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a  p->opcode ){../*
56d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56e0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
56f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5700: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5710: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20  ************.** 
5720: 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20  What follows is 
5730: 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63 68  a massive switch
5740: 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65   statement where
5750: 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65   each case imple
5760: 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72  ments a.** separ
5770: 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ate instruction 
5780: 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d  in the virtual m
5790: 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66  achine.  If we f
57a0: 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a  ollow the usual.
57b0: 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63  ** indentation c
57c0: 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68  onventions, each
57d0: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20   case should be 
57e0: 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73 70  indented by 6 sp
57f0: 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68  aces.  But.** th
5800: 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77  at is a lot of w
5810: 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74  asted space on t
5820: 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20  he left margin. 
5830: 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74   So the code wit
5840: 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63  hin.** the switc
5850: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c  h statement will
5860: 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76   break with conv
5870: 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c  ention and be fl
5880: 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65  ush-left. Anothe
5890: 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74  r.** big comment
58a0: 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69   (similar to thi
58b0: 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b  s one) will mark
58c0: 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68   the point in th
58d0: 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20  e code where.** 
58e0: 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61  we transition ba
58f0: 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64  ck to normal ind
5900: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
5910: 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f  The formatting o
5920: 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20 69  f each case is i
5930: 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d  mportant.  The m
5940: 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69  akefile for SQLi
5950: 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20  te.** generates 
5960: 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63  two C files "opc
5970: 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63  odes.h" and "opc
5980: 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e  odes.c" by scann
5990: 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65  ing this.** file
59a0: 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e   looking for lin
59b0: 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77 69  es that begin wi
59c0: 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20  th "case OP_".  
59d0: 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69  The opcodes.h fi
59e0: 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66  les.** will be f
59f0: 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66 69  illed with #defi
5a00: 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75 6e  nes that give un
5a10: 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c  ique integer val
5a20: 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f  ues to each.** o
5a30: 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70  pcode and the op
5a40: 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20  codes.c file is 
5a50: 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61  filled with an a
5a60: 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20  rray of strings 
5a70: 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74  where.** each st
5a80: 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62  ring is the symb
5a90: 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68  olic name for th
5aa0: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
5ab0: 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a  opcode.  If the.
5ac0: 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e  ** case statemen
5ad0: 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79  t is followed by
5ae0: 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68   a comment of th
5af0: 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20  e form "/# same 
5b00: 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68  as ... #/".** th
5b10: 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73  at comment is us
5b20: 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ed to determine 
5b30: 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20 76  the particular v
5b40: 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f  alue of the opco
5b50: 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20  de..**.** Other 
5b60: 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20  keywords in the 
5b70: 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c  comment that fol
5b80: 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20 61  lows each case a
5b90: 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f  re used to.** co
5ba0: 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c  nstruct the OPFL
5bb0: 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61  G_INITIALIZER va
5bc0: 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c  lue that initial
5bd0: 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65  izes opcodePrope
5be0: 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72  rty[]..** Keywor
5bf0: 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c  ds include: in1,
5c00: 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f   in2, in3, out2_
5c10: 70 72 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32  prerelease, out2
5c20: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
5c30: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
5c40: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
5c50: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
5c60: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
5c70: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
5c80: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
5c90: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
5ca0: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
5cb0: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
5cc0: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
5cd0: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
5ce0: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
5cf0: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
5d00: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
5d10: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
5d20: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
5d30: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
5d40: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
5d50: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
5d60: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
5d70: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
5d80: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
5d90: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
5da0: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
5db0: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
5dc0: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
5dd0: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
5de0: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
5df0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e00: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e10: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
5e30: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
5e40: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
5e50: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
5e60: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
5e70: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
5e80: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
5e90: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
5ea0: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
5eb0: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
5ec0: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
5ed0: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
5ee0: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
5ef0: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
5f00: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
5f10: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
5f20: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
5f30: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
5f40: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
5f50: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
5f60: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
5f70: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
5f80: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
5f90: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
5fa0: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
5fb0: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
5fc0: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
5fd0: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
5fe0: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
5ff0: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6000: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6010: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6020: 20 2a 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e   */.  pc = pOp->
6030: 70 32 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70  p2 - 1;..  /* Op
6040: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6050: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6060: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6070: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6080: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6090: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
60a0: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
60b0: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
60c0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
60d0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
60e0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
60f0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
6100: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
6110: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6120: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6130: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6140: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6150: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6160: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6170: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6180: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6190: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
61a0: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
61b0: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
61c0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
61d0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
61e0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
61f0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
6200: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
6210: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6220: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6230: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6240: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6250: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6260: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6270: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6280: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6290: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
62a0: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
62b0: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
62c0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
62d0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
62e0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
62f0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
6300: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
6310: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6320: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6330: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6340: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6350: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6360: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6370: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6380: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6390: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
63a0: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
63b0: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
63c0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
63d0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
63e0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
63f0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
6400: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
6410: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6420: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6430: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6440: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6450: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6460: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6470: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6480: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6490: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
64a0: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
64b0: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
64c0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
64d0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
64e0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
64f0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
6500: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
6510: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6520: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6530: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6540: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6550: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6560: 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65       goto vdbe_e
6570: 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d  rror_halt;.    }
6580: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20  .  }.#endif.  . 
6590: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
65a0: 63 6f 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20  code:  Gosub P1 
65b0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57  P2 * * *.**.** W
65c0: 72 69 74 65 20 74 68 65 20 63 75 72 72 65 6e 74  rite the current
65d0: 20 61 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65   address onto re
65e0: 67 69 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64  gister P1.** and
65f0: 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64   then jump to ad
6600: 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73  dress P2..*/.cas
6610: 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20  e OP_Gosub: {   
6620: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6630: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
6640: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
6650: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
6660: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49  nCursor) );.  pI
6670: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
6680: 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56  p1];.  assert( V
6690: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49  dbeMemDynamic(pI
66a0: 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41  n1)==0 );.  memA
66b0: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
66c0: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66  pIn1);.  pIn1->f
66d0: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
66e0: 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63    pIn1->u.i = pc
66f0: 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
6700: 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31  CE(pOp->p1, pIn1
6710: 29 3b 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  );.  pc = pOp->p
6720: 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  2 - 1;.  break;.
6730: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52  }../* Opcode:  R
6740: 65 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a  eturn P1 * * * *
6750: 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
6760: 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
6770: 69 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64  ion after the ad
6780: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6790: 72 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20  r P1.  After.** 
67a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
67b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
67c0: 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65  defined..*/.case
67d0: 20 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20   OP_Return: {   
67e0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
67f0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
6800: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
6810: 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
6820: 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70  ==MEM_Int );.  p
6830: 63 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75  c = (int)pIn1->u
6840: 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67  .i;.  pIn1->flag
6850: 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s = MEM_Undefine
6860: 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  d;.  break;.}../
6870: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f  * Opcode: InitCo
6880: 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50 33  routine P1 P2 P3
6890: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75   * *.**.** Set u
68a0: 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73 6f  p register P1 so
68b0: 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69   that it will Yi
68c0: 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75  eld to the corou
68d0: 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20  tine.** located 
68e0: 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a  at address P3..*
68f0: 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68  *.** If P2!=0 th
6900: 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  en the coroutine
6910: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6920: 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c  immediately foll
6930: 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f  ows.** this opco
6940: 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65  de.  So jump ove
6950: 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  r the coroutine 
6960: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
6970: 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e  o.** address P2.
6980: 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
6990: 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f   EndCoroutine.*/
69a0: 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72  .case OP_InitCor
69b0: 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a  outine: {     /*
69c0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72   jump */.  asser
69d0: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
69e0: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
69f0: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29  em-p->nCursor) )
6a00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
6a10: 3e 70 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p2>=0 && pOp->p
6a20: 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73  2<p->nOp );.  as
6a30: 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
6a40: 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
6a50: 4f 70 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26  Op );.  pOut = &
6a60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6a70: 20 61 73 73 65 72 74 28 20 21 56 64 62 65 4d 65   assert( !VdbeMe
6a80: 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29  mDynamic(pOut) )
6a90: 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
6aa0: 70 4f 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70  pOp->p3 - 1;.  p
6ab0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
6ac0: 5f 49 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d  _Int;.  if( pOp-
6ad0: 3e 70 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e  >p2 ) pc = pOp->
6ae0: 70 32 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b  p2 - 1;.  break;
6af0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20  .}../* Opcode:  
6b00: 45 6e 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20  EndCoroutine P1 
6b10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
6b20: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
6b30: 20 74 68 65 20 61 64 64 72 65 73 73 20 69 6e 20   the address in 
6b40: 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 61  register P1 is a
6b50: 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20   Yield..** Jump 
6b60: 74 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65  to the P2 parame
6b70: 74 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c  ter of that Yiel
6b80: 64 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20  d..** After the 
6b90: 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50  jump, register P
6ba0: 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69  1 becomes undefi
6bb0: 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ned..**.** See a
6bc0: 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69  lso: InitCorouti
6bd0: 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e  ne.*/.case OP_En
6be0: 64 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20  dCoroutine: {   
6bf0: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
6c00: 2f 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c  /.  VdbeOp *pCal
6c10: 6c 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  ler;.  pIn1 = &a
6c20: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
6c30: 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
6c40: 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a  ags==MEM_Int );.
6c50: 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
6c60: 75 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e  u.i>=0 && pIn1->
6c70: 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20  u.i<p->nOp );.  
6c80: 70 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70  pCaller = &aOp[p
6c90: 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73  In1->u.i];.  ass
6ca0: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70  ert( pCaller->op
6cb0: 63 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29  code==OP_Yield )
6cc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c  ;.  assert( pCal
6cd0: 6c 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43  ler->p2>=0 && pC
6ce0: 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  aller->p2<p->nOp
6cf0: 20 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c   );.  pc = pCall
6d00: 65 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49  er->p2 - 1;.  pI
6d10: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
6d20: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
6d30: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6d40: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
6d50: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
6d60: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
6d70: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
6d80: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
6d90: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
6da0: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
6db0: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
6dc0: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
6dd0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
6de0: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
6df0: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
6e00: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
6e10: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
6e20: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
6e30: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
6e40: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
6e50: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
6e60: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
6e70: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
6e80: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
6e90: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
6ea0: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
6eb0: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
6ec0: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
6ed0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
6ee0: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
6ef0: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
6f00: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
6f10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
6f20: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
6f30: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
6f40: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
6f50: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
6f60: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
6f70: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
6f80: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
6f90: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
6fa0: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
6fb0: 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45  ->u.i = pc;.  RE
6fc0: 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
6fd0: 2d 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70  ->p1, pIn1);.  p
6fe0: 63 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72  c = pcDest;.  br
6ff0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7000: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7010: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7020: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20  * Synopsis:  if 
7030: 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a  r[P3]=null halt.
7040: 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20  **.** Check the 
7050: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
7060: 72 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20  r P3.  If it is 
7070: 4e 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75  NULL then Halt u
7080: 73 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65  sing.** paramete
7090: 72 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34  r P1, P2, and P4
70a0: 20 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65   as if this were
70b0: 20 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74   a Halt instruct
70c0: 69 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ion.  If the.** 
70d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
70e0: 72 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c  r P3 is not NULL
70f0: 2c 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74  , then this rout
7100: 69 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a  ine is a no-op..
7110: 2a 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65  ** The P5 parame
7120: 74 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e  ter should be 1.
7130: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74  .*/.case OP_Halt
7140: 49 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f  IfNull: {      /
7150: 2a 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20  * in3 */.  pIn3 
7160: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
7170: 3b 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66  ;.  if( (pIn3->f
7180: 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
7190: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f  ==0 ) break;.  /
71a0: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
71b0: 6e 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d  nto OP_Halt */.}
71c0: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61  ../* Opcode:  Ha
71d0: 6c 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35  lt P1 P2 * P4 P5
71e0: 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65  .**.** Exit imme
71f0: 64 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70  diately.  All op
7200: 65 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20  en cursors, etc 
7210: 61 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75  are closed.** au
7220: 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a  tomatically..**.
7230: 2a 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73  ** P1 is the res
7240: 75 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65  ult code returne
7250: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65  d by sqlite3_exe
7260: 63 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73  c(), sqlite3_res
7270: 65 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69  et(),.** or sqli
7280: 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20  te3_finalize(). 
7290: 20 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61   For a normal ha
72a0: 6c 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20  lt, this should 
72b0: 62 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29  be SQLITE_OK (0)
72c0: 2e 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c  ..** For errors,
72d0: 20 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20   it can be some 
72e0: 6f 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66  other value.  If
72f0: 20 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77   P1!=0 then P2 w
7300: 69 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a  ill determine.**
7310: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
7320: 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20  to rollback the 
7330: 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
7340: 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c  ion.  Do not rol
7350: 6c 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d  lback.** if P2==
7360: 4f 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20  OE_Fail. Do the 
7370: 72 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d  rollback if P2==
7380: 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66  OE_Rollback.  If
7390: 20 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a   P2==OE_Abort,.*
73a0: 2a 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20  * then back out 
73b0: 61 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74  all changes that
73c0: 20 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64   have occurred d
73d0: 75 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75  uring this execu
73e0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56  tion of the.** V
73f0: 44 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20  DBE, but do not 
7400: 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61  rollback the tra
7410: 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a  nsaction. .**.**
7420: 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75   If P4 is not nu
7430: 6c 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e  ll then it is an
7440: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   error message s
7450: 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  tring..**.** P5 
7460: 69 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65  is a value betwe
7470: 65 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c  en 0 and 4, incl
7480: 75 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69  usive, that modi
7490: 66 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69  fies the P4 stri
74a0: 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20  ng..**.**    0: 
74b0: 20 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20   (no change).** 
74c0: 20 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20     1:  NOT NULL 
74d0: 63 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64  contraint failed
74e0: 3a 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55  : P4.**    2:  U
74f0: 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74  NIQUE constraint
7500: 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20   failed: P4.**  
7510: 20 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73    3:  CHECK cons
7520: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
7530: 34 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45  4.**    4:  FORE
7540: 49 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69  IGN KEY constrai
7550: 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a  nt failed: P4.**
7560: 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74  .** If P5 is not
7570: 20 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20   zero and P4 is 
7580: 4e 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79  NULL, then every
7590: 74 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20  thing after the 
75a0: 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65  ":" is.** omitte
75b0: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69  d..**.** There i
75c0: 73 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61  s an implied "Ha
75d0: 6c 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75  lt 0 0 0" instru
75e0: 63 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61  ction inserted a
75f0: 74 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f  t the very end o
7600: 66 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72  f.** every progr
7610: 61 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70  am.  So a jump p
7620: 61 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73  ast the last ins
7630: 74 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20  truction of the 
7640: 70 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68  program.** is th
7650: 65 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74  e same as execut
7660: 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73  ing Halt..*/.cas
7670: 65 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63  e OP_Halt: {.  c
7680: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65  onst char *zType
7690: 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
76a0: 7a 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20  zLogFmt;..  if( 
76b0: 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f  pOp->p1==SQLITE_
76c0: 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20  OK && p->pFrame 
76d0: 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74  ){.    /* Halt t
76e0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20  he sub-program. 
76f0: 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74  Return control t
7700: 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61  o the parent fra
7710: 6d 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46  me. */.    VdbeF
7720: 72 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70  rame *pFrame = p
7730: 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d  ->pFrame;.    p-
7740: 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  >pFrame = pFrame
7750: 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70  ->pParent;.    p
7760: 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20  ->nFrame--;.    
7770: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
7780: 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68  anges(db, p->nCh
7790: 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20  ange);.    pc = 
77a0: 73 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65  sqlite3VdbeFrame
77b0: 52 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b  Restore(pFrame);
77c0: 0a 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d  .    lastRowid =
77d0: 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a   db->lastRowid;.
77e0: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d      if( pOp->p2=
77f0: 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20  =OE_Ignore ){.  
7800: 20 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69      /* Instructi
7810: 6f 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f  on pc is the OP_
7820: 50 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76  Program that inv
7830: 6f 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f  oked the sub-pro
7840: 67 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63  gram .      ** c
7850: 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68  urrently being h
7860: 61 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32  alted. If the p2
7870: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7880: 74 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20  this OP_Halt.   
7890: 20 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f     ** instructio
78a0: 6e 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49  n is set to OE_I
78b0: 67 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20  gnore, then the 
78c0: 73 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74  sub-program is t
78d0: 68 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a  hrowing.      **
78e0: 20 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70   an IGNORE excep
78f0: 74 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61  tion. In this ca
7900: 73 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61  se jump to the a
7910: 64 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64  ddress specified
7920: 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65  .      ** as the
7930: 20 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69   p2 of the calli
7940: 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20  ng OP_Program.  
7950: 2a 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d  */.      pc = p-
7960: 3e 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20  >aOp[pc].p2-1;. 
7970: 20 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70     }.    aOp = p
7980: 2d 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20  ->aOp;.    aMem 
7990: 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62  = p->aMem;.    b
79a0: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72  reak;.  }.  p->r
79b0: 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  c = pOp->p1;.  p
79c0: 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
79d0: 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  (u8)pOp->p2;.  p
79e0: 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28  ->pc = pc;.  if(
79f0: 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66   p->rc ){.    if
7a00: 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20  ( pOp->p5 ){.   
7a10: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
7a20: 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54  char * const azT
7a30: 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e  ype[] = { "NOT N
7a40: 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20  ULL", "UNIQUE", 
7a50: 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20  "CHECK",.       
7a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a80: 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b        "FOREIGN K
7a90: 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73  EY" };.      ass
7aa0: 65 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20  ert( pOp->p5>=1 
7ab0: 26 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b  && pOp->p5<=4 );
7ac0: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7ad0: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7ae0: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7af0: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7b00: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7b10: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7b20: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7b30: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a  p5==4 );.      z
7b40: 54 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f  Type = azType[pO
7b50: 70 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65  p->p5-1];.    }e
7b60: 6c 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65  lse{.      zType
7b70: 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 0;.    }.    
7b80: 61 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30  assert( zType!=0
7b90: 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30   || pOp->p4.z!=0
7ba0: 20 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20   );.    zLogFmt 
7bb0: 3d 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69  = "abort at %d i
7bc0: 6e 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20  n [%s]: %s";.   
7bd0: 20 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f   if( zType && pO
7be0: 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20  p->p4.z ){.     
7bf0: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
7c00: 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
7c10: 62 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  b, "%s constrain
7c20: 74 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a  t failed: %s", .
7c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7c40: 20 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f         zType, pO
7c50: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65  p->p4.z);.    }e
7c60: 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e  lse if( pOp->p4.
7c70: 7a 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  z ){.      sqlit
7c80: 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
7c90: 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73  zErrMsg, db, "%s
7ca0: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
7cb0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
7cc0: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7cd0: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7ce0: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
7cf0: 20 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29   failed", zType)
7d00: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
7d10: 74 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c  te3_log(pOp->p1,
7d20: 20 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d   zLogFmt, pc, p-
7d30: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
7d40: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
7d50: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
7d60: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
7d70: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
7d80: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7d90: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
7da0: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
7db0: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
7dc0: 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53    p->rc = rc = S
7dd0: 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65  QLITE_BUSY;.  }e
7de0: 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
7df0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e00: 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d  | (p->rc&0xff)==
7e10: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
7e20: 54 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  T );.    assert(
7e30: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc==SQLITE_OK |
7e40: 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43  | db->nDeferredC
7e50: 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65  ons>0 || db->nDe
7e60: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20  ferredImmCons>0 
7e70: 29 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72  );.    rc = p->r
7e80: 63 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c ? SQLITE_ERROR
7e90: 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a   : SQLITE_DONE;.
7ea0: 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
7eb0: 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70  return;.}../* Op
7ec0: 63 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31  code: Integer P1
7ed0: 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
7ee0: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a  opsis: r[P2]=P1.
7ef0: 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74  **.** The 32-bit
7f00: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50   integer value P
7f10: 31 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74  1 is written int
7f20: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7f30: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65  /.case OP_Intege
7f40: 72 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  r: {         /* 
7f50: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7f60: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  */.  pOut->u.i =
7f70: 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61   pOp->p1;.  brea
7f80: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
7f90: 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34   Int64 * P2 * P4
7fa0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
7fb0: 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50  r[P2]=P4.**.** P
7fc0: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
7fd0: 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  o a 64-bit integ
7fe0: 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69  er value..** Wri
7ff0: 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e  te that value in
8000: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
8010: 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34  */.case OP_Int64
8020: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  : {           /*
8030: 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
8040: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8050: 70 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b  p->p4.pI64!=0 );
8060: 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a  .  pOut->u.i = *
8070: 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20  pOp->p4.pI64;.  
8080: 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65  break;.}..#ifnde
8090: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  f SQLITE_OMIT_FL
80a0: 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20  OATING_POINT./* 
80b0: 4f 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50  Opcode: Real * P
80c0: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
80d0: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a  psis: r[P2]=P4.*
80e0: 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
80f0: 6e 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74  nter to a 64-bit
8100: 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20   floating point 
8110: 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20  value..** Write 
8120: 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20  that value into 
8130: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
8140: 63 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20  case OP_Real: { 
8150: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
8160: 6d 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20  me as TK_FLOAT, 
8170: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
8180: 2a 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  */.  pOut->flags
8190: 20 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61   = MEM_Real;.  a
81a0: 73 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49  ssert( !sqlite3I
81b0: 73 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52  sNaN(*pOp->p4.pR
81c0: 65 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  eal) );.  pOut->
81d0: 75 2e 72 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.r = *pOp->p4.p
81e0: 52 65 61 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Real;.  break;.}
81f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
8200: 64 65 3a 20 53 74 72 69 6e 67 38 20 2a 20 50 32  de: String8 * P2
8210: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8220: 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a  sis: r[P2]='P4'.
8230: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
8240: 74 6f 20 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61  to a nul termina
8250: 74 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67  ted UTF-8 string
8260: 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  . This opcode is
8270: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a   transformed .**
8280: 20 69 6e 74 6f 20 61 20 53 74 72 69 6e 67 20 6f   into a String o
8290: 70 63 6f 64 65 20 62 65 66 6f 72 65 20 69 74 20  pcode before it 
82a0: 69 73 20 65 78 65 63 75 74 65 64 20 66 6f 72 20  is executed for 
82b0: 74 68 65 20 66 69 72 73 74 20 74 69 6d 65 2e 20  the first time. 
82c0: 20 44 75 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20   During.** this 
82d0: 74 72 61 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20  transformation, 
82e0: 74 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 73 74  the length of st
82f0: 72 69 6e 67 20 50 34 20 69 73 20 63 6f 6d 70 75  ring P4 is compu
8300: 74 65 64 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a  ted and stored.*
8310: 2a 20 61 73 20 74 68 65 20 50 31 20 70 61 72 61  * as the P1 para
8320: 6d 65 74 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  meter..*/.case O
8330: 50 5f 53 74 72 69 6e 67 38 3a 20 7b 20 20 20 20  P_String8: {    
8340: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
8350: 54 4b 5f 53 54 52 49 4e 47 2c 20 6f 75 74 32 2d  TK_STRING, out2-
8360: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8370: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
8380: 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 70 2d 3e 6f  z!=0 );.  pOp->o
8390: 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74 72 69 6e  pcode = OP_Strin
83a0: 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20 3d 20 73  g;.  pOp->p1 = s
83b0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 70  qlite3Strlen30(p
83c0: 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23 69 66 6e  Op->p4.z);..#ifn
83d0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
83e0: 55 54 46 31 36 0a 20 20 69 66 28 20 65 6e 63 6f  UTF16.  if( enco
83f0: 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f 55 54 46  ding!=SQLITE_UTF
8400: 38 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  8 ){.    rc = sq
8410: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53  lite3VdbeMemSetS
8420: 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34  tr(pOut, pOp->p4
8430: 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55  .z, -1, SQLITE_U
8440: 54 46 38 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  TF8, SQLITE_STAT
8450: 49 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d  IC);.    if( rc=
8460: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8470: 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20   goto too_big;. 
8480: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b     if( SQLITE_OK
8490: 21 3d 73 71 6c 69 74 65 33 56 64 62 65 43 68 61  !=sqlite3VdbeCha
84a0: 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75 74  ngeEncoding(pOut
84b0: 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29 20 67 6f  , encoding) ) go
84c0: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61  to no_mem;.    a
84d0: 73 73 65 72 74 28 20 70 4f 75 74 2d 3e 73 7a 4d  ssert( pOut->szM
84e0: 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f 75 74 2d  alloc>0 && pOut-
84f0: 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75 74 2d 3e  >zMalloc==pOut->
8500: 7a 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  z );.    assert(
8510: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
8520: 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20  pOut)==0 );.    
8530: 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63 20 3d  pOut->szMalloc =
8540: 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   0;.    pOut->fl
8550: 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74 61 74 69  ags |= MEM_Stati
8560: 63 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  c;.    if( pOp->
8570: 70 34 74 79 70 65 3d 3d 50 34 5f 44 59 4e 41 4d  p4type==P4_DYNAM
8580: 49 43 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  IC ){.      sqli
8590: 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 4f  te3DbFree(db, pO
85a0: 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a  p->p4.z);.    }.
85b0: 20 20 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20      pOp->p4type 
85c0: 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b 0a 20 20  = P4_DYNAMIC;.  
85d0: 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d 20 70 4f    pOp->p4.z = pO
85e0: 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f 70 2d 3e  ut->z;.    pOp->
85f0: 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b 0a 20 20  p1 = pOut->n;.  
8600: 7d 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  }.#endif.  if( p
8610: 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61 4c 69 6d 69  Op->p1>db->aLimi
8620: 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c  t[SQLITE_LIMIT_L
8630: 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 67 6f  ENGTH] ){.    go
8640: 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a  to too_big;.  }.
8650: 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67    /* Fall throug
8660: 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61  h to the next ca
8670: 73 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f  se, OP_String */
8680: 0a 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a  .}.  ./* Opcode:
8690: 20 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33   String P1 P2 P3
86a0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
86b0: 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28  is: r[P2]='P4' (
86c0: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68  len=P1).**.** Th
86d0: 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50  e string value P
86e0: 34 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28  4 of length P1 (
86f0: 62 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64  bytes) is stored
8700: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
8710: 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
8720: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8730: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8740: 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  s greater than z
8750: 65 72 6f 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65  ero, then.** the
8760: 20 64 61 74 61 74 79 70 65 20 6f 66 20 74 68 65   datatype of the
8770: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 20   register P2 is 
8780: 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42 4c 4f  converted to BLO
8790: 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e 74 20  B.  The content 
87a0: 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 73  is.** the same s
87b0: 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74 65 73  equence of bytes
87c0: 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79 20 69  , it is merely i
87d0: 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 20  nterpreted as a 
87e0: 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a 2a 20  BLOB instead.** 
87f0: 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61 73 20  of a string, as 
8800: 69 66 20 69 74 20 68 61 64 20 62 65 65 6e 20 43  if it had been C
8810: 41 53 54 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  AST..*/.case OP_
8820: 53 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20  String: {       
8830: 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
8840: 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72  lease */.  asser
8850: 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  t( pOp->p4.z!=0 
8860: 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73  );.  pOut->flags
8870: 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53   = MEM_Str|MEM_S
8880: 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a  tatic|MEM_Term;.
8890: 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d    pOut->z = pOp-
88a0: 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e  >p4.z;.  pOut->n
88b0: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f   = pOp->p1;.  pO
88c0: 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69  ut->enc = encodi
88d0: 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  ng;.  UPDATE_MAX
88e0: 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
88f0: 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 29  .  if( pOp->p5 )
8900: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
8910: 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20 61  p->p3>0 );.    a
8920: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
8930: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
8940: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8950: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8960: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8970: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8980: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8990: 70 49 6e 33 2d 3e 75 2e 69 20 29 20 70 4f 75 74  pIn3->u.i ) pOut
89a0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c  ->flags = MEM_Bl
89b0: 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45  ob|MEM_Static|ME
89c0: 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 20 20 62 72  M_Term;.  }.  br
89d0: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
89e0: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
89f0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8a00: 3a 20 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c  :  r[P2..P3]=NUL
8a10: 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20  L.**.** Write a 
8a20: 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74  NULL into regist
8a30: 65 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67  ers P2.  If P3 g
8a40: 72 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20  reater than P2, 
8a50: 74 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a  then also write.
8a60: 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67  ** NULL into reg
8a70: 69 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65  ister P3 and eve
8a80: 72 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62  ry register in b
8a90: 65 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33  etween P2 and P3
8aa0: 2e 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c  .  If P3.** is l
8ab0: 65 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70  ess than P2 (typ
8ac0: 69 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72  ically P3 is zer
8ad0: 6f 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67  o) then only reg
8ae0: 69 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73  ister P2 is.** s
8af0: 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  et to NULL..**.*
8b00: 2a 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75  * If the P1 valu
8b10: 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
8b20: 68 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65  hen also set the
8b30: 20 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61   MEM_Cleared fla
8b40: 67 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c  g so that.** NUL
8b50: 4c 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f  L values will no
8b60: 74 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20  t compare equal 
8b70: 65 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e  even if SQLITE_N
8b80: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a  ULLEQ is set on.
8b90: 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45  ** OP_Ne or OP_E
8ba0: 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  q..*/.case OP_Nu
8bb0: 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
8bc0: 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
8bd0: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b  se */.  int cnt;
8be0: 0a 20 20 75 31 36 20 6e 75 6c 6c 46 6c 61 67 3b  .  u16 nullFlag;
8bf0: 0a 20 20 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33  .  cnt = pOp->p3
8c00: 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65  -pOp->p2;.  asse
8c10: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
8c20: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
8c30: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  ) );.  pOut->fla
8c40: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d 20  gs = nullFlag = 
8c50: 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f 4e  pOp->p1 ? (MEM_N
8c60: 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64 29  ull|MEM_Cleared)
8c70: 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 77   : MEM_Null;.  w
8c80: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
8c90: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
8ca0: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
8cb0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
8cc0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
8cd0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
8ce0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
8cf0: 6c 46 6c 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d  lFlag;.    cnt--
8d00: 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
8d10: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66  ../* Opcode: Sof
8d20: 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a  tNull P1 * * * *
8d30: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
8d40: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
8d50: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
8d60: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
8d70: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
8d80: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
8d90: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
8da0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
8db0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
8dc0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
8dd0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
8de0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
8df0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
8e00: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
8e10: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
8e20: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
8e30: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
8e40: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
8e50: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
8e60: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
8e70: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
8e80: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
8e90: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
8ea0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p1<=(p->nMem-p->
8eb0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f  nCursor) );.  pO
8ec0: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
8ed0: 70 31 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61  p1];.  pOut->fla
8ee0: 67 73 20 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67  gs = (pOut->flag
8ef0: 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d  s|MEM_Null)&~MEM
8f00: 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72  _Undefined;.  br
8f10: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f20: 65 3a 20 42 6c 6f 62 20 50 31 20 50 32 20 2a 20  e: Blob P1 P2 * 
8f30: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8f40: 3a 20 72 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d  : r[P2]=P4 (len=
8f50: 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69  P1).**.** P4 poi
8f60: 6e 74 73 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66  nts to a blob of
8f70: 20 64 61 74 61 20 50 31 20 62 79 74 65 73 20 6c   data P1 bytes l
8f80: 6f 6e 67 2e 20 20 53 74 6f 72 65 20 74 68 69 73  ong.  Store this
8f90: 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20 72 65 67 69  .** blob in regi
8fa0: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
8fb0: 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20   OP_Blob: {     
8fc0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
8fd0: 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f  t2-prerelease */
8fe0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8ff0: 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58  p1 <= SQLITE_MAX
9000: 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c  _LENGTH );.  sql
9010: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
9020: 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e  r(pOut, pOp->p4.
9030: 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30  z, pOp->p1, 0, 0
9040: 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  );.  pOut->enc =
9050: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
9060: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
9070: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
9080: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  .}../* Opcode: V
9090: 61 72 69 61 62 6c 65 20 50 31 20 50 32 20 2a 20  ariable P1 P2 * 
90a0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
90b0: 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65  : r[P2]=paramete
90c0: 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54  r(P1,P4).**.** T
90d0: 72 61 6e 73 66 65 72 20 74 68 65 20 76 61 6c 75  ransfer the valu
90e0: 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61 72 61  es of bound para
90f0: 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20 72 65  meter P1 into re
9100: 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20  gister P2.**.** 
9110: 49 66 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  If the parameter
9120: 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20   is named, then 
9130: 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61 72 73  its name appears
9140: 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50   in P4..** The P
9150: 34 20 76 61 6c 75 65 20 69 73 20 75 73 65 64 20  4 value is used 
9160: 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  by sqlite3_bind_
9170: 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29  parameter_name()
9180: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72  ..*/.case OP_Var
9190: 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20  iable: {        
91a0: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
91b0: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20  elease */.  Mem 
91c0: 2a 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20  *pVar;       /* 
91d0: 56 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e  Value being tran
91e0: 73 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73  sferred */..  as
91f0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9200: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e  && pOp->p1<=p->n
9210: 56 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  Var );.  assert(
9220: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c   pOp->p4.z==0 ||
9230: 20 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61   pOp->p4.z==p->a
9240: 7a 56 61 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20  zVar[pOp->p1-1] 
9250: 29 3b 0a 20 20 70 56 61 72 20 3d 20 26 70 2d 3e  );.  pVar = &p->
9260: 61 56 61 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31  aVar[pOp->p1 - 1
9270: 5d 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  ];.  if( sqlite3
9280: 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56  VdbeMemTooBig(pV
9290: 61 72 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ar) ){.    goto 
92a0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73  too_big;.  }.  s
92b0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
92c0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
92d0: 56 61 72 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29  Var, MEM_Static)
92e0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
92f0: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
9300: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9310: 63 6f 64 65 3a 20 4d 6f 76 65 20 50 31 20 50 32  code: Move P1 P2
9320: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
9330: 73 69 73 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72  sis:  r[P2@P3]=r
9340: 5b 50 31 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f  [P1@P3].**.** Mo
9350: 76 65 20 74 68 65 20 50 33 20 76 61 6c 75 65 73  ve the P3 values
9360: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
9370: 2e 50 31 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e  .P1+P3-1 over in
9380: 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72 73 20  to.** registers 
9390: 50 32 2e 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65  P2..P2+P3-1.  Re
93a0: 67 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50  gisters P1..P1+P
93b0: 33 2d 31 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20  3-1 are.** left 
93c0: 68 6f 6c 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20  holding a NULL. 
93d0: 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 20   It is an error 
93e0: 66 6f 72 20 72 65 67 69 73 74 65 72 20 72 61 6e  for register ran
93f0: 67 65 73 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33  ges.** P1..P1+P3
9400: 2d 31 20 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33  -1 and P2..P2+P3
9410: 2d 31 20 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20  -1 to overlap.  
9420: 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a  It is an error.*
9430: 2a 20 66 6f 72 20 50 33 20 74 6f 20 62 65 20 6c  * for P3 to be l
9440: 65 73 73 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63  ess than 1..*/.c
9450: 61 73 65 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20  ase OP_Move: {. 
9460: 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20   int n;         
9470: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72    /* Number of r
9480: 65 67 69 73 74 65 72 73 20 6c 65 66 74 20 74 6f  egisters left to
9490: 20 63 6f 70 79 20 2a 2f 0a 20 20 69 6e 74 20 70   copy */.  int p
94a0: 31 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  1;          /* R
94b0: 65 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20  egister to copy 
94c0: 66 72 6f 6d 20 2a 2f 0a 20 20 69 6e 74 20 70 32  from */.  int p2
94d0: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65  ;          /* Re
94e0: 67 69 73 74 65 72 20 74 6f 20 63 6f 70 79 20 74  gister to copy t
94f0: 6f 20 2a 2f 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  o */..  n = pOp-
9500: 3e 70 33 3b 0a 20 20 70 31 20 3d 20 70 4f 70 2d  >p3;.  p1 = pOp-
9510: 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  >p1;.  p2 = pOp-
9520: 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  >p2;.  assert( n
9530: 3e 30 20 26 26 20 70 31 3e 30 20 26 26 20 70 32  >0 && p1>0 && p2
9540: 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  >0 );.  assert( 
9550: 70 31 2b 6e 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e  p1+n<=p2 || p2+n
9560: 3c 3d 70 31 20 29 3b 0a 0a 20 20 70 49 6e 31 20  <=p1 );..  pIn1 
9570: 3d 20 26 61 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70  = &aMem[p1];.  p
9580: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  Out = &aMem[p2];
9590: 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
95a0: 74 28 20 70 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28  t( pOut<=&aMem[(
95b0: 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73  p->nMem-p->nCurs
95c0: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
95d0: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
95e0: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
95f0: 73 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73  sor)] );.    ass
9600: 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
9610: 70 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d  pIn1) );.    mem
9620: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
9630: 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69   pOut);.    sqli
9640: 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70  te3VdbeMemMove(p
9650: 4f 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64  Out, pIn1);.#ifd
9660: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
9670: 20 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53      if( pOut->pS
9680: 63 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b  copyFrom>=&aMem[
9690: 70 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63  p1] && pOut->pSc
96a0: 6f 70 79 46 72 6f 6d 3c 26 61 4d 65 6d 5b 70 31  opyFrom<&aMem[p1
96b0: 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b 0a 20 20 20  +pOp->p3] ){.   
96c0: 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46     pOut->pScopyF
96d0: 72 6f 6d 20 2b 3d 20 70 31 20 2d 20 70 4f 70 2d  rom += p1 - pOp-
96e0: 3e 70 32 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  >p2;.    }.#endi
96f0: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9700: 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74 29  RACE(p2++, pOut)
9710: 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20  ;.    pIn1++;.  
9720: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68 69    pOut++;.  }whi
9730: 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72 65  le( --n );.  bre
9740: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9750: 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33 20  : Copy P1 P2 P3 
9760: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
9770: 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50 31   r[P2@P3+1]=r[P1
9780: 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  @P3+1].**.** Mak
9790: 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67 69  e a copy of regi
97a0: 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 20  sters P1..P1+P3 
97b0: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20 50  into registers P
97c0: 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20  2..P2+P3..**.** 
97d0: 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  This instruction
97e0: 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63 6f   makes a deep co
97f0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9800: 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a    A duplicate.**
9810: 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79 20   is made of any 
9820: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 63  string or blob c
9830: 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61 6c  onstant.  See al
9840: 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a  so OP_SCopy..*/.
9850: 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a  case OP_Copy: {.
9860: 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20    int n;..  n = 
9870: 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31 20  pOp->p3;.  pIn1 
9880: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
9890: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
98a0: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
98b0: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
98c0: 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29 7b  );.  while( 1 ){
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
98f0: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
9900: 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70 68  phem);.    Deeph
9910: 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b  emeralize(pOut);
9920: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
9930: 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e 70  EBUG.    pOut->p
9940: 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a 23  ScopyFrom = 0;.#
9950: 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53 54  endif.    REGIST
9960: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
9970: 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74  +pOp->p3-n, pOut
9980: 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d 29  );.    if( (n--)
9990: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
99a0: 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49 6e   pOut++;.    pIn
99b0: 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  1++;.  }.  break
99c0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
99d0: 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  SCopy P1 P2 * * 
99e0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
99f0: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
9a00: 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77 20   Make a shallow 
9a10: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9a20: 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65   P1 into registe
9a30: 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
9a40: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9a50: 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70  es a shallow cop
9a60: 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e 20  y of the value. 
9a70: 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
9a80: 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72 20   is a string or 
9a90: 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20 63  blob, then the c
9aa0: 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70 6f  opy is only a po
9ab0: 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a 20  inter to the.** 
9ac0: 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65 6e  original and hen
9ad0: 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  ce if the origin
9ae0: 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77 69  al changes so wi
9af0: 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a 20  ll the copy..** 
9b00: 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f 72  Worse, if the or
9b10: 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c 6f  iginal is deallo
9b20: 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79 20  cated, the copy 
9b30: 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64 2e  becomes invalid.
9b40: 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72 6f  .** Thus the pro
9b50: 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61 6e  gram must guaran
9b60: 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72 69  tee that the ori
9b70: 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20 63  ginal will not c
9b80: 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67 20  hange.** during 
9b90: 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66 20  the lifetime of 
9ba0: 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20 4f  the copy.  Use O
9bb0: 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20 61  P_Copy to make a
9bc0: 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f 70   complete.** cop
9bd0: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 43  y..*/.case OP_SC
9be0: 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  opy: {          
9bf0: 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70    /* out2 */.  p
9c00: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
9c10: 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26  >p1];.  pOut = &
9c20: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
9c30: 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d 70   assert( pOut!=p
9c40: 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  In1 );.  sqlite3
9c50: 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f  VdbeMemShallowCo
9c60: 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d  py(pOut, pIn1, M
9c70: 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64 65  EM_Ephem);.#ifde
9c80: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c90: 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f 70   if( pOut->pScop
9ca0: 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74 2d  yFrom==0 ) pOut-
9cb0: 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70 49  >pScopyFrom = pI
9cc0: 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72 65  n1;.#endif.  bre
9cd0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
9ce0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
9cf0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9d00: 73 69 73 3a 20 20 6f 75 74 70 75 74 3d 72 5b 50  sis:  output=r[P
9d10: 31 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  1@P2].**.** The 
9d20: 72 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72  registers P1 thr
9d30: 6f 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e  ough P1+P2-1 con
9d40: 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f  tain a single ro
9d50: 77 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e  w of.** results.
9d60: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   This opcode cau
9d70: 73 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f  ses the sqlite3_
9d80: 73 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74  step() call to t
9d90: 65 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68  erminate.** with
9da0: 20 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72   an SQLITE_ROW r
9db0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69  eturn code and i
9dc0: 74 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71  t sets up the sq
9dd0: 6c 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74  lite3_stmt.** st
9de0: 72 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69  ructure to provi
9df0: 64 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65  de access to the
9e00: 20 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d   r(P1)..r(P1+P2-
9e10: 31 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20  1) values as.** 
9e20: 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a  the result row..
9e30: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c  */.case OP_Resul
9e40: 74 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70  tRow: {.  Mem *p
9e50: 4d 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  Mem;.  int i;.  
9e60: 61 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43  assert( p->nResC
9e70: 6f 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29  olumn==pOp->p2 )
9e80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
9e90: 3e 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72  >p1>0 );.  asser
9ea0: 74 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e  t( pOp->p1+pOp->
9eb0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p2<=(p->nMem-p->
9ec0: 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23  nCursor)+1 );..#
9ed0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9ee0: 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c  IT_PROGRESS_CALL
9ef0: 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68  BACK.  /* Run th
9f00: 65 20 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74  e progress count
9f10: 65 72 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72  er just before r
9f20: 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20  eturning..  */. 
9f30: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
9f40: 73 73 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53  ss!=0.   && nVmS
9f50: 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69  tep>=nProgressLi
9f60: 6d 69 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50  mit.   && db->xP
9f70: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
9f80: 67 72 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29  gressArg)!=0.  )
9f90: 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
9fa0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
9fb0: 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72   goto vdbe_error
9fc0: 5f 68 61 6c 74 3b 0a 20 20 7d 0a 23 65 6e 64 69  _halt;.  }.#endi
9fd0: 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73 20  f..  /* If this 
9fe0: 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76 69  statement has vi
9ff0: 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74 65  olated immediate
a000: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
a010: 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20 2a  straints, do.  *
a020: 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68 65  * not return the
a030: 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
a040: 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64 6f  modified. And do
a050: 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68 65   not RELEASE the
a060: 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a 20   statement.  ** 
a070: 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74 20  transaction. It 
a080: 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c 6c  needs to be roll
a090: 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20 69  ed back.  */.  i
a0a0: 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28 72  f( SQLITE_OK!=(r
a0b0: 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
a0c0: 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29 7b  heckFk(p, 0)) ){
a0d0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
a0e0: 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f  >flags&SQLITE_Co
a0f0: 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20 61  untRows );.    a
a100: 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53 74  ssert( p->usesSt
a110: 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20 20  mtJournal );.   
a120: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
a130: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
a140: 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61 67 20 69  CountRows flag i
a150: 73 20 73 65 74 20 69 6e 20 73 71 6c 69 74 65 33  s set in sqlite3
a160: 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20 74 68 65  .flags mask, the
a170: 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73 74 61 74  n .  ** DML stat
a180: 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65 20 74 68  ements invoke th
a190: 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 72 65 74  is opcode to ret
a1a0: 75 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  urn the number o
a1b0: 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20 6d 6f 64  f rows .  ** mod
a1c0: 69 66 69 65 64 20 74 6f 20 74 68 65 20 75 73 65  ified to the use
a1d0: 72 2e 20 54 68 69 73 20 69 73 20 74 68 65 20 6f  r. This is the o
a1e0: 6e 6c 79 20 77 61 79 20 74 68 61 74 20 61 20 56  nly way that a V
a1f0: 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f 70 65 6e  M that.  ** open
a200: 73 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72  s a statement tr
a210: 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79 20 69 6e  ansaction may in
a220: 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65  voke this opcode
a230: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 63  ..  **.  ** In c
a240: 61 73 65 20 74 68 69 73 20 69 73 20 73 75 63 68  ase this is such
a250: 20 61 20 73 74 61 74 65 6d 65 6e 74 2c 20 63 6c   a statement, cl
a260: 6f 73 65 20 61 6e 79 20 73 74 61 74 65 6d 65 6e  ose any statemen
a270: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20  t transaction.  
a280: 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 74 68 69  ** opened by thi
a290: 73 20 56 4d 20 62 65 66 6f 72 65 20 72 65 74 75  s VM before retu
a2a0: 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c 20 74 6f  rning control to
a2b0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a2c0: 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e 73 75 72  is to.  ** ensur
a2d0: 65 20 74 68 61 74 20 73 74 61 74 65 6d 65 6e 74  e that statement
a2e0: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 61 72  -transactions ar
a2f0: 65 20 61 6c 77 61 79 73 20 6e 65 73 74 65 64 2c  e always nested,
a300: 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70 69 6e 67   not overlapping
a310: 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65 20 6f 70  ..  ** If the op
a320: 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61  en statement-tra
a330: 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
a340: 63 6c 6f 73 65 64 20 68 65 72 65 2c 20 74 68 65  closed here, the
a350: 6e 20 74 68 65 20 75 73 65 72 0a 20 20 2a 2a 20  n the user.  ** 
a360: 6d 61 79 20 73 74 65 70 20 61 6e 6f 74 68 65 72  may step another
a370: 20 56 4d 20 74 68 61 74 20 6f 70 65 6e 73 20 69   VM that opens i
a380: 74 73 20 6f 77 6e 20 73 74 61 74 65 6d 65 6e 74  ts own statement
a390: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 54 68   transaction. Th
a3a0: 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c 65 61 64  is.  ** may lead
a3b0: 20 74 6f 20 6f 76 65 72 6c 61 70 70 69 6e 67 20   to overlapping 
a3c0: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a3d0: 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a  ctions..  **.  *
a3e0: 2a 20 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20  * The statement 
a3f0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
a400: 65 76 65 72 20 61 20 74 6f 70 2d 6c 65 76 65 6c  ever a top-level
a410: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 48   transaction.  H
a420: 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65 20 52 45  ence.  ** the RE
a430: 4c 45 41 53 45 20 63 61 6c 6c 20 62 65 6c 6f 77  LEASE call below
a440: 20 63 61 6e 20 6e 65 76 65 72 20 66 61 69 6c 2e   can never fail.
a450: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
a460: 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30  p->iStatement==0
a470: 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73 26 53 51   || db->flags&SQ
a480: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29  LITE_CountRows )
a490: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
a4a0: 56 64 62 65 43 6c 6f 73 65 53 74 61 74 65 6d 65  VdbeCloseStateme
a4b0: 6e 74 28 70 2c 20 53 41 56 45 50 4f 49 4e 54 5f  nt(p, SAVEPOINT_
a4c0: 52 45 4c 45 41 53 45 29 3b 0a 20 20 69 66 28 20  RELEASE);.  if( 
a4d0: 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
a4e0: 5f 4f 4b 29 20 29 7b 0a 20 20 20 20 62 72 65 61  _OK) ){.    brea
a4f0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 6e 76  k;.  }..  /* Inv
a500: 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68 65  alidate all ephe
a510: 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f 77  meral cursor row
a520: 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d 3e   caches */.  p->
a530: 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e 63  cacheCtr = (p->c
a540: 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b 0a  acheCtr + 2)|1;.
a550: 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20  .  /* Make sure 
a560: 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74  the results of t
a570: 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20 61  he current row a
a580: 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61 74  re \000 terminat
a590: 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76 65  ed.  ** and have
a5a0: 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79 70   an assigned typ
a5b0: 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73 20  e.  The results 
a5c0: 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61 6c  are de-ephemeral
a5d0: 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20 73  ized as.  ** a s
a5e0: 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a 2f  ide effect..  */
a5f0: 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52 65  .  pMem = p->pRe
a600: 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d 5b  sultSet = &aMem[
a610: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28  pOp->p1];.  for(
a620: 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b 20  i=0; i<pOp->p2; 
a630: 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74  i++){.    assert
a640: 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70 4d  ( memIsValid(&pM
a650: 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44 65  em[i]) );.    De
a660: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70 4d  ephemeralize(&pM
a670: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73 65  em[i]);.    asse
a680: 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61  rt( (pMem[i].fla
a690: 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 3d  gs & MEM_Ephem)=
a6a0: 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c  =0.            |
a6b0: 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67 73  | (pMem[i].flags
a6c0: 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
a6d0: 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 20  Blob))==0 );.   
a6e0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4e   sqlite3VdbeMemN
a6f0: 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d 65  ulTerminate(&pMe
a700: 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49 53  m[i]);.    REGIS
a710: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
a720: 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b 0a  1+i, &pMem[i]);.
a730: 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61    }.  if( db->ma
a740: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
a750: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 2f 2a 20  o no_mem;..  /* 
a760: 52 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 52 4f  Return SQLITE_RO
a770: 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e 70 63 20 3d  W.  */.  p->pc =
a780: 20 70 63 20 2b 20 31 3b 0a 20 20 72 63 20 3d 20   pc + 1;.  rc = 
a790: 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20 67 6f  SQLITE_ROW;.  go
a7a0: 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
a7b0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
a7c0: 6e 63 61 74 20 50 31 20 50 32 20 50 33 20 2a 20  ncat P1 P2 P3 * 
a7d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a7e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50 31 5d  [P3]=r[P2]+r[P1]
a7f0: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 74  .**.** Add the t
a800: 65 78 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ext in register 
a810: 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e 64 20  P1 onto the end 
a820: 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e 0a 2a  of the text in.*
a830: 2a 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e  * register P2 an
a840: 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  d store the resu
a850: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
a860: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
a870: 74 68 65 20 50 31 20 6f 72 20 50 32 20 74 65 78  the P1 or P2 tex
a880: 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  t are NULL then 
a890: 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20 50 33  store NULL in P3
a8a0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d 20 50  ..**.**   P3 = P
a8b0: 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20 49 74  2 || P1.**.** It
a8c0: 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f 72 20   is illegal for 
a8d0: 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62 65 20  P1 and P3 to be 
a8e0: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a8f0: 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a 2a 2a  r. Sometimes,.**
a900: 20 69 66 20 50 33 20 69 73 20 74 68 65 20 73 61   if P3 is the sa
a910: 6d 65 20 72 65 67 69 73 74 65 72 20 61 73 20 50  me register as P
a920: 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  2, the implement
a930: 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a 2a 2a  ation is able.**
a940: 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65 6d 63   to avoid a memc
a950: 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  py()..*/.case OP
a960: 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20 20 20  _Concat: {      
a970: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
a980: 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31 2c 20  TK_CONCAT, in1, 
a990: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in2, out3 */.  i
a9a0: 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70 49 6e  64 nByte;..  pIn
a9b0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
a9c0: 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1];.  pIn2 = &aM
a9d0: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70  em[pOp->p2];.  p
a9e0: 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
a9f0: 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p3];.  assert( 
aa00: 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a 20 20  pIn1!=pOut );.  
aa10: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
aa20: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
aa30: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
aa40: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aa50: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
aa60: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
aa70: 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62 28 70  if( ExpandBlob(p
aa80: 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64 42 6c  In1) || ExpandBl
aa90: 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74 6f 20  ob(pIn2) ) goto 
aaa0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69 6e 67  no_mem;.  String
aab0: 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69  ify(pIn1, encodi
aac0: 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69 66 79  ng);.  Stringify
aad0: 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e 67 29  (pIn2, encoding)
aae0: 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49 6e 31  ;.  nByte = pIn1
aaf0: 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b 0a 20  ->n + pIn2->n;. 
ab00: 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d 3e 61   if( nByte>db->a
ab10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
ab20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
ab30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
ab40: 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69 74 65    }.  if( sqlite
ab50: 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75  3VdbeMemGrow(pOu
ab60: 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b 32 2c  t, (int)nByte+2,
ab70: 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29 7b 0a   pOut==pIn2) ){.
ab80: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
ab90: 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79 70  .  }.  MemSetTyp
aba0: 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
abb0: 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f 75 74  Str);.  if( pOut
abc0: 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20 6d 65  !=pIn2 ){.    me
abd0: 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20 70 49  mcpy(pOut->z, pI
abe0: 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e 29 3b  n2->z, pIn2->n);
abf0: 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28 26 70  .  }.  memcpy(&p
ac00: 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e 5d 2c  Out->z[pIn2->n],
ac10: 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31 2d 3e   pIn1->z, pIn1->
ac20: 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b 6e 42  n);.  pOut->z[nB
ac30: 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74 2d 3e  yte]=0;.  pOut->
ac40: 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30 3b 0a  z[nByte+1] = 0;.
ac50: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d    pOut->flags |=
ac60: 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f 75   MEM_Term;.  pOu
ac70: 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74  t->n = (int)nByt
ac80: 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d  e;.  pOut->enc =
ac90: 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44   encoding;.  UPD
aca0: 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
acb0: 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b  (pOut);.  break;
acc0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
acd0: 64 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  dd P1 P2 P3 * *.
ace0: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
acf0: 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d 0a  P3]=r[P1]+r[P2].
ad00: 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76 61  **.** Add the va
ad10: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
ad20: 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  P1 to the value 
ad30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
ad40: 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20  * and store the 
ad50: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
ad60: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
ad70: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
ad80: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
ad90: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63   NULL..*/./* Opc
ada0: 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50 31  ode: Multiply P1
adb0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
adc0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
add0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
ade0: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
adf0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
ae00: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
ae10: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
ae20: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
ae30: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ae40: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
ae50: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
ae60: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
ae70: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
ae80: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
ae90: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
aea0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
aeb0: 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]-r[P1].**
aec0: 0a 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65  .** Subtract the
aed0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aee0: 65 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76  er P1 from the v
aef0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
af00: 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65   P2.** and store
af10: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
af20: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
af30: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
af40: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
af50: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
af60: 2a 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65  * Opcode: Divide
af70: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
af80: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33   Synopsis:  r[P3
af90: 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a  ]=r[P2]/r[P1].**
afa0: 0a 2a 2a 20 44 69 76 69 64 65 20 74 68 65 20 76  .** Divide the v
afb0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
afc0: 20 50 31 20 62 79 20 74 68 65 20 76 61 6c 75 65   P1 by the value
afd0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
afe0: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
aff0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b000: 74 65 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31  ter P3 (P3=P2/P1
b010: 29 2e 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ). If the value 
b020: 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  in .** register 
b030: 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e  P1 is zero, then
b040: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
b050: 55 4c 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69  ULL. If either i
b060: 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c  nput is .** NULL
b070: 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  , the result is 
b080: 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  NULL..*/./* Opco
b090: 64 65 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31  de: Remainder P1
b0a0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
b0b0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
b0c0: 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]%r[P1].**.**
b0d0: 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72 65 6d   Compute the rem
b0e0: 61 69 6e 64 65 72 20 61 66 74 65 72 20 69 6e 74  ainder after int
b0f0: 65 67 65 72 20 72 65 67 69 73 74 65 72 20 50 32  eger register P2
b100: 20 69 73 20 64 69 76 69 64 65 64 20 62 79 20 0a   is divided by .
b110: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 61  ** register P1 a
b120: 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  nd store the res
b130: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
b140: 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65 20 76  P3. .** If the v
b150: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b160: 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68 65 20   P1 is zero the 
b170: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b180: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  ** If either ope
b190: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68  rand is NULL, th
b1a0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b1b0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
b1c0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
b1d0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b1e0: 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32  K_PLUS, in1, in2
b1f0: 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f  , out3 */.case O
b200: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 20  P_Subtract:     
b210: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
b220: 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e   as TK_MINUS, in
b230: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
b240: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b250: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
b260: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 41  * same as TK_STA
b270: 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  R, in1, in2, out
b280: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76  3 */.case OP_Div
b290: 69 64 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  ide:            
b2a0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
b2b0: 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e  K_SLASH, in1, in
b2c0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
b2d0: 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20  OP_Remainder: { 
b2e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
b2f0: 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31  e as TK_REM, in1
b300: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b310: 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b 20 20   char bIntint;  
b320: 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75 74 20   /* Started out 
b330: 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72 20 6f  as two integer o
b340: 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36  perands */.  u16
b350: 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f 2a 20   flags;      /* 
b360: 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66  Combined MEM_* f
b370: 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68 20 69  lags from both i
b380: 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36 20 74  nputs */.  u16 t
b390: 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75  ype1;      /* Nu
b3a0: 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20 6c 65  meric type of le
b3b0: 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ft operand */.  
b3c0: 75 31 36 20 74 79 70 65 32 3b 20 20 20 20 20 20  u16 type2;      
b3d0: 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65 20  /* Numeric type 
b3e0: 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64  of right operand
b3f0: 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20 20 20   */.  i64 iA;   
b400: 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72        /* Integer
b410: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
b420: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
b430: 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iB;         /* I
b440: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
b450: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
b460: 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20 20 20  .  double rA;   
b470: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
b480: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
b490: 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b   */.  double rB;
b4a0: 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61        /* Real va
b4b0: 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65  lue of right ope
b4c0: 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20  rand */..  pIn1 
b4d0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
b4e0: 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75 6d 65  ;.  type1 = nume
b4f0: 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b 0a 20  ricType(pIn1);. 
b500: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
b510: 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65 32 20  p->p2];.  type2 
b520: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
b530: 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  n2);.  pOut = &a
b540: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
b550: 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c  flags = pIn1->fl
b560: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
b570: 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 20  s;.  if( (flags 
b580: 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29  & MEM_Null)!=0 )
b590: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b5a0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b5b0: 0a 20 20 69 66 28 20 28 74 79 70 65 31 20 26 20  .  if( (type1 & 
b5c0: 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29  type2 & MEM_Int)
b5d0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20 3d 20  !=0 ){.    iA = 
b5e0: 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69  pIn1->u.i;.    i
b5f0: 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  B = pIn2->u.i;. 
b600: 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a     bIntint = 1;.
b610: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
b620: 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 20  >opcode ){.     
b630: 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20 20   case OP_Add:   
b640: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 41      if( sqlite3A
b650: 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ddInt64(&iB,iA) 
b660: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b670: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b680: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b690: 20 69 66 28 20 73 71 6c 69 74 65 33 53 75 62 49   if( sqlite3SubI
b6a0: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
b6b0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
b6c0: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
b6d0: 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66  OP_Multiply:  if
b6e0: 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36  ( sqlite3MulInt6
b6f0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
b700: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
b710: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b720: 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20 20  Divide: {.      
b730: 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20 67 6f    if( iA==0 ) go
b740: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
b750: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
b760: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 2d 31        if( iA==-1
b770: 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54   && iB==SMALLEST
b780: 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20 66 70  _INT64 ) goto fp
b790: 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20 20 69  _math;.        i
b7a0: 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20 20 20  B /= iA;.       
b7b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
b7c0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20 7b        default: {
b7d0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
b7e0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
b7f0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
b800: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
b810: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
b820: 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25 3d 20  ;.        iB %= 
b830: 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  iA;.        brea
b840: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
b850: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
b860: 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   iB;.    MemSetT
b870: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b880: 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  M_Int);.  }else{
b890: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 30  .    bIntint = 0
b8a0: 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72  ;.fp_math:.    r
b8b0: 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  A = sqlite3VdbeR
b8c0: 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  ealValue(pIn1);.
b8d0: 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74 65 33      rB = sqlite3
b8e0: 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
b8f0: 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28  n2);.    switch(
b900: 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a   pOp->opcode ){.
b910: 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41 64        case OP_Ad
b920: 64 3a 20 20 20 20 20 20 20 20 20 72 42 20 2b 3d  d:         rB +=
b930: 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b   rA;       break
b940: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
b950: 53 75 62 74 72 61 63 74 3a 20 20 20 20 72 42 20  Subtract:    rB 
b960: 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  -= rA;       bre
b970: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
b980: 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20 20 72  P_Multiply:    r
b990: 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B *= rA;       b
b9a0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
b9b0: 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20   OP_Divide: {.  
b9c0: 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65        /* (double
b9d0: 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20 53 51  )0 In case of SQ
b9e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
b9f0: 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20  NG_POINT... */. 
ba00: 20 20 20 20 20 20 20 69 66 28 20 72 41 3d 3d 28         if( rA==(
ba10: 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74 6f 20  double)0 ) goto 
ba20: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
ba30: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
ba40: 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20     rB /= rA;.   
ba50: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
ba60: 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c    }.      defaul
ba70: 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69 41 20  t: {.        iA 
ba80: 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20 20 20  = (i64)rA;.     
ba90: 20 20 20 69 42 20 3d 20 28 69 36 34 29 72 42 3b     iB = (i64)rB;
baa0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d  .        if( iA=
bab0: 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d  =0 ) goto arithm
bac0: 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e  etic_result_is_n
bad0: 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ull;.        if(
bae0: 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31   iA==-1 ) iA = 1
baf0: 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d 20 28  ;.        rB = (
bb00: 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69 41 29  double)(iB % iA)
bb10: 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
bb20: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23  .      }.    }.#
bb30: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  ifdef SQLITE_OMI
bb40: 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
bb50: 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
bb60: 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   rB;.    MemSetT
bb70: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
bb80: 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20  M_Int);.#else.  
bb90: 20 20 69 66 28 20 73 71 6c 69 74 65 33 49 73 4e    if( sqlite3IsN
bba0: 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20 20 20  aN(rB) ){.      
bbb0: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bbc0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
bbd0: 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
bbe0: 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65  u.r = rB;.    Me
bbf0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
bc00: 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20  t, MEM_Real);.  
bc10: 20 20 69 66 28 20 28 28 74 79 70 65 31 7c 74 79    if( ((type1|ty
bc20: 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d  pe2)&MEM_Real)==
bc30: 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20 29 7b  0 && !bIntint ){
bc40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc50: 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e 69 74  beIntegerAffinit
bc60: 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23  y(pOut);.    }.#
bc70: 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
bc80: 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63 5f 72  k;..arithmetic_r
bc90: 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20  esult_is_null:. 
bca0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
bcb0: 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20  etNull(pOut);.  
bcc0: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
bcd0: 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20  ode: CollSeq P1 
bce0: 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20  * * P4.**.** P4 
bcf0: 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
bd00: 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75 63 74  a CollSeq struct
bd10: 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20 63 61  . If the next ca
bd20: 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66 75 6e  ll to a user fun
bd30: 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72  ction.** or aggr
bd40: 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71 6c 69  egate calls sqli
bd50: 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65  te3GetFuncCollSe
bd60: 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74  q(), this collat
bd70: 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77 69 6c  ion sequence wil
bd80: 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e 65 64  l.** be returned
bd90: 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
bda0: 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d  y the built-in m
bdb0: 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e 64 20  in(), max() and 
bdc0: 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63  nullif().** func
bdd0: 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  tions..**.** If 
bde0: 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P1 is not zero, 
bdf0: 74 68 65 6e 20 69 74 20 69 73 20 61 20 72 65 67  then it is a reg
be00: 69 73 74 65 72 20 74 68 61 74 20 61 20 73 75 62  ister that a sub
be10: 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72  sequent min() or
be20: 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72 65 67  .** max() aggreg
be30: 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74 6f 20  ate will set to 
be40: 31 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  1 if the current
be50: 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68 65 20   row is not the 
be60: 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61  minimum or.** ma
be70: 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31 20 72  ximum.  The P1 r
be80: 65 67 69 73 74 65 72 20 69 73 20 69 6e 69 74 69  egister is initi
be90: 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79 20 74  alized to 0 by t
bea0: 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
beb0: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72  .**.** The inter
bec0: 66 61 63 65 20 75 73 65 64 20 62 79 20 74 68 65  face used by the
bed0: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
bee0: 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65 6e 74  of the aforement
bef0: 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a  ioned functions.
bf00: 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65 20 74  ** to retrieve t
bf10: 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  he collation seq
bf20: 75 65 6e 63 65 20 73 65 74 20 62 79 20 74 68 69  uence set by thi
bf30: 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f 74 20  s opcode is not 
bf40: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62  available.** pub
bf50: 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69  licly.  Only bui
bf60: 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20  lt-in functions 
bf70: 68 61 76 65 20 61 63 63 65 73 73 20 74 6f 20 74  have access to t
bf80: 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a  his feature..*/.
bf90: 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a  case OP_CollSeq:
bfa0: 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
bfb0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
bfc0: 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20 70 4f  LSEQ );.  if( pO
bfd0: 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73 71 6c  p->p1 ){.    sql
bfe0: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
bff0: 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
c000: 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72  1], 0);.  }.  br
c010: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
c020: 65 3a 20 46 75 6e 63 74 69 6f 6e 20 50 31 20 50  e: Function P1 P
c030: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
c040: 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75  nopsis: r[P3]=fu
c050: 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  nc(r[P2@P5]).**.
c060: 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72  ** Invoke a user
c070: 20 66 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73   function (P4 is
c080: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
c090: 46 75 6e 63 74 69 6f 6e 20 73 74 72 75 63 74 75  Function structu
c0a0: 72 65 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e  re that.** defin
c0b0: 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29  es the function)
c0c0: 20 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e   with P5 argumen
c0d0: 74 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65  ts taken from re
c0e0: 67 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a  gister P2 and.**
c0f0: 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68   successors.  Th
c100: 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20  e result of the 
c110: 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72  function is stor
c120: 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
c130: 33 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  3..** Register P
c140: 33 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e  3 must not be on
c150: 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
c160: 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20  n inputs..**.** 
c170: 50 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62  P1 is a 32-bit b
c180: 69 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e  itmask indicatin
c190: 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  g whether or not
c1a0: 20 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74   each argument t
c1b0: 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69  o the .** functi
c1c0: 6f 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65  on was determine
c1d0: 64 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74  d to be constant
c1e0: 20 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65   at compile time
c1f0: 2e 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a  . If the first.*
c200: 2a 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63  * argument was c
c210: 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74  onstant then bit
c220: 20 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e   0 of P1 is set.
c230: 20 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f   This is used to
c240: 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68   determine.** wh
c250: 65 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20  ether meta data 
c260: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
c270: 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20  a user function 
c280: 61 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74  argument using t
c290: 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65  he.** sqlite3_se
c2a0: 74 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20  t_auxdata() API 
c2b0: 6d 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65  may be safely re
c2c0: 74 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65  tained until the
c2d0: 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74   next.** invocat
c2e0: 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f  ion of this opco
c2f0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
c300: 73 6f 3a 20 41 67 67 53 74 65 70 20 61 6e 64 20  so: AggStep and 
c310: 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65  AggFinal.*/.case
c320: 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a   OP_Function: {.
c330: 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a    int i;.  Mem *
c340: 70 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pArg;.  sqlite3_
c350: 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
c360: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
c370: 70 56 61 6c 3b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  pVal;.  int n;..
c380: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20    n = pOp->p5;. 
c390: 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70 41 72   apVal = p->apAr
c3a0: 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61 70 56  g;.  assert( apV
c3b0: 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a 20 20  al || n==0 );.  
c3c0: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
c3d0: 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
c3e0: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
c3f0: 72 29 20 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74  r) );.  ctx.pOut
c400: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
c410: 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
c420: 68 61 6e 67 65 28 70 2c 20 63 74 78 2e 70 4f 75  hange(p, ctx.pOu
c430: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
c440: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
c450: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
c460: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
c470: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
c480: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
c490: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
c4a0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
c4b0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
c4c0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
c4d0: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
c4e0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
c4f0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
c500: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
c510: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
c520: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
c530: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
c540: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
c550: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
c560: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
c570: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
c580: 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  );.  ctx.pFunc =
c590: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
c5a0: 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a    ctx.iOp = pc;.
c5b0: 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
c5c0: 0a 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61  .  MemSetTypeFla
c5d0: 67 28 63 74 78 2e 70 4f 75 74 2c 20 4d 45 4d 5f  g(ctx.pOut, MEM_
c5e0: 4e 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 66 45 72  Null);.  ctx.fEr
c5f0: 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20 20  rorOrAux = 0;.  
c600: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
c610: 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28 2a 63  lastRowid;.  (*c
c620: 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e 63 29  tx.pFunc->xFunc)
c630: 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61 6c 29  (&ctx, n, apVal)
c640: 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30  ; /* IMP: R-2450
c650: 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c 61 73  5-23230 */.  las
c660: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
c670: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 52 65 6d 65  tRowid;  /* Reme
c680: 6d 62 65 72 20 72 6f 77 69 64 20 63 68 61 6e 67  mber rowid chang
c690: 65 73 20 6d 61 64 65 20 62 79 20 78 46 75 6e 63  es made by xFunc
c6a0: 20 2a 2f 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   */..  /* If the
c6b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
c6c0: 65 64 20 61 6e 20 65 72 72 6f 72 2c 20 74 68 72  ed an error, thr
c6d0: 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20  ow an exception 
c6e0: 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e 66 45 72  */.  if( ctx.fEr
c6f0: 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20  rorOrAux ){.    
c700: 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
c710: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c720: 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
c730: 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c  rrMsg, db, "%s",
c740: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74   sqlite3_value_t
c750: 65 78 74 28 63 74 78 2e 70 4f 75 74 29 29 3b 0a  ext(ctx.pOut));.
c760: 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e 69        rc = ctx.i
c770: 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  sError;.    }.  
c780: 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 6c    sqlite3VdbeDel
c790: 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70 63  eteAuxData(p, pc
c7a0: 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d 0a  , pOp->p1);.  }.
c7b0: 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20 72  .  /* Copy the r
c7c0: 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
c7d0: 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73  ction into regis
c7e0: 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c 69  ter P3 */.  sqli
c7f0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
c800: 6f 64 69 6e 67 28 63 74 78 2e 70 4f 75 74 2c 20  oding(ctx.pOut, 
c810: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 69 66 28  encoding);.  if(
c820: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54   sqlite3VdbeMemT
c830: 6f 6f 42 69 67 28 63 74 78 2e 70 4f 75 74 29 20  ooBig(ctx.pOut) 
c840: 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
c850: 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49  big;.  }..  REGI
c860: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
c870: 70 33 2c 20 63 74 78 2e 70 4f 75 74 29 3b 0a 20  p3, ctx.pOut);. 
c880: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
c890: 53 49 5a 45 28 63 74 78 2e 70 4f 75 74 29 3b 0a  SIZE(ctx.pOut);.
c8a0: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c8b0: 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20 50 31  pcode: BitAnd P1
c8c0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
c8d0: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
c8e0: 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]&r[P2].**.**
c8f0: 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69   Take the bit-wi
c900: 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76 61  se AND of the va
c910: 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65 72  lues in register
c920: 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a   P1 and P2 and.*
c930: 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75  * store the resu
c940: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
c950: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
c960: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
c970: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
c980: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
c990: 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33 20   BitOr P1 P2 P3 
c9a0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
c9b0: 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b    r[P3]=r[P1]|r[
c9c0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
c9d0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
c9e0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
c9f0: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
ca00: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
ca10: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
ca20: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
ca30: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
ca40: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
ca50: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
ca60: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
ca70: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
ca80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
ca90: 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d  P3]=r[P2]<<r[P1]
caa0: 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65  .**.** Shift the
cab0: 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
cac0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f  n register P2 to
cad0: 20 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65   the left by the
cae0: 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  .** number of bi
caf0: 74 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20  ts specified by 
cb00: 74 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72  the integer in r
cb10: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53  egister P1..** S
cb20: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
cb30: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
cb40: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
cb50: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
cb60: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
cb70: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
cb80: 69 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50  iftRight P1 P2 P
cb90: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
cba0: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e  s:  r[P3]=r[P2]>
cbb0: 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69  >r[P1].**.** Shi
cbc0: 66 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  ft the integer v
cbd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
cbe0: 20 50 32 20 74 6f 20 74 68 65 20 72 69 67 68 74   P2 to the right
cbf0: 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65   by the.** numbe
cc00: 72 20 6f 66 20 62 69 74 73 20 73 70 65 63 69 66  r of bits specif
cc10: 69 65 64 20 62 79 20 74 68 65 20 69 6e 74 65 67  ied by the integ
cc20: 65 72 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  er in register P
cc30: 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  1..** Store the 
cc40: 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74  result in regist
cc50: 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74  er P3..** If eit
cc60: 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c  her input is NUL
cc70: 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  L, the result is
cc80: 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
cc90: 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20  P_BitAnd:       
cca0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ccb0: 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20  e as TK_BITAND, 
ccc0: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
ccd0: 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a  /.case OP_BitOr:
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
cd00: 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c  BITOR, in1, in2,
cd10: 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
cd20: 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20  _ShiftLeft:     
cd30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
cd40: 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69   as TK_LSHIFT, i
cd50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
cd60: 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69  .case OP_ShiftRi
cd70: 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ght: {          
cd80: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52   /* same as TK_R
cd90: 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c  SHIFT, in1, in2,
cda0: 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69   out3 */.  i64 i
cdb0: 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69  A;.  u64 uA;.  i
cdc0: 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a  64 iB;.  u8 op;.
cdd0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
cde0: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
cdf0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
ce00: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
ce10: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66  m[pOp->p3];.  if
ce20: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c  ( (pIn1->flags |
ce30: 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20   pIn2->flags) & 
ce40: 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
ce50: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
ce60: 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20  tNull(pOut);.   
ce70: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41   break;.  }.  iA
ce80: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
ce90: 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20  tValue(pIn2);.  
cea0: 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iB = sqlite3Vdbe
ceb0: 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
cec0: 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    op = pOp->opco
ced0: 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50  de;.  if( op==OP
cee0: 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69  _BitAnd ){.    i
cef0: 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65  A &= iB;.  }else
cf00: 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f   if( op==OP_BitO
cf10: 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69  r ){.    iA |= i
cf20: 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69  B;.  }else if( i
cf30: 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65  B!=0 ){.    asse
cf40: 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74  rt( op==OP_Shift
cf50: 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f  Right || op==OP_
cf60: 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20  ShiftLeft );..  
cf70: 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67    /* If shifting
cf80: 20 62 79 20 61 20 6e 65 67 61 74 69 76 65 20 61   by a negative a
cf90: 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20  mount, shift in 
cfa0: 74 68 65 20 6f 74 68 65 72 20 64 69 72 65 63 74  the other direct
cfb0: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69  ion */.    if( i
cfc0: 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73  B<0 ){.      ass
cfd0: 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67  ert( OP_ShiftRig
cfe0: 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74  ht==OP_ShiftLeft
cff0: 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d  +1 );.      op =
d000: 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20   2*OP_ShiftLeft 
d010: 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20  + 1 - op;.      
d020: 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20  iB = iB>(-64) ? 
d030: 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a  -iB : 64;.    }.
d040: 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20  .    if( iB>=64 
d050: 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69  ){.      iA = (i
d060: 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53  A>=0 || op==OP_S
d070: 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20  hiftLeft) ? 0 : 
d080: 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  -1;.    }else{. 
d090: 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c       memcpy(&uA,
d0a0: 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29   &iA, sizeof(uA)
d0b0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d  );.      if( op=
d0c0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b  =OP_ShiftLeft ){
d0d0: 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20  .        uA <<= 
d0e0: 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  iB;.      }else{
d0f0: 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20  .        uA >>= 
d100: 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  iB;.        /* S
d110: 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20  ign-extend on a 
d120: 72 69 67 68 74 20 73 68 69 66 74 20 6f 66 20 61  right shift of a
d130: 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72   negative number
d140: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
d150: 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28  iA<0 ) uA |= (((
d160: 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 29  (u64)0xffffffff)
d170: 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66 66 66  <<32)|0xffffffff
d180: 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20  ) << (64-iB);.  
d190: 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63      }.      memc
d1a0: 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a  py(&iA, &uA, siz
d1b0: 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a  eof(iA));.    }.
d1c0: 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20    }.  pOut->u.i 
d1d0: 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79  = iA;.  MemSetTy
d1e0: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d1f0: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
d200: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64  }../* Opcode: Ad
d210: 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20  dImm  P1 P2 * * 
d220: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
d230: 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a  r[P1]=r[P1]+P2.*
d240: 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63 6f  * .** Add the co
d250: 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68 65  nstant P2 to the
d260: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
d270: 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65  er P1..** The re
d280: 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 61  sult is always a
d290: 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a  n integer..**.**
d2a0: 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72 65   To force any re
d2b0: 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e 20  gister to be an 
d2c0: 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61 64  integer, just ad
d2d0: 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  d 0..*/.case OP_
d2e0: 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20  AddImm: {       
d2f0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
d300: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
d310: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
d320: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
d330: 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  n1);.  sqlite3Vd
d340: 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28  beMemIntegerify(
d350: 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  pIn1);.  pIn1->u
d360: 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  .i += pOp->p2;. 
d370: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
d380: 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74 20  code: MustBeInt 
d390: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a  P1 P2 * * *.** .
d3a0: 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c  ** Force the val
d3b0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
d3c0: 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65 67  1 to be an integ
d3d0: 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  er.  If the valu
d3e0: 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f  e.** in P1 is no
d3f0: 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e 64  t an integer and
d400: 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65   cannot be conve
d410: 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74  rted into an int
d420: 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20  eger.** without 
d430: 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20  data loss, then 
d440: 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
d450: 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50 32   to P2, or if P2
d460: 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20  ==0.** raise an 
d470: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
d480: 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  exception..*/.ca
d490: 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a  se OP_MustBeInt:
d4a0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
d4b0: 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
d4c0: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
d4d0: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70 49  ->p1];.  if( (pI
d4e0: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
d4f0: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61  Int)==0 ){.    a
d500: 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e  pplyAffinity(pIn
d510: 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  1, SQLITE_AFF_NU
d520: 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29  MERIC, encoding)
d530: 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
d540: 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61  Taken((pIn1->fla
d550: 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20  gs&MEM_Int)==0, 
d560: 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49 6e  2);.    if( (pIn
d570: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
d580: 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
d590: 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
d5a0: 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 53  {.        rc = S
d5b0: 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a  QLITE_MISMATCH;.
d5c0: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f          goto abo
d5d0: 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
d5e0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
d5f0: 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e        pc = pOp->
d600: 70 32 20 2d 20 31 3b 0a 20 20 20 20 20 20 20 20  p2 - 1;.        
d610: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
d620: 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65     }.  }.  MemSe
d630: 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20  tTypeFlag(pIn1, 
d640: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61  MEM_Int);.  brea
d650: 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
d660: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
d670: 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f  NG_POINT./* Opco
d680: 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74 79  de: RealAffinity
d690: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d6a0: 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  * If register P1
d6b0: 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
d6c0: 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20  r convert it to 
d6d0: 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a  a real value..**
d6e0: 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
d6f0: 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78 74  is used when ext
d700: 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74  racting informat
d710: 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d  ion from a colum
d720: 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52 45  n that.** has RE
d730: 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53 75  AL affinity.  Su
d740: 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73  ch column values
d750: 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73 74   may still be st
d760: 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67  ored as.** integ
d770: 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20 65  ers, for space e
d780: 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20 61  fficiency, but a
d790: 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e 20  fter extraction 
d7a0: 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20  we want them.** 
d7b0: 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20 72  to have only a r
d7c0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61  eal value..*/.ca
d7d0: 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69  se OP_RealAffini
d7e0: 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ty: {           
d7f0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
d800: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
d810: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
d820: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
d830: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c  M_Int ){.    sql
d840: 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69  ite3VdbeMemReali
d850: 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20  fy(pIn1);.  }.  
d860: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
d870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d880: 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63  OMIT_CAST./* Opc
d890: 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32 20  ode: Cast P1 P2 
d8a0: 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
d8b0: 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
d8c0: 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74  ]).**.** Force t
d8d0: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
d8e0: 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74 68  ster P1 to be th
d8f0: 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  e type defined b
d900: 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c  y P2..** .** <ul
d910: 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  >.** <li value="
d920: 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69  97"> TEXT.** <li
d930: 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f   value="98"> BLO
d940: 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22  B.** <li value="
d950: 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20  99"> NUMERIC.** 
d960: 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22 3e  <li value="100">
d970: 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20   INTEGER.** <li 
d980: 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45 41  value="101"> REA
d990: 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a  L.** </ul>.**.**
d9a0: 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73   A NULL value is
d9b0: 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20   not changed by 
d9c0: 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49  this routine.  I
d9d0: 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a  t remains NULL..
d9e0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74 3a  */.case OP_Cast:
d9f0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
da00: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
da10: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
da20: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45  =SQLITE_AFF_NONE
da30: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c   && pOp->p2<=SQL
da40: 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a  ITE_AFF_REAL );.
da50: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
da60: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
da70: 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63 61  TEXT );.  testca
da80: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
da90: 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 20 29 3b 0a  ITE_AFF_NONE );.
daa0: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
dab0: 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  >p2==SQLITE_AFF_
dac0: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65 73  NUMERIC );.  tes
dad0: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d  tcase( pOp->p2==
dae0: 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47  SQLITE_AFF_INTEG
daf0: 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  ER );.  testcase
db00: 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54  ( pOp->p2==SQLIT
db10: 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20  E_AFF_REAL );.  
db20: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
db30: 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p1];.  memAbou
db40: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e  tToChange(p, pIn
db50: 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e  1);.  rc = Expan
db60: 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73  dBlob(pIn1);.  s
db70: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61 73  qlite3VdbeMemCas
db80: 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c  t(pIn1, pOp->p2,
db90: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50   encoding);.  UP
dba0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
dbb0: 45 28 70 49 6e 31 29 3b 0a 20 20 62 72 65 61 6b  E(pIn1);.  break
dbc0: 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
dbd0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20 2a  LITE_OMIT_CAST *
dbe0: 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 74  /../* Opcode: Lt
dbf0: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
dc00: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
dc10: 72 5b 50 31 5d 3c 72 5b 50 33 5d 20 67 6f 74 6f  r[P1]<r[P3] goto
dc20: 20 50 32 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72   P2.**.** Compar
dc30: 65 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  e the values in 
dc40: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
dc50: 50 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c  P3.  If reg(P3)<
dc60: 72 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20  reg(P1) then.** 
dc70: 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20  jump to address 
dc80: 50 32 2e 20 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74  P2.  .**.** If t
dc90: 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46  he SQLITE_JUMPIF
dca0: 4e 55 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69  NULL bit of P5 i
dcb0: 73 20 73 65 74 20 61 6e 64 20 65 69 74 68 65 72  s set and either
dcc0: 20 72 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72   reg(P1) or.** r
dcd0: 65 67 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74  eg(P3) is NULL t
dce0: 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
dcf0: 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c 49 54  p.  If the SQLIT
dd00: 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a  E_JUMPIFNULL .**
dd10: 20 62 69 74 20 69 73 20 63 6c 65 61 72 20 74 68   bit is clear th
dd20: 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  en fall through 
dd30: 69 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  if either operan
dd40: 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  d is NULL..**.**
dd50: 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   The SQLITE_AFF_
dd60: 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20  MASK portion of 
dd70: 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66  P5 must be an af
dd80: 66 69 6e 69 74 79 20 63 68 61 72 61 63 74 65 72  finity character
dd90: 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46   -.** SQLITE_AFF
dda0: 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46  _TEXT, SQLITE_AF
ddb0: 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73  F_INTEGER, and s
ddc0: 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65  o forth. An atte
ddd0: 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20  mpt is made .** 
dde0: 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69  to coerce both i
ddf0: 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20  nputs according 
de00: 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69 74 79  to this affinity
de10: 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63   before the.** c
de20: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64  omparison is mad
de30: 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  e. If the SQLITE
de40: 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30  _AFF_MASK is 0x0
de50: 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a  0, then numeric.
de60: 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73 20 75  ** affinity is u
de70: 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74  sed. Note that t
de80: 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76  he affinity conv
de90: 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72  ersions are stor
dea0: 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20  ed.** back into 
deb0: 74 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  the input regist
dec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ers P1 and P3.  
ded0: 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63  So this opcode c
dee0: 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73  an cause.** pers
def0: 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74  istent changes t
df00: 6f 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  o registers P1 a
df10: 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63  nd P3..**.** Onc
df20: 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e  e any conversion
df30: 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61  s have taken pla
df40: 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20  ce, and neither 
df50: 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a  value is NULL, .
df60: 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 61 72  ** the values ar
df70: 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62  e compared. If b
df80: 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 20 62  oth values are b
df90: 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70  lobs then memcmp
dfa0: 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f  () is.** used to
dfb0: 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72   determine the r
dfc0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f  esults of the co
dfd0: 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f  mparison.  If bo
dfe0: 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  th values.** are
dff0: 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20   text, then the 
e000: 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c  appropriate coll
e010: 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73  ating function s
e020: 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50  pecified in.** P
e030: 34 20 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f  4 is  used to do
e040: 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e   the comparison.
e050: 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73    If P4 is not s
e060: 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a  pecified then.**
e070: 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65   memcmp() is use
e080: 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78  d to compare tex
e090: 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f  t string.  If bo
e0a0: 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a  th values are.**
e0b0: 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61   numeric, then a
e0c0: 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69   numeric compari
e0d0: 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20  son is used. If 
e0e0: 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a  the two values.*
e0f0: 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65 72 65  * are of differe
e100: 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e  nt types, then n
e110: 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69  umbers are consi
e120: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a  dered less than.
e130: 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73  ** strings and s
e140: 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69  trings are consi
e150: 64 65 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20  dered less than 
e160: 62 6c 6f 62 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  blobs..**.** If 
e170: 74 68 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  the SQLITE_STORE
e180: 50 32 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  P2 bit of P5 is 
e190: 73 65 74 2c 20 74 68 65 6e 20 64 6f 20 6e 6f 74  set, then do not
e1a0: 20 6a 75 6d 70 2e 20 20 49 6e 73 74 65 61 64 2c   jump.  Instead,
e1b0: 0a 2a 2a 20 73 74 6f 72 65 20 61 20 62 6f 6f 6c  .** store a bool
e1c0: 65 61 6e 20 72 65 73 75 6c 74 20 28 65 69 74 68  ean result (eith
e1d0: 65 72 20 30 2c 20 6f 72 20 31 2c 20 6f 72 20 4e  er 0, or 1, or N
e1e0: 55 4c 4c 29 20 69 6e 20 72 65 67 69 73 74 65 72  ULL) in register
e1f0: 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68   P2..**.** If th
e200: 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  e SQLITE_NULLEQ 
e210: 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 50 35  bit is set in P5
e220: 2c 20 74 68 65 6e 20 4e 55 4c 4c 20 76 61 6c 75  , then NULL valu
e230: 65 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  es are considere
e240: 64 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 20 6f 6e  d.** equal to on
e250: 65 20 61 6e 6f 74 68 65 72 2c 20 70 72 6f 76 69  e another, provi
e260: 64 65 64 20 74 68 61 74 20 74 68 65 79 20 64 6f  ded that they do
e270: 20 6e 6f 74 20 68 61 76 65 20 74 68 65 69 72 20   not have their 
e280: 4d 45 4d 5f 43 6c 65 61 72 65 64 0a 2a 2a 20 62  MEM_Cleared.** b
e290: 69 74 20 73 65 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70  it set..*/./* Op
e2a0: 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20 50  code: Ne P1 P2 P
e2b0: 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
e2c0: 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d 72  sis: if r[P1]!=r
e2d0: 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  [P3] goto P2.**.
e2e0: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
e2f0: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
e300: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
e310: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
e320: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70  ken if.** the op
e330: 65 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74  erands in regist
e340: 65 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72  ers P1 and P3 ar
e350: 65 20 6e 6f 74 20 65 71 75 61 6c 2e 20 20 53 65  e not equal.  Se
e360: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
e370: 66 6f 72 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  for.** additiona
e380: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e390: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
e3a0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
e3b0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
e3c0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
e3d0: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
e3e0: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
e3f0: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
e400: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
e410: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
e420: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
e430: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
e440: 6e 20 69 73 20 66 61 6c 73 65 2e 20 20 49 66 20  n is false.  If 
e450: 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69  either operand i
e460: 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  s NULL then the 
e470: 72 65 73 75 6c 74 20 69 73 20 74 72 75 65 2e 0a  result is true..
e480: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
e490: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
e4a0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
e4b0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
e4c0: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
e4d0: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
e4e0: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
e4f0: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
e500: 6f 64 65 3a 20 45 71 20 50 31 20 50 32 20 50 33  ode: Eq P1 P2 P3
e510: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
e520: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 72 5b  is: if r[P1]==r[
e530: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
e540: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
e550: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
e560: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
e570: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
e580: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 70 65  en if.** the ope
e590: 72 61 6e 64 73 20 69 6e 20 72 65 67 69 73 74 65  rands in registe
e5a0: 72 73 20 50 31 20 61 6e 64 20 50 33 20 61 72 65  rs P1 and P3 are
e5b0: 20 65 71 75 61 6c 2e 0a 2a 2a 20 53 65 65 20 74   equal..** See t
e5c0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72  he Lt opcode for
e5d0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f   additional info
e5e0: 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49  rmation..**.** I
e5f0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
e600: 69 73 20 73 65 74 20 69 6e 20 50 35 20 74 68 65  is set in P5 the
e610: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20  n the result of 
e620: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 6c  comparison is al
e630: 77 61 79 73 20 65 69 74 68 65 72 0a 2a 2a 20 74  ways either.** t
e640: 72 75 65 20 6f 72 20 66 61 6c 73 65 20 61 6e 64  rue or false and
e650: 20 69 73 20 6e 65 76 65 72 20 4e 55 4c 4c 2e 20   is never NULL. 
e660: 20 49 66 20 62 6f 74 68 20 6f 70 65 72 61 6e 64   If both operand
e670: 73 20 61 72 65 20 4e 55 4c 4c 20 74 68 65 6e 20  s are NULL then 
e680: 74 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 6f 66  the result.** of
e690: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 74   comparison is t
e6a0: 72 75 65 2e 20 20 49 66 20 65 69 74 68 65 72 20  rue.  If either 
e6b0: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20  operand is NULL 
e6c0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
e6d0: 69 73 20 66 61 6c 73 65 2e 0a 2a 2a 20 49 66 20  is false..** If 
e6e0: 6e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  neither operand 
e6f0: 69 73 20 4e 55 4c 4c 20 74 68 65 20 72 65 73 75  is NULL the resu
e700: 6c 74 20 69 73 20 74 68 65 20 73 61 6d 65 20 61  lt is the same a
e710: 73 20 69 74 20 77 6f 75 6c 64 20 62 65 20 69 66  s it would be if
e720: 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 4e  .** the SQLITE_N
e730: 55 4c 4c 45 51 20 66 6c 61 67 20 77 65 72 65 20  ULLEQ flag were 
e740: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 50 35 2e  omitted from P5.
e750: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  .*/./* Opcode: L
e760: 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  e P1 P2 P3 P4 P5
e770: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
e780: 20 72 5b 50 31 5d 3c 3d 72 5b 50 33 5d 20 67 6f   r[P1]<=r[P3] go
e790: 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
e7a0: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
e7b0: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
e7c0: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
e7d0: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
e7e0: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
e7f0: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
e800: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
e810: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
e820: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
e830: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
e840: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
e850: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
e860: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
e870: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
e880: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
e890: 3a 20 69 66 20 72 5b 50 31 5d 3e 72 5b 50 33 5d  : if r[P1]>r[P3]
e8a0: 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54   goto P2.**.** T
e8b0: 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  his works just l
e8c0: 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64  ike the Lt opcod
e8d0: 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  e except that th
e8e0: 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20  e jump is taken 
e8f0: 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e  if.** the conten
e900: 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 33  t of register P3
e910: 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
e920: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a   the content of.
e930: 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31 2e 20  ** register P1. 
e940: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
e950: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
e960: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
e970: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47 65 20  /./* Opcode: Ge 
e980: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
e990: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
e9a0: 5b 50 31 5d 3e 3d 72 5b 50 33 5d 20 67 6f 74 6f  [P1]>=r[P3] goto
e9b0: 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77   P2.**.** This w
e9c0: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
e9d0: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
e9e0: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
e9f0: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
ea00: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
ea10: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
ea20: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
ea30: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
ea40: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
ea50: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
ea60: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
ea70: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
ea80: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
ea90: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
eaa0: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
eab0: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
eac0: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
ead0: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
eae0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
eaf0: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
eb00: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
eb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
eb20: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
eb30: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
eb40: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
eb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
eb60: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
eb70: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
eb80: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
eb90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
eba0: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
ebb0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ebc0: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
ebd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ebe0: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
ebf0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
ec00: 6e 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20  nt res;         
ec10: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
ec20: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
ec30: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
ec40: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
ec50: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
ec60: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
ec70: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
ec80: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
ec90: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
eca0: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ecb0: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ecc0: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ecd0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ece0: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ecf0: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ed00: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ed10: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ed20: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ed30: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ed40: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ed50: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ed60: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ed70: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ed80: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
ed90: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
eda0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
edb0: 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
edc0: 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
edd0: 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
ede0: 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
edf0: 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
ee00: 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
ee10: 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
ee20: 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
ee30: 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
ee40: 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
ee50: 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
ee60: 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
ee70: 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
ee80: 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
ee90: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
eea0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
eeb0: 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
eec0: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
eed0: 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
eee0: 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
eef0: 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
ef00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
ef10: 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
ef20: 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
ef30: 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
ef40: 67 73 31 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  gs1&MEM_Null)!=0
ef50: 0a 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67  .       && (flag
ef60: 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 0a  s3&MEM_Null)!=0.
ef70: 20 20 20 20 20 20 20 26 26 20 28 66 6c 61 67 73         && (flags
ef80: 33 26 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d 3d  3&MEM_Cleared)==
ef90: 30 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  0.      ){.     
efa0: 20 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a 20     res = 0;  /* 
efb0: 52 65 73 75 6c 74 73 20 61 72 65 20 65 71 75 61  Results are equa
efc0: 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  l */.      }else
efd0: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20  {.        res = 
efe0: 31 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61  1;  /* Results a
eff0: 72 65 20 6e 6f 74 20 65 71 75 61 6c 20 2a 2f 0a  re not equal */.
f000: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
f010: 65 7b 0a 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  e{.      /* SQLI
f020: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 63 6c 65  TE_NULLEQ is cle
f030: 61 72 20 61 6e 64 20 61 74 20 6c 65 61 73 74 20  ar and at least 
f040: 6f 6e 65 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  one operand is N
f050: 55 4c 4c 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ULL,.      ** th
f060: 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  en the result is
f070: 20 61 6c 77 61 79 73 20 4e 55 4c 4c 2e 0a 20 20   always NULL..  
f080: 20 20 20 20 2a 2a 20 54 68 65 20 6a 75 6d 70 20      ** The jump 
f090: 69 73 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20  is taken if the 
f0a0: 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c  SQLITE_JUMPIFNUL
f0b0: 4c 20 62 69 74 20 69 73 20 73 65 74 2e 0a 20 20  L bit is set..  
f0c0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
f0d0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f0e0: 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20  E_STOREP2 ){.   
f0f0: 20 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65       pOut = &aMe
f100: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20  m[pOp->p2];.    
f110: 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c      MemSetTypeFl
f120: 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c  ag(pOut, MEM_Nul
f130: 6c 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49  l);.        REGI
f140: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
f150: 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  p2, pOut);.     
f160: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f170: 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
f180: 32 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66  2,3);.        if
f190: 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49  ( pOp->p5 & SQLI
f1a0: 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b  TE_JUMPIFNULL ){
f1b0: 0a 20 20 20 20 20 20 20 20 20 20 70 63 20 3d 20  .          pc = 
f1c0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 20  pOp->p2-1;.     
f1d0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
f1e0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
f1f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
f200: 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
f210: 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
f220: 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
f230: 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
f240: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
f250: 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
f260: 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
f270: 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
f280: 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d        if( (pIn1-
f290: 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e  >flags & (MEM_In
f2a0: 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
f2b0: 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
f2c0: 0a 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75  .        applyNu
f2d0: 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49  mericAffinity(pI
f2e0: 6e 31 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  n1,0);.      }. 
f2f0: 20 20 20 20 20 69 66 28 20 28 70 49 6e 33 2d 3e       if( (pIn3->
f300: 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 49 6e 74  flags & (MEM_Int
f310: 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74  |MEM_Real|MEM_St
f320: 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a  r))==MEM_Str ){.
f330: 20 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d          applyNum
f340: 65 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e  ericAffinity(pIn
f350: 33 2c 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  3,0);.      }.  
f360: 20 20 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69    }else if( affi
f370: 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46  nity==SQLITE_AFF
f380: 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 20 20 69  _TEXT ){.      i
f390: 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
f3a0: 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26  & MEM_Str)==0 &&
f3b0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
f3c0: 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
f3d0: 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  l))!=0 ){.      
f3e0: 20 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 31    testcase( pIn1
f3f0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
f400: 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73  t );.        tes
f410: 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61  tcase( pIn1->fla
f420: 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b  gs & MEM_Real );
f430: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
f440: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
f450: 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c  (pIn1, encoding,
f460: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73   1);.        tes
f470: 74 63 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d  tcase( (flags1&M
f480: 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31  EM_Dyn) != (pIn1
f490: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29  ->flags&MEM_Dyn)
f4a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67   );.        flag
f4b0: 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67  s1 = (pIn1->flag
f4c0: 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73  s & ~MEM_TypeMas
f4d0: 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d  k) | (flags1 & M
f4e0: 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20  EM_TypeMask);.  
f4f0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
f500: 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
f510: 45 4d 5f 53 74 72 29 3d 3d 30 20 26 26 20 28 70  EM_Str)==0 && (p
f520: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  In3->flags & (ME
f530: 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29  M_Int|MEM_Real))
f540: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 74  !=0 ){.        t
f550: 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e 66  estcase( pIn3->f
f560: 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29  lags & MEM_Int )
f570: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f580: 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  se( pIn3->flags 
f590: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20 20  & MEM_Real );.  
f5a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f5b0: 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70 49  eMemStringify(pI
f5c0: 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31 29  n3, encoding, 1)
f5d0: 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63 61  ;.        testca
f5e0: 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f  se( (flags3&MEM_
f5f0: 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d 3e 66  Dyn) != (pIn3->f
f600: 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29 3b  lags&MEM_Dyn) );
f610: 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 33 20  .        flags3 
f620: 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  = (pIn3->flags &
f630: 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20   ~MEM_TypeMask) 
f640: 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f  | (flags3 & MEM_
f650: 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20 20  TypeMask);.     
f660: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73   }.    }.    ass
f670: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
f680: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c 7c 20  ==P4_COLLSEQ || 
f690: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d 3d 30  pOp->p4.pColl==0
f6a0: 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 6e 31   );.    if( pIn1
f6b0: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
f6c0: 72 6f 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ro ){.      sqli
f6d0: 74 65 33 56 64 62 65 4d 65 6d 45 78 70 61 6e 64  te3VdbeMemExpand
f6e0: 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20 20 20  Blob(pIn1);.    
f6f0: 20 20 66 6c 61 67 73 31 20 26 3d 20 7e 4d 45 4d    flags1 &= ~MEM
f700: 5f 5a 65 72 6f 3b 0a 20 20 20 20 7d 0a 20 20 20  _Zero;.    }.   
f710: 20 69 66 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73   if( pIn3->flags
f720: 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
f730: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f740: 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70 49  MemExpandBlob(pI
f750: 6e 33 29 3b 0a 20 20 20 20 20 20 66 6c 61 67 73  n3);.      flags
f760: 33 20 26 3d 20 7e 4d 45 4d 5f 5a 65 72 6f 3b 0a  3 &= ~MEM_Zero;.
f770: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 64 62      }.    if( db
f780: 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29  ->mallocFailed )
f790: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
f7a0: 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 4d    res = sqlite3M
f7b0: 65 6d 43 6f 6d 70 61 72 65 28 70 49 6e 33 2c 20  emCompare(pIn3, 
f7c0: 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 34 2e 70 43  pIn1, pOp->p4.pC
f7d0: 6f 6c 6c 29 3b 0a 20 20 7d 0a 20 20 73 77 69 74  oll);.  }.  swit
f7e0: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
f7f0: 29 7b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 45  ){.    case OP_E
f800: 71 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3d  q:    res = res=
f810: 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
f820: 20 20 20 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20     case OP_Ne:  
f830: 20 20 72 65 73 20 3d 20 72 65 73 21 3d 30 3b 20    res = res!=0; 
f840: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
f850: 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20 72 65  ase OP_Lt:    re
f860: 73 20 3d 20 72 65 73 3c 30 3b 20 20 20 20 20 20  s = res<0;      
f870: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
f880: 4f 50 5f 4c 65 3a 20 20 20 20 72 65 73 20 3d 20  OP_Le:    res = 
f890: 72 65 73 3c 3d 30 3b 20 20 20 20 20 62 72 65 61  res<=0;     brea
f8a0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 47  k;.    case OP_G
f8b0: 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65 73 3e  t:    res = res>
f8c0: 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  0;      break;. 
f8d0: 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20 20 20     default:     
f8e0: 20 20 72 65 73 20 3d 20 72 65 73 3e 3d 30 3b 20    res = res>=0; 
f8f0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
f900: 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
f910: 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29  SQLITE_STOREP2 )
f920: 7b 0a 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d  {.    pOut = &aM
f930: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20  em[pOp->p2];.   
f940: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
f950: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
f960: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
f970: 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  Out, MEM_Int);. 
f980: 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72     pOut->u.i = r
f990: 65 73 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  es;.    REGISTER
f9a0: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20  _TRACE(pOp->p2, 
f9b0: 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
f9c0: 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
f9d0: 6b 65 6e 28 72 65 73 21 3d 30 2c 20 28 70 4f 70  ken(res!=0, (pOp
f9e0: 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55  ->p5 & SQLITE_NU
f9f0: 4c 4c 45 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20  LLEQ)?2:3);.    
fa00: 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
fa10: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
fa20: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 2f 2a 20  .    }.  }.  /* 
fa30: 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73  Undo any changes
fa40: 20 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66   made by applyAf
fa50: 66 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20  finity() to the 
fa60: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e  input registers.
fa70: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70   */.  assert( (p
fa80: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
fa90: 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31  _Dyn) == (flags1
faa0: 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20   & MEM_Dyn) );. 
fab0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66   pIn1->flags = f
fac0: 6c 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28  lags1;.  assert(
fad0: 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
fae0: 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
faf0: 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs3 & MEM_Dyn) )
fb00: 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  ;.  pIn3->flags 
fb10: 3d 20 66 6c 61 67 73 33 3b 0a 20 20 62 72 65 61  = flags3;.  brea
fb20: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
fb30: 20 50 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a   Permutation * *
fb40: 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65   * P4 *.**.** Se
fb50: 74 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f  t the permutatio
fb60: 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 4f 50  n used by the OP
fb70: 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f  _Compare operato
fb80: 72 20 74 6f 20 62 65 20 74 68 65 20 61 72 72 61  r to be the arra
fb90: 79 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73  y.** of integers
fba0: 20 69 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68   in P4..**.** Th
fbb0: 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73  e permutation is
fbc0: 20 6f 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69   only valid unti
fbd0: 6c 20 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f  l the next OP_Co
fbe0: 6d 70 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a  mpare that has.*
fbf0: 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  * the OPFLAG_PER
fc00: 4d 55 54 45 20 62 69 74 20 73 65 74 20 69 6e 20  MUTE bit set in 
fc10: 50 35 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68  P5. Typically th
fc20: 65 20 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e  e OP_Permutation
fc30: 20 73 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75   should .** occu
fc40: 72 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72  r immediately pr
fc50: 69 6f 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f  ior to the OP_Co
fc60: 6d 70 61 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  mpare..**.** The
fc70: 20 66 69 72 73 74 20 69 6e 74 65 67 65 72 20 69   first integer i
fc80: 6e 20 74 68 65 20 50 34 20 69 6e 74 65 67 65 72  n the P4 integer
fc90: 20 61 72 72 61 79 20 69 73 20 74 68 65 20 6c 65   array is the le
fca0: 6e 67 74 68 20 6f 66 20 74 68 65 20 61 72 72 61  ngth of the arra
fcb0: 79 0a 2a 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f  y.** and does no
fcc0: 74 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f 66  t become part of
fcd0: 20 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   the permutation
fce0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72  ..*/.case OP_Per
fcf0: 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73  mutation: {.  as
fd00: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
fd10: 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20 29  e==P4_INTARRAY )
fd20: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
fd30: 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61 50 65 72  >p4.ai );.  aPer
fd40: 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  mute = pOp->p4.a
fd50: 69 20 2b 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a  i + 1;.  break;.
fd60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
fd70: 6d 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50  mpare P1 P2 P3 P
fd80: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
fd90: 3a 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72  : r[P1@P3] <-> r
fda0: 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f  [P2@P3].**.** Co
fdb0: 6d 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72  mpare two vector
fdc0: 73 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69  s of registers i
fdd0: 6e 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50  n reg(P1)..reg(P
fde0: 31 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68  1+P3-1) (call th
fdf0: 69 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22  is.** vector "A"
fe00: 29 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29  ) and in reg(P2)
fe10: 2e 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28  ..reg(P2+P3-1) (
fe20: 22 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20  "B").  Save the 
fe30: 72 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65  result of.** the
fe40: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20   comparison for 
fe50: 75 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20  use by the next 
fe60: 4f 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74  OP_Jump instruct
fe70: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
fe80: 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52  s the OPFLAG_PER
fe90: 4d 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68  MUTE bit set, th
fea0: 65 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  en the order of 
feb0: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a  comparison is.**
fec0: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
fed0: 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
fee0: 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70  P_Permutation op
fef0: 65 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a  erator.  If the.
ff00: 2a 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  ** OPFLAG_PERMUT
ff10: 45 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20  E bit is clear, 
ff20: 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72  then register ar
ff30: 65 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65  e compared in se
ff40: 71 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65  quential.** orde
ff50: 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  r..**.** P4 is a
ff60: 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
ff70: 72 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20  re that defines 
ff80: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
ff90: 63 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20  ces and sort.** 
ffa0: 6f 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63  orders for the c
ffb0: 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20  omparison.  The 
ffc0: 70 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c  permutation appl
ffd0: 69 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73  ies to registers
ffe0: 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b  .** only.  The K
fff0: 65 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20  eyInfo elements 
10000 61 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74  are used sequent
10010 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  ially..**.** The
10020 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61   comparison is a
10030 20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e   sort comparison
10040 2c 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61  , so NULLs compa
10050 72 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c  re equal,.** NUL
10060 4c 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e  Ls are less than
10070 20 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72   numbers, number
10080 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10090 73 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20  strings,.** and 
100a0 73 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73  strings are less
100b0 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a   than blobs..*/.
100c0 63 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a  case OP_Compare:
100d0 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
100e0 74 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20  t i;.  int p1;. 
100f0 20 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74   int p2;.  const
10100 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e   KeyInfo *pKeyIn
10110 66 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20  fo;.  int idx;. 
10120 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b   CollSeq *pColl;
10130 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
10140 20 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65   sequence to use
10150 20 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f   on this term */
10160 0a 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20  .  int bRev;    
10170 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f        /* True fo
10180 72 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72  r DESCENDING sor
10190 74 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66  t order */..  if
101a0 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  ( (pOp->p5 & OPF
101b0 4c 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20  LAG_PERMUTE)==0 
101c0 29 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a  ) aPermute = 0;.
101d0 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
101e0 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d   pKeyInfo = pOp-
101f0 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20  >p4.pKeyInfo;.  
10200 61 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20  assert( n>0 );. 
10210 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
10220 6f 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70  o!=0 );.  p1 = p
10230 4f 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70  Op->p1;.  p2 = p
10240 4f 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49  Op->p2;.#if SQLI
10250 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61  TE_DEBUG.  if( a
10260 50 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69  Permute ){.    i
10270 6e 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20  nt k, mx = 0;.  
10280 20 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20    for(k=0; k<n; 
10290 6b 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74  k++) if( aPermut
102a0 65 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61  e[k]>mx ) mx = a
102b0 50 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20  Permute[k];.    
102c0 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
102d0 70 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p1+mx<=(p->nMem-
102e0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
102f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
10300 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
10310 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
10320 2b 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  +1 );.  }else{. 
10330 20 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20     assert( p1>0 
10340 26 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65  && p1+n<=(p->nMe
10350 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  m-p->nCursor)+1 
10360 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
10370 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d  2>0 && p2+n<=(p-
10380 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
10390 29 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  )+1 );.  }.#endi
103a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55  f /* SQLITE_DEBU
103b0 47 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20  G */.  for(i=0; 
103c0 69 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  i<n; i++){.    i
103d0 64 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20  dx = aPermute ? 
103e0 61 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b  aPermute[i] : i;
103f0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
10400 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31  IsValid(&aMem[p1
10410 2b 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73  +idx]) );.    as
10420 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
10430 28 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20  (&aMem[p2+idx]) 
10440 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
10450 54 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61  TRACE(p1+idx, &a
10460 4d 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p1+idx]);.  
10470 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
10480 28 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70  (p2+idx, &aMem[p
10490 32 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73  2+idx]);.    ass
104a0 65 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d  ert( i<pKeyInfo-
104b0 3e 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70  >nField );.    p
104c0 43 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d  Coll = pKeyInfo-
104d0 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62  >aColl[i];.    b
104e0 52 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  Rev = pKeyInfo->
104f0 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20  aSortOrder[i];. 
10500 20 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71     iCompare = sq
10510 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28  lite3MemCompare(
10520 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26  &aMem[p1+idx], &
10530 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43  aMem[p2+idx], pC
10540 6f 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43  oll);.    if( iC
10550 6f 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20  ompare ){.      
10560 69 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70  if( bRev ) iComp
10570 61 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b  are = -iCompare;
10580 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
10590 20 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75    }.  }.  aPermu
105a0 74 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b  te = 0;.  break;
105b0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a  .}../* Opcode: J
105c0 75 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ump P1 P2 P3 * *
105d0 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74  .**.** Jump to t
105e0 68 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61  he instruction a
105f0 74 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32  t address P1, P2
10600 2c 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e  , or P3 dependin
10610 67 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20  g on whether.** 
10620 69 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65  in the most rece
10630 6e 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e  nt OP_Compare in
10640 73 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31  struction the P1
10650 20 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73   vector was less
10660 20 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74   than.** equal t
10670 6f 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  o, or greater th
10680 61 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72  an the P2 vector
10690 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a  , respectively..
106a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a  */.case OP_Jump:
106b0 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
106c0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
106d0 69 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20  iCompare<0 ){.  
106e0 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d    pc = pOp->p1 -
106f0 20 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54   1;  VdbeBranchT
10700 61 6b 65 6e 28 30 2c 33 29 3b 0a 20 20 7d 65 6c  aken(0,3);.  }el
10710 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d  se if( iCompare=
10720 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
10730 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62  Op->p2 - 1;  Vdb
10740 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33  eBranchTaken(1,3
10750 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
10760 70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  pc = pOp->p3 - 1
10770 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
10780 65 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 62  en(2,3);.  }.  b
10790 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
107a0 64 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33  de: And P1 P2 P3
107b0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
107c0 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26  : r[P3]=(r[P1] &
107d0 26 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  & r[P2]).**.** T
107e0 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
107f0 41 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65  AND of the value
10800 73 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50  s in registers P
10810 31 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20  1 and P2 and.** 
10820 77 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74  write the result
10830 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
10840 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68  3..**.** If eith
10850 65 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30  er P1 or P2 is 0
10860 20 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68   (false) then th
10870 65 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76  e result is 0 ev
10880 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68  en if.** the oth
10890 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c  er input is NULL
108a0 2e 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72  .  A NULL and tr
108b0 75 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20  ue or two NULLs 
108c0 67 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f  give.** a NULL o
108d0 75 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  utput..*/./* Opc
108e0 6f 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33  ode: Or P1 P2 P3
108f0 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
10900 3a 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c  : r[P3]=(r[P1] |
10910 7c 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54  | r[P2]).**.** T
10920 61 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20  ake the logical 
10930 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
10940 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
10950 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
10960 6f 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69  ore the answer i
10970 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
10980 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50  *.** If either P
10990 31 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65  1 or P2 is nonze
109a0 72 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74  ro (true) then t
109b0 68 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28  he result is 1 (
109c0 74 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66  true).** even if
109d0 20 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74   the other input
109e0 20 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c   is NULL.  A NUL
109f0 4c 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74  L and false or t
10a00 77 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65  wo NULLs.** give
10a10 20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a   a NULL output..
10a20 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20  */.case OP_And: 
10a30 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10a40 73 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20  same as TK_AND, 
10a50 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
10a60 2f 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20  /.case OP_Or: { 
10a70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10a80 61 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e  ame as TK_OR, in
10a90 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
10aa0 20 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20    int v1;    /* 
10ab0 4c 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30  Left operand:  0
10ac0 3d 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45  ==FALSE, 1==TRUE
10ad0 2c 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20  , 2==UNKNOWN or 
10ae0 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32  NULL */.  int v2
10af0 3b 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70  ;    /* Right op
10b00 65 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c  erand: 0==FALSE,
10b10 20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b   1==TRUE, 2==UNK
10b20 4e 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  NOWN or NULL */.
10b30 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
10b40 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
10b50 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
10b60 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31  M_Null ){.    v1
10b70 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
10b80 20 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56     v1 = sqlite3V
10b90 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31  dbeIntValue(pIn1
10ba0 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32  )!=0;.  }.  pIn2
10bb0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
10bc0 5d 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66  ];.  if( pIn2->f
10bd0 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
10be0 29 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20  ){.    v2 = 2;. 
10bf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d   }else{.    v2 =
10c00 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
10c10 61 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20  alue(pIn2)!=0;. 
10c20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70   }.  if( pOp->op
10c30 63 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a  code==OP_And ){.
10c40 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
10c50 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61   unsigned char a
10c60 6e 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  nd_logic[] = { 0
10c70 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c  , 0, 0, 0, 1, 2,
10c80 20 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20   0, 2, 2 };.    
10c90 76 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76  v1 = and_logic[v
10ca0 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65  1*3+v2];.  }else
10cb0 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  {.    static con
10cc0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
10cd0 20 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20   or_logic[] = { 
10ce0 30 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31  0, 1, 2, 1, 1, 1
10cf0 2c 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20  , 2, 1, 2 };.   
10d00 20 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76   v1 = or_logic[v
10d10 31 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70  1*3+v2];.  }.  p
10d20 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10d30 3e 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d  >p3];.  if( v1==
10d40 32 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54  2 ){.    MemSetT
10d50 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
10d60 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65  M_Null);.  }else
10d70 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  {.    pOut->u.i 
10d80 3d 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74  = v1;.    MemSet
10d90 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
10da0 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62  EM_Int);.  }.  b
10db0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
10dc0 64 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20  de: Not P1 P2 * 
10dd0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10de0 20 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a   r[P2]= !r[P1].*
10df0 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
10e00 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
10e10 73 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f  ster P1 as a boo
10e20 6c 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f  lean value.  Sto
10e30 72 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61  re the.** boolea
10e40 6e 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20  n complement in 
10e50 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66  register P2.  If
10e60 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
10e70 67 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a  gister P1 is .**
10e80 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55   NULL, then a NU
10e90 4c 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  LL is stored in 
10ea0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  P2..*/.case OP_N
10eb0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
10ec0 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
10ed0 54 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  TK_NOT, in1, out
10ee0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
10ef0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
10f00 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10f10 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33  ->p2];.  sqlite3
10f20 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
10f30 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  Out);.  if( (pIn
10f40 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
10f50 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70  ull)==0 ){.    p
10f60 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
10f70 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
10f80 75 2e 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64  u.i = !sqlite3Vd
10f90 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10fa0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
10fb0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
10fc0 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Not P1 P2 * * *.
10fd0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
10fe0 31 5d 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  1]= ~r[P1].**.**
10ff0 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 63   Interpret the c
11000 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
11010 65 72 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65  er P1 as an inte
11020 67 65 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a  ger.  Store the.
11030 2a 2a 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65  ** ones-compleme
11040 6e 74 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c  nt of the P1 val
11050 75 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  ue into register
11060 20 50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64   P2.  If P1 hold
11070 73 0a 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e  s.** a NULL then
11080 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
11090 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
110a0 42 69 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20  BitNot: {       
110b0 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
110c0 20 54 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c   TK_BITNOT, in1,
110d0 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
110e0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
110f0 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
11100 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
11110 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
11120 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20  ll(pOut);.  if( 
11130 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11140 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
11150 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d     pOut->flags =
11160 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f   MEM_Int;.    pO
11170 75 74 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74  ut->u.i = ~sqlit
11180 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
11190 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  In1);.  }.  brea
111a0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
111b0 20 4f 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20   Once P1 P2 * * 
111c0 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68  *.**.** Check th
111d0 65 20 22 6f 6e 63 65 22 20 66 6c 61 67 20 6e 75  e "once" flag nu
111e0 6d 62 65 72 20 50 31 2e 20 49 66 20 69 74 20 69  mber P1. If it i
111f0 73 20 73 65 74 2c 20 6a 75 6d 70 20 74 6f 20 69  s set, jump to i
11200 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20 0a  nstruction P2. .
11210 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 73 65  ** Otherwise, se
11220 74 20 74 68 65 20 66 6c 61 67 20 61 6e 64 20 66  t the flag and f
11230 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
11240 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
11250 69 6f 6e 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72  ion..** In other
11260 20 77 6f 72 64 73 2c 20 74 68 69 73 20 6f 70 63   words, this opc
11270 6f 64 65 20 63 61 75 73 65 73 20 61 6c 6c 20 66  ode causes all f
11280 6f 6c 6c 6f 77 69 6e 67 20 6f 70 63 6f 64 65 73  ollowing opcodes
11290 20 75 70 20 74 68 72 6f 75 67 68 20 50 32 0a 2a   up through P2.*
112a0 2a 20 28 62 75 74 20 6e 6f 74 20 69 6e 63 6c 75  * (but not inclu
112b0 64 69 6e 67 20 50 32 29 20 74 6f 20 72 75 6e 20  ding P2) to run 
112c0 6a 75 73 74 20 6f 6e 63 65 20 61 6e 64 20 74 6f  just once and to
112d0 20 62 65 20 73 6b 69 70 70 65 64 20 6f 6e 20 73   be skipped on s
112e0 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 74 69 6d  ubsequent.** tim
112f0 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 6c  es through the l
11300 6f 6f 70 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 22  oop..**.** All "
11310 6f 6e 63 65 22 20 66 6c 61 67 73 20 61 72 65 20  once" flags are 
11320 69 6e 69 74 69 61 6c 6c 79 20 63 6c 65 61 72 65  initially cleare
11330 64 20 77 68 65 6e 65 76 65 72 20 61 20 70 72 65  d whenever a pre
11340 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a  pared statement.
11350 2a 2a 20 66 69 72 73 74 20 62 65 67 69 6e 73 20  ** first begins 
11360 74 6f 20 72 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20  to run..*/.case 
11370 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20 20 20 20  OP_Once: {      
11380 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
11390 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
113a0 3e 70 31 3c 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67  >p1<p->nOnceFlag
113b0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
113c0 54 61 6b 65 6e 28 70 2d 3e 61 4f 6e 63 65 46 6c  Taken(p->aOnceFl
113d0 61 67 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 2c 20  ag[pOp->p1]!=0, 
113e0 32 29 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 6e  2);.  if( p->aOn
113f0 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70 31 5d 20  ceFlag[pOp->p1] 
11400 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
11410 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a  >p2-1;.  }else{.
11420 20 20 20 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67      p->aOnceFlag
11430 5b 70 4f 70 2d 3e 70 31 5d 20 3d 20 31 3b 0a 20  [pOp->p1] = 1;. 
11440 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11450 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20 50 31 20  * Opcode: If P1 
11460 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  P2 P3 * *.**.** 
11470 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
11480 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11490 74 65 72 20 50 31 20 69 73 20 74 72 75 65 2e 20  ter P1 is true. 
114a0 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73   The value.** is
114b0 20 63 6f 6e 73 69 64 65 72 65 64 20 74 72 75 65   considered true
114c0 20 69 66 20 69 74 20 69 73 20 6e 75 6d 65 72 69   if it is numeri
114d0 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20  c and non-zero. 
114e0 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a   If the value.**
114f0 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74   in P1 is NULL t
11500 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  hen take the jum
11510 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66  p if and only if
11520 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e   P3 is non-zero.
11530 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
11540 66 4e 6f 74 20 50 31 20 50 32 20 50 33 20 2a 20  fNot P1 P2 P3 * 
11550 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  *.**.** Jump to 
11560 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
11570 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
11580 73 20 46 61 6c 73 65 2e 20 20 54 68 65 20 76 61  s False.  The va
11590 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
115a0 65 72 65 64 20 66 61 6c 73 65 20 69 66 20 69 74  ered false if it
115b0 20 68 61 73 20 61 20 6e 75 6d 65 72 69 63 20 76   has a numeric v
115c0 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49  alue of zero.  I
115d0 66 20 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69  f the value.** i
115e0 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65  n P1 is NULL the
115f0 6e 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20  n take the jump 
11600 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50  if and only if P
11610 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a  3 is non-zero..*
11620 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a 20 20 20  /.case OP_If:   
11630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
11640 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61   jump, in1 */.ca
11650 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20  se OP_IfNot: {  
11660 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
11670 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20  p, in1 */.  int 
11680 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  c;.  pIn1 = &aMe
11690 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
116a0 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20  ( pIn1->flags & 
116b0 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20  MEM_Null ){.    
116c0 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d  c = pOp->p3;.  }
116d0 65 6c 73 65 7b 0a 23 69 66 64 65 66 20 53 51 4c  else{.#ifdef SQL
116e0 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
116f0 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20  G_POINT.    c = 
11700 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
11710 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65  lue(pIn1)!=0;.#e
11720 6c 73 65 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  lse.    c = sqli
11730 74 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65  te3VdbeRealValue
11740 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e  (pIn1)!=0.0;.#en
11750 64 69 66 0a 20 20 20 20 69 66 28 20 70 4f 70 2d  dif.    if( pOp-
11760 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f  >opcode==OP_IfNo
11770 74 20 29 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a  t ) c = !c;.  }.
11780 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
11790 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66  n(c!=0, 2);.  if
117a0 28 20 63 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  ( c ){.    pc = 
117b0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
117c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
117d0 63 6f 64 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20  code: IsNull P1 
117e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
117f0 70 73 69 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d  psis:  if r[P1]=
11800 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a  =NULL goto P2.**
11810 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
11820 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
11830 65 67 69 73 74 65 72 20 50 31 20 69 73 20 4e 55  egister P1 is NU
11840 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  LL..*/.case OP_I
11850 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20  sNull: {        
11860 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
11870 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20  K_ISNULL, jump, 
11880 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
11890 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
118a0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
118b0 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  n( (pIn1->flags 
118c0 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20  & MEM_Null)!=0, 
118d0 32 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  2);.  if( (pIn1-
118e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
118f0 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20 70 63 20  l)!=0 ){.    pc 
11900 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20  = pOp->p2 - 1;. 
11910 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
11920 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c  * Opcode: NotNul
11930 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  l P1 P2 * * *.**
11940 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
11950 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50  P1]!=NULL goto P
11960 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20  2.**.** Jump to 
11970 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  P2 if the value 
11980 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69  in register P1 i
11990 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f  s not NULL.  .*/
119a0 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  .case OP_NotNull
119b0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
119c0 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54  * same as TK_NOT
119d0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
119e0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
119f0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
11a00 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
11a10 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
11a20 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a  M_Null)==0, 2);.
11a30 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
11a40 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d  gs & MEM_Null)==
11a50 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
11a60 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20  p->p2 - 1;.  }. 
11a70 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
11a80 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20  code: Column P1 
11a90 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
11aa0 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d  ynopsis:  r[P3]=
11ab0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
11ac0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
11ad0 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
11ae0 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
11af0 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
11b00 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
11b10 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
11b20 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
11b30 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
11b40 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
11b50 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
11b60 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
11b70 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
11b80 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
11b90 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
11ba0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
11bb0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
11bc0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
11bd0 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
11be0 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
11bf0 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
11c00 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
11c10 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
11c20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
11c30 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
11c40 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
11c50 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
11c60 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
11c70 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
11c80 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
11c90 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
11ca0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
11cb0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
11cc0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
11cd0 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
11ce0 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
11cf0 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
11d00 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
11d10 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
11d20 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
11d30 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
11d40 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
11d50 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
11d60 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
11d70 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
11d80 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
11d90 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
11da0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
11db0 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
11dc0 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
11dd0 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
11de0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
11df0 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
11e00 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
11e10 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
11e20 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
11e30 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
11e40 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
11e50 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
11e60 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
11e70 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
11e80 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
11e90 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
11ea0 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
11eb0 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
11ec0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
11ed0 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
11ee0 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
11ef0 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
11f00 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
11f10 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
11f20 20 20 69 36 34 20 70 61 79 6c 6f 61 64 53 69 7a    i64 payloadSiz
11f30 65 36 34 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f  e64; /* Number o
11f40 66 20 62 79 74 65 73 20 69 6e 20 74 68 65 20 72  f bytes in the r
11f50 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70  ecord */.  int p
11f60 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
11f70 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
11f80 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
11f90 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
11fa0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
11fb0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
11fc0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
11fd0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
11fe0 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
11ff0 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
12000 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
12010 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
12020 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
12030 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
12040 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
12050 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
12060 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
12070 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
12080 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
12090 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
120a0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
120b0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
120c0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
120d0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
120e0 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
120f0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
12100 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
12110 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
12120 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
12130 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
12140 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
12150 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
12160 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
12170 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
12180 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
12190 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
121a0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
121b0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
121c0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
121d0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
121e0 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
121f0 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
12200 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
12210 2f 0a 20 20 75 33 32 20 73 7a 46 69 65 6c 64 3b  /.  u32 szField;
12220 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
12230 20 6f 66 20 62 79 74 65 73 20 69 6e 20 74 68 65   of bytes in the
12240 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61 20 66 69   content of a fi
12250 65 6c 64 20 2a 2f 0a 20 20 75 33 32 20 61 76 61  eld */.  u32 ava
12260 69 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  il;         /* N
12270 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
12280 66 20 61 76 61 69 6c 61 62 6c 65 20 64 61 74 61  f available data
12290 20 2a 2f 0a 20 20 75 33 32 20 74 3b 20 20 20 20   */.  u32 t;    
122a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 74 79           /* A ty
122b0 70 65 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65  pe code from the
122c0 20 72 65 63 6f 72 64 20 68 65 61 64 65 72 20 2a   record header *
122d0 2f 0a 20 20 75 31 36 20 66 78 3b 20 20 20 20 20  /.  u16 fx;     
122e0 20 20 20 20 20 20 20 2f 2a 20 70 44 65 73 74 2d         /* pDest-
122f0 3e 66 6c 61 67 73 20 76 61 6c 75 65 20 2a 2f 0a  >flags value */.
12300 20 20 4d 65 6d 20 2a 70 52 65 67 3b 20 20 20 20    Mem *pReg;    
12310 20 20 20 20 20 2f 2a 20 50 73 65 75 64 6f 54 61       /* PseudoTa
12320 62 6c 65 20 69 6e 70 75 74 20 72 65 67 69 73 74  ble input regist
12330 65 72 20 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d  er */..  pC = p-
12340 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
12350 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
12360 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 75  ..  /* If the cu
12370 72 73 6f 72 20 63 61 63 68 65 20 69 73 20 73 74  rsor cache is st
12380 61 6c 65 2c 20 62 72 69 6e 67 20 69 74 20 75 70  ale, bring it up
12390 2d 74 6f 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63  -to-date */.  rc
123a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
123b0 72 73 6f 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20  rsorMoveto(&pC, 
123c0 26 70 32 29 3b 0a 0a 20 20 61 73 73 65 72 74 28  &p2);..  assert(
123d0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
123e0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  p->p3<=(p->nMem-
123f0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
12400 20 70 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70   pDest = &aMem[p
12410 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p3];.  memAb
12420 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
12430 44 65 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28  Dest);.  assert(
12440 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
12450 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
12460 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
12470 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
12480 28 20 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20  ( p2<pC->nField 
12490 29 3b 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70  );.  aOffset = p
124a0 43 2d 3e 61 4f 66 66 73 65 74 3b 0a 23 69 66 6e  C->aOffset;.#ifn
124b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
124c0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 61  VIRTUALTABLE.  a
124d0 73 73 65 72 74 28 20 70 43 2d 3e 70 56 74 61 62  ssert( pC->pVtab
124e0 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20 2f 2a 20  Cursor==0 ); /* 
124f0 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76 65 72 20  OP_Column never 
12500 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72 74 75 61  called on virtua
12510 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65 6e 64 69  l table */.#endi
12520 66 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  f.  pCrsr = pC->
12530 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
12540 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70  t( pCrsr!=0 || p
12550 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  C->pseudoTableRe
12560 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72 73 72 20  g>0 ); /* pCrsr 
12570 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64 6f 54 61  NULL on PseudoTa
12580 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73 65 72 74  bles */.  assert
12590 28 20 70 43 72 73 72 21 3d 30 20 7c 7c 20 70 43  ( pCrsr!=0 || pC
125a0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20 20 20 20  ->nullRow );    
125b0 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e 6e 75 6c        /* pC->nul
125c0 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64 6f 54 61  lRow on PseudoTa
125d0 62 6c 65 73 20 2a 2f 0a 0a 20 20 69 66 28 20 72  bles */..  if( r
125e0 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
125f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
12600 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
12610 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
12620 29 7b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e  ){.    if( pC->n
12630 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20  ullRow ){.      
12640 69 66 28 20 70 43 72 73 72 3d 3d 30 20 29 7b 0a  if( pCrsr==0 ){.
12650 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12660 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
12670 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  eg>0 );.        
12680 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
12690 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 5d  >pseudoTableReg]
126a0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
126b0 28 20 70 52 65 67 2d 3e 66 6c 61 67 73 20 26 20  ( pReg->flags & 
126c0 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20  MEM_Blob );.    
126d0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
126e0 73 56 61 6c 69 64 28 70 52 65 67 29 20 29 3b 0a  sValid(pReg) );.
126f0 20 20 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c          pC->payl
12700 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d 3e 73 7a  oadSize = pC->sz
12710 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d 20 70 52  Row = avail = pR
12720 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20 20 20 70  eg->n;.        p
12730 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38 2a 29 70  C->aRow = (u8*)p
12740 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20 20 7d 65  Reg->z;.      }e
12750 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
12760 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75  ite3VdbeMemSetNu
12770 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20 20 20  ll(pDest);.     
12780 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12790 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20  n_out;.      }. 
127a0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
127b0 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b  assert( pCrsr );
127c0 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 69  .      if( pC->i
127d0 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a 20 20 20  sTable==0 ){.   
127e0 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
127f0 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
12800 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
12810 0a 20 20 20 20 20 20 20 20 56 56 41 5f 4f 4e 4c  .        VVA_ONL
12820 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
12830 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
12840 72 2c 20 26 70 61 79 6c 6f 61 64 53 69 7a 65 36  r, &payloadSize6
12850 34 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  4);.        asse
12860 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
12870 4b 20 29 3b 20 2f 2a 20 54 72 75 65 20 62 65 63  K ); /* True bec
12880 61 75 73 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f  ause of CursorMo
12890 76 65 74 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76  veto() call abov
128a0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 2f 2a 20  e */.        /* 
128b0 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 72 73  sqlite3BtreePars
128c0 65 43 65 6c 6c 50 74 72 28 29 20 75 73 65 73 20  eCellPtr() uses 
128d0 67 65 74 56 61 72 69 6e 74 33 32 28 29 20 74 6f  getVarint32() to
128e0 20 65 78 74 72 61 63 74 20 74 68 65 0a 20 20 20   extract the.   
128f0 20 20 20 20 20 2a 2a 20 70 61 79 6c 6f 61 64 20       ** payload 
12900 73 69 7a 65 2c 20 73 6f 20 69 74 20 69 73 20 69  size, so it is i
12910 6d 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 70 61  mpossible for pa
12920 79 6c 6f 61 64 53 69 7a 65 36 34 20 74 6f 20 62  yloadSize64 to b
12930 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 6c 61 72  e.        ** lar
12940 67 65 72 20 74 68 61 6e 20 33 32 20 62 69 74 73  ger than 32 bits
12950 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73  . */.        ass
12960 65 72 74 28 20 28 70 61 79 6c 6f 61 64 53 69 7a  ert( (payloadSiz
12970 65 36 34 20 26 20 53 51 4c 49 54 45 5f 4d 41 58  e64 & SQLITE_MAX
12980 5f 55 33 32 29 3d 3d 28 75 36 34 29 70 61 79 6c  _U32)==(u64)payl
12990 6f 61 64 53 69 7a 65 36 34 20 29 3b 0a 20 20 20  oadSize64 );.   
129a0 20 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20       pC->aRow = 
129b0 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 46  sqlite3BtreeKeyF
129c0 65 74 63 68 28 70 43 72 73 72 2c 20 26 61 76 61  etch(pCrsr, &ava
129d0 69 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d  il);.        pC-
129e0 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 28  >payloadSize = (
129f0 75 33 32 29 70 61 79 6c 6f 61 64 53 69 7a 65 36  u32)payloadSize6
12a00 34 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  4;.      }else{.
12a10 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12a20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73  sqlite3BtreeCurs
12a30 6f 72 49 73 56 61 6c 69 64 28 70 43 72 73 72 29  orIsValid(pCrsr)
12a40 20 29 3b 0a 20 20 20 20 20 20 20 20 56 56 41 5f   );.        VVA_
12a50 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74  ONLY(rc =) sqlit
12a60 65 33 42 74 72 65 65 44 61 74 61 53 69 7a 65 28  e3BtreeDataSize(
12a70 70 43 72 73 72 2c 20 26 70 43 2d 3e 70 61 79 6c  pCrsr, &pC->payl
12a80 6f 61 64 53 69 7a 65 29 3b 0a 20 20 20 20 20 20  oadSize);.      
12a90 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12aa0 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20  LITE_OK );   /* 
12ab0 44 61 74 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f  DataSize() canno
12ac0 74 20 66 61 69 6c 20 2a 2f 0a 20 20 20 20 20 20  t fail */.      
12ad0 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c    pC->aRow = sql
12ae0 69 74 65 33 42 74 72 65 65 44 61 74 61 46 65 74  ite3BtreeDataFet
12af0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
12b00 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
12b10 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c 3d   assert( avail<=
12b20 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61 78  65536 );  /* Max
12b30 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20 69  imum page size i
12b40 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20 20  s 64KiB */.     
12b50 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12b60 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76 61  Size <= (u32)ava
12b70 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70 43  il ){.        pC
12b80 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70 61  ->szRow = pC->pa
12b90 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20 20  yloadSize;.     
12ba0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12bb0 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69  pC->szRow = avai
12bc0 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  l;.      }.     
12bd0 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64   if( pC->payload
12be0 53 69 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e  Size > (u32)db->
12bf0 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
12c00 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
12c10 20 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f         goto too_
12c20 62 69 67 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  big;.      }.   
12c30 20 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65   }.    pC->cache
12c40 53 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68  Status = p->cach
12c50 65 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48  eCtr;.    pC->iH
12c60 64 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61  drOffset = getVa
12c70 72 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c  rint32(pC->aRow,
12c80 20 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43   offset);.    pC
12c90 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30  ->nHdrParsed = 0
12ca0 3b 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d  ;.    aOffset[0]
12cb0 20 3d 20 6f 66 66 73 65 74 3b 0a 0a 20 20 20 20   = offset;..    
12cc0 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63  /* Make sure a c
12cd0 6f 72 72 75 70 74 20 64 61 74 61 62 61 73 65 20  orrupt database 
12ce0 68 61 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73  has not given us
12cf0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61   an oversize hea
12d00 64 65 72 2e 0a 20 20 20 20 2a 2a 20 44 6f 20 74  der..    ** Do t
12d10 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
12d20 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
12d30 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
12d40 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 79      **.    ** Ty
12d50 70 65 20 65 6e 74 72 69 65 73 20 63 61 6e 20 62  pe entries can b
12d60 65 20 62 65 74 77 65 65 6e 20 31 20 61 6e 64 20  e between 1 and 
12d70 35 20 62 79 74 65 73 20 65 61 63 68 2e 20 20 42  5 bytes each.  B
12d80 75 74 20 34 20 61 6e 64 20 35 20 62 79 74 65 0a  ut 4 and 5 byte.
12d90 20 20 20 20 2a 2a 20 74 79 70 65 73 20 75 73 65      ** types use
12da0 20 73 6f 20 6d 75 63 68 20 64 61 74 61 20 73 70   so much data sp
12db0 61 63 65 20 74 68 61 74 20 74 68 65 72 65 20 63  ace that there c
12dc0 61 6e 20 6f 6e 6c 79 20 62 65 20 34 30 39 36 20  an only be 4096 
12dd0 61 6e 64 20 33 32 20 6f 66 0a 20 20 20 20 2a 2a  and 32 of.    **
12de0 20 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76   them, respectiv
12df0 65 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78  ely.  So the max
12e00 69 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67  imum header leng
12e10 74 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20  th results from 
12e20 61 0a 20 20 20 20 2a 2a 20 33 2d 62 79 74 65 20  a.    ** 3-byte 
12e30 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f 66  type for each of
12e40 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20   the maximum of 
12e50 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70 6c  32768 columns pl
12e60 75 73 20 74 68 72 65 65 0a 20 20 20 20 2a 2a 20  us three.    ** 
12e70 65 78 74 72 61 20 62 79 74 65 73 20 66 6f 72 20  extra bytes for 
12e80 74 68 65 20 68 65 61 64 65 72 20 6c 65 6e 67 74  the header lengt
12e90 68 20 69 74 73 65 6c 66 2e 20 20 33 32 37 36 38  h itself.  32768
12ea0 2a 33 20 2b 20 33 20 3d 20 39 38 33 30 37 2e 0a  *3 + 3 = 98307..
12eb0 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 6f      */.    if( o
12ec0 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
12ed0 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
12ee0 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
12ef0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43     rc = SQLITE_C
12f00 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20  ORRUPT_BKPT;.   
12f10 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
12f20 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a  n_error;.    }..
12f30 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f 66      if( avail<of
12f40 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f 2a  fset ){.      /*
12f50 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20 6e   pC->aRow does n
12f60 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64 20  ot have to hold 
12f70 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c 20  the entire row, 
12f80 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20 6c  but it does at l
12f90 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e 65  east.      ** ne
12fa0 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20  ed to cover the 
12fb0 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72 65  header of the re
12fc0 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61 52  cord.  If pC->aR
12fd0 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  ow does not cont
12fe0 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68 65  ain.      ** the
12ff0 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65 72   complete header
13000 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74 6f  , then set it to
13010 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20 74   zero, forcing t
13020 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65 0a  he header to be.
13030 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69 63        ** dynamic
13040 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20  ally allocated. 
13050 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f  */.      pC->aRo
13060 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43 2d  w = 0;.      pC-
13070 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20  >szRow = 0;.    
13080 7d 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 66 6f  }..    /* The fo
13090 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73 20  llowing goto is 
130a0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2e  an optimization.
130b0 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69 74    It can be omit
130c0 74 65 64 20 61 6e 64 0a 20 20 20 20 2a 2a 20 65  ted and.    ** e
130d0 76 65 72 79 74 68 69 6e 67 20 77 69 6c 6c 20 73  verything will s
130e0 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42 75 74 20  till work.  But 
130f0 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20 6d 65 61  OP_Column is mea
13100 73 75 72 61 62 6c 79 20 66 61 73 74 65 72 0a 20  surably faster. 
13110 20 20 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e     ** by skippin
13120 67 20 74 68 65 20 73 75 62 73 65 71 75 65 6e 74  g the subsequent
13130 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68   conditional, wh
13140 69 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 72  ich is always tr
13150 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  ue..    */.    a
13160 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72 50  ssert( pC->nHdrP
13170 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20 20  arsed<=p2 );    
13180 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69 6f       /* Conditio
13190 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a 20  nal skipped */. 
131a0 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
131b0 6e 5f 72 65 61 64 5f 68 65 61 64 65 72 3b 0a 20  n_read_header;. 
131c0 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75   }..  /* Make su
131d0 72 65 20 61 74 20 6c 65 61 73 74 20 74 68 65 20  re at least the 
131e0 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74 72 69  first p2+1 entri
131f0 65 73 20 6f 66 20 74 68 65 20 68 65 61 64 65 72  es of the header
13200 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a 2a 20   have been.  ** 
13210 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c 69 64  parsed and valid
13220 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
13230 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61 6e 64  in aOffset[] and
13240 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a 20 20   pC->aType[]..  
13250 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  */.  if( pC->nHd
13260 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
13270 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69     /* If there i
13280 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20 61 76  s more header av
13290 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61 72 73  ailable for pars
132a0 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63 6f 72  ing in the recor
132b0 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20 74 6f  d, try.    ** to
132c0 20 65 78 74 72 61 63 74 20 61 64 64 69 74 69 6f   extract additio
132d0 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20 74 68  nal fields up th
132e0 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31 2d 74  rough the p2+1-t
132f0 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a 2f 0a  h field .    */.
13300 20 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65      op_column_re
13310 61 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 69  ad_header:.    i
13320 66 28 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65  f( pC->iHdrOffse
13330 74 3c 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a  t<aOffset[0] ){.
13340 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
13350 72 65 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20  re zData points 
13360 74 6f 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65  to enough of the
13370 20 72 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72   record to cover
13380 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
13390 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52        if( pC->aR
133a0 6f 77 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ow==0 ){.       
133b0 20 6d 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30   memset(&sMem, 0
133c0 2c 20 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b  , sizeof(sMem));
133d0 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
133e0 6c 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d  lite3VdbeMemFrom
133f0 42 74 72 65 65 28 70 43 72 73 72 2c 20 30 2c 20  Btree(pCrsr, 0, 
13400 61 4f 66 66 73 65 74 5b 30 5d 2c 20 0a 20 20 20  aOffset[0], .   
13410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13430 20 20 21 70 43 2d 3e 69 73 54 61 62 6c 65 2c 20    !pC->isTable, 
13440 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20  &sMem);.        
13450 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
13460 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67  K ){.          g
13470 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72  oto op_column_er
13480 72 6f 72 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ror;.        }. 
13490 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20 28         zData = (
134a0 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20 20  u8*)sMem.z;.    
134b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
134c0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
134d0 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  w;.      }.  .  
134e0 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20 70      /* Fill in p
134f0 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64 20  C->aType[i] and 
13500 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75 65  aOffset[i] value
13510 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  s through the p2
13520 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20 20  -th field. */.  
13530 20 20 20 20 69 20 3d 20 70 43 2d 3e 6e 48 64 72      i = pC->nHdr
13540 50 61 72 73 65 64 3b 0a 20 20 20 20 20 20 6f 66  Parsed;.      of
13550 66 73 65 74 20 3d 20 61 4f 66 66 73 65 74 5b 69  fset = aOffset[i
13560 5d 3b 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20  ];.      zHdr = 
13570 7a 44 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72  zData + pC->iHdr
13580 4f 66 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45  Offset;.      zE
13590 6e 64 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20  ndHdr = zData + 
135a0 61 4f 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20  aOffset[0];.    
135b0 20 20 61 73 73 65 72 74 28 20 69 3c 3d 70 32 20    assert( i<=p2 
135c0 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20  && zHdr<zEndHdr 
135d0 29 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  );.      do{.   
135e0 20 20 20 20 20 69 66 28 20 7a 48 64 72 5b 30 5d       if( zHdr[0]
135f0 3c 30 78 38 30 20 29 7b 0a 20 20 20 20 20 20 20  <0x80 ){.       
13600 20 20 20 74 20 3d 20 7a 48 64 72 5b 30 5d 3b 0a     t = zHdr[0];.
13610 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b            zHdr++
13620 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
13630 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
13640 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
13650 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
13660 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
13670 20 20 20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20     pC->aType[i] 
13680 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a 46  = t;.        szF
13690 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56 64  ield = sqlite3Vd
136a0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
136b0 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66 73  t);.        offs
136c0 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a 20  et += szField;. 
136d0 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73 65         if( offse
136e0 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f 2a  t<szField ){  /*
136f0 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74 20   True if offset 
13700 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20 20  overflows */.   
13710 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26 7a         zHdr = &z
13720 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20 46  EndHdr[1];  /* F
13730 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f 52  orces SQLITE_COR
13740 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c 6f  RUPT return belo
13750 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 62  w */.          b
13760 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
13770 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20 20          i++;.   
13780 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d 20       aOffset[i] 
13790 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20 20  = offset;.      
137a0 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26 26  }while( i<=p2 &&
137b0 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29 3b   zHdr<zEndHdr );
137c0 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50  .      pC->nHdrP
137d0 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20  arsed = i;.     
137e0 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20   pC->iHdrOffset 
137f0 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a  = (u32)(zHdr - z
13800 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28  Data);.      if(
13810 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a   pC->aRow==0 ){.
13820 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13830 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73  dbeMemRelease(&s
13840 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73 4d  Mem);.        sM
13850 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  em.flags = MEM_N
13860 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a  ull;.      }.  .
13870 20 20 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63        /* The rec
13880 6f 72 64 20 69 73 20 63 6f 72 72 75 70 74 20 69  ord is corrupt i
13890 66 20 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c  f any of the fol
138a0 6c 6f 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a  lowing are true:
138b0 0a 20 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68  .      ** (1) th
138c0 65 20 62 79 74 65 73 20 6f 66 20 74 68 65 20 68  e bytes of the h
138d0 65 61 64 65 72 20 65 78 74 65 6e 64 20 70 61 73  eader extend pas
138e0 74 20 74 68 65 20 64 65 63 6c 61 72 65 64 20 68  t the declared h
138f0 65 61 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20  eader size.     
13900 20 2a 2a 20 20 20 20 20 20 20 20 20 20 28 7a 48   **          (zH
13910 64 72 3e 7a 45 6e 64 48 64 72 29 0a 20 20 20 20  dr>zEndHdr).    
13920 20 20 2a 2a 20 28 32 29 20 74 68 65 20 65 6e 74    ** (2) the ent
13930 69 72 65 20 68 65 61 64 65 72 20 77 61 73 20 75  ire header was u
13940 73 65 64 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20  sed but not all 
13950 64 61 74 61 20 77 61 73 20 75 73 65 64 0a 20 20  data was used.  
13960 20 20 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20      **          
13970 28 7a 48 64 72 3d 3d 7a 45 6e 64 48 64 72 20 26  (zHdr==zEndHdr &
13980 26 20 6f 66 66 73 65 74 21 3d 70 43 2d 3e 70 61  & offset!=pC->pa
13990 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
139a0 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
139b0 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
139c0 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
139d0 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
139e0 2e 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ..      **      
139f0 20 20 20 20 28 6f 66 66 73 65 74 20 3e 20 70 43      (offset > pC
13a00 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20  ->payloadSize). 
13a10 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66       */.      if
13a20 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64 48 64 72  ( (zHdr>=zEndHdr
13a30 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e 64 48 64   && (zHdr>zEndHd
13a40 72 20 7c 7c 20 6f 66 66 73 65 74 21 3d 70 43 2d  r || offset!=pC-
13a50 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 29 0a 20  >payloadSize)). 
13a60 20 20 20 20 20 20 7c 7c 20 28 6f 66 66 73 65 74        || (offset
13a70 20 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69   > pC->payloadSi
13a80 7a 65 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  ze).      ){.   
13a90 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
13aa0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
13ab0 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63         goto op_c
13ac0 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20  olumn_error;.   
13ad0 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
13ae0 2f 2a 20 49 66 20 61 66 74 65 72 20 74 72 79 69  /* If after tryi
13af0 6e 67 20 74 6f 20 65 78 74 72 61 20 6e 65 77 20  ng to extra new 
13b00 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
13b10 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
13b20 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
13b30 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
13b40 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
13b50 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
13b60 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
13b70 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
13b80 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
13b90 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
13ba0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
13bb0 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
13bc0 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
13bd0 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
13be0 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
13bf0 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
13c00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
13c10 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
13c20 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
13c30 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
13c40 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
13c50 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13c60 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
13c70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
13c80 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13c90 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
13ca0 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
13cb0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
13cc0 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
13cd0 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
13ce0 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
13cf0 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
13d00 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
13d10 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
13d20 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
13d30 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
13d40 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
13d50 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
13d60 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
13d70 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
13d80 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
13d90 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
13da0 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
13db0 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
13dc0 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
13dd0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
13de0 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20  etNull(pDest);. 
13df0 20 74 20 3d 20 70 43 2d 3e 61 54 79 70 65 5b 70   t = pC->aType[p
13e00 32 5d 3b 0a 20 20 69 66 28 20 70 43 2d 3e 73 7a  2];.  if( pC->sz
13e10 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70 32 2b  Row>=aOffset[p2+
13e20 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69  1] ){.    /* Thi
13e30 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  s is the common 
13e40 63 61 73 65 20 77 68 65 72 65 20 74 68 65 20 64  case where the d
13e50 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74 20 66  esired content f
13e60 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69 67 69  its on the origi
13e70 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67 65 20  nal.    ** page 
13e80 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f 6e 74  - where the cont
13e90 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20 61 6e  ent is not on an
13ea0 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 20 2a   overflow page *
13eb0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
13ec0 65 53 65 72 69 61 6c 47 65 74 28 70 43 2d 3e 61  eSerialGet(pC->a
13ed0 52 6f 77 2b 61 4f 66 66 73 65 74 5b 70 32 5d 2c  Row+aOffset[p2],
13ee0 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65   t, pDest);.  }e
13ef0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73  lse{.    /* This
13f00 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20   branch happens 
13f10 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e  only when conten
13f20 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77  t is on overflow
13f30 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20 69 66   pages */.    if
13f40 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f  ( ((pOp->p5 & (O
13f50 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 7c  PFLAG_LENGTHARG|
13f60 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
13f70 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20 20  ))!=0.          
13f80 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28 74  && ((t>=12 && (t
13f90 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70 2d  &1)==0) || (pOp-
13fa0 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59 50  >p5 & OPFLAG_TYP
13fb0 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20 20  EOFARG)!=0)).   
13fc0 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c 69    || (len = sqli
13fd0 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70  te3VdbeSerialTyp
13fe0 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20 20  eLen(t))==0.    
13ff0 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74  ){.      /* Cont
14000 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61 6e  ent is irrelevan
14010 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 20  t for.      **  
14020 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f 66 28    1. the typeof(
14030 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20 20 20  ) function,.    
14040 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65 20 6c    **    2. the l
14050 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74 69 6f  ength(X) functio
14060 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c 6f 62  n if X is a blob
14070 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 20  , and.      **  
14080 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f 6e 74    3. if the cont
14090 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20 7a 65  ent length is ze
140a0 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53 6f 20  ro..      ** So 
140b0 77 65 20 6d 69 67 68 74 20 61 73 20 77 65 6c 6c  we might as well
140c0 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e 74 65   use bogus conte
140d0 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e 20 72  nt rather than r
140e0 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  eading.      ** 
140f0 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64 69 73  content from dis
14100 6b 2e 20 20 4e 55 4c 4c 20 77 69 6c 6c 20 77 6f  k.  NULL will wo
14110 72 6b 20 66 6f 72 20 74 68 65 20 76 61 6c 75 65  rk for the value
14120 20 66 6f 72 20 73 74 72 69 6e 67 73 0a 20 20 20   for strings.   
14130 20 20 20 2a 2a 20 61 6e 64 20 62 6c 6f 62 73 20     ** and blobs 
14140 61 6e 64 20 77 68 61 74 65 76 65 72 20 69 73 20  and whatever is 
14150 69 6e 20 74 68 65 20 70 61 79 6c 6f 61 64 53 69  in the payloadSi
14160 7a 65 36 34 20 76 61 72 69 61 62 6c 65 0a 20 20  ze64 variable.  
14170 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77 6f 72 6b      ** will work
14180 20 66 6f 72 20 65 76 65 72 79 74 68 69 6e 67 20   for everything 
14190 65 6c 73 65 2e 20 2a 2f 0a 20 20 20 20 20 20 73  else. */.      s
141a0 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c  qlite3VdbeSerial
141b0 47 65 74 28 74 3c 3d 31 33 20 3f 20 28 75 38 2a  Get(t<=13 ? (u8*
141c0 29 26 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  )&payloadSize64 
141d0 3a 20 30 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  : 0, t, pDest);.
141e0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
141f0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
14200 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
14210 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  rsr, aOffset[p2]
14220 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73 54 61  , len, !pC->isTa
14230 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ble,.           
14240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14250 20 20 20 20 20 20 20 20 70 44 65 73 74 29 3b 0a          pDest);.
14260 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
14270 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
14280 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d     goto op_colum
14290 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  n_error;.      }
142a0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
142b0 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f 6e  beSerialGet((con
142c0 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a 2c  st u8*)pDest->z,
142d0 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20 20   t, pDest);.    
142e0 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 26    pDest->flags &
142f0 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20 20  = ~MEM_Ephem;.  
14300 20 20 7d 0a 20 20 7d 0a 20 20 70 44 65 73 74 2d    }.  }.  pDest-
14310 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
14320 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3a  ..op_column_out:
14330 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63 6f 6c  .  /* If the col
14340 75 6d 6e 20 76 61 6c 75 65 20 69 73 20 61 6e 20  umn value is an 
14350 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e 67  ephemeral string
14360 2c 20 67 6f 20 61 68 65 61 64 20 61 6e 64 20 70  , go ahead and p
14370 65 72 73 69 73 74 0a 20 20 2a 2a 20 74 68 61 74  ersist.  ** that
14380 20 73 74 72 69 6e 67 20 69 6e 20 63 61 73 65 20   string in case 
14390 74 68 65 20 63 75 72 73 6f 72 20 6d 6f 76 65 73  the cursor moves
143a0 20 62 65 66 6f 72 65 20 74 68 65 20 63 6f 6c 75   before the colu
143b0 6d 6e 20 76 61 6c 75 65 20 69 73 0a 20 20 2a 2a  mn value is.  **
143c0 20 75 73 65 64 2e 20 20 54 68 65 20 66 6f 6c 6c   used.  The foll
143d0 6f 77 69 6e 67 20 63 6f 64 65 20 64 6f 65 73 20  owing code does 
143e0 74 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 6f  the equivalent o
143f0 66 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65  f Deephemeralize
14400 28 29 0a 20 20 2a 2a 20 62 75 74 20 64 6f 65 73  ().  ** but does
14410 20 69 74 20 66 61 73 74 65 72 2e 20 2a 2f 0a 20   it faster. */. 
14420 20 69 66 28 20 28 70 44 65 73 74 2d 3e 66 6c 61   if( (pDest->fla
14430 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29 21  gs & MEM_Ephem)!
14440 3d 30 20 26 26 20 70 44 65 73 74 2d 3e 7a 20 29  =0 && pDest->z )
14450 7b 0a 20 20 20 20 66 78 20 3d 20 70 44 65 73 74  {.    fx = pDest
14460 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53  ->flags & (MEM_S
14470 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20  tr|MEM_Blob);.  
14480 20 20 61 73 73 65 72 74 28 20 66 78 21 3d 30 20    assert( fx!=0 
14490 29 3b 0a 20 20 20 20 7a 44 61 74 61 20 3d 20 28  );.    zData = (
144a0 63 6f 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d  const u8*)pDest-
144b0 3e 7a 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 70 44  >z;.    len = pD
144c0 65 73 74 2d 3e 6e 3b 0a 20 20 20 20 69 66 28 20  est->n;.    if( 
144d0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
144e0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 44 65  earAndResize(pDe
144f0 73 74 2c 20 6c 65 6e 2b 32 29 20 29 20 67 6f 74  st, len+2) ) got
14500 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 6d 65  o no_mem;.    me
14510 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a 2c 20 7a  mcpy(pDest->z, z
14520 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20 20 20 20  Data, len);.    
14530 70 44 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20  pDest->z[len] = 
14540 30 3b 0a 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  0;.    pDest->z[
14550 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
14560 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d 20 66  pDest->flags = f
14570 78 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a  x|MEM_Term;.  }.
14580 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a  op_column_error:
14590 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
145a0 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
145b0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
145c0 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
145d0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
145e0 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
145f0 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
14600 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
14610 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
14620 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
14630 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
14640 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
14650 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
14660 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
14670 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14680 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14690 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
146a0 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
146b0 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
146c0 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
146d0 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
146e0 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
146f0 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
14700 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
14710 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
14720 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
14730 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
14740 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
14750 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
14760 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
14770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14780 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
14790 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
147a0 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
147b0 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
147c0 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
147d0 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
147e0 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
147f0 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
14800 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
14810 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
14820 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
14830 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
14840 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
14850 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  p->aMem[(p->nMem
14860 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
14870 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
14880 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
14890 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
148a0 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
148b0 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
148c0 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
148d0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
148e0 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
148f0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
14900 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
14910 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
14920 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
14930 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
14940 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
14950 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
14960 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
14970 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
14980 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
14990 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
149a0 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
149b0 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
149c0 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
149d0 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
149e0 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
149f0 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14a00 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14a10 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
14a20 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
14a30 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14a40 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14a50 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14a60 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14a70 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
14a80 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
14a90 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
14aa0 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
14ab0 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
14ac0 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
14ad0 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
14ae0 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
14af0 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
14b00 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
14b10 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
14b20 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
14b30 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
14b40 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
14b50 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
14b60 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
14b70 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
14b80 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
14b90 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
14ba0 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
14bb0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14bc0 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
14bd0 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
14be0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14bf0 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
14c00 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
14c10 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
14c20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14c30 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14c40 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
14c50 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
14c60 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
14c70 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
14c80 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
14c90 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
14ca0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14cb0 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
14cc0 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14cd0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14ce0 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
14cf0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14d00 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
14d10 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
14d20 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
14d30 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
14d40 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
14d50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
14d60 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14d70 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14d80 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14d90 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
14da0 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
14db0 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14dc0 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
14dd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14de0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
14df0 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
14e00 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
14e10 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
14e20 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
14e30 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
14e40 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
14e50 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
14e60 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
14e70 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
14e80 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
14e90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
14ea0 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
14eb0 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
14ec0 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
14ed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
14ee0 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
14ef0 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
14f00 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
14f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14f20 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
14f30 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
14f40 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
14f50 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
14f60 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
14f70 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
14f80 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
14f90 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
14fa0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fb0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fc0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14fd0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
14fe0 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
14ff0 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
15000 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
15010 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
15020 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
15030 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
15040 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15050 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15060 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15070 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15080 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15090 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
150a0 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
150b0 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
150c0 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
150d0 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
150e0 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
150f0 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
15100 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
15110 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
15120 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
15130 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
15140 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
15150 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15160 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
15170 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
15180 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
15190 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
151a0 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
151b0 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
151c0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
151d0 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
151e0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
151f0 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
15200 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
15210 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
15220 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15230 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
15240 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
15250 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
15260 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15270 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15280 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15290 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
152a0 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
152b0 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
152c0 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
152d0 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
152e0 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
152f0 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
15300 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
15310 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
15320 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
15330 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
15340 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
15350 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
15360 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
15370 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15380 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
15390 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
153a0 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
153b0 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
153c0 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
153d0 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
153e0 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
153f0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
15400 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
15410 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
15420 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
15430 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
15440 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
15450 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15460 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
15470 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
15480 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15490 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
154a0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
154b0 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
154c0 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
154d0 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
154e0 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
154f0 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
15500 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
15510 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
15520 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
15530 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
15540 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
15550 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
15560 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
15570 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
15580 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
15590 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
155a0 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
155b0 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
155c0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
155d0 65 63 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d  ec) );.    pRec-
155e0 3e 75 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f  >uTemp = serial_
155f0 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64  type = sqlite3Vd
15600 62 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65  beSerialType(pRe
15610 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b  c, file_format);
15620 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c 69 74  .    len = sqlit
15630 65 33 56 64 62 65 53 65 72 69 61 6c 54 79 70 65  e3VdbeSerialType
15640 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
15650 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e  ;.    if( pRec->
15660 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
15670 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44   ){.      if( nD
15680 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ata ){.        s
15690 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45 78 70  qlite3VdbeMemExp
156a0 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b 0a 20  andBlob(pRec);. 
156b0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
156c0 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
156d0 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
156e0 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
156f0 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
15700 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
15710 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
15720 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
15730 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
15740 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
15750 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
15760 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
15770 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
15780 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
15790 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
157a0 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70 52 65    }while( (--pRe
157b0 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a 0a 20  c)>=pData0 );.. 
157c0 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a   /* EVIDENCE-OF:
157d0 20 52 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54   R-22564-11647 T
157e0 68 65 20 68 65 61 64 65 72 20 62 65 67 69 6e 73  he header begins
157f0 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76   with a single v
15800 61 72 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68  arint.  ** which
15810 20 64 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20   determines the 
15820 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20  total number of 
15830 62 79 74 65 73 20 69 6e 20 74 68 65 20 68 65 61  bytes in the hea
15840 64 65 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a  der. The varint.
15850 20 20 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68    ** value is th
15860 65 20 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65  e size of the he
15870 61 64 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e  ader in bytes in
15880 63 6c 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65  cluding the size
15890 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73   varint.  ** its
158a0 65 6c 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61  elf. */.  testca
158b0 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b  se( nHdr==126 );
158c0 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
158d0 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20  r==127 );.  if( 
158e0 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20  nHdr<=126 ){.   
158f0 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63   /* The common c
15900 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20  ase */.    nHdr 
15910 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  += 1;.  }else{. 
15920 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20     /* Rare case 
15930 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67  of a really larg
15940 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20  e header */.    
15950 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65  nVarint = sqlite
15960 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29  3VarintLen(nHdr)
15970 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56  ;.    nHdr += nV
15980 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e  arint;.    if( n
15990 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61  Varint<sqlite3Va
159a0 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20  rintLen(nHdr) ) 
159b0 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42  nHdr++;.  }.  nB
159c0 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61  yte = nHdr+nData
159d0 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62  ;.  if( nByte>db
159e0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
159f0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
15a00 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  .    goto too_bi
15a10 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b  g;.  }..  /* Mak
15a20 65 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75  e sure the outpu
15a30 74 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61  t register has a
15a40 20 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e   buffer large en
15a50 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20  ough to store . 
15a60 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f   ** the new reco
15a70 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72  rd. The output r
15a80 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33  egister (pOp->p3
15a90 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  ) is not allowed
15aa0 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20   to.  ** be one 
15ab0 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67  of the input reg
15ac0 69 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20  isters (because 
15ad0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61  the following ca
15ae0 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74  ll to.  ** sqlit
15af0 65 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e  e3VdbeMemClearAn
15b00 64 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20  dResize() could 
15b10 63 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75  clobber the valu
15b20 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75  e before it is u
15b30 73 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28  sed)..  */.  if(
15b40 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
15b50 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
15b60 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20  ut, (int)nByte) 
15b70 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  ){.    goto no_m
15b80 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65  em;.  }.  zNewRe
15b90 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75  cord = (u8 *)pOu
15ba0 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74  t->z;..  /* Writ
15bb0 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  e the record */.
15bc0 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33    i = putVarint3
15bd0 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48  2(zNewRecord, nH
15be0 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b  dr);.  j = nHdr;
15bf0 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61  .  assert( pData
15c00 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52  0<=pLast );.  pR
15c10 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64  ec = pData0;.  d
15c20 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79  o{.    serial_ty
15c30 70 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70  pe = pRec->uTemp
15c40 3b 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43  ;.    /* EVIDENC
15c50 45 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37  E-OF: R-06529-47
15c60 33 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68  362 Following th
15c70 65 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72  e size varint ar
15c80 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20  e one or more.  
15c90 20 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20    ** additional 
15ca0 76 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72  varints, one per
15cb0 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20   column. */.    
15cc0 69 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32  i += putVarint32
15cd0 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c  (&zNewRecord[i],
15ce0 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20   serial_type);  
15cf0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72            /* ser
15d00 69 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20  ial type */.    
15d10 2f 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20  /* EVIDENCE-OF: 
15d20 52 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68  R-64536-51728 Th
15d30 65 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63  e values for eac
15d40 68 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  h column in the 
15d50 72 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d  record.    ** im
15d60 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
15d70 20 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a   the header. */.
15d80 20 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33      j += sqlite3
15d90 56 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a  VdbeSerialPut(&z
15da0 4e 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52  NewRecord[j], pR
15db0 65 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29  ec, serial_type)
15dc0 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a  ; /* content */.
15dd0 20 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65    }while( (++pRe
15de0 63 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61  c)<=pLast );.  a
15df0 73 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29  ssert( i==nHdr )
15e00 3b 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e  ;.  assert( j==n
15e10 42 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72  Byte );..  asser
15e20 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20  t( pOp->p3>0 && 
15e30 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p3<=(p->nMe
15e40 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  m-p->nCursor) );
15e50 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
15e60 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
15e70 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42 6c 6f  >flags = MEM_Blo
15e80 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f 20 29  b;.  if( nZero )
15e90 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 6e 5a  {.    pOut->u.nZ
15ea0 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20 20 20  ero = nZero;.   
15eb0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c 3d 20   pOut->flags |= 
15ec0 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a 20 20  MEM_Zero;.  }.  
15ed0 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
15ee0 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
15ef0 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
15f00 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65 64 20   ever converted 
15f10 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52 45 47  to text */.  REG
15f20 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
15f30 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50  >p3, pOut);.  UP
15f40 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
15f50 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  E(pOut);.  break
15f60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15f70 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a 20  Count P1 P2 * * 
15f80 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
15f90 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a 2a 0a  [P2]=count().**.
15fa0 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e 75 6d  ** Store the num
15fb0 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 28  ber of entries (
15fc0 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  an integer value
15fd0 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65 20 6f  ) in the table o
15fe0 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70 65 6e  r index .** open
15ff0 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 20  ed by cursor P1 
16000 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  in register P2.*
16010 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
16020 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54  _OMIT_BTREECOUNT
16030 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74 3a 20  .case OP_Count: 
16040 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74  {         /* out
16050 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
16060 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20    i64 nEntry;.  
16070 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b  BtCursor *pCrsr;
16080 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ..  pCrsr = p->a
16090 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 70  pCsr[pOp->p1]->p
160a0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
160b0 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e 45 6e  ( pCrsr );.  nEn
160c0 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74  try = 0;  /* Not
160d0 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75   needed.  Only u
160e0 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65 20 61  sed to silence a
160f0 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72   warning. */.  r
16100 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
16110 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26 6e 45  Count(pCrsr, &nE
16120 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ntry);.  pOut->u
16130 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62  .i = nEntry;.  b
16140 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a  reak;.}.#endif..
16150 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70  /* Opcode: Savep
16160 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34 20 2a  oint P1 * * P4 *
16170 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c  .**.** Open, rel
16180 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b  ease or rollback
16190 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 6e   the savepoint n
161a0 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65 74 65  amed by paramete
161b0 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a  r P4, depending.
161c0 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75 65 20  ** on the value 
161d0 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61  of P1. To open a
161e0 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 2c 20   new savepoint, 
161f0 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73  P1==0. To releas
16200 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a  e (commit) an.**
16210 20 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f   existing savepo
16220 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74  int, P1==1, or t
16230 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78  o rollback an ex
16240 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
16250 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20   P1==2..*/.case 
16260 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a  OP_Savepoint: {.
16270 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
16280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16290 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20 50 31    /* Value of P1
162a0 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68   operand */.  ch
162b0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
162c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
162d0 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70 6f 69   Name of savepoi
162e0 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d  nt */.  int nNam
162f0 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  e;.  Savepoint *
16300 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e  pNew;.  Savepoin
16310 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  t *pSavepoint;. 
16320 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70   Savepoint *pTmp
16330 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70 6f 69  ;.  int iSavepoi
16340 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20  nt;.  int ii;.. 
16350 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20   p1 = pOp->p1;. 
16360 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34   zName = pOp->p4
16370 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74  .z;..  /* Assert
16380 20 74 68 61 74 20 74 68 65 20 70 31 20 70 61 72   that the p1 par
16390 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69 64 2e  ameter is valid.
163a0 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20 74 68   Also that if th
163b0 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20  ere is no open. 
163c0 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c   ** transaction,
163d0 20 74 68 65 6e 20 74 68 65 72 65 20 63 61 6e 6e   then there cann
163e0 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65 70 6f  ot be any savepo
163f0 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73  ints. .  */.  as
16400 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65 70  sert( db->pSavep
16410 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61  oint==0 || db->a
16420 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a  utoCommit==0 );.
16430 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d 53 41    assert( p1==SA
16440 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70  VEPOINT_BEGIN||p
16450 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16460 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f  EASE||p1==SAVEPO
16470 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a  INT_ROLLBACK );.
16480 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53    assert( db->pS
16490 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e  avepoint || db->
164a0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
164b0 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61  epoint==0 );.  a
164c0 73 73 65 72 74 28 20 63 68 65 63 6b 53 61 76 65  ssert( checkSave
164d0 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29 20 29  pointCount(db) )
164e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
164f0 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20 20 69  IsReader );..  i
16500 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  f( p1==SAVEPOINT
16510 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20 69 66  _BEGIN ){.    if
16520 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74 65  ( db->nVdbeWrite
16530 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41  >0 ){.      /* A
16540 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 63   new savepoint c
16550 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64  annot be created
16560 20 69 66 20 74 68 65 72 65 20 61 72 65 20 61 63   if there are ac
16570 74 69 76 65 20 77 72 69 74 65 20 0a 20 20 20 20  tive write .    
16580 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74 73 20    ** statements 
16590 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f  (i.e. open read/
165a0 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e 74 61  write incrementa
165b0 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e  l blob handles).
165c0 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
165d0 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
165e0 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
165f0 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73  , "cannot open s
16600 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
16610 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
16620 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
16630 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
16640 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
16650 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61  }else{.      nNa
16660 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c  me = sqlite3Strl
16670 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69  en30(zName);..#i
16680 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
16690 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20  T_VIRTUALTABLE. 
166a0 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c       /* This cal
166b0 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20  l is Ok even if 
166c0 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69  this savepoint i
166d0 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61  s actually a tra
166e0 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a  nsaction.      *
166f0 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64  * savepoint (and
16700 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c   therefore shoul
16710 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61  d not prompt xSa
16720 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62  vepoint()) callb
16730 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49  acks..      ** I
16740 66 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e  f this is a tran
16750 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e  saction savepoin
16760 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20  t being opened, 
16770 69 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64  it is guaranteed
16780 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74  .      ** that t
16790 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d  he db->aVTrans[]
167a0 20 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e   array is empty.
167b0 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72    */.      asser
167c0 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  t( db->autoCommi
167d0 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72  t==0 || db->nVTr
167e0 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ans==0 );.      
167f0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
16800 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
16810 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20  VEPOINT_BEGIN,. 
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
16840 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62  b->nStatement+db
16850 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20  ->nSavepoint);. 
16860 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
16870 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
16880 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
16890 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20  ;.#endif..      
168a0 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  /* Create a new 
168b0 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74  savepoint struct
168c0 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e  ure. */.      pN
168d0 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  ew = sqlite3DbMa
168e0 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69 7a 65  llocRaw(db, size
168f0 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e 4e  of(Savepoint)+nN
16900 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69 66  ame+1);.      if
16910 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ( pNew ){.      
16920 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d 20    pNew->zName = 
16930 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31 5d  (char *)&pNew[1]
16940 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70 79  ;.        memcpy
16950 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e  (pNew->zName, zN
16960 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a 20  ame, nName+1);. 
16970 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 49     .        /* I
16980 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70  f there is no op
16990 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20  en transaction, 
169a0 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20 61  then mark this a
169b0 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20 20  s a special.    
169c0 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63 74      ** "transact
169d0 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e 20  ion savepoint". 
169e0 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  */.        if( d
169f0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
16a00 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 61  .          db->a
16a10 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a 20  utoCommit = 0;. 
16a20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54           db->isT
16a30 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
16a40 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  int = 1;.       
16a50 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
16a60 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
16a70 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ++;.        }.  
16a80 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69    .        /* Li
16a90 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76 65 70  nk the new savep
16aa0 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61  oint into the da
16ab0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20  tabase handle's 
16ac0 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20  list. */.       
16ad0 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64   pNew->pNext = d
16ae0 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20  b->pSavepoint;. 
16af0 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65         db->pSave
16b00 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20  point = pNew;.  
16b10 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66        pNew->nDef
16b20 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e  erredCons = db->
16b30 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20  nDeferredCons;. 
16b40 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65         pNew->nDe
16b50 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
16b60 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
16b70 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Cons;.      }.  
16b80 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
16b90 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b   iSavepoint = 0;
16ba0 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68  ..    /* Find th
16bb0 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e  e named savepoin
16bc0 74 2e 20 49 66 20 74 68 65 72 65 20 69 73 20 6e  t. If there is n
16bd0 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74  o such savepoint
16be0 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a  , then an.    **
16bf0 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74   an error is ret
16c00 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65  urned to the use
16c10 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a  r.  */.    for(.
16c20 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
16c30 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e   = db->pSavepoin
16c40 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76 65 70  t; .      pSavep
16c50 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53  oint && sqlite3S
16c60 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e  trICmp(pSavepoin
16c70 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29  t->zName, zName)
16c80 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  ;.      pSavepoi
16c90 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  nt = pSavepoint-
16ca0 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20  >pNext.    ){.  
16cb0 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b      iSavepoint++
16cc0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
16cd0 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20  !pSavepoint ){. 
16ce0 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
16cf0 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
16d00 67 2c 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20  g, db, "no such 
16d10 73 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20  savepoint: %s", 
16d20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63  zName);.      rc
16d30 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
16d40 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64  .    }else if( d
16d50 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
16d60 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  && p1==SAVEPOINT
16d70 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20  _RELEASE ){.    
16d80 20 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70    /* It is not p
16d90 6f 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61  ossible to relea
16da0 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61  se (commit) a sa
16db0 76 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65  vepoint if there
16dc0 20 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61   are .      ** a
16dd0 63 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74  ctive write stat
16de0 65 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f  ements..      */
16df0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 53 65  .      sqlite3Se
16e00 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
16e10 4d 73 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20  Msg, db, .      
16e20 20 20 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73    "cannot releas
16e30 65 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51  e savepoint - SQ
16e40 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  L statements in 
16e50 70 72 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20  progress".      
16e60 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
16e70 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
16e80 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20  else{..      /* 
16e90 44 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65  Determine whethe
16ea0 72 20 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73  r or not this is
16eb0 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73   a transaction s
16ec0 61 76 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c  avepoint. If so,
16ed0 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68  .      ** and th
16ee0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
16ef0 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68  command, then th
16f00 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61  e current transa
16f10 63 74 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ction .      ** 
16f20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20  is committed. . 
16f30 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e       */.      in
16f40 74 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20  t isTransaction 
16f50 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
16f60 65 78 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73  ext==0 && db->is
16f70 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
16f80 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20  oint;.      if( 
16f90 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26  isTransaction &&
16fa0 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16fb0 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16fc0 20 20 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69    if( (rc = sqli
16fd0 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70  te3VdbeCheckFk(p
16fe0 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b  , 1))!=SQLITE_OK
16ff0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
17000 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a  to vdbe_return;.
17010 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17020 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74    db->autoCommit
17030 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66   = 1;.        if
17040 28 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c  ( sqlite3VdbeHal
17050 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53  t(p)==SQLITE_BUS
17060 59 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  Y ){.          p
17070 2d 3e 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20  ->pc = pc;.     
17080 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
17090 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  mit = 0;.       
170a0 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20     p->rc = rc = 
170b0 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20  SQLITE_BUSY;.   
170c0 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65         goto vdbe
170d0 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20  _return;.       
170e0 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69   }.        db->i
170f0 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
17100 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20  point = 0;.     
17110 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20     rc = p->rc;. 
17120 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
17130 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d 61      int isSchema
17140 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20 20  Change;.        
17150 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62 2d  iSavepoint = db-
17160 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69 53  >nSavepoint - iS
17170 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20 20  avepoint - 1;.  
17180 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41        if( p1==SA
17190 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b  VEPOINT_ROLLBACK
171a0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73   ){.          is
171b0 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 28  SchemaChange = (
171c0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
171d0 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73  TE_InternChanges
171e0 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20 20  )!=0;.          
171f0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
17200 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
17210 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
17220 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41 6c  lite3BtreeTripAl
17230 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44 62  lCursors(db->aDb
17240 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20 20  [ii].pBt,.      
17250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17270 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52 4f   SQLITE_ABORT_RO
17280 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20 20  LLBACK,.        
17290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
172a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
172b0 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d 30  sSchemaChange==0
172c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  );.            i
172d0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
172e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
172f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
17300 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17310 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
17320 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
17330 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
17340 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30 3b         for(ii=0;
17350 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
17360 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72 63  +){.          rc
17370 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
17380 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44 62  avepoint(db->aDb
17390 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69 53  [ii].pBt, p1, iS
173a0 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20  avepoint);.     
173b0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
173c0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
173d0 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
173e0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
173f0 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
17400 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
17410 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20   isSchemaChange 
17420 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
17430 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61 72  ite3ExpirePrepar
17440 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62 29  edStatements(db)
17450 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
17460 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
17470 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
17480 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64 62  b);.          db
17490 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e 66  ->flags = (db->f
174a0 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49 6e  lags | SQLITE_In
174b0 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20 20  ternChanges);.  
174c0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
174d0 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67 61    .      /* Rega
174e0 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68 65  rdless of whethe
174f0 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45  r this is a RELE
17500 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c  ASE or ROLLBACK,
17510 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20 20   destroy all .  
17520 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74      ** savepoint
17530 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65 20  s nested inside 
17540 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  of the savepoint
17550 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20   being operated 
17560 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68 69  on. */.      whi
17570 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69  le( db->pSavepoi
17580 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20 29  nt!=pSavepoint )
17590 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20 3d  {.        pTmp =
175a0 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
175b0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
175c0 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d 3e  vepoint = pTmp->
175d0 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20 73  pNext;.        s
175e0 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
175f0 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20 20   pTmp);.        
17600 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d  db->nSavepoint--
17610 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
17620 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20 52   /* If it is a R
17630 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65 73  ELEASE, then des
17640 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f 69  troy the savepoi
17650 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  nt being operate
17660 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 74  d on .      ** t
17670 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20 52  oo. If it is a R
17680 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65 6e  OLLBACK TO, then
17690 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72 20   set the number 
176a0 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20 20  of deferred .   
176b0 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e 74     ** constraint
176c0 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65 73   violations pres
176d0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
176e0 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75 65  ase to the value
176f0 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a 2a   stored.      **
17700 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70 6f   when the savepo
17710 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64 2e  int was created.
17720 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70    */.      if( p
17730 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
17740 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
17750 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f 69  assert( pSavepoi
17760 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69  nt==db->pSavepoi
17770 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  nt );.        db
17780 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20 70  ->pSavepoint = p
17790 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78 74  Savepoint->pNext
177a0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
177b0 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61 76  3DbFree(db, pSav
177c0 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20  epoint);.       
177d0 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63 74   if( !isTransact
177e0 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ion ){.         
177f0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
17800 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  -;.        }.   
17810 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17820 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
17830 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e 74  ons = pSavepoint
17840 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
17850 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44 65  .        db->nDe
17860 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
17870 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
17880 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20  erredImmCons;.  
17890 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66 28      }..      if(
178a0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
178b0 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
178c0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
178d0 6f 69 6e 74 28 64 62 2c 20 70 31 2c 20 69 53 61  oint(db, p1, iSa
178e0 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
178f0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
17900 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
17910 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
17920 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
17930 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
17940 20 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d   Opcode: AutoCom
17950 6d 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mit P1 P2 * * *.
17960 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61  **.** Set the da
17970 74 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d  tabase auto-comm
17980 69 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31  it flag to P1 (1
17990 20 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73   or 0). If P2 is
179a0 20 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62   true, roll.** b
179b0 61 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c  ack any currentl
179c0 79 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74  y active btree t
179d0 72 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20  ransactions. If 
179e0 74 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63  there are any ac
179f0 74 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61  tive.** VMs (apa
17a00 72 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65  rt from this one
17a10 29 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41  ), then a ROLLBA
17a20 43 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d  CK fails.  A COM
17a30 4d 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20  MIT fails if.** 
17a40 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65  there are active
17a50 20 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20   writing VMs or 
17a60 61 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20  active VMs that 
17a70 75 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65  use shared cache
17a80 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
17a90 74 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20  truction causes 
17aa0 74 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a  the VM to halt..
17ab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43  */.case OP_AutoC
17ac0 6f 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64  ommit: {.  int d
17ad0 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17ae0 3b 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63  ;.  int iRollbac
17af0 6b 3b 0a 20 20 69 6e 74 20 74 75 72 6e 4f 6e 41  k;.  int turnOnA
17b00 43 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74  C;..  desiredAut
17b10 6f 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70  oCommit = pOp->p
17b20 31 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d  1;.  iRollback =
17b30 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 74 75 72 6e   pOp->p2;.  turn
17b40 4f 6e 41 43 20 3d 20 64 65 73 69 72 65 64 41 75  OnAC = desiredAu
17b50 74 6f 43 6f 6d 6d 69 74 20 26 26 20 21 64 62 2d  toCommit && !db-
17b60 3e 61 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 61  >autoCommit;.  a
17b70 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41 75  ssert( desiredAu
17b80 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64  toCommit==1 || d
17b90 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74  esiredAutoCommit
17ba0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
17bb0 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17bc0 69 74 3d 3d 31 20 7c 7c 20 69 52 6f 6c 6c 62 61  it==1 || iRollba
17bd0 63 6b 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ck==0 );.  asser
17be0 74 28 20 64 62 2d 3e 6e 56 64 62 65 41 63 74 69  t( db->nVdbeActi
17bf0 76 65 3e 30 20 29 3b 20 20 2f 2a 20 41 74 20 6c  ve>0 );  /* At l
17c00 65 61 73 74 20 74 68 69 73 20 6f 6e 65 20 56 4d  east this one VM
17c10 20 69 73 20 61 63 74 69 76 65 20 2a 2f 0a 20 20   is active */.  
17c20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
17c30 61 64 65 72 20 29 3b 0a 0a 23 69 66 20 30 0a 20  ader );..#if 0. 
17c40 20 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26   if( turnOnAC &&
17c50 20 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62   iRollback && db
17c60 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 31 20  ->nVdbeActive>1 
17c70 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69  ){.    /* If thi
17c80 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
17c90 70 6c 65 6d 65 6e 74 73 20 61 20 52 4f 4c 4c 42  plements a ROLLB
17ca0 41 43 4b 20 61 6e 64 20 6f 74 68 65 72 20 56 4d  ACK and other VM
17cb0 73 20 61 72 65 0a 20 20 20 20 2a 2a 20 73 74 69  s are.    ** sti
17cc0 6c 6c 20 72 75 6e 6e 69 6e 67 2c 20 61 6e 64 20  ll running, and 
17cd0 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  a transaction is
17ce0 20 61 63 74 69 76 65 2c 20 72 65 74 75 72 6e 20   active, return 
17cf0 61 6e 20 65 72 72 6f 72 20 69 6e 64 69 63 61 74  an error indicat
17d00 69 6e 67 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  ing.    ** that 
17d10 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
17d20 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
17d30 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  t. .    */.    s
17d40 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
17d50 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
17d60 20 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63   "cannot rollbac
17d70 6b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  k transaction - 
17d80 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17d90 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17da0 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17db0 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17dc0 20 7d 65 6c 73 65 0a 23 65 6e 64 69 66 0a 20 20   }else.#endif.  
17dd0 69 66 28 20 74 75 72 6e 4f 6e 41 43 20 26 26 20  if( turnOnAC && 
17de0 21 69 52 6f 6c 6c 62 61 63 6b 20 26 26 20 64 62  !iRollback && db
17df0 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29  ->nVdbeWrite>0 )
17e00 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 69 73  {.    /* If this
17e10 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d 70   instruction imp
17e20 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49 54  lements a COMMIT
17e30 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20 61   and other VMs a
17e40 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20 2a  re writing.    *
17e50 2a 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  * return an erro
17e60 72 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61  r indicating tha
17e70 74 20 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20  t the other VMs 
17e80 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69  must complete fi
17e90 72 73 74 2e 20 0a 20 20 20 20 2a 2f 0a 20 20 20  rst. .    */.   
17ea0 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
17eb0 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64  g(&p->zErrMsg, d
17ec0 62 2c 20 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69  b, "cannot commi
17ed0 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 2d 20  t transaction - 
17ee0 22 0a 20 20 20 20 20 20 20 20 22 53 51 4c 20 73  ".        "SQL s
17ef0 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f  tatements in pro
17f00 67 72 65 73 73 22 29 3b 0a 20 20 20 20 72 63 20  gress");.    rc 
17f10 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
17f20 20 7d 65 6c 73 65 20 69 66 28 20 64 65 73 69 72   }else if( desir
17f30 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
17f40 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
17f50 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
17f60 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
17f70 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
17f80 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
17f90 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
17fa0 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
17fb0 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
17fc0 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
17fd0 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
17fe0 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73 71  lse if( (rc = sq
17ff0 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46 6b  lite3VdbeCheckFk
18000 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45 5f  (p, 1))!=SQLITE_
18010 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f  OK ){.      goto
18020 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
18030 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 64    }else{.      d
18040 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
18050 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f 43  (u8)desiredAutoC
18060 6f 6d 6d 69 74 3b 0a 20 20 20 20 20 20 69 66 28  ommit;.      if(
18070 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
18080 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
18090 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d 3e 70   ){.        p->p
180a0 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20 20  c = pc;.        
180b0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
180c0 20 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41   (u8)(1-desiredA
180d0 75 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20  utoCommit);.    
180e0 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
180f0 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18100 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
18110 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
18120 20 20 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74      }.    assert
18130 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74  ( db->nStatement
18140 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  ==0 );.    sqlit
18150 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74  e3CloseSavepoint
18160 73 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70  s(db);.    if( p
18170 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
18180 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  ){.      rc = SQ
18190 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d  LITE_DONE;.    }
181a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d  else{.      rc =
181b0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
181c0 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64     }.    goto vd
181d0 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c  be_return;.  }el
181e0 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53  se{.    sqlite3S
181f0 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72  etString(&p->zEr
18200 72 4d 73 67 2c 20 64 62 2c 0a 20 20 20 20 20 20  rMsg, db,.      
18210 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
18220 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
18230 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
18240 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
18250 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
18260 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
18270 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
18280 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
18290 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
182a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182b0 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
182c0 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
182d0 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
182e0 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
182f0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
18300 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
18310 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e 73 61  * Opcode: Transa
18320 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
18330 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e  4 P5.**.** Begin
18340 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
18350 6e 20 64 61 74 61 62 61 73 65 20 50 31 20 69 66  n database P1 if
18360 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69   a transaction i
18370 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a  s not already.**
18380 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50   active..** If P
18390 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  2 is non-zero, t
183a0 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72 61 6e  hen a write-tran
183b0 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74  saction is start
183c0 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20  ed, or if a .** 
183d0 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e  read-transaction
183e0 20 69 73 20 61 6c 72 65 61 64 79 20 61 63 74 69   is already acti
183f0 76 65 2c 20 69 74 20 69 73 20 75 70 67 72 61 64  ve, it is upgrad
18400 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d 74 72  ed to a write-tr
18410 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66  ansaction..** If
18420 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74 68 65   P2 is zero, the
18430 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73 61 63  n a read-transac
18440 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2e  tion is started.
18450 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
18460 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
18470 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e 20 77  tabase file on w
18480 68 69 63 68 20 74 68 65 20 74 72 61 6e 73 61 63  hich the transac
18490 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74  tion is.** start
184a0 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69 73 20  ed.  Index 0 is 
184b0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
184c0 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64 65 78  e file and index
184d0 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c   1 is the.** fil
184e0 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
184f0 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20 49 6e  rary tables.  In
18500 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f  dices of 2 or mo
18510 72 65 20 61 72 65 20 75 73 65 64 20 66 6f 72 0a  re are used for.
18520 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ** attached data
18530 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  bases..**.** If 
18540 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18550 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 20 61  ion is started a
18560 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73 65 73  nd the Vdbe.uses
18570 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67  StmtJournal flag
18580 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74 68 69   is.** true (thi
18590 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 66  s flag is set if
185a0 20 74 68 65 20 56 64 62 65 20 6d 61 79 20 6d 6f   the Vdbe may mo
185b0 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f  dify more than o
185c0 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a  ne row and may.*
185d0 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52 54  * throw an ABORT
185e0 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61 20 73   exception), a s
185f0 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
18600 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65  tion may also be
18610 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65   opened..** More
18620 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c 20 61   specifically, a
18630 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
18640 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64  action is opened
18650 20 69 66 66 20 74 68 65 20 64 61 74 61 62 61 73   iff the databas
18660 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
18670 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74  is currently not
18680 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d   in autocommit m
18690 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65 72 65  ode, or if there
186a0 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63   are other.** ac
186b0 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74 73 2e  tive statements.
186c0 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   A statement tra
186d0 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20  nsaction allows 
186e0 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61 64 65  the changes made
186f0 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44 42 45   by this.** VDBE
18700 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61   to be rolled ba
18710 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
18720 72 20 77 69 74 68 6f 75 74 20 68 61 76 69 6e 67  r without having
18730 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68   to roll back th
18740 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72 61 6e  e.** entire tran
18750 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65  saction. If no e
18760 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e 74 65  rror is encounte
18770 72 65 64 2c 20 74 68 65 20 73 74 61 74 65 6d 65  red, the stateme
18780 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a  nt transaction.*
18790 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63  * will automatic
187a0 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e  ally commit when
187b0 20 74 68 65 20 56 44 42 45 20 68 61 6c 74 73 2e   the VDBE halts.
187c0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20  .**.** If P5!=0 
187d0 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  then this opcode
187e0 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74 68 65   also checks the
187f0 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61   schema cookie a
18800 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64  gainst P3.** and
18810 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65   the schema gene
18820 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61  ration counter a
18830 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68  gainst P4..** Th
18840 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  e cookie changes
18850 20 69 74 73 20 76 61 6c 75 65 20 77 68 65 6e 65   its value whene
18860 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
18870 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2e   schema changes.
18880 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74 69  .** This operati
18890 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 64 65  on is used to de
188a0 74 65 63 74 20 77 68 65 6e 20 74 68 61 74 20 74  tect when that t
188b0 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20 63 68  he cookie has ch
188c0 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61  anged.** and tha
188d0 74 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  t the current pr
188e0 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f 20 72  ocess needs to r
188f0 65 72 65 61 64 20 74 68 65 20 73 63 68 65 6d 61  eread the schema
18900 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
18910 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33  .** cookie in P3
18920 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
18930 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20  e schema cookie 
18940 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
18950 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20  header or.** if 
18960 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72  the schema gener
18970 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e  ation counter in
18980 20 50 34 20 64 69 66 66 65 72 73 20 66 72 6f 6d   P4 differs from
18990 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20   the current.** 
189a0 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74  generation count
189b0 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51 4c 49  er, then an SQLI
189c0 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f 72 20  TE_SCHEMA error 
189d0 69 73 20 72 61 69 73 65 64 20 61 6e 64 20 65 78  is raised and ex
189e0 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73  ecution.** halts
189f0 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33 5f 73  .  The sqlite3_s
18a00 74 65 70 28 29 20 77 72 61 70 70 65 72 20 66 75  tep() wrapper fu
18a10 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74 68 65  nction might the
18a20 6e 20 72 65 70 72 65 70 61 72 65 20 74 68 65 0a  n reprepare the.
18a30 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  ** statement and
18a40 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d 20 74   rerun it from t
18a50 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f  he beginning..*/
18a60 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73 61 63  .case OP_Transac
18a70 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20  tion: {.  Btree 
18a80 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74  *pBt;.  int iMet
18a90 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a  a;.  int iGen;..
18aa0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
18ab0 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
18ac0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
18ad0 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30  =0 || pOp->p2==0
18ae0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
18af0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
18b00 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
18b10 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
18b20 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
18b30 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
18b40 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 28  if( pOp->p2 && (
18b50 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
18b60 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30  TE_QueryOnly)!=0
18b70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
18b80 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20  ITE_READONLY;.  
18b90 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18ba0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
18bb0 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70   pBt = db->aDb[p
18bc0 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20  Op->p1].pBt;..  
18bd0 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20 20 72  if( pBt ){.    r
18be0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18bf0 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74 2c 20  BeginTrans(pBt, 
18c00 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20 69 66  pOp->p2);.    if
18c10 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53  ( rc==SQLITE_BUS
18c20 59 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63  Y ){.      p->pc
18c30 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 70 2d 3e   = pc;.      p->
18c40 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45  rc = rc = SQLITE
18c50 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
18c60 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
18c70 20 20 20 7d 0a 20 20 20 20 69 66 28 20 72 63 21     }.    if( rc!
18c80 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
18c90 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
18ca0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18cb0 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   }..    if( pOp-
18cc0 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73 53 74  >p2 && p->usesSt
18cd0 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20 20 20  mtJournal .     
18ce0 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  && (db->autoComm
18cf0 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 64  it==0 || db->nVd
18d00 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20 20 29  beRead>1) .    )
18d10 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
18d20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
18d30 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a 20 20  Trans(pBt) );.  
18d40 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74 61 74      if( p->iStat
18d50 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ement==0 ){.    
18d60 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18d70 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20 26 26  nStatement>=0 &&
18d80 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 3e   db->nSavepoint>
18d90 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20 64 62  =0 );.        db
18da0 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b 3b 20  ->nStatement++; 
18db0 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53 74 61  .        p->iSta
18dc0 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  tement = db->nSa
18dd0 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e 6e 53  vepoint + db->nS
18de0 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20 20 20  tatement;.      
18df0 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  }..      rc = sq
18e00 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
18e10 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49 4e 54  nt(db, SAVEPOINT
18e20 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74 61 74  _BEGIN, p->iStat
18e30 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20 20 20  ement-1);.      
18e40 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
18e50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20  K ){.        rc 
18e60 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
18e70 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70 2d 3e  ginStmt(pBt, p->
18e80 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20 20 20  iStatement);.   
18e90 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 53     }..      /* S
18ea0 74 6f 72 65 20 74 68 65 20 63 75 72 72 65 6e 74  tore the current
18eb0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
18ec0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73 20 64  tabase handles d
18ed0 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
18ee0 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f 75 6e  nt.      ** coun
18ef0 74 65 72 2e 20 49 66 20 74 68 65 20 73 74 61 74  ter. If the stat
18f00 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
18f10 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f  n needs to be ro
18f20 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20 20 20  lled back,.     
18f30 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
18f40 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20 6e 65   this counter ne
18f50 65 64 73 20 74 6f 20 62 65 20 72 65 73 74 6f 72  eds to be restor
18f60 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20 20 20  ed too.  */.    
18f70 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43 6f 6e    p->nStmtDefCon
18f80 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
18f90 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70 2d 3e  dCons;.      p->
18fa0 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e 73 20  nStmtDefImmCons 
18fb0 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
18fc0 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a 0a 20  mmCons;.    }.. 
18fd0 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74 68 65     /* Gather the
18fe0 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
18ff0 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65 63 6b  number for check
19000 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d 50 4c  ing:.    ** IMPL
19010 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a 20 52  EMENTATION-OF: R
19020 2d 33 32 31 39 35 2d 31 39 34 36 35 20 54 68 65  -32195-19465 The
19030 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
19040 69 73 20 75 73 65 64 20 62 79 20 53 51 4c 69 74  is used by SQLit
19050 65 0a 20 20 20 20 2a 2a 20 65 61 63 68 20 74 69  e.    ** each ti
19060 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
19070 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
19080 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
19090 61 6c 20 63 61 63 68 65 20 6f 66 20 74 68 65 0a  al cache of the.
190a0 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 75 73      ** schema us
190b0 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
190c0 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
190d0 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
190e0 6d 61 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a  ma of the.    **
190f0 20 64 61 74 61 62 61 73 65 20 61 67 61 69 6e 73   database agains
19100 74 20 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70  t which the comp
19110 69 6c 65 64 20 71 75 65 72 79 20 69 73 20 61 63  iled query is ac
19120 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e  tually executed.
19130 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69  .    */.    sqli
19140 74 65 33 42 74 72 65 65 47 65 74 4d 65 74 61 28  te3BtreeGetMeta(
19150 70 42 74 2c 20 42 54 52 45 45 5f 53 43 48 45 4d  pBt, BTREE_SCHEM
19160 41 5f 56 45 52 53 49 4f 4e 2c 20 28 75 33 32 20  A_VERSION, (u32 
19170 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 20 20 69  *)&iMeta);.    i
19180 47 65 6e 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f  Gen = db->aDb[pO
19190 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d 3e  p->p1].pSchema->
191a0 69 47 65 6e 65 72 61 74 69 6f 6e 3b 0a 20 20 7d  iGeneration;.  }
191b0 65 6c 73 65 7b 0a 20 20 20 20 69 47 65 6e 20 3d  else{.    iGen =
191c0 20 69 4d 65 74 61 20 3d 20 30 3b 0a 20 20 7d 0a   iMeta = 0;.  }.
191d0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
191e0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 74  5==0 || pOp->p4t
191f0 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
19200 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
19210 26 20 28 69 4d 65 74 61 21 3d 70 4f 70 2d 3e 70  & (iMeta!=pOp->p
19220 33 20 7c 7c 20 69 47 65 6e 21 3d 70 4f 70 2d 3e  3 || iGen!=pOp->
19230 70 34 2e 69 29 20 29 7b 0a 20 20 20 20 73 71 6c  p4.i) ){.    sql
19240 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
19250 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 20 20  ->zErrMsg);.    
19260 70 2d 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c  p->zErrMsg = sql
19270 69 74 65 33 44 62 53 74 72 44 75 70 28 64 62 2c  ite3DbStrDup(db,
19280 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65 6d   "database schem
19290 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 29 3b  a has changed");
192a0 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 73  .    /* If the s
192b0 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 66 72 6f  chema-cookie fro
192c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
192d0 69 6c 65 20 6d 61 74 63 68 65 73 20 74 68 65 20  ile matches the 
192e0 63 6f 6f 6b 69 65 20 0a 20 20 20 20 2a 2a 20 73  cookie .    ** s
192f0 74 6f 72 65 64 20 77 69 74 68 20 74 68 65 20 69  tored with the i
19300 6e 2d 6d 65 6d 6f 72 79 20 72 65 70 72 65 73 65  n-memory represe
19310 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73  ntation of the s
19320 63 68 65 6d 61 2c 20 64 6f 0a 20 20 20 20 2a 2a  chema, do.    **
19330 20 6e 6f 74 20 72 65 6c 6f 61 64 20 74 68 65 20   not reload the 
19340 73 63 68 65 6d 61 20 66 72 6f 6d 20 74 68 65 20  schema from the 
19350 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20  database file.. 
19360 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 49 66 20     **.    ** If 
19370 76 69 72 74 75 61 6c 2d 74 61 62 6c 65 73 20 61  virtual-tables a
19380 72 65 20 69 6e 20 75 73 65 2c 20 74 68 69 73 20  re in use, this 
19390 69 73 20 6e 6f 74 20 6a 75 73 74 20 61 6e 20 6f  is not just an o
193a0 70 74 69 6d 69 7a 61 74 69 6f 6e 2e 0a 20 20 20  ptimization..   
193b0 20 2a 2a 20 4f 66 74 65 6e 2c 20 76 2d 74 61 62   ** Often, v-tab
193c0 6c 65 73 20 73 74 6f 72 65 20 74 68 65 69 72 20  les store their 
193d0 64 61 74 61 20 69 6e 20 6f 74 68 65 72 20 53 51  data in other SQ
193e0 4c 69 74 65 20 74 61 62 6c 65 73 2c 20 77 68 69  Lite tables, whi
193f0 63 68 0a 20 20 20 20 2a 2a 20 61 72 65 20 71 75  ch.    ** are qu
19400 65 72 69 65 64 20 66 72 6f 6d 20 77 69 74 68 69  eried from withi
19410 6e 20 78 4e 65 78 74 28 29 20 61 6e 64 20 6f 74  n xNext() and ot
19420 68 65 72 20 76 2d 74 61 62 6c 65 20 6d 65 74 68  her v-table meth
19430 6f 64 73 20 75 73 69 6e 67 0a 20 20 20 20 2a 2a  ods using.    **
19440 20 70 72 65 70 61 72 65 64 20 71 75 65 72 69 65   prepared querie
19450 73 2e 20 49 66 20 73 75 63 68 20 61 20 71 75 65  s. If such a que
19460 72 79 20 69 73 20 6f 75 74 2d 6f 66 2d 64 61 74  ry is out-of-dat
19470 65 2c 20 77 65 20 64 6f 20 6e 6f 74 20 77 61 6e  e, we do not wan
19480 74 20 74 6f 0a 20 20 20 20 2a 2a 20 64 69 73 63  t to.    ** disc
19490 61 72 64 20 74 68 65 20 64 61 74 61 62 61 73 65  ard the database
194a0 20 73 63 68 65 6d 61 2c 20 61 73 20 74 68 65 20   schema, as the 
194b0 75 73 65 72 20 63 6f 64 65 20 69 6d 70 6c 65 6d  user code implem
194c0 65 6e 74 69 6e 67 20 74 68 65 0a 20 20 20 20 2a  enting the.    *
194d0 2a 20 76 2d 74 61 62 6c 65 20 77 6f 75 6c 64 20  * v-table would 
194e0 68 61 76 65 20 74 6f 20 62 65 20 72 65 61 64 79  have to be ready
194f0 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
19500 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 20  _vtab structure 
19510 69 74 73 65 6c 66 0a 20 20 20 20 2a 2a 20 74 6f  itself.    ** to
19520 20 62 65 20 69 6e 76 61 6c 69 64 61 74 65 64 20   be invalidated 
19530 77 68 65 6e 65 76 65 72 20 73 71 6c 69 74 65 33  whenever sqlite3
19540 5f 73 74 65 70 28 29 20 69 73 20 63 61 6c 6c 65  _step() is calle
19550 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 0a 20  d from within . 
19560 20 20 20 2a 2a 20 61 20 76 2d 74 61 62 6c 65 20     ** a v-table 
19570 6d 65 74 68 6f 64 2e 0a 20 20 20 20 2a 2f 0a 20  method..    */. 
19580 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 70     if( db->aDb[p
19590 4f 70 2d 3e 70 31 5d 2e 70 53 63 68 65 6d 61 2d  Op->p1].pSchema-
195a0 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 21 3d  >schema_cookie!=
195b0 69 4d 65 74 61 20 29 7b 0a 20 20 20 20 20 20 73  iMeta ){.      s
195c0 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53 63  qlite3ResetOneSc
195d0 68 65 6d 61 28 64 62 2c 20 70 4f 70 2d 3e 70 31  hema(db, pOp->p1
195e0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 2d 3e  );.    }.    p->
195f0 65 78 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 20  expired = 1;.   
19600 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 53 43 48   rc = SQLITE_SCH
19610 45 4d 41 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  EMA;.  }.  break
19620 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
19630 52 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32  ReadCookie P1 P2
19640 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   P3 * *.**.** Re
19650 61 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72  ad cookie number
19660 20 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73   P3 from databas
19670 65 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69  e P1 and write i
19680 74 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  t into register 
19690 50 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20  P2..** P3==1 is 
196a0 74 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69  the schema versi
196b0 6f 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68  on.  P3==2 is th
196c0 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61  e database forma
196d0 74 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74  t..** P3==3 is t
196e0 68 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70  he recommended p
196f0 61 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c  ager cache size,
19700 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20   and so forth.  
19710 50 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20  P1==0 is.** the 
19720 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
19730 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
19740 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
19750 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a  e used to store.
19760 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ** temporary tab
19770 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65  les..**.** There
19780 20 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d   must be a read-
19790 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
197a0 62 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74  base (either a t
197b0 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75  ransaction.** mu
197c0 73 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72  st be started or
197d0 20 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61   there must be a
197e0 6e 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62  n open cursor) b
197f0 65 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69  efore.** executi
19800 6e 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  ng this instruct
19810 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
19820 52 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20  ReadCookie: {   
19830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f              /* o
19840 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
19850 2f 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20  /.  int iMeta;. 
19860 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20   int iDb;.  int 
19870 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65  iCookie;..  asse
19880 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
19890 20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d   );.  iDb = pOp-
198a0 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d  >p1;.  iCookie =
198b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
198c0 72 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49  rt( pOp->p3<SQLI
198d0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
198e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  );.  assert( iDb
198f0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
19900 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
19910 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74  db->aDb[iDb].pBt
19920 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
19930 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
19940 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
19950 3b 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65  ;..  sqlite3Btre
19960 65 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62  eGetMeta(db->aDb
19970 5b 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b  [iDb].pBt, iCook
19980 69 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ie, (u32 *)&iMet
19990 61 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  a);.  pOut->u.i 
199a0 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
199b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
199c0 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
199d0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
199e0 74 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  te the content o
199f0 66 20 72 65 67 69 73 74 65 72 20 50 33 20 28 69  f register P3 (i
19a00 6e 74 65 72 70 72 65 74 65 64 20 61 73 20 61 6e  nterpreted as an
19a10 20 69 6e 74 65 67 65 72 29 0a 2a 2a 20 69 6e 74   integer).** int
19a20 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
19a30 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
19a40 31 2e 20 20 50 32 3d 3d 31 20 69 73 20 74 68 65  1.  P2==1 is the
19a50 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e   schema version.
19a60 20 20 0a 2a 2a 20 50 32 3d 3d 32 20 69 73 20 74    .** P2==2 is t
19a70 68 65 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d  he database form
19a80 61 74 2e 20 50 32 3d 3d 33 20 69 73 20 74 68 65  at. P2==3 is the
19a90 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61 67   recommended pag
19aa0 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69 7a  er cache .** siz
19ab0 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  e, and so forth.
19ac0 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20 6d    P1==0 is the m
19ad0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
19ae0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
19af0 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  he .** database 
19b00 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74 6f  file used to sto
19b10 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  re temporary tab
19b20 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61  les..**.** A tra
19b30 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62 65  nsaction must be
19b40 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65 20   started before 
19b50 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 6f  executing this o
19b60 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
19b70 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 20 20  P_SetCookie: {  
19b80 20 20 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20       /* in3 */. 
19b90 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73 65   Db *pDb;.  asse
19ba0 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c 49  rt( pOp->p2<SQLI
19bb0 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20  TE_N_BTREE_META 
19bc0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
19bd0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
19be0 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p1<db->nDb );.  
19bf0 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
19c00 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
19c10 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 61   pOp->p1) );.  a
19c20 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
19c30 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20 3d  ly==0 );.  pDb =
19c40 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70   &db->aDb[pOp->p
19c50 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44  1];.  assert( pD
19c60 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61  b->pBt!=0 );.  a
19c70 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
19c80 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
19c90 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29 3b  , pOp->p1, 0) );
19ca0 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
19cb0 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 73 71 6c 69  pOp->p3];.  sqli
19cc0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
19cd0 72 69 66 79 28 70 49 6e 33 29 3b 0a 20 20 2f 2a  rify(pIn3);.  /*
19ce0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74 20   See note about 
19cf0 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20 6f  index shifting o
19d00 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 20  n OP_ReadCookie 
19d10 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
19d20 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74 61  3BtreeUpdateMeta
19d30 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d 3e  (pDb->pBt, pOp->
19d40 70 32 2c 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75  p2, (int)pIn3->u
19d50 2e 69 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .i);.  if( pOp->
19d60 70 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41  p2==BTREE_SCHEMA
19d70 5f 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20  _VERSION ){.    
19d80 2f 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65  /* When the sche
19d90 6d 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65  ma cookie change
19da0 73 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65  s, record the ne
19db0 77 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61  w cookie interna
19dc0 6c 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e  lly */.    pDb->
19dd0 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f  pSchema->schema_
19de0 63 6f 6f 6b 69 65 20 3d 20 28 69 6e 74 29 70 49  cookie = (int)pI
19df0 6e 33 2d 3e 75 2e 69 3b 0a 20 20 20 20 64 62 2d  n3->u.i;.    db-
19e00 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c 49 54 45  >flags |= SQLITE
19e10 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65 73 3b 0a  _InternChanges;.
19e20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
19e30 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49 4c 45 5f  >p2==BTREE_FILE_
19e40 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20 20 2f 2a  FORMAT ){.    /*
19e50 20 52 65 63 6f 72 64 20 63 68 61 6e 67 65 73 20   Record changes 
19e60 69 6e 20 74 68 65 20 66 69 6c 65 20 66 6f 72 6d  in the file form
19e70 61 74 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  at */.    pDb->p
19e80 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72  Schema->file_for
19e90 6d 61 74 20 3d 20 28 75 38 29 70 49 6e 33 2d 3e  mat = (u8)pIn3->
19ea0 75 2e 69 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  u.i;.  }.  if( p
19eb0 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20  Op->p1==1 ){.   
19ec0 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61   /* Invalidate a
19ed0 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74 61 74  ll prepared stat
19ee0 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65 72 20  ements whenever 
19ef0 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
19f00 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d 61 20  e.    ** schema 
19f10 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54 69 63  is changed.  Tic
19f20 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20 20 20  ket #1644 */.   
19f30 20 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72   sqlite3ExpirePr
19f40 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73  eparedStatements
19f50 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70  (db);.    p->exp
19f60 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20  ired = 0;.  }.  
19f70 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
19f80 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50 31  ode: OpenRead P1
19f90 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
19fa0 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
19fb0 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
19fc0 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79 20  pen a read-only 
19fd0 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20 64  cursor for the d
19fe0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77 68  atabase table wh
19ff0 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69 73  ose root page is
1a000 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74 61  .** P2 in a data
1a010 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
1a020 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
1a030 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 50   determined by P
1a040 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65 61  3. .** P3==0 mea
1a050 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ns the main data
1a060 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61 6e  base, P3==1 mean
1a070 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 75  s the database u
1a080 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d 70  sed for .** temp
1a090 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61 6e  orary tables, an
1a0a0 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73 65  d P3>1 means use
1a0b0 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  d the correspond
1a0c0 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a 20  ing attached.** 
1a0d0 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65 20  database.  Give 
1a0e0 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20 61  the new cursor a
1a0f0 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66 20  n identifier of 
1a100 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20 76  P1.  The P1.** v
1a110 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20 62  alues need not b
1a120 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75 74  e contiguous but
1a130 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20 73   all P1 values s
1a140 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20 69  hould be small i
1a150 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20 69  ntegers..** It i
1a160 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 50  s an error for P
1a170 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76 65  1 to be negative
1a180 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d 30  ..**.** If P5!=0
1a190 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63 6f   then use the co
1a1a0 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1a1b0 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f 74  r P2 as the root
1a1c0 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74 68   page, not.** th
1a1d0 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69 74  e value of P2 it
1a1e0 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72  self..**.** Ther
1a1f0 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61 64  e will be a read
1a200 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74   lock on the dat
1a210 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20 74  abase whenever t
1a220 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f 70  here is an.** op
1a230 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20 74  en cursor.  If t
1a240 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73 20  he database was 
1a250 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20 74  unlocked prior t
1a260 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  o this instructi
1a270 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65 61  on.** then a rea
1a280 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  d lock is acquir
1a290 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
1a2a0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
1a2b0 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b 20   A read.** lock 
1a2c0 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72 6f  allows other pro
1a2d0 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20 74  cesses to read t
1a2e0 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74 20  he database but 
1a2f0 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e 79  prohibits.** any
1a300 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20 66   other process f
1a310 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74 68  rom modifying th
1a320 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
1a330 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a 2a   read lock is.**
1a340 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20 61   released when a
1a350 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20 63  ll cursors are c
1a360 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73 20  losed.  If this 
1a370 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74 65  instruction atte
1a380 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20 61  mpts.** to get a
1a390 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20 66   read lock but f
1a3a0 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70 74  ails, the script
1a3b0 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74 68   terminates with
1a3c0 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55   an.** SQLITE_BU
1a3d0 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a 2a  SY error code..*
1a3e0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1a3f0 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1a400 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1a410 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1a420 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1a430 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1a440 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1a450 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1a460 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1a470 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1a480 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1a490 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1a4a0 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1a4b0 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1a4c0 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1a4d0 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1a4e0 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1a4f0 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1a500 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1a510 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a520 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1a530 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
1a540 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52 65  o: OpenWrite, Re
1a550 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f 70  openIdx.*/./* Op
1a560 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78 20  code: ReopenIdx 
1a570 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
1a580 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74  * Synopsis: root
1a590 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a  =P2 iDb=P3.**.**
1a5a0 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20 6f   The ReopenIdx o
1a5b0 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61 63  pcode works exac
1a5c0 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70 65  tly like ReadOpe
1a5d0 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69 74  n except that it
1a5e0 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b 73   first.** checks
1a5f0 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 63   to see if the c
1a600 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20 61  ursor on P1 is a
1a610 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74 68  lready open with
1a620 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a 20   a root page.** 
1a630 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e 64  number of P2 and
1a640 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20 6f   if it is this o
1a650 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61 20  pcode becomes a 
1a660 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65 72  no-op.  In other
1a670 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74 68   words,.** if th
1a680 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72 65  e cursor is alre
1a690 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f 74  ady open, do not
1a6a0 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a 2a   reopen it..**.*
1a6b0 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1a6c0 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79 20  opcode may only 
1a6d0 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35 3d  be used with P5=
1a6e0 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20 62  =0 and with P4 b
1a6f0 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45 59  eing.** a P4_KEY
1a700 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46 75  INFO object.  Fu
1a710 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20 50  rthermore, the P
1a720 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65 20  3 value must be 
1a730 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20 65  the same as.** e
1a740 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70 65  very other Reope
1a750 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61 64  nIdx or OpenRead
1a760 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63 75   for the same cu
1a770 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a 0a  rsor number..**.
1a780 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e 52  ** See the OpenR
1a790 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75 6d  ead opcode docum
1a7a0 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64 64  entation for add
1a7b0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
1a7c0 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
1a7d0 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31 20  e: OpenWrite P1 
1a7e0 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
1a7f0 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50 32  ynopsis: root=P2
1a800 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 70   iDb=P3.**.** Op
1a810 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65 20  en a read/write 
1a820 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31 20  cursor named P1 
1a830 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20  on the table or 
1a840 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
1a850 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e 20  .** page is P2. 
1a860 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73 65   Or if P5!=0 use
1a870 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
1a880 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20 66  register P2 to f
1a890 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74 20  ind the.** root 
1a8a0 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  page..**.** The 
1a8b0 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  P4 value may be 
1a8c0 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65  either an intege
1a8d0 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20  r (P4_INT32) or 
1a8e0 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20  a pointer to.** 
1a8f0 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74  a KeyInfo struct
1a900 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29  ure (P4_KEYINFO)
1a910 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69  . If it is a poi
1a920 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66  nter to a KeyInf
1a930 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c  o .** structure,
1a940 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63   then said struc
1a950 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65  ture defines the
1a960 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c   content and col
1a970 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65  lating .** seque
1a980 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78  nce of the index
1a990 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f   being opened. O
1a9a0 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20  therwise, if P4 
1a9b0 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a  is an integer .*
1a9c0 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73  * value, it is s
1a9d0 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
1a9e0 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
1a9f0 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f 20  he table, or to 
1aa00 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20 69  the.** largest i
1aa10 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c 75  ndex of any colu
1aa20 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  mn of the table 
1aa30 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c 79  that is actually
1aa40 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   used..**.** Thi
1aa50 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 6f  s instruction wo
1aa60 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f 70  rks just like Op
1aa70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74 68  enRead except th
1aa80 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65 20  at it opens the 
1aa90 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65 61  cursor.** in rea
1aaa0 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20 46  d/write mode.  F
1aab0 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c 65  or a given table
1aac0 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20 6f  , there can be o
1aad0 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64 2d  ne or more read-
1aae0 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73 20  only.** cursors 
1aaf0 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61 64  or a single read
1ab00 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62 75  /write cursor bu
1ab10 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a 2a  t not both..**.*
1ab20 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e 52  * See also OpenR
1ab30 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ead..*/.case OP_
1ab40 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20 69  ReopenIdx: {.  i
1ab50 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79  nt nField;.  Key
1ab60 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1ab70 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20    int p2;.  int 
1ab80 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61  iDb;.  int wrFla
1ab90 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b 0a  g;.  Btree *pX;.
1aba0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1abb0 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  ur;.  Db *pDb;..
1abc0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1abd0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
1abe0 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29  =OPFLAG_SEEKEQ )
1abf0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1ac00 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49  >p4type==P4_KEYI
1ac10 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d 20  NFO );.  pCur = 
1ac20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1ac30 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26 26  ];.  if( pCur &&
1ac40 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 3d   pCur->pgnoRoot=
1ac50 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29 7b  =(u32)pOp->p2 ){
1ac60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 75  .    assert( pCu
1ac70 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33 20  r->iDb==pOp->p3 
1ac80 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72 61  );      /* Guara
1ac90 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f 64  nteed by the cod
1aca0 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1acb0 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75 72     goto open_cur
1acc0 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a 20  sor_set_hints;. 
1acd0 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 63   }.  /* If the c
1ace0 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75 72  ursor is not cur
1acf0 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20 69  rently open or i
1ad00 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66 66  s open on a diff
1ad10 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65 78  erent.  ** index
1ad20 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f  , then fall thro
1ad30 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65 6e  ugh into OP_Open
1ad40 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61 20  Read to force a 
1ad50 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20 4f  reopen */.case O
1ad60 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73 65  P_OpenRead:.case
1ad70 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a 0a   OP_OpenWrite:..
1ad80 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
1ad90 70 35 26 28 4f 50 46 4c 41 47 5f 50 32 49 53 52  p5&(OPFLAG_P2ISR
1ada0 45 47 7c 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  EG|OPFLAG_BULKCS
1adb0 52 7c 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29  R|OPFLAG_SEEKEQ)
1adc0 29 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20  )==pOp->p5 );.  
1add0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
1ade0 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74  ode==OP_OpenWrit
1adf0 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  e || pOp->p5==0 
1ae00 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f 50 46 4c  || pOp->p5==OPFL
1ae10 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 20 20 61  AG_SEEKEQ );.  a
1ae20 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1ae30 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1ae40 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1ae50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20 70 4f 70  _OpenRead || pOp
1ae60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 65 6f  ->opcode==OP_Reo
1ae70 70 65 6e 49 64 78 0a 20 20 20 20 20 20 20 20 20  penIdx.         
1ae80 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d   || p->readOnly=
1ae90 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20 70 2d 3e  =0 );..  if( p->
1aea0 65 78 70 69 72 65 64 20 29 7b 0a 20 20 20 20 72  expired ){.    r
1aeb0 63 20 3d 20 53 51 4c 49 54 45 5f 41 42 4f 52 54  c = SQLITE_ABORT
1aec0 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20 20 20 62  _ROLLBACK;.    b
1aed0 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69  reak;.  }..  nFi
1aee0 65 6c 64 20 3d 20 30 3b 0a 20 20 70 4b 65 79 49  eld = 0;.  pKeyI
1aef0 6e 66 6f 20 3d 20 30 3b 0a 20 20 70 32 20 3d 20  nfo = 0;.  p2 = 
1af00 70 4f 70 2d 3e 70 32 3b 0a 20 20 69 44 62 20 3d  pOp->p2;.  iDb =
1af10 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65   pOp->p3;.  asse
1af20 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20 69 44  rt( iDb>=0 && iD
1af30 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61  b<db->nDb );.  a
1af40 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
1af50 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
1af60 69 44 62 29 20 29 3b 0a 20 20 70 44 62 20 3d 20  iDb) );.  pDb = 
1af70 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 20  &db->aDb[iDb];. 
1af80 20 70 58 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a   pX = pDb->pBt;.
1af90 20 20 61 73 73 65 72 74 28 20 70 58 21 3d 30 20    assert( pX!=0 
1afa0 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  );.  if( pOp->op
1afb0 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69  code==OP_OpenWri
1afc0 74 65 20 29 7b 0a 20 20 20 20 77 72 46 6c 61 67  te ){.    wrFlag
1afd0 20 3d 20 31 3b 0a 20 20 20 20 61 73 73 65 72 74   = 1;.    assert
1afe0 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
1aff0 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
1b000 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
1b010 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69  pDb->pSchema->fi
1b020 6c 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d  le_format < p->m
1b030 69 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61  inWriteFileForma
1b040 74 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69  t ){.      p->mi
1b050 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1b060 20 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d   = pDb->pSchema-
1b070 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20  >file_format;.  
1b080 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1b090 20 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d   wrFlag = 0;.  }
1b0a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
1b0b0 20 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20   OPFLAG_P2ISREG 
1b0c0 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
1b0d0 32 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  2>0 );.    asser
1b0e0 74 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d  t( p2<=(p->nMem-
1b0f0 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
1b100 20 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b     pIn2 = &aMem[
1b110 70 32 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p2];.    assert(
1b120 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 32   memIsValid(pIn2
1b130 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ) );.    assert(
1b140 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20   (pIn2->flags & 
1b150 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20  MEM_Int)!=0 );. 
1b160 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
1b170 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 32  mIntegerify(pIn2
1b180 29 3b 0a 20 20 20 20 70 32 20 3d 20 28 69 6e 74  );.    p2 = (int
1b190 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20  )pIn2->u.i;.    
1b1a0 2f 2a 20 54 68 65 20 70 32 20 76 61 6c 75 65 20  /* The p2 value 
1b1b0 61 6c 77 61 79 73 20 63 6f 6d 65 73 20 66 72 6f  always comes fro
1b1c0 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f 43 72 65  m a prior OP_Cre
1b1d0 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1b1e0 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68 61 74 20  and.    ** that 
1b1f0 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61  opcode will alwa
1b200 79 73 20 73 65 74 20 74 68 65 20 70 32 20 76 61  ys set the p2 va
1b210 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d 6f 72 65  lue to 2 or more
1b220 20 6f 72 20 65 6c 73 65 20 66 61 69 6c 2e 0a 20   or else fail.. 
1b230 20 20 20 2a 2a 20 49 66 20 74 68 65 72 65 20 77     ** If there w
1b240 65 72 65 20 61 20 66 61 69 6c 75 72 65 2c 20 74  ere a failure, t
1b250 68 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74  he prepared stat
1b260 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68 61 76 65  ement would have
1b270 20 68 61 6c 74 65 64 0a 20 20 20 20 2a 2a 20 62   halted.    ** b
1b280 65 66 6f 72 65 20 72 65 61 63 68 69 6e 67 20 74  efore reaching t
1b290 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1b2a0 20 2a 2f 0a 20 20 20 20 69 66 28 20 4e 45 56 45   */.    if( NEVE
1b2b0 52 28 70 32 3c 32 29 20 29 20 7b 0a 20 20 20 20  R(p2<2) ) {.    
1b2c0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
1b2d0 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
1b2e0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1b2f0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1b300 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1b310 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1b320 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1b330 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1b340 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1b350 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1b360 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1b370 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1b380 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1b390 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1b3a0 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49  fo->nField+pKeyI
1b3b0 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20  nfo->nXField;.  
1b3c0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1b3d0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1b3e0 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  ){.    nField = 
1b3f0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20  pOp->p4.i;.  }. 
1b400 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b410 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1b420 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20   nField>=0 );.  
1b430 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64  testcase( nField
1b440 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65  ==0 );  /* Table
1b450 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52   with INTEGER PR
1b460 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f  IMARY KEY and no
1b470 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20  thing else */.  
1b480 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
1b490 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1b4a0 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 31  , nField, iDb, 1
1b4b0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 3d 3d 30  );.  if( pCur==0
1b4c0 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1b4d0 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20    pCur->nullRow 
1b4e0 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e 69 73 4f  = 1;.  pCur->isO
1b4f0 72 64 65 72 65 64 20 3d 20 31 3b 0a 20 20 70 43  rdered = 1;.  pC
1b500 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74 20 3d 20 70  ur->pgnoRoot = p
1b510 32 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  2;.  rc = sqlite
1b520 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1b530 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1b540 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 70 43 75  yInfo, pCur->pCu
1b550 72 73 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70  rsor);.  pCur->p
1b560 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e  KeyInfo = pKeyIn
1b570 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65  fo;.  /* Set the
1b580 20 56 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61   VdbeCursor.isTa
1b590 62 6c 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72  ble variable. Pr
1b5a0 65 76 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20  evious versions 
1b5b0 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75  of.  ** SQLite u
1b5c0 73 65 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20  sed to check if 
1b5d0 74 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c  the root-page fl
1b5e0 61 67 73 20 77 65 72 65 20 73 61 6e 65 20 61 74  ags were sane at
1b5f0 20 74 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a   this point.  **
1b600 20 61 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61   and report data
1b610 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20  base corruption 
1b620 69 66 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74  if they were not
1b630 2c 20 62 75 74 20 74 68 69 73 20 63 68 65 63 6b  , but this check
1b640 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20   has.  ** since 
1b650 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62  moved into the b
1b660 74 72 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20  tree layer.  */ 
1b670 20 0a 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c   .  pCur->isTabl
1b680 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21  e = pOp->p4type!
1b690 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70  =P4_KEYINFO;..op
1b6a0 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1b6b0 6e 74 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f  nts:.  assert( O
1b6c0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42  PFLAG_BULKCSR==B
1b6d0 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b  TREE_BULKLOAD );
1b6e0 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41  .  assert( OPFLA
1b6f0 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f  G_SEEKEQ==BTREE_
1b700 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20 73 71 6c  SEEK_EQ );.  sql
1b710 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 48  ite3BtreeCursorH
1b720 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72 73  ints(pCur->pCurs
1b730 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  or,.            
1b740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 70                (p
1b750 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47  Op->p5 & (OPFLAG
1b760 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41 47 5f  _BULKCSR|OPFLAG_
1b770 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 62 72 65  SEEKEQ)));.  bre
1b780 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1b790 3a 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  : OpenEphemeral 
1b7a0 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a 2a 2a  P1 P2 * P4 P5.**
1b7b0 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1b7c0 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e  mn=P2.**.** Open
1b7d0 20 61 20 6e 65 77 20 63 75 72 73 6f 72 20 50 31   a new cursor P1
1b7e0 20 74 6f 20 61 20 74 72 61 6e 73 69 65 6e 74 20   to a transient 
1b7f0 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 63 75  table..** The cu
1b800 72 73 6f 72 20 69 73 20 61 6c 77 61 79 73 20 6f  rsor is always o
1b810 70 65 6e 65 64 20 72 65 61 64 2f 77 72 69 74 65  pened read/write
1b820 20 65 76 65 6e 20 69 66 20 0a 2a 2a 20 74 68 65   even if .** the
1b830 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69   main database i
1b840 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 20 20 54 68  s read-only.  Th
1b850 65 20 65 70 68 65 6d 65 72 61 6c 0a 2a 2a 20 74  e ephemeral.** t
1b860 61 62 6c 65 20 69 73 20 64 65 6c 65 74 65 64 20  able is deleted 
1b870 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 77 68  automatically wh
1b880 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  en the cursor is
1b890 20 63 6c 6f 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 50   closed..**.** P
1b8a0 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
1b8b0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1b8c0 65 20 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c  e ephemeral tabl
1b8d0 65 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  e..** The cursor
1b8e0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 42 54 72   points to a BTr
1b8f0 65 65 20 74 61 62 6c 65 20 69 66 20 50 34 3d 3d  ee table if P4==
1b900 30 20 61 6e 64 20 74 6f 20 61 20 42 54 72 65 65  0 and to a BTree
1b910 20 69 6e 64 65 78 0a 2a 2a 20 69 66 20 50 34 20   index.** if P4 
1b920 69 73 20 6e 6f 74 20 30 2e 20 20 49 66 20 50 34  is not 0.  If P4
1b930 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 74   is not NULL, it
1b940 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 4b 65 79   points to a Key
1b950 49 6e 66 6f 20 73 74 72 75 63 74 75 72 65 0a 2a  Info structure.*
1b960 2a 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 74  * that defines t
1b970 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 6b 65 79  he format of key
1b980 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 2e 0a  s in the index..
1b990 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 70 61 72  **.** The P5 par
1b9a0 61 6d 65 74 65 72 20 63 61 6e 20 62 65 20 61 20  ameter can be a 
1b9b0 6d 61 73 6b 20 6f 66 20 74 68 65 20 42 54 52 45  mask of the BTRE
1b9c0 45 5f 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65  E_* flags define
1b9d0 64 0a 2a 2a 20 69 6e 20 62 74 72 65 65 2e 68 2e  d.** in btree.h.
1b9e0 20 20 54 68 65 73 65 20 66 6c 61 67 73 20 63 6f    These flags co
1b9f0 6e 74 72 6f 6c 20 61 73 70 65 63 74 73 20 6f 66  ntrol aspects of
1ba00 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f   the operation o
1ba10 66 0a 2a 2a 20 74 68 65 20 62 74 72 65 65 2e 20  f.** the btree. 
1ba20 20 54 68 65 20 42 54 52 45 45 5f 4f 4d 49 54 5f   The BTREE_OMIT_
1ba30 4a 4f 55 52 4e 41 4c 20 61 6e 64 20 42 54 52 45  JOURNAL and BTRE
1ba40 45 5f 53 49 4e 47 4c 45 20 66 6c 61 67 73 20 61  E_SINGLE flags a
1ba50 72 65 0a 2a 2a 20 61 64 64 65 64 20 61 75 74 6f  re.** added auto
1ba60 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a  matically..*/./*
1ba70 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 41 75 74   Opcode: OpenAut
1ba80 6f 69 6e 64 65 78 20 50 31 20 50 32 20 2a 20 50  oindex P1 P2 * P
1ba90 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1baa0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1bab0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
1bac0 72 6b 73 20 74 68 65 20 73 61 6d 65 20 61 73 20  rks the same as 
1bad0 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c  OP_OpenEphemeral
1bae0 2e 20 20 49 74 20 68 61 73 20 61 0a 2a 2a 20 64  .  It has a.** d
1baf0 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 74 6f  ifferent name to
1bb00 20 64 69 73 74 69 6e 67 75 69 73 68 20 69 74 73   distinguish its
1bb10 20 75 73 65 2e 20 20 54 61 62 6c 65 73 20 63 72   use.  Tables cr
1bb20 65 61 74 65 64 20 75 73 69 6e 67 0a 2a 2a 20 62  eated using.** b
1bb30 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69  y this opcode wi
1bb40 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  ll be used for a
1bb50 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1bb60 61 74 65 64 20 74 72 61 6e 73 69 65 6e 74 0a 2a  ated transient.*
1bb70 2a 20 69 6e 64 69 63 65 73 20 69 6e 20 6a 6f 69  * indices in joi
1bb80 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  ns..*/.case OP_O
1bb90 70 65 6e 41 75 74 6f 69 6e 64 65 78 3a 20 0a 63  penAutoindex: .c
1bba0 61 73 65 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d  ase OP_OpenEphem
1bbb0 65 72 61 6c 3a 20 7b 0a 20 20 56 64 62 65 43 75  eral: {.  VdbeCu
1bbc0 72 73 6f 72 20 2a 70 43 78 3b 0a 20 20 4b 65 79  rsor *pCx;.  Key
1bbd0 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a  Info *pKeyInfo;.
1bbe0 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
1bbf0 69 6e 74 20 76 66 73 46 6c 61 67 73 20 3d 20 0a  int vfsFlags = .
1bc00 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45        SQLITE_OPE
1bc10 4e 5f 52 45 41 44 57 52 49 54 45 20 7c 0a 20 20  N_READWRITE |.  
1bc20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f      SQLITE_OPEN_
1bc30 43 52 45 41 54 45 20 7c 0a 20 20 20 20 20 20 53  CREATE |.      S
1bc40 51 4c 49 54 45 5f 4f 50 45 4e 5f 45 58 43 4c 55  QLITE_OPEN_EXCLU
1bc50 53 49 56 45 20 7c 0a 20 20 20 20 20 20 53 51 4c  SIVE |.      SQL
1bc60 49 54 45 5f 4f 50 45 4e 5f 44 45 4c 45 54 45 4f  ITE_OPEN_DELETEO
1bc70 4e 43 4c 4f 53 45 20 7c 0a 20 20 20 20 20 20 53  NCLOSE |.      S
1bc80 51 4c 49 54 45 5f 4f 50 45 4e 5f 54 52 41 4e 53  QLITE_OPEN_TRANS
1bc90 49 45 4e 54 5f 44 42 3b 0a 20 20 61 73 73 65 72  IENT_DB;.  asser
1bca0 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b  t( pOp->p1>=0 );
1bcb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1bcc0 70 32 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d  p2>=0 );.  pCx =
1bcd0 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28   allocateCursor(
1bce0 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  p, pOp->p1, pOp-
1bcf0 3e 70 32 2c 20 2d 31 2c 20 31 29 3b 0a 20 20 69  >p2, -1, 1);.  i
1bd00 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f  f( pCx==0 ) goto
1bd10 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e   no_mem;.  pCx->
1bd20 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70  nullRow = 1;.  p
1bd30 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  Cx->isEphemeral 
1bd40 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  = 1;.  rc = sqli
1bd50 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64 62 2d  te3BtreeOpen(db-
1bd60 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20 26 70  >pVfs, 0, db, &p
1bd70 43 78 2d 3e 70 42 74 2c 20 0a 20 20 20 20 20 20  Cx->pBt, .      
1bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1bd90 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55    BTREE_OMIT_JOU
1bda0 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f 53 49 4e  RNAL | BTREE_SIN
1bdb0 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35 2c 20 76  GLE | pOp->p5, v
1bdc0 66 73 46 6c 61 67 73 29 3b 0a 20 20 69 66 28 20  fsFlags);.  if( 
1bdd0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
1bde0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1bdf0 33 42 74 72 65 65 42 65 67 69 6e 54 72 61 6e 73  3BtreeBeginTrans
1be00 28 70 43 78 2d 3e 70 42 74 2c 20 31 29 3b 0a 20  (pCx->pBt, 1);. 
1be10 20 7d 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c   }.  if( rc==SQL
1be20 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 2f 2a  ITE_OK ){.    /*
1be30 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20   If a transient 
1be40 69 6e 64 65 78 20 69 73 20 72 65 71 75 69 72 65  index is require
1be50 64 2c 20 63 72 65 61 74 65 20 69 74 20 62 79 20  d, create it by 
1be60 63 61 6c 6c 69 6e 67 0a 20 20 20 20 2a 2a 20 73  calling.    ** s
1be70 71 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74  qlite3BtreeCreat
1be80 65 54 61 62 6c 65 28 29 20 77 69 74 68 20 74 68  eTable() with th
1be90 65 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20  e BTREE_BLOBKEY 
1bea0 66 6c 61 67 20 62 65 66 6f 72 65 0a 20 20 20 20  flag before.    
1beb0 2a 2a 20 6f 70 65 6e 69 6e 67 20 69 74 2e 20 49  ** opening it. I
1bec0 66 20 61 20 74 72 61 6e 73 69 65 6e 74 20 74 61  f a transient ta
1bed0 62 6c 65 20 69 73 20 72 65 71 75 69 72 65 64 2c  ble is required,
1bee0 20 6a 75 73 74 20 75 73 65 20 74 68 65 0a 20 20   just use the.  
1bef0 20 20 2a 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c    ** automatical
1bf00 6c 79 20 63 72 65 61 74 65 64 20 74 61 62 6c 65  ly created table
1bf10 20 77 69 74 68 20 72 6f 6f 74 2d 70 61 67 65 20   with root-page 
1bf20 31 20 28 61 6e 20 42 4c 4f 42 5f 49 4e 54 4b 45  1 (an BLOB_INTKE
1bf30 59 20 74 61 62 6c 65 29 2e 0a 20 20 20 20 2a 2f  Y table)..    */
1bf40 0a 20 20 20 20 69 66 28 20 28 70 4b 65 79 49 6e  .    if( (pKeyIn
1bf50 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1bf60 79 49 6e 66 6f 29 21 3d 30 20 29 7b 0a 20 20 20  yInfo)!=0 ){.   
1bf70 20 20 20 69 6e 74 20 70 67 6e 6f 3b 0a 20 20 20     int pgno;.   
1bf80 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
1bf90 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1bfa0 46 4f 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  FO );.      rc =
1bfb0 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 72 65   sqlite3BtreeCre
1bfc0 61 74 65 54 61 62 6c 65 28 70 43 78 2d 3e 70 42  ateTable(pCx->pB
1bfd0 74 2c 20 26 70 67 6e 6f 2c 20 42 54 52 45 45 5f  t, &pgno, BTREE_
1bfe0 42 4c 4f 42 4b 45 59 20 7c 20 70 4f 70 2d 3e 70  BLOBKEY | pOp->p
1bff0 35 29 3b 20 0a 20 20 20 20 20 20 69 66 28 20 72  5); .      if( r
1c000 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  c==SQLITE_OK ){.
1c010 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1c020 70 67 6e 6f 3d 3d 4d 41 53 54 45 52 5f 52 4f 4f  pgno==MASTER_ROO
1c030 54 2b 31 20 29 3b 0a 20 20 20 20 20 20 20 20 61  T+1 );.        a
1c040 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d  ssert( pKeyInfo-
1c050 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 20  >db==db );.     
1c060 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 49     assert( pKeyI
1c070 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1c080 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70 43 78  ) );.        pCx
1c090 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1c0a0 79 49 6e 66 6f 3b 0a 20 20 20 20 20 20 20 20 72  yInfo;.        r
1c0b0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1c0c0 43 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c  Cursor(pCx->pBt,
1c0d0 20 70 67 6e 6f 2c 20 31 2c 20 70 4b 65 79 49 6e   pgno, 1, pKeyIn
1c0e0 66 6f 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72  fo, pCx->pCursor
1c0f0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
1c100 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1c110 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  0;.    }else{.  
1c120 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1c130 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d  BtreeCursor(pCx-
1c140 3e 70 42 74 2c 20 4d 41 53 54 45 52 5f 52 4f 4f  >pBt, MASTER_ROO
1c150 54 2c 20 31 2c 20 30 2c 20 70 43 78 2d 3e 70 43  T, 1, 0, pCx->pC
1c160 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 70 43  ursor);.      pC
1c170 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a  x->isTable = 1;.
1c180 20 20 20 20 7d 0a 20 20 7d 0a 20 20 70 43 78 2d      }.  }.  pCx-
1c190 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70 4f  >isOrdered = (pO
1c1a0 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e 4f  p->p5!=BTREE_UNO
1c1b0 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61 6b  RDERED);.  break
1c1c0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c1d0 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50 32  SorterOpen P1 P2
1c1e0 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 54   P3 P4 *.**.** T
1c1f0 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73  his opcode works
1c200 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70 68   like OP_OpenEph
1c210 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74 68  emeral except th
1c220 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20 61  at it opens.** a
1c230 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78   transient index
1c240 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66 69   that is specifi
1c250 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20 74  cally designed t
1c260 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a 20  o sort large.** 
1c270 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e 20  tables using an 
1c280 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d 73  external merge-s
1c290 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a 2a  ort algorithm..*
1c2a0 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e 74  *.** If argument
1c2b0 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P3 is non-zero,
1c2c0 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61 74   then it indicat
1c2d0 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72 74  es that the sort
1c2e0 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d 65  er may.** assume
1c2f0 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20 73   that a stable s
1c300 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67 20  ort considering 
1c310 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69 65  the first P3 fie
1c320 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20 6b  lds of each.** k
1c330 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  ey is sufficient
1c340 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65 20   to produce the 
1c350 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74 73  required results
1c360 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
1c370 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62  terOpen: {.  Vdb
1c380 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1c390 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1c3a0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1c3b0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1c3c0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1c3d0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1c3e0 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 31  , pOp->p2, -1, 1
1c3f0 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20  );.  if( pCx==0 
1c400 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
1c410 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d   pCx->pKeyInfo =
1c420 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1c430 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 78  o;.  assert( pCx
1c440 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d  ->pKeyInfo->db==
1c450 64 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  db );.  assert( 
1c460 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65  pCx->pKeyInfo->e
1c470 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1c480 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
1c490 65 53 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20  eSorterInit(db, 
1c4a0 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20  pOp->p3, pCx);. 
1c4b0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1c4c0 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 54 65  code: SequenceTe
1c4d0 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  st P1 P2 * * *.*
1c4e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 28 20  * Synopsis: if( 
1c4f0 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b  cursor[P1].ctr++
1c500 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a 2a 2a   ) pc = P2.**.**
1c510 20 50 31 20 69 73 20 61 20 73 6f 72 74 65 72 20   P1 is a sorter 
1c520 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65 20 73  cursor. If the s
1c530 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65 72 20  equence counter 
1c540 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a 65 72  is currently zer
1c550 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20 50 32  o, jump.** to P2
1c560 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20  . Regardless of 
1c570 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
1c580 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
1c590 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 65 0a  , increment the.
1c5a0 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63 65 20  ** the sequence 
1c5b0 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  value..*/.case O
1c5c0 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74 3a 20  P_SequenceTest: 
1c5d0 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1c5e0 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  pC;.  assert( pO
1c5f0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1c600 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
1c610 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
1c620 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
1c630 73 65 72 74 28 20 70 43 2d 3e 70 53 6f 72 74 65  sert( pC->pSorte
1c640 72 20 29 3b 0a 20 20 69 66 28 20 28 70 43 2d 3e  r );.  if( (pC->
1c650 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d 30 20 29  seqCount++)==0 )
1c660 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
1c670 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
1c680 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c690 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1c6a0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1c6b0 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1c6c0 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1c6d0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1c6e0 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1c6f0 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1c700 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1c710 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1c720 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1c730 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1c740 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1c750 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1c760 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1c770 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1c780 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1c790 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1c7a0 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1c7b0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1c7c0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1c7d0 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1c7e0 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1c7f0 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1c800 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1c810 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1c820 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1c830 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1c840 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1c850 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1c860 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1c870 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1c880 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1c890 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1c8a0 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1c8b0 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1c8c0 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1c8d0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c8e0 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1c8f0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1c900 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1c910 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1c920 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1c930 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1c940 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1c950 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1c960 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1c970 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1c980 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c990 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1c9a0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1c9b0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1c9c0 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1c9d0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c9e0 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1c9f0 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1ca00 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1ca10 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1ca20 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1ca30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1ca40 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  p5==0 );.  break
1ca50 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1ca60 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
1ca70 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
1ca80 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
1ca90 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
1caa0 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
1cab0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
1cac0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1cad0 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
1cae0 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
1caf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1cb00 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1cb10 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1cb20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1cb30 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1cb40 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
1cb50 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1cb60 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
1cb70 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1cb80 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34  ekGE P1 P2 P3 P4
1cb90 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1cba0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1cbb0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1cbc0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1cbd0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1cbe0 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1cbf0 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1cc00 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1cc10 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
1cc20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
1cc30 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1cc40 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1cc50 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1cc60 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1cc70 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1cc80 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1cc90 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1cca0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1ccb0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1ccc0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1ccd0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1cce0 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1ccf0 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1cd00 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1cd10 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1cd20 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1cd30 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1cd40 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1cd50 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1cd60 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1cd70 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1cd80 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1cd90 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1cda0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1cdb0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1cdc0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1cdd0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1cde0 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65  nning toward the
1cdf0 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20   end.  In other 
1ce00 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f  words, the curso
1ce10 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72  r is.** configur
1ce20 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20  ed to use Next, 
1ce30 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20  not Prev..**.** 
1ce40 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c  See also: Found,
1ce50 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c   NotFound, SeekL
1ce60 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c  t, SeekGt, SeekL
1ce70 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  e.*/./* Opcode: 
1ce80 53 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20  SeekGT P1 P2 P3 
1ce90 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
1cea0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
1ceb0 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50  *.** If cursor P
1cec0 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53  1 refers to an S
1ced0 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65  QL table (B-Tree
1cee0 20 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67   that uses integ
1cef0 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73  er keys), .** us
1cf00 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  e the value in r
1cf10 65 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20  egister P3 as a 
1cf20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50  key. If cursor P
1cf30 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20  1 refers .** to 
1cf40 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68  an SQL index, th
1cf50 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72  en P3 is the fir
1cf60 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f  st in an array o
1cf70 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a  f P4 registers .
1cf80 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64  ** that are used
1cf90 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20   as an unpacked 
1cfa0 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a  index key. .**.*
1cfb0 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72  * Reposition cur
1cfc0 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20  sor P1 so that  
1cfd0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
1cfe0 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20   smallest entry 
1cff0 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61  that .** is grea
1d000 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ter than the key
1d010 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65   value. If there
1d020 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20   are no records 
1d030 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a  greater than .**
1d040 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20   the key and P2 
1d050 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
1d060 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
1d070 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1d080 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1d090 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1d0a0 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
1d0b0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1d0c0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
1d0d0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
1d0e0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1d0f0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1d100 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1d110 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
1d120 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1d130 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1d140 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65  , SeekLt, SeekGe
1d150 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1d160 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31  pcode: SeekLT P1
1d170 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20   P2 P3 P4 * .** 
1d180 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1d190 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1d1a0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d1b0 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1d1c0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1d1d0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1d1e0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1d1f0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1d200 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1d210 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d220 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1d230 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1d240 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1d250 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1d260 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1d270 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1d280 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1d290 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1d2a0 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1d2b0 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74  o that  it point
1d2c0 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74  s to the largest
1d2d0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1d2e0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
1d2f0 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74   key value. If t
1d300 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f  here are no reco
1d310 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a  rds less than .*
1d320 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32  * the key and P2
1d330 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68   is not zero, th
1d340 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a  en jump to P2..*
1d350 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1d360 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
1d370 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
1d380 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65   move in reverse
1d390 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
1d3a0 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74  the end toward t
1d3b0 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49  he beginning.  I
1d3c0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
1d3d0 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
1d3e0 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
1d3f0 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74  e Prev, not Next
1d400 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1d410 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e  : Found, NotFoun
1d420 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47  d, SeekGt, SeekG
1d430 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20  e, SeekLe.*/./* 
1d440 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50  Opcode: SeekLE P
1d450 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1d460 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1d470 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1d480 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d490 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65   to an SQL table
1d4a0 20 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73   (B-Tree that us
1d4b0 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29  es integer keys)
1d4c0 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61  , .** use the va
1d4d0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
1d4e0 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20  P3 as a key. If 
1d4f0 63 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73  cursor P1 refers
1d500 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69   .** to an SQL i
1d510 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73  ndex, then P3 is
1d520 20 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e   the first in an
1d530 20 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67   array of P4 reg
1d540 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20  isters .** that 
1d550 61 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75  are used as an u
1d560 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
1d570 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69  y. .**.** Reposi
1d580 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73  tion cursor P1 s
1d590 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1d5a0 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20   to the largest 
1d5b0 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69  entry that .** i
1d5c0 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65  s less than or e
1d5d0 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20  qual to the key 
1d5e0 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1d5f0 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a  are no records .
1d600 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  ** less than or 
1d610 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
1d620 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1d630 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1d640 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1d650 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1d660 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1d670 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1d680 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1d690 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1d6a0 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1d6b0 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1d6c0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1d6d0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1d6e0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1d6f0 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1d700 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1d710 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1d720 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74  , SeekGe, SeekLt
1d730 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b  .*/.case OP_Seek
1d740 4c 54 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LT:         /* j
1d750 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1d760 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20   OP_SeekLE:     
1d770 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1d780 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1d790 47 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  GE:         /* j
1d7a0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1d7b0 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20   OP_SeekGT: {   
1d7c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1d7d0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20   */.  int res;. 
1d7e0 20 69 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43   int oc;.  VdbeC
1d7f0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70  ursor *pC;.  Unp
1d800 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20  ackedRecord r;. 
1d810 20 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69   int nField;.  i
1d820 36 34 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a  64 iKey;      /*
1d830 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61 72   The rowid we ar
1d840 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a  e to seek to */.
1d850 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1d860 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1d870 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1d880 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
1d890 21 3d 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  !=0 );.  pC = p-
1d8a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
1d8b0 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
1d8c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d8d0 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67  ->pseudoTableReg
1d8e0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
1d8f0 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50   OP_SeekLE == OP
1d900 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61  _SeekLT+1 );.  a
1d910 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1d920 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20   == OP_SeekLT+2 
1d930 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1d940 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65  SeekGT == OP_See
1d950 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLT+3 );.  asser
1d960 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1d970 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1d980 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
1d990 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f    oc = pOp->opco
1d9a0 64 65 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f  de;.  pC->nullRo
1d9b0 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51  w = 0;.#ifdef SQ
1d9c0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
1d9d0 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f  >seekOp = pOp->o
1d9e0 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a 20  pcode;.#endif.. 
1d9f0 20 2f 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72   /* For a cursor
1da00 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45 5f   with the BTREE_
1da10 53 45 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e  SEEK_EQ hint, on
1da20 6c 79 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45  ly the OP_SeekGE
1da30 20 61 6e 64 0a 20 20 2a 2a 20 4f 50 5f 53 65 65   and.  ** OP_See
1da40 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
1da50 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
1da60 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
1da70 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
1da80 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49 64    ** by an OP_Id
1da90 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54 20  xGT or OP_IdxLT 
1daa0 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74 69  opcode, respecti
1dab0 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20 73  vely, with the s
1dac0 61 6d 65 20 6b 65 79 2e 0a 20 20 2a 2f 0a 23 69  ame key..  */.#i
1dad0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1dae0 47 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 42  G.  if( sqlite3B
1daf0 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69 6e  treeCursorHasHin
1db00 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 42  t(pC->pCursor, B
1db10 54 52 45 45 5f 53 45 45 4b 5f 45 51 29 20 29 7b  TREE_SEEK_EQ) ){
1db20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1db30 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 65 65  ->opcode==OP_See
1db40 6b 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  kGE || pOp->opco
1db50 64 65 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 3b  de==OP_SeekLE );
1db60 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
1db70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  [1].opcode==OP_I
1db80 64 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f  dxLT || pOp[1].o
1db90 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20  pcode==OP_IdxGT 
1dba0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1dbb0 4f 70 5b 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d  Op[1].p1==pOp[0]
1dbc0 2e 70 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  .p1 );.    asser
1dbd0 74 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f  t( pOp[1].p2==pO
1dbe0 70 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 61  p[0].p2 );.    a
1dbf0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
1dc00 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
1dc10 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
1dc20 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d 2e 70  ].p4.i==pOp[0].p
1dc30 34 2e 69 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  4.i );.  }.#endi
1dc40 66 0a 20 0a 20 20 69 66 28 20 70 43 2d 3e 69 73  f. .  if( pC->is
1dc50 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 2f 2a 20  Table ){.    /* 
1dc60 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65 20  The input value 
1dc70 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20 6f  in P3 might be o
1dc80 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74 65  f any type: inte
1dc90 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69 6e  ger, real, strin
1dca0 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c 20  g,.    ** blob, 
1dcb0 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69 74  or NULL.  But it
1dcc0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e 20   needs to be an 
1dcd0 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20 77  integer before w
1dce0 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a 20  e can do.    ** 
1dcf0 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f 6e  the seek, so con
1dd00 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20 20  vert it. */.    
1dd10 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
1dd20 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20 28  ->p3];.    if( (
1dd30 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pIn3->flags & (M
1dd40 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c  EM_Int|MEM_Real|
1dd50 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53  MEM_Str))==MEM_S
1dd60 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70 6c  tr ){.      appl
1dd70 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79  yNumericAffinity
1dd80 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20 7d  (pIn3, 0);.    }
1dd90 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c 69  .    iKey = sqli
1dda0 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1ddb0 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  pIn3);..    /* I
1ddc0 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1ddd0 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e 76  ould not be conv
1dde0 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
1ddf0 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20 20  teger without.  
1de00 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e 66    ** loss of inf
1de10 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20 73  ormation, then s
1de20 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69 6e  pecial processin
1de30 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e 2e  g is required...
1de40 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49 6e   */.    if( (pIn
1de50 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  3->flags & MEM_I
1de60 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  nt)==0 ){.      
1de70 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  if( (pIn3->flags
1de80 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20   & MEM_Real)==0 
1de90 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
1dea0 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63 61   the P3 value ca
1deb0 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
1dec0 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64 20  d into any kind 
1ded0 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20 20  of a number,.   
1dee0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
1def0 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f 73   seek is not pos
1df00 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20 74  sible, so jump t
1df10 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  o P2 */.        
1df20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1df30 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  ;  VdbeBranchTak
1df40 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 20 20 20  en(1,2);.       
1df50 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1df60 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1df70 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1df80 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
1df90 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1dfa0 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1dfb0 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1dfc0 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
1dfd0 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
1dfe0 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
1dff0 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
1e000 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
1e010 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
1e020 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
1e030 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1e040 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
1e050 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
1e060 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
1e070 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1e080 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
1e090 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
1e0a0 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  ->u.r<(double)iK
1e0b0 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1e0c0 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
1e0d0 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
1e0e0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1e0f0 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
1e100 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
1e110 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1e120 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
1e130 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1e140 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1e150 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1e160 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1e170 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1e180 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
1e190 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1e1a0 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1e1b0 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
1e1c0 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1e1d0 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1e1e0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1e1f0 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
1e200 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
1e210 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
1e220 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r>(double)iKe
1e230 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1e240 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
1e250 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
1e260 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1e270 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
1e280 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
1e290 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1e2a0 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
1e2b0 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
1e2c0 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1e2d0 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1e2e0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
1e2f0 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
1e300 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
1e310 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
1e320 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1e330 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1e340 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65 79 2c  r, 0, (u64)iKey,
1e350 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70   0, &res);.    p
1e360 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
1e370 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
1e380 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
1e390 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
1e3a0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1e3b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
1e3c0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
1e3d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65   }else{.    nFie
1e3e0 6c 64 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a  ld = pOp->p4.i;.
1e3f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
1e400 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
1e410 32 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  2 );.    assert(
1e420 20 6e 46 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20   nField>0 );.   
1e430 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
1e440 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
1e450 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
1e460 6e 46 69 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20  nField;..    /* 
1e470 54 68 65 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66  The next line of
1e480 20 63 6f 64 65 20 63 6f 6d 70 75 74 65 73 20 61   code computes a
1e490 73 20 66 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20  s follows, only 
1e4a0 66 61 73 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20  faster:.    **  
1e4b0 20 69 66 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b   if( oc==OP_Seek
1e4c0 47 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65  GT || oc==OP_See
1e4d0 6b 4c 45 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20  kLE ){.    **   
1e4e0 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
1e4f0 20 2d 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65   -1;.    **   }e
1e500 6c 73 65 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20  lse{.    **     
1e510 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b  r.default_rc = +
1e520 31 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20  1;.    **   }.  
1e530 20 20 2a 2f 0a 20 20 20 20 72 2e 64 65 66 61 75    */.    r.defau
1e540 6c 74 5f 72 63 20 3d 20 28 28 31 20 26 20 28 6f  lt_rc = ((1 & (o
1e550 63 20 2d 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20  c - OP_SeekLT)) 
1e560 3f 20 2d 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20  ? -1 : +1);.    
1e570 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1e580 65 65 6b 47 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekGT || r.defau
1e590 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20  lt_rc==-1 );.   
1e5a0 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f   assert( oc!=OP_
1e5b0 53 65 65 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61  SeekLE || r.defa
1e5c0 75 6c 74 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20  ult_rc==-1 );.  
1e5d0 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50    assert( oc!=OP
1e5e0 5f 53 65 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66  _SeekGE || r.def
1e5f0 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20  ault_rc==+1 );. 
1e600 20 20 20 61 73 73 65 72 74 28 20 6f 63 21 3d 4f     assert( oc!=O
1e610 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65  P_SeekLT || r.de
1e620 66 61 75 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a  fault_rc==+1 );.
1e630 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  .    r.aMem = &a
1e640 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
1e650 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1e660 47 0a 20 20 20 20 7b 20 69 6e 74 20 69 3b 20 66  G.    { int i; f
1e670 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
1e680 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
1e690 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
1e6a0 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
1e6b0 64 69 66 0a 20 20 20 20 45 78 70 61 6e 64 42 6c  dif.    ExpandBl
1e6c0 6f 62 28 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20  ob(r.aMem);.    
1e6d0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1e6e0 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
1e6f0 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c  pC->pCursor, &r,
1e700 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20   0, 0, &res);.  
1e710 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e720 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1e730 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1e740 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  rror;.    }.  }.
1e750 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
1e760 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
1e770 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
1e780 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
1e790 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
1e7a0 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
1e7b0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
1e7c0 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
1e7d0 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
1e7e0 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
1e7f0 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
1e800 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
1e810 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
1e820 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
1e830 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1e840 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1e850 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 70 43  BtreeNext(pC->pC
1e860 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
1e870 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1e880 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
1e890 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1e8a0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
1e8b0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 7d    res = 0;.    }
1e8c0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
1e8d0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1e8e0 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kLT || oc==OP_Se
1e8f0 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66 28 20  ekLE );.    if( 
1e900 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res>0 || (res==0
1e910 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c   && oc==OP_SeekL
1e920 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1e930 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1e940 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76  sqlite3BtreePrev
1e950 69 6f 75 73 28 70 43 2d 3e 70 43 75 72 73 6f 72  ious(pC->pCursor
1e960 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 69  , &res);.      i
1e970 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1e980 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
1e990 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
1e9a0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
1e9b0 72 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67  res might be neg
1e9c0 61 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68  ative because th
1e9d0 65 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79  e table is empty
1e9e0 2e 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20  .  Check to.    
1e9f0 20 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73    ** see if this
1ea00 20 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20   is the case..  
1ea10 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73      */.      res
1ea20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45   = sqlite3BtreeE
1ea30 6f 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  of(pC->pCursor);
1ea40 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73  .    }.  }.  ass
1ea50 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29  ert( pOp->p2>0 )
1ea60 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
1ea70 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
1ea80 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20   if( res ){.    
1ea90 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1eaa0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1eab0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
1eac0 6b 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a  k P1 P2 P3 P4 *.
1ead0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e  ** Synopsis:  in
1eae0 74 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  tkey=r[P2].**.**
1eaf0 20 50 31 20 69 73 20 61 6e 20 6f 70 65 6e 20 74   P1 is an open t
1eb00 61 62 6c 65 20 63 75 72 73 6f 72 20 61 6e 64 20  able cursor and 
1eb10 50 32 20 69 73 20 61 20 72 6f 77 69 64 20 69 6e  P2 is a rowid in
1eb20 74 65 67 65 72 2e 20 20 41 72 72 61 6e 67 65 0a  teger.  Arrange.
1eb30 2a 2a 20 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76  ** for P1 to mov
1eb40 65 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  e so that it poi
1eb50 6e 74 73 20 74 6f 20 74 68 65 20 72 6f 77 69 64  nts to the rowid
1eb60 20 67 69 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a   given by P2..**
1eb70 0a 2a 2a 20 54 68 69 73 20 69 73 20 61 63 74 75  .** This is actu
1eb80 61 6c 6c 79 20 61 20 64 65 66 65 72 72 65 64 20  ally a deferred 
1eb90 73 65 65 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61  seek.  Nothing a
1eba0 63 74 75 61 6c 6c 79 20 68 61 70 70 65 6e 73 20  ctually happens 
1ebb0 75 6e 74 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72  until.** the cur
1ebc0 73 6f 72 20 69 73 20 75 73 65 64 20 74 6f 20 72  sor is used to r
1ebd0 65 61 64 20 61 20 72 65 63 6f 72 64 2e 20 20 54  ead a record.  T
1ebe0 68 61 74 20 77 61 79 2c 20 69 66 20 6e 6f 20 72  hat way, if no r
1ebf0 65 61 64 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e  eads.** occur, n
1ec00 6f 20 75 6e 6e 65 63 65 73 73 61 72 79 20 49 2f  o unnecessary I/
1ec10 4f 20 68 61 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a  O happens..**.**
1ec20 20 50 34 20 6d 61 79 20 63 6f 6e 74 61 69 6e 20   P4 may contain 
1ec30 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74 65  an array of inte
1ec40 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49 4e  gers (type P4_IN
1ec50 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e 69  TARRAY) containi
1ec60 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79 20  ng.** one entry 
1ec70 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
1ec80 69 6e 20 74 68 65 20 74 61 62 6c 65 20 50 31 20  in the table P1 
1ec90 69 73 20 6f 70 65 6e 20 6f 6e 2e 20 49 66 20 73  is open on. If s
1eca0 6f 2c 20 74 68 65 6e 0a 2a 2a 20 70 61 72 61 6d  o, then.** param
1ecb0 65 74 65 72 20 50 33 20 69 73 20 61 20 63 75 72  eter P3 is a cur
1ecc0 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 20 64 61  sor open on a da
1ecd0 74 61 62 61 73 65 20 69 6e 64 65 78 2e 20 49 66  tabase index. If
1ece0 20 61 72 72 61 79 20 65 6e 74 72 79 0a 2a 2a 20   array entry.** 
1ecf0 61 5b 69 5d 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  a[i] is non-zero
1ed00 2c 20 74 68 65 6e 20 72 65 61 64 69 6e 67 20 63  , then reading c
1ed10 6f 6c 75 6d 6e 20 28 61 5b 69 5d 2d 31 29 20 66  olumn (a[i]-1) f
1ed20 72 6f 6d 20 63 75 72 73 6f 72 20 50 33 20 69 73  rom cursor P3 is
1ed30 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74 20   .** equivalent 
1ed40 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67 20 74 68  to performing th
1ed50 65 20 64 65 66 65 72 72 65 64 20 73 65 65 6b 20  e deferred seek 
1ed60 61 6e 64 20 74 68 65 6e 20 72 65 61 64 69 6e 67  and then reading
1ed70 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a 20 66 72   column i .** fr
1ed80 6f 6d 20 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f  om P1..*/.case O
1ed90 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a 20  P_Seek: {    /* 
1eda0 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  in2 */.  VdbeCur
1edb0 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65  sor *pC;..  asse
1edc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
1edd0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
1ede0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
1edf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1ee00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1ee10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1ee20 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b  C->pCursor!=0 );
1ee30 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
1ee40 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d 3e  sTable );.  pC->
1ee50 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70  nullRow = 0;.  p
1ee60 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
1ee70 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76 65  >p2];.  pC->move
1ee80 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
1ee90 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70  e3VdbeIntValue(p
1eea0 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65  In2);.  pC->defe
1eeb0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a  rredMoveto = 1;.
1eec0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1eed0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52  4type==P4_INTARR
1eee0 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69  AY || pOp->p4.ai
1eef0 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 61 41 6c  ==0 );.  pC->aAl
1ef00 74 4d 61 70 20 3d 20 70 4f 70 2d 3e 70 34 2e 61  tMap = pOp->p4.a
1ef10 69 3b 0a 20 20 70 43 2d 3e 70 41 6c 74 43 75 72  i;.  pC->pAltCur
1ef20 73 6f 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  sor = p->apCsr[p
1ef30 4f 70 2d 3e 70 33 5d 3b 0a 20 20 62 72 65 61 6b  Op->p3];.  break
1ef40 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1ef50 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1ef60 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1ef70 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1ef80 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1ef90 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1efa0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1efb0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1efc0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1efd0 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1efe0 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1eff0 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1f000 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1f010 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1f020 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1f030 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1f040 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1f050 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1f060 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1f070 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1f080 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1f090 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1f0a0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1f0b0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1f0c0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1f0d0 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1f0e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
1f0f0 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
1f100 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1f110 20 77 68 65 72 65 20 69 74 20 63 61 6e 20 62 65   where it can be
1f120 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20  .** advanced in 
1f130 74 68 65 20 66 6f 72 77 61 72 64 20 64 69 72 65  the forward dire
1f140 63 74 69 6f 6e 2e 20 20 54 68 65 20 4e 65 78 74  ction.  The Next
1f150 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77 69 6c   instruction wil
1f160 6c 20 77 6f 72 6b 2c 0a 2a 2a 20 62 75 74 20 6e  l work,.** but n
1f170 6f 74 20 74 68 65 20 50 72 65 76 20 69 6e 73 74  ot the Prev inst
1f180 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  ruction..**.** S
1f190 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e  ee also: NotFoun
1f1a0 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e  d, NoConflict, N
1f1b0 6f 74 45 78 69 73 74 73 2e 20 53 65 65 6b 47 65  otExists. SeekGe
1f1c0 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .*/./* Opcode: N
1f1d0 6f 74 46 6f 75 6e 64 20 50 31 20 50 32 20 50 33  otFound P1 P2 P3
1f1e0 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
1f1f0 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a  s: key=r[P3@P4].
1f200 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74  **.** If P4==0 t
1f210 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33 20  hen register P3 
1f220 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e  holds a blob con
1f230 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b 65  structed by Make
1f240 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50  Record.  If.** P
1f250 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  4>0 then registe
1f260 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  r P3 is the firs
1f270 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72  t of P4 register
1f280 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20 75  s that form an u
1f290 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72  npacked.** recor
1f2a0 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72  d..** .** Cursor
1f2b0 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1f2c0 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1f2d0 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1f2e0 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1f2f0 0a 2a 2a 20 69 73 20 6e 6f 74 20 74 68 65 20 70  .** is not the p
1f300 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
1f310 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
1f320 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
1f330 50 32 2e 20 20 49 66 20 50 31 20 0a 2a 2a 20 64  P2.  If P1 .** d
1f340 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20 65  oes contain an e
1f350 6e 74 72 79 20 77 68 6f 73 65 20 70 72 65 66 69  ntry whose prefi
1f360 78 20 6d 61 74 63 68 65 73 20 74 68 65 20 50 33  x matches the P3
1f370 2f 50 34 20 72 65 63 6f 72 64 20 74 68 65 6e 20  /P4 record then 
1f380 63 6f 6e 74 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73  control.** falls
1f390 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
1f3a0 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
1f3b0 20 61 6e 64 20 50 31 20 69 73 20 6c 65 66 74 20   and P1 is left 
1f3c0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 0a  pointing at the.
1f3d0 2a 2a 20 6d 61 74 63 68 69 6e 67 20 65 6e 74 72  ** matching entr
1f3e0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  y..**.** This op
1f3f0 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20 74  eration leaves t
1f400 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20 73  he cursor in a s
1f410 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63 61  tate where it ca
1f420 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e  nnot be.** advan
1f430 63 65 64 20 69 6e 20 65 69 74 68 65 72 20 64 69  ced in either di
1f440 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68  rection.  In oth
1f450 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e 65  er words, the Ne
1f460 78 74 20 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f  xt and Prev.** o
1f470 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f  pcodes do not wo
1f480 72 6b 20 61 66 74 65 72 20 74 68 69 73 20 6f 70  rk after this op
1f490 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  eration..**.** S
1f4a0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1f4b0 4e 6f 74 45 78 69 73 74 73 2c 20 4e 6f 43 6f 6e  NotExists, NoCon
1f4c0 66 6c 69 63 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  flict.*/./* Opco
1f4d0 64 65 3a 20 4e 6f 43 6f 6e 66 6c 69 63 74 20 50  de: NoConflict P
1f4e0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
1f4f0 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
1f500 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
1f510 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
1f520 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
1f530 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
1f540 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
1f550 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
1f560 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
1f570 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
1f580 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
1f590 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
1f5a0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a  * record..** .**
1f5b0 20 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e   Cursor P1 is on
1f5c0 20 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e   an index btree.
1f5d0 20 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20    If the record 
1f5e0 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33  identified by P3
1f5f0 20 61 6e 64 20 50 34 0a 2a 2a 20 63 6f 6e 74 61   and P4.** conta
1f600 69 6e 73 20 61 6e 79 20 4e 55 4c 4c 20 76 61 6c  ins any NULL val
1f610 75 65 2c 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  ue, jump immedia
1f620 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20  tely to P2.  If 
1f630 61 6c 6c 20 74 65 72 6d 73 20 6f 66 20 74 68 65  all terms of the
1f640 0a 2a 2a 20 72 65 63 6f 72 64 20 61 72 65 20 6e  .** record are n
1f650 6f 74 2d 4e 55 4c 4c 20 74 68 65 6e 20 61 20 63  ot-NULL then a c
1f660 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 74 6f 20  heck is done to 
1f670 64 65 74 65 72 6d 69 6e 65 20 69 66 20 61 6e 79  determine if any
1f680 20 72 6f 77 20 69 6e 20 74 68 65 0a 2a 2a 20 50   row in the.** P
1f690 31 20 69 6e 64 65 78 20 62 74 72 65 65 20 68 61  1 index btree ha
1f6a0 73 20 61 20 6d 61 74 63 68 69 6e 67 20 6b 65 79  s a matching key
1f6b0 20 70 72 65 66 69 78 2e 20 20 49 66 20 74 68 65   prefix.  If the
1f6c0 72 65 20 61 72 65 20 6e 6f 20 6d 61 74 63 68 65  re are no matche
1f6d0 73 2c 20 6a 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64  s, jump.** immed
1f6e0 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 49  iately to P2.  I
1f6f0 66 20 74 68 65 72 65 20 69 73 20 61 20 6d 61 74  f there is a mat
1f700 63 68 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  ch, fall through
1f710 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 50   and leave the P
1f720 31 0a 2a 2a 20 63 75 72 73 6f 72 20 70 6f 69 6e  1.** cursor poin
1f730 74 69 6e 67 20 74 6f 20 74 68 65 20 6d 61 74 63  ting to the matc
1f740 68 69 6e 67 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20  hing row..**.** 
1f750 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 73  This opcode is s
1f760 69 6d 69 6c 61 72 20 74 6f 20 4f 50 5f 4e 6f 74  imilar to OP_Not
1f770 46 6f 75 6e 64 20 77 69 74 68 20 74 68 65 20 65  Found with the e
1f780 78 63 65 70 74 69 6f 6e 73 20 74 68 61 74 20 74  xceptions that t
1f790 68 65 0a 2a 2a 20 62 72 61 6e 63 68 20 69 73 20  he.** branch is 
1f7a0 61 6c 77 61 79 73 20 74 61 6b 65 6e 20 69 66 20  always taken if 
1f7b0 61 6e 79 20 70 61 72 74 20 6f 66 20 74 68 65 20  any part of the 
1f7c0 73 65 61 72 63 68 20 6b 65 79 20 69 6e 70 75 74  search key input
1f7d0 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20   is NULL..**.** 
1f7e0 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c  This operation l
1f7f0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f800 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72   in a state wher
1f810 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a  e it cannot be.*
1f820 2a 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69  * advanced in ei
1f830 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20  ther direction. 
1f840 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1f850 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72   the Next and Pr
1f860 65 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f  ev.** opcodes do
1f870 20 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20   not work after 
1f880 74 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a  this operation..
1f890 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1f8a0 4e 6f 74 46 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c  NotFound, Found,
1f8b0 20 4e 6f 74 45 78 69 73 74 73 0a 2a 2f 0a 63 61   NotExists.*/.ca
1f8c0 73 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  se OP_NoConflict
1f8d0 3a 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69  :     /* jump, i
1f8e0 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  n3 */.case OP_No
1f8f0 74 46 6f 75 6e 64 3a 20 20 20 20 20 20 20 2f 2a  tFound:       /*
1f900 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61   jump, in3 */.ca
1f910 73 65 20 4f 50 5f 46 6f 75 6e 64 3a 20 7b 20 20  se OP_Found: {  
1f920 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
1f930 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 61 6c 72 65  n3 */.  int alre
1f940 61 64 79 45 78 69 73 74 73 3b 0a 20 20 69 6e 74  adyExists;.  int
1f950 20 69 69 3b 0a 20 20 56 64 62 65 43 75 72 73 6f   ii;.  VdbeCurso
1f960 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73  r *pC;.  int res
1f970 3b 0a 20 20 63 68 61 72 20 2a 70 46 72 65 65 3b  ;.  char *pFree;
1f980 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
1f990 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
1f9a0 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
1f9b0 20 20 63 68 61 72 20 61 54 65 6d 70 52 65 63 5b    char aTempRec[
1f9c0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 55 6e  ROUND8(sizeof(Un
1f9d0 70 61 63 6b 65 64 52 65 63 6f 72 64 29 29 20 2b  packedRecord)) +
1f9e0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 2a 34 20 2b   sizeof(Mem)*4 +
1f9f0 20 37 5d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c   7];..#ifdef SQL
1fa00 49 54 45 5f 54 45 53 54 0a 20 20 69 66 28 20 70  ITE_TEST.  if( p
1fa10 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e  Op->opcode!=OP_N
1fa20 6f 43 6f 6e 66 6c 69 63 74 20 29 20 73 71 6c 69  oConflict ) sqli
1fa30 74 65 33 5f 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b  te3_found_count+
1fa40 2b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 61 73 73  +;.#endif..  ass
1fa50 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1fa60 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1fa70 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1fa80 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
1fa90 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 70 43  P4_INT32 );.  pC
1faa0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1fab0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1fac0 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
1fad0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
1fae0 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d  C->seekOp = pOp-
1faf0 3e 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a  >opcode;.#endif.
1fb00 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1fb10 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
1fb20 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
1fb30 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
1fb40 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
1fb50 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20 20 2f  .  pFree = 0;  /
1fb60 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f  * Not needed.  O
1fb70 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75 70 70  nly used to supp
1fb80 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65 72 20  ress a compiler 
1fb90 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 69 66  warning. */.  if
1fba0 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20 29 7b  ( pOp->p4.i>0 ){
1fbb0 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20  .    r.pKeyInfo 
1fbc0 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a  = pC->pKeyInfo;.
1fbd0 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28      r.nField = (
1fbe0 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
1fbf0 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49 6e 33     r.aMem = pIn3
1fc00 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  ;.    for(ii=0; 
1fc10 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
1fc20 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
1fc30 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
1fc40 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
1fc50 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28 26 72     ExpandBlob(&r
1fc60 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69 66 64  .aMem[ii]);.#ifd
1fc70 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
1fc80 20 20 20 20 20 20 69 66 28 20 69 69 20 29 20 52        if( ii ) R
1fc90 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
1fca0 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61 4d 65  p->p3+ii, &r.aMe
1fcb0 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66 0a 20  m[ii]);.#endif. 
1fcc0 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b 65 79     }.    pIdxKey
1fcd0 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a   = &r;.  }else{.
1fce0 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20 73 71      pIdxKey = sq
1fcf0 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63 55 6e  lite3VdbeAllocUn
1fd00 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a 20 20  packedRecord(.  
1fd10 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79 49 6e        pC->pKeyIn
1fd20 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20 73 69  fo, aTempRec, si
1fd30 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29 2c 20  zeof(aTempRec), 
1fd40 26 70 46 72 65 65 0a 20 20 20 20 29 3b 0a 20 20  &pFree.    );.  
1fd50 20 20 69 66 28 20 70 49 64 78 4b 65 79 3d 3d 30    if( pIdxKey==0
1fd60 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1fd70 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 33      assert( pIn3
1fd80 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
1fd90 6f 62 20 29 3b 0a 20 20 20 20 45 78 70 61 6e 64  ob );.    Expand
1fda0 42 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20  Blob(pIn3);.    
1fdb0 73 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72  sqlite3VdbeRecor
1fdc0 64 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79  dUnpack(pC->pKey
1fdd0 49 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70  Info, pIn3->n, p
1fde0 49 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29  In3->z, pIdxKey)
1fdf0 3b 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d  ;.  }.  pIdxKey-
1fe00 3e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  >default_rc = 0;
1fe10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
1fe20 64 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  de==OP_NoConflic
1fe30 74 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20  t ){.    /* For 
1fe40 74 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63  the OP_NoConflic
1fe50 74 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74  t opcode, take t
1fe60 68 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f  he jump if any o
1fe70 66 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70  f the.    ** inp
1fe80 75 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55  ut fields are NU
1fe90 4c 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65  LL, since any ke
1fea0 79 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69  y with a NULL wi
1feb0 6c 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f  ll not.    ** co
1fec0 6e 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f  nflict */.    fo
1fed0 72 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b  r(ii=0; ii<pIdxK
1fee0 65 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b  ey->nField; ii++
1fef0 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64  ){.      if( pId
1ff00 78 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66  xKey->aMem[ii].f
1ff10 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20  lags & MEM_Null 
1ff20 29 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  ){.        pc = 
1ff30 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 20 56 64 62  pOp->p2 - 1; Vdb
1ff40 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32  eBranchTaken(1,2
1ff50 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  );.        break
1ff60 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1ff70 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74    }.  rc = sqlit
1ff80 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
1ff90 61 63 6b 65 64 28 70 43 2d 3e 70 43 75 72 73 6f  acked(pC->pCurso
1ffa0 72 2c 20 70 49 64 78 4b 65 79 2c 20 30 2c 20 30  r, pIdxKey, 0, 0
1ffb0 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 70  , &res);.  if( p
1ffc0 4f 70 2d 3e 70 34 2e 69 3d 3d 30 20 29 7b 0a 20  Op->p4.i==0 ){. 
1ffd0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1ffe0 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 7d  (db, pFree);.  }
1fff0 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
20000 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 62 72 65 61  E_OK ){.    brea
20010 6b 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65  k;.  }.  pC->see
20020 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
20030 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d   alreadyExists =
20040 20 28 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d   (res==0);.  pC-
20050 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72  >nullRow = 1-alr
20060 65 61 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43  eadyExists;.  pC
20070 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
20080 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68   = 0;.  pC->cach
20090 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
200a0 53 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70  STALE;.  if( pOp
200b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75  ->opcode==OP_Fou
200c0 6e 64 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  nd ){.    VdbeBr
200d0 61 6e 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64  anchTaken(alread
200e0 79 45 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  yExists!=0,2);. 
200f0 20 20 20 69 66 28 20 61 6c 72 65 61 64 79 45 78     if( alreadyEx
20100 69 73 74 73 20 29 20 70 63 20 3d 20 70 4f 70 2d  ists ) pc = pOp-
20110 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 65 6c 73 65  >p2 - 1;.  }else
20120 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
20130 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
20140 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts==0,2);.    i
20150 66 28 20 21 61 6c 72 65 61 64 79 45 78 69 73 74  f( !alreadyExist
20160 73 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  s ) pc = pOp->p2
20170 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
20180 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
20190 20 4e 6f 74 45 78 69 73 74 73 20 50 31 20 50 32   NotExists P1 P2
201a0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
201b0 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33  sis: intkey=r[P3
201c0 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68  ].**.** P1 is th
201d0 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63 75 72  e index of a cur
201e0 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53  sor open on an S
201f0 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65 20 28  QL table btree (
20200 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20  with integer.** 
20210 6b 65 79 73 29 2e 20 20 50 33 20 69 73 20 61 6e  keys).  P3 is an
20220 20 69 6e 74 65 67 65 72 20 72 6f 77 69 64 2e 20   integer rowid. 
20230 20 49 66 20 50 31 20 64 6f 65 73 20 6e 6f 74 20   If P1 does not 
20240 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
20250 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50   with.** rowid P
20260 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65  3 then jump imme
20270 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20  diately to P2.  
20280 49 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61  If P1 does conta
20290 69 6e 20 61 20 72 65 63 6f 72 64 0a 2a 2a 20 77  in a record.** w
202a0 69 74 68 20 72 6f 77 69 64 20 50 33 20 74 68 65  ith rowid P3 the
202b0 6e 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  n leave the curs
202c0 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
202d0 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
202e0 61 6c 6c 0a 2a 2a 20 74 68 72 6f 75 67 68 20 74  all.** through t
202f0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
20300 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
20310 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70  e OP_NotFound op
20320 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68  code performs th
20330 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e  e same operation
20340 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65 73   on index btrees
20350 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74 72  .** (with arbitr
20360 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65 20  ary multi-value 
20370 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  keys)..**.** Thi
20380 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
20390 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
203a0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
203b0 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63 65  annot be advance
203c0 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20 64  d.** in either d
203d0 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f 74  irection.  In ot
203e0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 4e  her words, the N
203f0 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70 63  ext and Prev opc
20400 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74  odes will.** not
20410 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20   work following 
20420 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a  this opcode..**.
20430 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75  ** See also: Fou
20440 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f  nd, NotFound, No
20450 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 63 61 73 65  Conflict.*/.case
20460 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 7b   OP_NotExists: {
20470 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
20480 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65 43 75   in3 */.  VdbeCu
20490 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
204a0 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
204b0 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20 69 4b  nt res;.  u64 iK
204c0 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20 26 61  ey;..  pIn3 = &a
204d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
204e0 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
204f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
20500 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
20510 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
20520 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
20530 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70   pC = p->apCsr[p
20540 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
20550 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69 66 64  t( pC!=0 );.#ifd
20560 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
20570 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30    pC->seekOp = 0
20580 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73 73 65 72  ;.#endif.  asser
20590 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
205a0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
205b0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
205c0 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
205d0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
205e0 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 29  sert( pCrsr!=0 )
205f0 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 69  ;.  res = 0;.  i
20600 4b 65 79 20 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b  Key = pIn3->u.i;
20610 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
20620 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20630 65 64 28 70 43 72 73 72 2c 20 30 2c 20 69 4b 65  ed(pCrsr, 0, iKe
20640 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 70  y, 0, &res);.  p
20650 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20  C->movetoTarget 
20660 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65 64  = iKey;  /* Used
20670 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f   by OP_Delete */
20680 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d  .  pC->nullRow =
20690 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
206a0 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
206b0 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72  ALE;.  pC->defer
206c0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
206d0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
206e0 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
206f0 28 20 72 65 73 21 3d 30 20 29 7b 0a 20 20 20 20  ( res!=0 ){.    
20700 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
20710 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b  ;.  }.  pC->seek
20720 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20  Result = res;.  
20730 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
20740 6f 64 65 3a 20 53 65 71 75 65 6e 63 65 20 50 31  ode: Sequence P1
20750 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
20760 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 75 72  opsis: r[P2]=cur
20770 73 6f 72 5b 50 31 5d 2e 63 74 72 2b 2b 0a 2a 2a  sor[P1].ctr++.**
20780 0a 2a 2a 20 46 69 6e 64 20 74 68 65 20 6e 65 78  .** Find the nex
20790 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 71 75  t available sequ
207a0 65 6e 63 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  ence number for 
207b0 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 57 72  cursor P1..** Wr
207c0 69 74 65 20 74 68 65 20 73 65 71 75 65 6e 63 65  ite the sequence
207d0 20 6e 75 6d 62 65 72 20 69 6e 74 6f 20 72 65 67   number into reg
207e0 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 54 68 65  ister P2..** The
207f0 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
20800 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69   on the cursor i
20810 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 66  s incremented af
20820 74 65 72 20 74 68 69 73 0a 2a 2a 20 69 6e 73 74  ter this.** inst
20830 72 75 63 74 69 6f 6e 2e 20 20 0a 2a 2f 0a 63 61  ruction.  .*/.ca
20840 73 65 20 4f 50 5f 53 65 71 75 65 6e 63 65 3a 20  se OP_Sequence: 
20850 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  {           /* o
20860 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
20870 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
20880 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
20890 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
208a0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43    assert( p->apC
208b0 73 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29  sr[pOp->p1]!=0 )
208c0 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  ;.  pOut->u.i = 
208d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
208e0 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a 20  ]->seqCount++;. 
208f0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f   break;.}.../* O
20900 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64 20  pcode: NewRowid 
20910 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
20920 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
20930 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74 20  rowid.**.** Get 
20940 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72 65  a new integer re
20950 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e 6b  cord number (a.k
20960 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65 64  .a "rowid") used
20970 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20 61   as the key to a
20980 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 72   table..** The r
20990 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73 20  ecord number is 
209a0 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75  not previously u
209b0 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e 20  sed as a key in 
209c0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
209d0 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73 6f  table that curso
209e0 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e 20  r P1 points to. 
209f0 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20   The new record 
20a00 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74 65  number is writte
20a10 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f 20  n.** written to 
20a20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
20a30 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e 20  ** If P3>0 then 
20a40 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65 72  P3 is a register
20a50 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61   in the root fra
20a60 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45 20  me of this VDBE 
20a70 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20 74  that holds .** t
20a80 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76 69  he largest previ
20a90 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64 20  ously generated 
20aa0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 4e  record number. N
20ab0 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75 6d  o new record num
20ac0 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c 6f  bers are.** allo
20ad0 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20 74  wed to be less t
20ae0 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e 20  han this value. 
20af0 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65 20  When this value 
20b00 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78 69  reaches its maxi
20b10 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c 49  mum, .** an SQLI
20b20 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69 73  TE_FULL error is
20b30 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65 20   generated. The 
20b40 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20 75  P3 register is u
20b50 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65 20  pdated with the 
20b60 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20 72  '.** generated r
20b70 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54 68  ecord number. Th
20b80 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d 20  is P3 mechanism 
20b90 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70 20  is used to help 
20ba0 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a 2a  implement the.**
20bb0 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 66   AUTOINCREMENT f
20bc0 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65 20  eature..*/.case 
20bd0 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20 20  OP_NewRowid: {  
20be0 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
20bf0 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20  -prerelease */. 
20c00 20 69 36 34 20 76 3b 20 20 20 20 20 20 20 20 20   i64 v;         
20c10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e          /* The n
20c20 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 56 64  ew rowid */.  Vd
20c30 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
20c40 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72 20 6f       /* Cursor o
20c50 66 20 74 61 62 6c 65 20 74 6f 20 67 65 74 20 74  f table to get t
20c60 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a 2f 0a  he new rowid */.
20c70 20 20 69 6e 74 20 72 65 73 3b 20 20 20 20 20 20    int res;      
20c80 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
20c90 6c 74 20 6f 66 20 61 6e 20 73 71 6c 69 74 65 33  lt of an sqlite3
20ca0 42 74 72 65 65 4c 61 73 74 28 29 20 2a 2f 0a 20  BtreeLast() */. 
20cb0 20 69 6e 74 20 63 6e 74 3b 20 20 20 20 20 20 20   int cnt;       
20cc0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
20cd0 65 72 20 74 6f 20 6c 69 6d 69 74 20 74 68 65 20  er to limit the 
20ce0 6e 75 6d 62 65 72 20 6f 66 20 73 65 61 72 63 68  number of search
20cf0 65 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65  es */.  Mem *pMe
20d00 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  m;             /
20d10 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69  * Register holdi
20d20 6e 67 20 6c 61 72 67 65 73 74 20 72 6f 77 69 64  ng largest rowid
20d30 20 66 6f 72 20 41 55 54 4f 49 4e 43 52 45 4d 45   for AUTOINCREME
20d40 4e 54 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  NT */.  VdbeFram
20d50 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 2f  e *pFrame;     /
20d60 2a 20 52 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  * Root frame of 
20d70 56 44 42 45 20 2a 2f 0a 0a 20 20 76 20 3d 20 30  VDBE */..  v = 0
20d80 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 61  ;.  res = 0;.  a
20d90 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
20da0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
20db0 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
20dc0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
20dd0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
20de0 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 4e 45  C!=0 );.  if( NE
20df0 56 45 52 28 70 43 2d 3e 70 43 75 72 73 6f 72 3d  VER(pC->pCursor=
20e00 3d 30 29 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68  =0) ){.    /* Th
20e10 65 20 7a 65 72 6f 20 69 6e 69 74 69 61 6c 69 7a  e zero initializ
20e20 61 74 69 6f 6e 20 61 62 6f 76 65 20 69 73 20 61  ation above is a
20e30 6c 6c 20 74 68 61 74 20 69 73 20 6e 65 65 64 65  ll that is neede
20e40 64 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  d */.  }else{.  
20e50 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 72 6f    /* The next ro
20e60 77 69 64 20 6f 72 20 72 65 63 6f 72 64 20 6e 75  wid or record nu
20e70 6d 62 65 72 20 28 64 69 66 66 65 72 65 6e 74 20  mber (different 
20e80 74 65 72 6d 73 20 66 6f 72 20 74 68 65 20 73 61  terms for the sa
20e90 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69 6e 67 29  me.    ** thing)
20ea0 20 69 73 20 6f 62 74 61 69 6e 65 64 20 69 6e 20   is obtained in 
20eb0 61 20 74 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72  a two-step algor
20ec0 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  ithm..    **.   
20ed0 20 2a 2a 20 46 69 72 73 74 20 77 65 20 61 74 74   ** First we att
20ee0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
20ef0 20 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e   largest existin
20f00 67 20 72 6f 77 69 64 20 61 6e 64 20 61 64 64 20  g rowid and add 
20f10 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68  one.    ** to th
20f20 61 74 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  at.  But if the 
20f30 6c 61 72 67 65 73 74 20 65 78 69 73 74 69 6e 67  largest existing
20f40 20 72 6f 77 69 64 20 69 73 20 61 6c 72 65 61 64   rowid is alread
20f50 79 20 74 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20  y the maximum.  
20f60 20 20 2a 2a 20 70 6f 73 69 74 69 76 65 20 69 6e    ** positive in
20f70 74 65 67 65 72 2c 20 77 65 20 68 61 76 65 20 74  teger, we have t
20f80 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  o fall through t
20f90 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a 20 20 20  o the second.   
20fa0 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69 73 74 69   ** probabilisti
20fb0 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20  c algorithm.    
20fc0 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65 20 73 65  **.    ** The se
20fd0 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68 6d 20 69  cond algorithm i
20fe0 73 20 74 6f 20 73 65 6c 65 63 74 20 61 20 72 6f  s to select a ro
20ff0 77 69 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e  wid at random an
21000 64 20 73 65 65 20 69 66 0a 20 20 20 20 2a 2a 20  d see if.    ** 
21010 69 74 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  it already exist
21020 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20  s in the table. 
21030 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20   If it does not 
21040 65 78 69 73 74 2c 20 77 65 20 68 61 76 65 0a 20  exist, we have. 
21050 20 20 20 2a 2a 20 73 75 63 63 65 65 64 65 64 2e     ** succeeded.
21060 20 20 49 66 20 74 68 65 20 72 61 6e 64 6f 6d 20    If the random 
21070 72 6f 77 69 64 20 64 6f 65 73 20 65 78 69 73 74  rowid does exist
21080 2c 20 77 65 20 73 65 6c 65 63 74 20 61 20 6e 65  , we select a ne
21090 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64  w one.    ** and
210a0 20 74 72 79 20 61 67 61 69 6e 2c 20 75 70 20 74   try again, up t
210b0 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a 20 20 20  o 100 times..   
210c0 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20   */.    assert( 
210d0 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a  pC->isTable );..
210e0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 33 32  #ifdef SQLITE_32
210f0 42 49 54 5f 52 4f 57 49 44 0a 23 20 20 20 64 65  BIT_ROWID.#   de
21100 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 30  fine MAX_ROWID 0
21110 78 37 66 66 66 66 66 66 66 0a 23 65 6c 73 65 0a  x7fffffff.#else.
21120 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70      /* Some comp
21130 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61  ilers complain a
21140 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f  bout constants o
21150 66 20 74 68 65 20 66 6f 72 6d 20 30 78 37 66 66  f the form 0x7ff
21160 66 66 66 66 66 66 66 66 66 66 66 66 66 2e 0a 20  fffffffffffff.. 
21170 20 20 20 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d     ** Others com
21180 70 6c 61 69 6e 20 61 62 6f 75 74 20 30 78 37 66  plain about 0x7f
21190 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66 4c  fffffffffffffffL
211a0 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  L.  The followin
211b0 67 20 6d 61 63 72 6f 20 73 65 65 6d 73 0a 20 20  g macro seems.  
211c0 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69 64 65 20    ** to provide 
211d0 74 68 65 20 63 6f 6e 73 74 61 6e 74 20 77 68 69  the constant whi
211e0 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f  le making all co
211f0 6d 70 69 6c 65 72 73 20 68 61 70 70 79 2e 0a 20  mpilers happy.. 
21200 20 20 20 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65     */.#   define
21210 20 4d 41 58 5f 52 4f 57 49 44 20 20 28 69 36 34   MAX_ROWID  (i64
21220 29 28 20 28 28 28 75 36 34 29 30 78 37 66 66 66  )( (((u64)0x7fff
21230 66 66 66 66 29 3c 3c 33 32 29 20 7c 20 28 75 36  ffff)<<32) | (u6
21240 34 29 30 78 66 66 66 66 66 66 66 66 20 29 0a 23  4)0xffffffff ).#
21250 65 6e 64 69 66 0a 0a 20 20 20 20 69 66 28 20 21  endif..    if( !
21260 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
21270 69 64 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  id ){.      rc =
21280 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73   sqlite3BtreeLas
21290 74 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26  t(pC->pCursor, &
212a0 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
212b0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
212c0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
212d0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
212e0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
212f0 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
21300 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
21310 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
21320 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  4 */.      }else
21330 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
21340 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
21350 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
21360 70 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  pCursor) );.    
21370 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
21380 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
21390 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
213a0 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 72         assert( r
213b0 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20  c==SQLITE_OK ); 
213c0 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 66 61 69 6c    /* Cannot fail
213d0 20 66 6f 6c 6c 6f 77 69 6e 67 20 42 74 72 65 65   following Btree
213e0 4c 61 73 74 28 29 20 2a 2f 0a 20 20 20 20 20 20  Last() */.      
213f0 20 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57    if( v>=MAX_ROW
21400 49 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ID ){.          
21410 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
21420 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  id = 1;.        
21430 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
21440 20 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20   v++;   /* IMP: 
21450 52 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f  R-29538-34987 */
21460 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
21470 20 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65   }.    }..#ifnde
21480 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
21490 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20  TOINCREMENT.    
214a0 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20  if( pOp->p3 ){. 
214b0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
214c0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
214d0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
214e0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
214f0 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
21500 20 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65     if( p->pFrame
21510 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28   ){.        for(
21520 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65  pFrame=p->pFrame
21530 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e  ; pFrame->pParen
21540 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65  t; pFrame=pFrame
21550 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20  ->pParent);.    
21560 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
21570 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
21580 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
21590 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
215a0 20 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65   pOp->p3<=pFrame
215b0 2d 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20  ->nMem );.      
215c0 20 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65    pMem = &pFrame
215d0 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b  ->aMem[pOp->p3];
215e0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
215f0 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20        /* Assert 
21600 74 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c  that P3 is a val
21610 69 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20  id memory cell. 
21620 2a 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  */.        asser
21630 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
21640 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
21650 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
21660 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
21670 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62  ];.        memAb
21680 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
21690 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Mem);.      }.  
216a0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
216b0 73 56 61 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a  sValid(pMem) );.
216c0 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
216d0 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
216e0 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Mem);.      sqli
216f0 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
21700 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20  rify(pMem);.    
21710 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d    assert( (pMem-
21720 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
21730 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28  )!=0 );  /* mem(
21740 50 33 29 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74  P3) holds an int
21750 65 67 65 72 20 2a 2f 0a 20 20 20 20 20 20 69 66  eger */.      if
21760 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58  ( pMem->u.i==MAX
21770 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73  _ROWID || pC->us
21780 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
21790 20 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c          rc = SQL
217a0 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49  ITE_FULL;   /* I
217b0 4d 50 3a 20 52 2d 31 32 32 37 35 2d 36 31 33 33  MP: R-12275-6133
217c0 38 20 2a 2f 0a 20 20 20 20 20 20 20 20 67 6f 74  8 */.        got
217d0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
217e0 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rror;.      }.  
217f0 20 20 20 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e      if( v<pMem->
21800 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20 20 20 20  u.i+1 ){.       
21810 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b   v = pMem->u.i +
21820 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   1;.      }.    
21830 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b    pMem->u.i = v;
21840 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
21850 20 20 69 66 28 20 70 43 2d 3e 75 73 65 52 61 6e    if( pC->useRan
21860 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20  domRowid ){.    
21870 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54    /* IMPLEMENTAT
21880 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d  ION-OF: R-07677-
21890 34 31 38 38 31 20 49 66 20 74 68 65 20 6c 61 72  41881 If the lar
218a0 67 65 73 74 20 52 4f 57 49 44 20 69 73 20 65 71  gest ROWID is eq
218b0 75 61 6c 20 74 6f 20 74 68 65 0a 20 20 20 20 20  ual to the.     
218c0 20 2a 2a 20 6c 61 72 67 65 73 74 20 70 6f 73 73   ** largest poss
218d0 69 62 6c 65 20 69 6e 74 65 67 65 72 20 28 39 32  ible integer (92
218e0 32 33 33 37 32 30 33 36 38 35 34 37 37 35 38 30  2337203685477580
218f0 37 29 20 74 68 65 6e 20 74 68 65 20 64 61 74 61  7) then the data
21900 62 61 73 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e  base.      ** en
21910 67 69 6e 65 20 73 74 61 72 74 73 20 70 69 63 6b  gine starts pick
21920 69 6e 67 20 70 6f 73 69 74 69 76 65 20 63 61 6e  ing positive can
21930 64 69 64 61 74 65 20 52 4f 57 49 44 73 20 61 74  didate ROWIDs at
21940 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20   random until.  
21950 20 20 20 20 2a 2a 20 69 74 20 66 69 6e 64 73 20      ** it finds 
21960 6f 6e 65 20 74 68 61 74 20 69 73 20 6e 6f 74 20  one that is not 
21970 70 72 65 76 69 6f 75 73 6c 79 20 75 73 65 64 2e  previously used.
21980 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
21990 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20  ( pOp->p3==0 ); 
219a0 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74 20 62 65   /* We cannot be
219b0 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64   in random rowid
219c0 20 6d 6f 64 65 20 69 66 20 74 68 69 73 20 69 73   mode if this is
219d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
219f0 20 61 6e 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e   an AUTOINCREMEN
21a00 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20  T table. */.    
21a10 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20    cnt = 0;.     
21a20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20 73 71 6c   do{.        sql
21a30 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28  ite3_randomness(
21a40 73 69 7a 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a  sizeof(v), &v);.
21a50 20 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41          v &= (MA
21a60 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b  X_ROWID>>1); v++
21a70 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20 74 68 61  ;  /* Ensure tha
21a80 74 20 76 20 69 73 20 67 72 65 61 74 65 72 20 74  t v is greater t
21a90 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20  han zero */.    
21aa0 20 20 7d 77 68 69 6c 65 28 20 20 28 28 72 63 20    }while(  ((rc 
21ab0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
21ac0 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
21ad0 3e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  >pCursor, 0, (u6
21ae0 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
21af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21b10 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
21b20 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
21b30 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
21b40 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
21b50 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b  && (++cnt<100));
21b60 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
21b70 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73 3d  QLITE_OK && res=
21b80 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63  =0 ){.        rc
21b90 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20   = SQLITE_FULL; 
21ba0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31    /* IMP: R-3821
21bb0 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20 20  9-53002 */.     
21bc0 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
21bd0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
21be0 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
21bf0 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a  ( v>0 );  /* EV:
21c00 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20 2a   R-40812-03570 *
21c10 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e  /.    }.    pC->
21c20 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21c30 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68   0;.    pC->cach
21c40 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
21c50 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75  STALE;.  }.  pOu
21c60 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
21c70 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21c80 65 3a 20 49 6e 73 65 72 74 20 50 31 20 50 32 20  e: Insert P1 P2 
21c90 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
21ca0 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50  psis: intkey=r[P
21cb0 33 5d 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a  3] data=r[P2].**
21cc0 0a 2a 2a 20 57 72 69 74 65 20 61 6e 20 65 6e 74  .** Write an ent
21cd0 72 79 20 69 6e 74 6f 20 74 68 65 20 74 61 62 6c  ry into the tabl
21ce0 65 20 6f 66 20 63 75 72 73 6f 72 20 50 31 2e 20  e of cursor P1. 
21cf0 20 41 20 6e 65 77 20 65 6e 74 72 79 20 69 73 0a   A new entry is.
21d00 2a 2a 20 63 72 65 61 74 65 64 20 69 66 20 69 74  ** created if it
21d10 20 64 6f 65 73 6e 27 74 20 61 6c 72 65 61 64 79   doesn't already
21d20 20 65 78 69 73 74 20 6f 72 20 74 68 65 20 64 61   exist or the da
21d30 74 61 20 66 6f 72 20 61 6e 20 65 78 69 73 74 69  ta for an existi
21d40 6e 67 0a 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f  ng.** entry is o
21d50 76 65 72 77 72 69 74 74 65 6e 2e 20 20 54 68 65  verwritten.  The
21d60 20 64 61 74 61 20 69 73 20 74 68 65 20 76 61 6c   data is the val
21d70 75 65 20 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72  ue MEM_Blob stor
21d80 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
21d90 2a 20 6e 75 6d 62 65 72 20 50 32 2e 20 54 68 65  * number P2. The
21da0 20 6b 65 79 20 69 73 20 73 74 6f 72 65 64 20 69   key is stored i
21db0 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 20 54  n register P3. T
21dc0 68 65 20 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62  he key must.** b
21dd0 65 20 61 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a  e a MEM_Int..**.
21de0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
21df0 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67 20 6f 66  _NCHANGE flag of
21e00 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e   P5 is set, then
21e10 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20   the row change 
21e20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72  count is.** incr
21e30 65 6d 65 6e 74 65 64 20 28 6f 74 68 65 72 77 69  emented (otherwi
21e40 73 65 20 6e 6f 74 29 2e 20 20 49 66 20 74 68 65  se not).  If the
21e50 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49   OPFLAG_LASTROWI
21e60 44 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  D flag of P5 is 
21e70 73 65 74 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77  set,.** then row
21e80 69 64 20 69 73 20 73 74 6f 72 65 64 20 66 6f 72  id is stored for
21e90 20 73 75 62 73 65 71 75 65 6e 74 20 72 65 74 75   subsequent retu
21ea0 72 6e 20 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c  rn by the.** sql
21eb0 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74  ite3_last_insert
21ec0 5f 72 6f 77 69 64 28 29 20 66 75 6e 63 74 69 6f  _rowid() functio
21ed0 6e 20 28 6f 74 68 65 72 77 69 73 65 20 69 74 20  n (otherwise it 
21ee0 69 73 20 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a  is unmodified)..
21ef0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
21f00 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c  LAG_USESEEKRESUL
21f10 54 20 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20  T flag of P5 is 
21f20 73 65 74 20 61 6e 64 20 69 66 20 74 68 65 20 72  set and if the r
21f30 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
21f40 6c 61 73 74 20 73 65 65 6b 20 6f 70 65 72 61 74  last seek operat
21f50 69 6f 6e 20 28 4f 50 5f 4e 6f 74 45 78 69 73 74  ion (OP_NotExist
21f60 73 29 20 77 61 73 20 61 20 73 75 63 63 65 73 73  s) was a success
21f70 2c 20 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f  , then this.** o
21f80 70 65 72 61 74 69 6f 6e 20 77 69 6c 6c 20 6e 6f  peration will no
21f90 74 20 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e  t attempt to fin
21fa0 64 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  d the appropriat
21fb0 65 20 72 6f 77 20 62 65 66 6f 72 65 20 64 6f 69  e row before doi
21fc0 6e 67 0a 2a 2a 20 74 68 65 20 69 6e 73 65 72 74  ng.** the insert
21fd0 20 62 75 74 20 77 69 6c 6c 20 69 6e 73 74 65 61   but will instea
21fe0 64 20 6f 76 65 72 77 72 69 74 65 20 74 68 65 20  d overwrite the 
21ff0 72 6f 77 20 74 68 61 74 20 74 68 65 20 63 75 72  row that the cur
22000 73 6f 72 20 69 73 0a 2a 2a 20 63 75 72 72 65 6e  sor is.** curren
22010 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2e  tly pointing to.
22020 20 20 50 72 65 73 75 6d 61 62 6c 79 2c 20 74 68    Presumably, th
22030 65 20 70 72 69 6f 72 20 4f 50 5f 4e 6f 74 45 78  e prior OP_NotEx
22040 69 73 74 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 68  ists opcode.** h
22050 61 73 20 61 6c 72 65 61 64 79 20 70 6f 73 69 74  as already posit
22060 69 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72  ioned the cursor
22070 20 63 6f 72 72 65 63 74 6c 79 2e 20 20 54 68 69   correctly.  Thi
22080 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 61  s is an optimiza
22090 74 69 6f 6e 0a 2a 2a 20 74 68 61 74 20 62 6f 6f  tion.** that boo
220a0 73 74 73 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  sts performance 
220b0 62 79 20 61 76 6f 69 64 69 6e 67 20 72 65 64 75  by avoiding redu
220c0 6e 64 61 6e 74 20 73 65 65 6b 73 2e 0a 2a 2a 0a  ndant seeks..**.
220d0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
220e0 5f 49 53 55 50 44 41 54 45 20 66 6c 61 67 20 69  _ISUPDATE flag i
220f0 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 69 73  s set, then this
22100 20 6f 70 63 6f 64 65 20 69 73 20 70 61 72 74 20   opcode is part 
22110 6f 66 20 61 6e 0a 2a 2a 20 55 50 44 41 54 45 20  of an.** UPDATE 
22120 6f 70 65 72 61 74 69 6f 6e 2e 20 20 4f 74 68 65  operation.  Othe
22130 72 77 69 73 65 20 28 69 66 20 74 68 65 20 66 6c  rwise (if the fl
22140 61 67 20 69 73 20 63 6c 65 61 72 29 20 74 68 65  ag is clear) the
22150 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 0a 2a 2a  n this opcode.**
22160 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e 20 49   is part of an I
22170 4e 53 45 52 54 20 6f 70 65 72 61 74 69 6f 6e 2e  NSERT operation.
22180 20 20 54 68 65 20 64 69 66 66 65 72 65 6e 63 65    The difference
22190 20 69 73 20 6f 6e 6c 79 20 69 6d 70 6f 72 74 61   is only importa
221a0 6e 74 20 74 6f 0a 2a 2a 20 74 68 65 20 75 70 64  nt to.** the upd
221b0 61 74 65 20 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20  ate hook..**.** 
221c0 50 61 72 61 6d 65 74 65 72 20 50 34 20 6d 61 79  Parameter P4 may
221d0 20 70 6f 69 6e 74 20 74 6f 20 61 20 73 74 72 69   point to a stri
221e0 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ng containing th
221f0 65 20 74 61 62 6c 65 2d 6e 61 6d 65 2c 20 6f 72  e table-name, or
22200 0a 2a 2a 20 6d 61 79 20 62 65 20 4e 55 4c 4c 2e  .** may be NULL.
22210 20 49 66 20 69 74 20 69 73 20 6e 6f 74 20 4e 55   If it is not NU
22220 4c 4c 2c 20 74 68 65 6e 20 74 68 65 20 75 70 64  LL, then the upd
22230 61 74 65 2d 68 6f 6f 6b 20 0a 2a 2a 20 28 73 71  ate-hook .** (sq
22240 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43 61 6c  lite3.xUpdateCal
22250 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f 6b 65  lback) is invoke
22260 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 73 75  d following a su
22270 63 63 65 73 73 66 75 6c 20 69 6e 73 65 72 74 2e  ccessful insert.
22280 0a 2a 2a 0a 2a 2a 20 28 57 41 52 4e 49 4e 47 2f  .**.** (WARNING/
22290 54 4f 44 4f 3a 20 49 66 20 50 31 20 69 73 20 61  TODO: If P1 is a
222a0 20 70 73 65 75 64 6f 2d 63 75 72 73 6f 72 20 61   pseudo-cursor a
222b0 6e 64 20 50 32 20 69 73 20 64 79 6e 61 6d 69 63  nd P2 is dynamic
222c0 61 6c 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  ally.** allocate
222d0 64 2c 20 74 68 65 6e 20 6f 77 6e 65 72 73 68 69  d, then ownershi
222e0 70 20 6f 66 20 50 32 20 69 73 20 74 72 61 6e 73  p of P2 is trans
222f0 66 65 72 72 65 64 20 74 6f 20 74 68 65 20 70 73  ferred to the ps
22300 65 75 64 6f 2d 63 75 72 73 6f 72 0a 2a 2a 20 61  eudo-cursor.** a
22310 6e 64 20 72 65 67 69 73 74 65 72 20 50 32 20 62  nd register P2 b
22320 65 63 6f 6d 65 73 20 65 70 68 65 6d 65 72 61 6c  ecomes ephemeral
22330 2e 20 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  .  If the cursor
22340 20 69 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65   is changed, the
22350 0a 2a 2a 20 76 61 6c 75 65 20 6f 66 20 72 65 67  .** value of reg
22360 69 73 74 65 72 20 50 32 20 77 69 6c 6c 20 74 68  ister P2 will th
22370 65 6e 20 63 68 61 6e 67 65 2e 20 20 4d 61 6b 65  en change.  Make
22380 20 73 75 72 65 20 74 68 69 73 20 64 6f 65 73 20   sure this does 
22390 6e 6f 74 0a 2a 2a 20 63 61 75 73 65 20 61 6e 79  not.** cause any
223a0 20 70 72 6f 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a   problems.).**.*
223b0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
223c0 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e  on only works on
223d0 20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 65 71   tables.  The eq
223e0 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63  uivalent instruc
223f0 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 69 6e 64 69  tion.** for indi
22400 63 65 73 20 69 73 20 4f 50 5f 49 64 78 49 6e 73  ces is OP_IdxIns
22410 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ert..*/./* Opcod
22420 65 3a 20 49 6e 73 65 72 74 49 6e 74 20 50 31 20  e: InsertInt P1 
22430 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
22440 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65 79  ynopsis:  intkey
22450 3d 50 33 20 64 61 74 61 3d 72 5b 50 32 5d 0a 2a  =P3 data=r[P2].*
22460 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
22470 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 4f 50 5f  exactly like OP_
22480 49 6e 73 65 72 74 20 65 78 63 65 70 74 20 74 68  Insert except th
22490 61 74 20 74 68 65 20 6b 65 79 20 69 73 20 74 68  at the key is th
224a0 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 76 61 6c  e.** integer val
224b0 75 65 20 50 33 2c 20 6e 6f 74 20 74 68 65 20 76  ue P3, not the v
224c0 61 6c 75 65 20 6f 66 20 74 68 65 20 69 6e 74 65  alue of the inte
224d0 67 65 72 20 73 74 6f 72 65 64 20 69 6e 20 72 65  ger stored in re
224e0 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f 0a 63 61  gister P3..*/.ca
224f0 73 65 20 4f 50 5f 49 6e 73 65 72 74 3a 20 0a 63  se OP_Insert: .c
22500 61 73 65 20 4f 50 5f 49 6e 73 65 72 74 49 6e 74  ase OP_InsertInt
22510 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61  : {.  Mem *pData
22520 3b 20 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63  ;       /* MEM c
22530 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 64 61 74 61  ell holding data
22540 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
22550 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
22560 2f 0a 20 20 4d 65 6d 20 2a 70 4b 65 79 3b 20 20  /.  Mem *pKey;  
22570 20 20 20 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c        /* MEM cel
22580 6c 20 68 6f 6c 64 69 6e 67 20 6b 65 79 20 20 66  l holding key  f
22590 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  or the record */
225a0 0a 20 20 69 36 34 20 69 4b 65 79 3b 20 20 20 20  .  i64 iKey;    
225b0 20 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 74 65       /* The inte
225c0 67 65 72 20 52 4f 57 49 44 20 6f 72 20 6b 65 79  ger ROWID or key
225d0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
225e0 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 20 2a  to be inserted *
225f0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
22600 70 43 3b 20 20 20 2f 2a 20 43 75 72 73 6f 72 20  pC;   /* Cursor 
22610 74 6f 20 74 61 62 6c 65 20 69 6e 74 6f 20 77 68  to table into wh
22620 69 63 68 20 69 6e 73 65 72 74 20 69 73 20 77 72  ich insert is wr
22630 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e  itten */.  int n
22640 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 2f 2a 20  Zero;        /* 
22650 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 2d 62  Number of zero-b
22660 79 74 65 73 20 74 6f 20 61 70 70 65 6e 64 20 2a  ytes to append *
22670 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73 75  /.  int seekResu
22680 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74 20  lt;   /* Result 
22690 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f 72  of prior seek or
226a0 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45 4b   0 if no USESEEK
226b0 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a 20  RESULT flag */. 
226c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
226d0 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20 6e  ;  /* database n
226e0 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68  ame - used by th
226f0 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f  e update hook */
22700 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
22710 54 62 6c 3b 20 2f 2a 20 54 61 62 6c 65 20 6e 61  Tbl; /* Table na
22720 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74 68 65  me - used by the
22730 20 6f 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a   opdate hook */.
22740 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20 20 20    int op;       
22750 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20 66 6f      /* Opcode fo
22760 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a 20 53  r update hook: S
22770 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f 72 20  QLITE_UPDATE or 
22780 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20 2a 2f  SQLITE_INSERT */
22790 0a 0a 20 20 70 44 61 74 61 20 3d 20 26 61 4d 65  ..  pData = &aMe
227a0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
227b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
227c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
227d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
227e0 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
227f0 44 61 74 61 29 20 29 3b 0a 20 20 70 43 20 3d 20  Data) );.  pC = 
22800 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
22810 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
22820 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
22830 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
22840 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22850 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
22860 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
22870 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
22880 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
22890 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61 29 3b 0a  Op->p2, pData);.
228a0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
228b0 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 20 29 7b  de==OP_Insert ){
228c0 0a 20 20 20 20 70 4b 65 79 20 3d 20 26 61 4d 65  .    pKey = &aMe
228d0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20  m[pOp->p3];.    
228e0 61 73 73 65 72 74 28 20 70 4b 65 79 2d 3e 66 6c  assert( pKey->fl
228f0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
22900 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
22910 49 73 56 61 6c 69 64 28 70 4b 65 79 29 20 29 3b  IsValid(pKey) );
22920 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
22930 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4b 65  ACE(pOp->p3, pKe
22940 79 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20 70  y);.    iKey = p
22950 4b 65 79 2d 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73  Key->u.i;.  }els
22960 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
22970 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
22980 6e 73 65 72 74 49 6e 74 20 29 3b 0a 20 20 20 20  nsertInt );.    
22990 69 4b 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a  iKey = pOp->p3;.
229a0 20 20 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e    }..  if( pOp->
229b0 70 35 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41  p5 & OPFLAG_NCHA
229c0 4e 47 45 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65  NGE ) p->nChange
229d0 2b 2b 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  ++;.  if( pOp->p
229e0 35 20 26 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52  5 & OPFLAG_LASTR
229f0 4f 57 49 44 20 29 20 64 62 2d 3e 6c 61 73 74 52  OWID ) db->lastR
22a00 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77 69 64  owid = lastRowid
22a10 20 3d 20 69 4b 65 79 3b 0a 20 20 69 66 28 20 70   = iKey;.  if( p
22a20 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
22a30 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 70 44  M_Null ){.    pD
22a40 61 74 61 2d 3e 7a 20 3d 20 30 3b 0a 20 20 20 20  ata->z = 0;.    
22a50 70 44 61 74 61 2d 3e 6e 20 3d 20 30 3b 0a 20 20  pData->n = 0;.  
22a60 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
22a70 74 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20  t( pData->flags 
22a80 26 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f  & (MEM_Blob|MEM_
22a90 53 74 72 29 20 29 3b 0a 20 20 7d 0a 20 20 73 65  Str) );.  }.  se
22aa0 65 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70  ekResult = ((pOp
22ab0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53  ->p5 & OPFLAG_US
22ac0 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70  ESEEKRESULT) ? p
22ad0 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20  C->seekResult : 
22ae0 30 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d  0);.  if( pData-
22af0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72  >flags & MEM_Zer
22b00 6f 20 29 7b 0a 20 20 20 20 6e 5a 65 72 6f 20 3d  o ){.    nZero =
22b10 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b   pData->u.nZero;
22b20 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 6e 5a  .  }else{.    nZ
22b30 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72  ero = 0;.  }.  r
22b40 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22b50 49 6e 73 65 72 74 28 70 43 2d 3e 70 43 75 72 73  Insert(pC->pCurs
22b60 6f 72 2c 20 30 2c 20 69 4b 65 79 2c 0a 20 20 20  or, 0, iKey,.   
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 20 20 20 20 70 44 61 74 61 2d 3e 7a 2c         pData->z,
22b90 20 70 44 61 74 61 2d 3e 6e 2c 20 6e 5a 65 72 6f   pData->n, nZero
22ba0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22bb0 20 20 20 20 20 20 20 20 20 20 20 20 28 70 4f 70              (pOp
22bc0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 41 50  ->p5 & OPFLAG_AP
22bd0 50 45 4e 44 29 21 3d 30 2c 20 73 65 65 6b 52 65  PEND)!=0, seekRe
22be0 73 75 6c 74 0a 20 20 29 3b 0a 20 20 70 43 2d 3e  sult.  );.  pC->
22bf0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
22c00 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
22c10 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
22c20 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  ALE;..  /* Invok
22c30 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
22c40 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
22c50 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  /.  if( rc==SQLI
22c60 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70  TE_OK && db->xUp
22c70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20  dateCallback && 
22c80 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20  pOp->p4.z ){.   
22c90 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70   zDb = db->aDb[p
22ca0 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20  C->iDb].zName;. 
22cb0 20 20 20 7a 54 62 6c 20 3d 20 70 4f 70 2d 3e 70     zTbl = pOp->p
22cc0 34 2e 7a 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28  4.z;.    op = ((
22cd0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
22ce0 5f 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c  _ISUPDATE) ? SQL
22cf0 49 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c  ITE_UPDATE : SQL
22d00 49 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 20  ITE_INSERT);.   
22d10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54   assert( pC->isT
22d20 61 62 6c 65 20 29 3b 0a 20 20 20 20 64 62 2d 3e  able );.    db->
22d30 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 28  xUpdateCallback(
22d40 64 62 2d 3e 70 55 70 64 61 74 65 41 72 67 2c 20  db->pUpdateArg, 
22d50 6f 70 2c 20 7a 44 62 2c 20 7a 54 62 6c 2c 20 69  op, zDb, zTbl, i
22d60 4b 65 79 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Key);.    assert
22d70 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a  ( pC->iDb>=0 );.
22d80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
22d90 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 6c 65 74  /* Opcode: Delet
22da0 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
22db0 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 74 68 65 20  *.** Delete the 
22dc0 72 65 63 6f 72 64 20 61 74 20 77 68 69 63 68 20  record at which 
22dd0 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 69 73  the P1 cursor is
22de0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
22df0 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63  ing..**.** The c
22e00 75 72 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65  ursor will be le
22e10 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 65  ft pointing at e
22e20 69 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f  ither the next o
22e30 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a  r the previous.*
22e40 2a 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20  * record in the 
22e50 74 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20  table. If it is 
22e60 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
22e70 20 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64   the next record
22e80 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65  , then.** the ne
22e90 78 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74  xt Next instruct
22ea0 69 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f  ion will be a no
22eb0 2d 6f 70 2e 20 20 48 65 6e 63 65 20 69 74 20 69  -op.  Hence it i
22ec0 73 20 4f 4b 20 74 6f 20 64 65 6c 65 74 65 0a 2a  s OK to delete.*
22ed0 2a 20 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20  * a record from 
22ee0 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f  within a Next lo
22ef0 6f 70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  op..**.** If the
22f00 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22f10 66 6c 61 67 20 6f 66 20 50 32 20 69 73 20 73 65  flag of P2 is se
22f20 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
22f30 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
22f40 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
22f50 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a  otherwise not)..
22f60 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f  **.** P1 must no
22f70 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62 6c  t be pseudo-tabl
22f80 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62 65  e.  It has to be
22f90 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77 69   a real table wi
22fa0 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72  th.** multiple r
22fb0 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  ows..**.** If P4
22fc0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68   is not NULL, th
22fd0 65 6e 20 69 74 20 69 73 20 74 68 65 20 6e 61 6d  en it is the nam
22fe0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
22ff0 68 61 74 20 50 31 20 69 73 0a 2a 2a 20 70 6f 69  hat P1 is.** poi
23000 6e 74 69 6e 67 20 74 6f 2e 20 20 54 68 65 20 75  nting to.  The u
23010 70 64 61 74 65 20 68 6f 6f 6b 20 77 69 6c 6c 20  pdate hook will 
23020 62 65 20 69 6e 76 6f 6b 65 64 2c 20 69 66 20 69  be invoked, if i
23030 74 20 65 78 69 73 74 73 2e 0a 2a 2a 20 49 66 20  t exists..** If 
23040 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74  P4 is not NULL t
23050 68 65 6e 20 74 68 65 20 50 31 20 63 75 72 73 6f  hen the P1 curso
23060 72 20 6d 75 73 74 20 68 61 76 65 20 62 65 65 6e  r must have been
23070 20 70 6f 73 69 74 69 6f 6e 65 64 0a 2a 2a 20 75   positioned.** u
23080 73 69 6e 67 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64  sing OP_NotFound
23090 20 70 72 69 6f 72 20 74 6f 20 69 6e 76 6f 6b 69   prior to invoki
230a0 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
230b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 65 6c 65 74  */.case OP_Delet
230c0 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f  e: {.  VdbeCurso
230d0 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74  r *pC;..  assert
230e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
230f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
23100 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
23110 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23120 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
23130 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
23140 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 20 20  >pCursor!=0 );  
23150 2f 2a 20 4f 6e 6c 79 20 76 61 6c 69 64 20 66 6f  /* Only valid fo
23160 72 20 72 65 61 6c 20 74 61 62 6c 65 73 2c 20 6e  r real tables, n
23170 6f 20 70 73 65 75 64 6f 74 61 62 6c 65 73 20 2a  o pseudotables *
23180 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  /.  assert( pC->
23190 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
231a0 30 20 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  0 );..#ifdef SQL
231b0 49 54 45 5f 44 45 42 55 47 0a 20 20 2f 2a 20 54  ITE_DEBUG.  /* T
231c0 68 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f  he seek operatio
231d0 6e 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65  n that positione
231e0 64 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69  d the cursor pri
231f0 6f 72 20 74 6f 20 4f 50 5f 44 65 6c 65 74 65 20  or to OP_Delete 
23200 77 69 6c 6c 0a 20 20 2a 2a 20 68 61 76 65 20 61  will.  ** have a
23210 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d 3e  lso set the pC->
23220 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69 65  movetoTarget fie
23230 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20  ld to the rowid 
23240 6f 66 20 74 68 65 20 72 6f 77 20 74 68 61 74 0a  of the row that.
23250 20 20 2a 2a 20 69 73 20 62 65 69 6e 67 20 64 65    ** is being de
23260 6c 65 74 65 64 20 2a 2f 0a 20 20 69 66 28 20 70  leted */.  if( p
23270 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70 43 2d 3e  Op->p4.z && pC->
23280 69 73 54 61 62 6c 65 20 29 7b 0a 20 20 20 20 69  isTable ){.    i
23290 36 34 20 69 4b 65 79 20 3d 20 30 3b 0a 20 20 20  64 iKey = 0;.   
232a0 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79   sqlite3BtreeKey
232b0 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73 6f 72  Size(pC->pCursor
232c0 2c 20 26 69 4b 65 79 29 3b 0a 20 20 20 20 61 73  , &iKey);.    as
232d0 73 65 72 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f  sert( pC->moveto
232e0 54 61 72 67 65 74 3d 3d 69 4b 65 79 20 29 3b 20  Target==iKey ); 
232f0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 0a 20 20  .  }.#endif. .  
23300 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23310 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
23320 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
23330 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23340 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 49 6e 76  STALE;..  /* Inv
23350 6f 6b 65 20 74 68 65 20 75 70 64 61 74 65 2d 68  oke the update-h
23360 6f 6f 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e  ook if required.
23370 20 2a 2f 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   */.  if( rc==SQ
23380 4c 49 54 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78  LITE_OK && db->x
23390 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
233a0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 70  & pOp->p4.z && p
233b0 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a 20 20  C->isTable ){.  
233c0 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
233d0 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
233e0 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44 45 4c  eArg, SQLITE_DEL
233f0 45 54 45 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ETE,.           
23400 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2d               db-
23410 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e  >aDb[pC->iDb].zN
23420 61 6d 65 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  ame, pOp->p4.z, 
23430 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
23440 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
23450 43 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 7d  C->iDb>=0 );.  }
23460 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26  .  if( pOp->p2 &
23470 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
23480 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a  ) p->nChange++;.
23490 20 20 62 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70    break;.}./* Op
234a0 63 6f 64 65 3a 20 52 65 73 65 74 43 6f 75 6e 74  code: ResetCount
234b0 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a   * * * * *.**.**
234c0 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   The value of th
234d0 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
234e0 20 69 73 20 63 6f 70 69 65 64 20 74 6f 20 74 68   is copied to th
234f0 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
23500 65 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e  e.** change coun
23510 74 65 72 20 28 72 65 74 75 72 6e 65 64 20 62 79  ter (returned by
23520 20 73 75 62 73 65 71 75 65 6e 74 20 63 61 6c 6c   subsequent call
23530 73 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 68 61  s to sqlite3_cha
23540 6e 67 65 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e  nges())..** Then
23550 20 74 68 65 20 56 4d 73 20 69 6e 74 65 72 6e 61   the VMs interna
23560 6c 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  l change counter
23570 20 72 65 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a   resets to 0..**
23580 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
23590 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d   trigger program
235a0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65  s..*/.case OP_Re
235b0 73 65 74 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71  setCount: {.  sq
235c0 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e  lite3VdbeSetChan
235d0 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e  ges(db, p->nChan
235e0 67 65 29 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67  ge);.  p->nChang
235f0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
23600 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
23610 72 74 65 72 43 6f 6d 70 61 72 65 20 50 31 20 50  rterCompare P1 P
23620 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70  2 P3 P4.** Synop
23630 73 69 73 3a 20 20 69 66 20 6b 65 79 28 50 31 29  sis:  if key(P1)
23640 21 3d 74 72 69 6d 28 72 5b 50 33 5d 2c 50 34 29  !=trim(r[P3],P4)
23650 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50   goto P2.**.** P
23660 31 20 69 73 20 61 20 73 6f 72 74 65 72 20 63 75  1 is a sorter cu
23670 72 73 6f 72 2e 20 54 68 69 73 20 69 6e 73 74 72  rsor. This instr
23680 75 63 74 69 6f 6e 20 63 6f 6d 70 61 72 65 73 20  uction compares 
23690 61 20 70 72 65 66 69 78 20 6f 66 20 74 68 65 0a  a prefix of the.
236a0 2a 2a 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  ** record blob i
236b0 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
236c0 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
236d0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
236e0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
236f0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
23700 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
23710 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
23720 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
23730 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
23740 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
23750 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
23760 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
23770 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
23780 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
23790 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
237a0 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
237b0 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
237c0 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
237d0 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
237e0 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
237f0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
23800 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
23810 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
23820 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
23830 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
23840 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
23850 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
23860 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
23870 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
23880 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
23890 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
238a0 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
238b0 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
238c0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
238d0 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
238e0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
238f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
23900 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
23910 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23920 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
23930 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
23940 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
23950 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
23960 69 3b 0a 20 20 72 65 73 20 3d 20 30 3b 0a 20 20  i;.  res = 0;.  
23970 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
23980 53 6f 72 74 65 72 43 6f 6d 70 61 72 65 28 70 43  SorterCompare(pC
23990 2c 20 70 49 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c  , pIn3, nKeyCol,
239a0 20 26 72 65 73 29 3b 0a 20 20 56 64 62 65 42 72   &res);.  VdbeBr
239b0 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
239c0 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ,2);.  if( res )
239d0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
239e0 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61  p2-1;.  }.  brea
239f0 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.};../* Opcode
23a00 3a 20 53 6f 72 74 65 72 44 61 74 61 20 50 31 20  : SorterData P1 
23a10 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
23a20 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64 61 74  opsis: r[P2]=dat
23a30 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  a.**.** Write in
23a40 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 74  to register P2 t
23a50 68 65 20 63 75 72 72 65 6e 74 20 73 6f 72 74 65  he current sorte
23a60 72 20 64 61 74 61 20 66 6f 72 20 73 6f 72 74 65  r data for sorte
23a70 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20  r cursor P1..** 
23a80 54 68 65 6e 20 63 6c 65 61 72 20 74 68 65 20 63  Then clear the c
23a90 6f 6c 75 6d 6e 20 68 65 61 64 65 72 20 63 61 63  olumn header cac
23aa0 68 65 20 6f 6e 20 63 75 72 73 6f 72 20 50 33 2e  he on cursor P3.
23ab0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
23ac0 64 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 75  de is normally u
23ad0 73 65 20 74 6f 20 6d 6f 76 65 20 61 20 72 65 63  se to move a rec
23ae0 6f 72 64 20 6f 75 74 20 6f 66 20 74 68 65 20 73  ord out of the s
23af0 6f 72 74 65 72 20 61 6e 64 20 69 6e 74 6f 0a 2a  orter and into.*
23b00 2a 20 61 20 72 65 67 69 73 74 65 72 20 74 68 61  * a register tha
23b10 74 20 69 73 20 74 68 65 20 73 6f 75 72 63 65 20  t is the source 
23b20 66 6f 72 20 61 20 70 73 65 75 64 6f 2d 74 61 62  for a pseudo-tab
23b30 6c 65 20 63 75 72 73 6f 72 20 63 72 65 61 74 65  le cursor create
23b40 64 20 75 73 69 6e 67 0a 2a 2a 20 4f 70 65 6e 50  d using.** OpenP
23b50 73 65 75 64 6f 2e 20 20 54 68 61 74 20 70 73 65  seudo.  That pse
23b60 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72  udo-table cursor
23b70 20 69 73 20 74 68 65 20 6f 6e 65 20 74 68 61 74   is the one that
23b80 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
23b90 79 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 50  y.** parameter P
23ba0 33 2e 20 20 43 6c 65 61 72 69 6e 67 20 74 68 65  3.  Clearing the
23bb0 20 50 33 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65   P3 column cache
23bc0 20 61 73 20 70 61 72 74 20 6f 66 20 74 68 69 73   as part of this
23bd0 20 6f 70 63 6f 64 65 20 73 61 76 65 73 0a 2a 2a   opcode saves.**
23be0 20 75 73 20 66 72 6f 6d 20 68 61 76 69 6e 67 20   us from having 
23bf0 74 6f 20 69 73 73 75 65 20 61 20 73 65 70 61 72  to issue a separ
23c00 61 74 65 20 4e 75 6c 6c 52 6f 77 20 69 6e 73 74  ate NullRow inst
23c10 72 75 63 74 69 6f 6e 20 74 6f 20 63 6c 65 61 72  ruction to clear
23c20 20 74 68 61 74 20 63 61 63 68 65 2e 0a 2a 2f 0a   that cache..*/.
23c30 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 44 61  case OP_SorterDa
23c40 74 61 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ta: {.  VdbeCurs
23c50 6f 72 20 2a 70 43 3b 0a 0a 20 20 70 4f 75 74 20  or *pC;..  pOut 
23c60 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
23c70 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23c80 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23c90 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
23ca0 43 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  C) );.  rc = sql
23cb0 69 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 6f  ite3VdbeSorterRo
23cc0 77 6b 65 79 28 70 43 2c 20 70 4f 75 74 29 3b 0a  wkey(pC, pOut);.
23cd0 20 20 61 73 73 65 72 74 28 20 72 63 21 3d 53 51    assert( rc!=SQ
23ce0 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 4f 75 74  LITE_OK || (pOut
23cf0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c  ->flags & MEM_Bl
23d00 6f 62 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ob) );.  assert(
23d10 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
23d20 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
23d30 72 20 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  r );.  p->apCsr[
23d40 70 4f 70 2d 3e 70 33 5d 2d 3e 63 61 63 68 65 53  pOp->p3]->cacheS
23d50 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
23d60 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ALE;.  break;.}.
23d70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 44  ./* Opcode: RowD
23d80 61 74 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ata P1 P2 * * *.
23d90 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
23da0 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72  2]=data.**.** Wr
23db0 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ite into registe
23dc0 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c 65 74  r P2 the complet
23dd0 65 20 72 6f 77 20 64 61 74 61 20 66 6f 72 20 63  e row data for c
23de0 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68 65  ursor P1..** The
23df0 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70 72  re is no interpr
23e00 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  etation of the d
23e10 61 74 61 2e 20 20 0a 2a 2a 20 49 74 20 69 73 20  ata.  .** It is 
23e20 6a 75 73 74 20 63 6f 70 69 65 64 20 6f 6e 74 6f  just copied onto
23e30 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65 72   the P2 register
23e40 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a 20   exactly as .** 
23e50 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20 74  it is found in t
23e60 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
23e70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
23e80 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
23e90 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20 76   pointing to a v
23ea0 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61 20  alid row (not a 
23eb0 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66 20  NULL row).** of 
23ec0 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
23ed0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
23ee0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
23ef0 52 6f 77 4b 65 79 20 50 31 20 50 32 20 2a 20 2a  RowKey P1 P2 * *
23f00 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
23f10 72 5b 50 32 5d 3d 6b 65 79 0a 2a 2a 0a 2a 2a 20  r[P2]=key.**.** 
23f20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
23f30 74 65 72 20 50 32 20 74 68 65 20 63 6f 6d 70 6c  ter P2 the compl
23f40 65 74 65 20 72 6f 77 20 6b 65 79 20 66 6f 72 20  ete row key for 
23f50 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 20 54 68  cursor P1..** Th
23f60 65 72 65 20 69 73 20 6e 6f 20 69 6e 74 65 72 70  ere is no interp
23f70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  retation of the 
23f80 64 61 74 61 2e 20 20 0a 2a 2a 20 54 68 65 20 6b  data.  .** The k
23f90 65 79 20 69 73 20 63 6f 70 69 65 64 20 6f 6e 74  ey is copied ont
23fa0 6f 20 74 68 65 20 50 32 20 72 65 67 69 73 74 65  o the P2 registe
23fb0 72 20 65 78 61 63 74 6c 79 20 61 73 20 0a 2a 2a  r exactly as .**
23fc0 20 69 74 20 69 73 20 66 6f 75 6e 64 20 69 6e 20   it is found in 
23fd0 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
23fe0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
23ff0 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62  P1 cursor must b
24000 65 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 61 20  e pointing to a 
24010 76 61 6c 69 64 20 72 6f 77 20 28 6e 6f 74 20 61  valid row (not a
24020 20 4e 55 4c 4c 20 72 6f 77 29 0a 2a 2a 20 6f 66   NULL row).** of
24030 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e   a real table, n
24040 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c  ot a pseudo-tabl
24050 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  e..*/.case OP_Ro
24060 77 4b 65 79 3a 0a 63 61 73 65 20 4f 50 5f 52 6f  wKey:.case OP_Ro
24070 77 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65 43  wData: {.  VdbeC
24080 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
24090 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
240a0 75 33 32 20 6e 3b 0a 20 20 69 36 34 20 6e 36 34  u32 n;.  i64 n64
240b0 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ;..  pOut = &aMe
240c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65  m[pOp->p2];.  me
240d0 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
240e0 2c 20 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 4e  , pOut);..  /* N
240f0 6f 74 65 20 74 68 61 74 20 52 6f 77 4b 65 79 20  ote that RowKey 
24100 61 6e 64 20 52 6f 77 44 61 74 61 20 61 72 65 20  and RowData are 
24110 72 65 61 6c 6c 79 20 65 78 61 63 74 6c 79 20 74  really exactly t
24120 68 65 20 73 61 6d 65 20 69 6e 73 74 72 75 63 74  he same instruct
24130 69 6f 6e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ion */.  assert(
24140 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24150 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24160 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24170 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24180 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
24190 72 28 70 43 29 3d 3d 30 20 29 3b 0a 20 20 61 73  r(pC)==0 );.  as
241a0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
241b0 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  e || pOp->opcode
241c0 21 3d 4f 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a  !=OP_RowData );.
241d0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
241e0 54 61 62 6c 65 3d 3d 30 20 7c 7c 20 70 4f 70 2d  Table==0 || pOp-
241f0 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 52 6f 77 44  >opcode==OP_RowD
24200 61 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ata );.  assert(
24210 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
24220 72 74 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 3d  rt( pC->nullRow=
24230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
24240 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
24250 65 67 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  eg==0 );.  asser
24260 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d  t( pC->pCursor!=
24270 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70  0 );.  pCrsr = p
24280 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f  C->pCursor;..  /
24290 2a 20 54 68 65 20 4f 50 5f 52 6f 77 4b 65 79 20  * The OP_RowKey 
242a0 61 6e 64 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  and OP_RowData o
242b0 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
242c0 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
242d0 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 52 65 77  s or.  ** OP_Rew
242e0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
242f0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
24300 69 6e 73 74 72 75 63 74 69 6f 6e 73 20 74 68 61  instructions tha
24310 74 20 6d 69 67 68 74 20 69 6e 76 61 6c 69 64 61  t might invalida
24320 74 65 0a 20 20 2a 2a 20 74 68 65 20 63 75 72 73  te.  ** the curs
24330 6f 72 2e 20 20 49 66 20 74 68 69 73 20 77 68 65  or.  If this whe
24340 72 65 20 6e 6f 74 20 74 68 65 20 63 61 73 65 2c  re not the case,
24350 20 6f 6e 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f   on of the follo
24360 77 69 6e 67 20 61 73 73 65 72 74 28 29 73 0a 20  wing assert()s. 
24370 20 2a 2a 20 77 6f 75 6c 64 20 66 61 69 6c 2e 20   ** would fail. 
24380 20 53 68 6f 75 6c 64 20 74 68 69 73 20 65 76 65   Should this eve
24390 72 20 63 68 61 6e 67 65 20 28 62 65 63 61 75 73  r change (becaus
243a0 65 20 6f 66 20 63 68 61 6e 67 65 73 20 69 6e 20  e of changes in 
243b0 74 68 65 20 63 6f 64 65 0a 20 20 2a 2a 20 67 65  the code.  ** ge
243c0 6e 65 72 61 74 6f 72 29 20 74 68 65 6e 20 74 68  nerator) then th
243d0 65 20 66 69 78 20 77 6f 75 6c 64 20 62 65 20 74  e fix would be t
243e0 6f 20 69 6e 73 65 72 74 20 61 20 63 61 6c 6c 20  o insert a call 
243f0 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  to.  ** sqlite3V
24400 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28  dbeCursorMoveto(
24410 29 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74  )..  */.  assert
24420 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
24430 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
24440 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
24450 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70  eCursorIsValid(p
24460 43 72 73 72 29 20 29 3b 0a 23 69 66 20 30 20 20  Crsr) );.#if 0  
24470 2f 2a 20 4e 6f 74 20 72 65 71 75 69 72 65 64 20  /* Not required 
24480 64 75 65 20 74 6f 20 74 68 65 20 70 72 65 76 69  due to the previ
24490 6f 75 73 20 74 6f 20 61 73 73 65 72 74 28 29 20  ous to assert() 
244a0 73 74 61 74 65 6d 65 6e 74 73 20 2a 2f 0a 20 20  statements */.  
244b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
244c0 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70 43 29  CursorMoveto(pC)
244d0 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
244e0 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
244f0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
24500 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20 70  .#endif..  if( p
24510 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b  C->isTable==0 ){
24520 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 70 43  .    assert( !pC
24530 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
24540 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20   VVA_ONLY(rc =) 
24550 73 71 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53  sqlite3BtreeKeyS
24560 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 36 34 29  ize(pCrsr, &n64)
24570 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
24580 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
24590 20 20 2f 2a 20 54 72 75 65 20 62 65 63 61 75 73    /* True becaus
245a0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
245b0 6f 28 29 20 63 61 6c 6c 20 61 62 6f 76 65 20 2a  o() call above *
245c0 2f 0a 20 20 20 20 69 66 28 20 6e 36 34 3e 64 62  /.    if( n64>db
245d0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
245e0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
245f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
24600 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6e  big;.    }.    n
24610 20 3d 20 28 75 33 32 29 6e 36 34 3b 0a 20 20 7d   = (u32)n64;.  }
24620 65 6c 73 65 7b 0a 20 20 20 20 56 56 41 5f 4f 4e  else{.    VVA_ON
24630 4c 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33  LY(rc =) sqlite3
24640 42 74 72 65 65 44 61 74 61 53 69 7a 65 28 70 43  BtreeDataSize(pC
24650 72 73 72 2c 20 26 6e 29 3b 0a 20 20 20 20 61 73  rsr, &n);.    as
24660 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
24670 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 44 61 74  _OK );    /* Dat
24680 61 53 69 7a 65 28 29 20 63 61 6e 6e 6f 74 20 66  aSize() cannot f
24690 61 69 6c 20 2a 2f 0a 20 20 20 20 69 66 28 20 6e  ail */.    if( n
246a0 3e 28 75 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74  >(u32)db->aLimit
246b0 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
246c0 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
246d0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
246e0 20 7d 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73   }.  }.  testcas
246f0 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69 66 28  e( n==0 );.  if(
24700 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43   sqlite3VdbeMemC
24710 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f  learAndResize(pO
24720 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29 20 29  ut, MAX(n,32)) )
24730 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
24740 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 6e  m;.  }.  pOut->n
24750 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74 54 79   = n;.  MemSetTy
24760 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
24770 5f 42 6c 6f 62 29 3b 0a 20 20 69 66 28 20 70 43  _Blob);.  if( pC
24780 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 7b 0a  ->isTable==0 ){.
24790 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
247a0 42 74 72 65 65 4b 65 79 28 70 43 72 73 72 2c 20  BtreeKey(pCrsr, 
247b0 30 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a  0, n, pOut->z);.
247c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 63 20    }else{.    rc 
247d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61  = sqlite3BtreeDa
247e0 74 61 28 70 43 72 73 72 2c 20 30 2c 20 6e 2c 20  ta(pCrsr, 0, n, 
247f0 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 7d 0a 20 20  pOut->z);.  }.  
24800 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49  pOut->enc = SQLI
24810 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49 6e 20  TE_UTF8;  /* In 
24820 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20 69 73  case the blob is
24830 20 65 76 65 72 20 63 61 73 74 20 74 6f 20 74 65   ever cast to te
24840 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45 5f 4d  xt */.  UPDATE_M
24850 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74  AX_BLOBSIZE(pOut
24860 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
24870 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
24880 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  t);.  break;.}..
24890 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 69 64  /* Opcode: Rowid
248a0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
248b0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
248c0 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74 6f 72  rowid.**.** Stor
248d0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
248e0 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63   an integer whic
248f0 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f 66 20  h is the key of 
24900 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
24910 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20 63 75  that.** P1 is cu
24920 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20 74 6f  rrently point to
24930 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e 20 62  ..**.** P1 can b
24940 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72 64 69  e either an ordi
24950 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20 61 20  nary table or a 
24960 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 20 20  virtual table.  
24970 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a  There used to.**
24980 20 62 65 20 61 20 73 65 70 61 72 61 74 65 20 4f   be a separate O
24990 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64 65 20  P_VRowid opcode 
249a0 66 6f 72 20 75 73 65 20 77 69 74 68 20 76 69 72  for use with vir
249b0 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62 75 74  tual tables, but
249c0 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f 70 63   this.** one opc
249d0 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20 66 6f  ode now works fo
249e0 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74 79 70  r both table typ
249f0 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  es..*/.case OP_R
24a00 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
24a10 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
24a20 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
24a30 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
24a40 20 20 69 36 34 20 76 3b 0a 20 20 73 71 6c 69 74    i64 v;.  sqlit
24a50 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
24a60 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
24a70 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b  module *pModule;
24a80 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
24a90 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p1>=0 && pOp->p
24aa0 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  1<p->nCursor );.
24ab0 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24ac0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24ad0 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24ae0 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64  ssert( pC->pseud
24af0 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 7c 7c 20  oTableReg==0 || 
24b00 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20  pC->nullRow );. 
24b10 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77   if( pC->nullRow
24b20 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c   ){.    pOut->fl
24b30 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
24b40 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c      break;.  }el
24b50 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72  se if( pC->defer
24b60 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20  redMoveto ){.   
24b70 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54   v = pC->movetoT
24b80 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53  arget;.#ifndef S
24b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
24ba0 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20  ALTABLE.  }else 
24bb0 69 66 28 20 70 43 2d 3e 70 56 74 61 62 43 75 72  if( pC->pVtabCur
24bc0 73 6f 72 20 29 7b 0a 20 20 20 20 70 56 74 61 62  sor ){.    pVtab
24bd0 20 3d 20 70 43 2d 3e 70 56 74 61 62 43 75 72 73   = pC->pVtabCurs
24be0 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 20 20 70  or->pVtab;.    p
24bf0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
24c00 70 4d 6f 64 75 6c 65 3b 0a 20 20 20 20 61 73 73  pModule;.    ass
24c10 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 52  ert( pModule->xR
24c20 6f 77 69 64 20 29 3b 0a 20 20 20 20 72 63 20 3d  owid );.    rc =
24c30 20 70 4d 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64   pModule->xRowid
24c40 28 70 43 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  (pC->pVtabCursor
24c50 2c 20 26 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  , &v);.    sqlit
24c60 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d  e3VtabImportErrm
24c70 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 23 65  sg(p, pVtab);.#e
24c80 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
24c90 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
24ca0 20 2a 2f 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   */.  }else{.   
24cb0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24cc0 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 72  rsor!=0 );.    r
24cd0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43  c = sqlite3VdbeC
24ce0 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43 29  ursorRestore(pC)
24cf0 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67  ;.    if( rc ) g
24d00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
24d10 5f 65 72 72 6f 72 3b 0a 20 20 20 20 69 66 28 20  _error;.    if( 
24d20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20  pC->nullRow ){. 
24d30 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
24d40 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
24d50 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
24d60 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24d70 42 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d  BtreeKeySize(pC-
24d80 3e 70 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20  >pCursor, &v);. 
24d90 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
24da0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
24db0 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
24dc0 65 20 6f 66 20 43 75 72 73 6f 72 52 65 73 74 6f  e of CursorResto
24dd0 72 65 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20  re() above */.  
24de0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
24df0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
24e00 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f  * Opcode: NullRo
24e10 77 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  w P1 * * * *.**.
24e20 2a 2a 20 4d 6f 76 65 20 74 68 65 20 63 75 72 73  ** Move the curs
24e30 6f 72 20 50 31 20 74 6f 20 61 20 6e 75 6c 6c 20  or P1 to a null 
24e40 72 6f 77 2e 20 20 41 6e 79 20 4f 50 5f 43 6f 6c  row.  Any OP_Col
24e50 75 6d 6e 20 6f 70 65 72 61 74 69 6f 6e 73 0a 2a  umn operations.*
24e60 2a 20 74 68 61 74 20 6f 63 63 75 72 20 77 68 69  * that occur whi
24e70 6c 65 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  le the cursor is
24e80 20 6f 6e 20 74 68 65 20 6e 75 6c 6c 20 72 6f 77   on the null row
24e90 20 77 69 6c 6c 20 61 6c 77 61 79 73 0a 2a 2a 20   will always.** 
24ea0 77 72 69 74 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f  write a NULL..*/
24eb0 0a 63 61 73 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77  .case OP_NullRow
24ec0 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
24ed0 20 2a 70 43 3b 0a 0a 20 20 61 73 73 65 72 74 28   *pC;..  assert(
24ee0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
24ef0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
24f00 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
24f10 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
24f20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
24f30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
24f40 3d 20 31 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 1;.  pC->cache
24f50 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
24f60 54 41 4c 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e  TALE;.  if( pC->
24f70 70 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20 73  pCursor ){.    s
24f80 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
24f90 43 75 72 73 6f 72 28 70 43 2d 3e 70 43 75 72 73  Cursor(pC->pCurs
24fa0 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
24fb0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
24fc0 4c 61 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Last P1 P2 * * *
24fd0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20  .**.** The next 
24fe0 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64  use of the Rowid
24ff0 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72   or Column or Pr
25000 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66  ev instruction f
25010 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72  or P1 .** will r
25020 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74  efer to the last
25030 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61   entry in the da
25040 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
25050 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65  index..** If the
25060 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
25070 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e  is empty and P2>
25080 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  0, then jump imm
25090 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
250a0 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f 72  ** If P2 is 0 or
250b0 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   if the table or
250c0 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d   index is not em
250d0 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67  pty, fall throug
250e0 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c  h.** to the foll
250f0 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f  owing instructio
25100 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  n..**.** This op
25110 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
25120 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65  cursor configure
25130 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76  d to move in rev
25140 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66  erse order,.** f
25150 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61  rom the end towa
25160 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  rd the beginning
25170 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64  .  In other word
25180 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69 73  s, the cursor is
25190 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74  .** configured t
251a0 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20  o use Prev, not 
251b0 4e 65 78 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Next..*/.case OP
251c0 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20  _Last: {        
251d0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
251e0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
251f0 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a  tCursor *pCrsr;.
25200 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73    int res;..  as
25210 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
25220 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
25230 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
25240 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
25250 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
25260 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
25270 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
25280 72 65 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  res = 0;.  asser
25290 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
252a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
252b0 65 65 4c 61 73 74 28 70 43 72 73 72 2c 20 26 72  eeLast(pCrsr, &r
252c0 65 73 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  es);.  pC->nullR
252d0 6f 77 20 3d 20 28 75 38 29 72 65 73 3b 0a 20 20  ow = (u8)res;.  
252e0 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65  pC->deferredMove
252f0 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61  to = 0;.  pC->ca
25300 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
25310 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66 20  E_STALE;.#ifdef 
25320 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
25330 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
25340 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
25350 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b 0a 20  ( pOp->p2>0 ){. 
25360 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
25370 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
25380 20 20 69 66 28 20 72 65 73 20 29 20 70 63 20 3d    if( res ) pc =
25390 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
253a0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  }.  break;.}.../
253b0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50  * Opcode: Sort P
253c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
253d0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65   This opcode doe
253e0 73 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61  s exactly the sa
253f0 6d 65 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52  me thing as OP_R
25400 65 77 69 6e 64 20 65 78 63 65 70 74 20 74 68 61  ewind except tha
25410 74 0a 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e  t.** it incremen
25420 74 73 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74  ts an undocument
25430 65 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62  ed global variab
25440 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 73 74  le used for test
25450 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69  ing..**.** Sorti
25460 6e 67 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68  ng is accomplish
25470 65 64 20 62 79 20 77 72 69 74 69 6e 67 20 72 65  ed by writing re
25480 63 6f 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72  cords into a sor
25490 74 69 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74  ting index,.** t
254a0 68 65 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68  hen rewinding th
254b0 61 74 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61  at index and pla
254c0 79 69 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f  ying it back fro
254d0 6d 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a  m beginning to.*
254e0 2a 20 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74  * end.  We use t
254f0 68 65 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64  he OP_Sort opcod
25500 65 20 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f  e instead of OP_
25510 52 65 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65  Rewind to do the
25520 0a 2a 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f  .** rewinding so
25530 20 74 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c   that the global
25540 20 76 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62   variable will b
25550 65 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e  e incremented an
25560 64 0a 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20  d.** regression 
25570 74 65 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d  tests can determ
25580 69 6e 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ine whether or n
25590 6f 74 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72  ot the optimizer
255a0 20 69 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79   is.** correctly
255b0 20 6f 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20   optimizing out 
255c0 73 6f 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f  sorts..*/.case O
255d0 50 5f 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20  P_SorterSort:   
255e0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65   /* jump */.case
255f0 20 4f 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20   OP_Sort: {     
25600 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69     /* jump */.#i
25610 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
25620 0a 20 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f  .  sqlite3_sort_
25630 63 6f 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74  count++;.  sqlit
25640 65 33 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d  e3_search_count-
25650 2d 3b 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61  -;.#endif.  p->a
25660 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53  Counter[SQLITE_S
25670 54 4d 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b  TMTSTATUS_SORT]+
25680 2b 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72  +;.  /* Fall thr
25690 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77  ough into OP_Rew
256a0 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f  ind */.}./* Opco
256b0 64 65 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32  de: Rewind P1 P2
256c0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
256d0 20 6e 65 78 74 20 75 73 65 20 6f 66 20 74 68 65   next use of the
256e0 20 52 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e   Rowid or Column
256f0 20 6f 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63   or Next instruc
25700 74 69 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20  tion for P1 .** 
25710 77 69 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68  will refer to th
25720 65 20 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e  e first entry in
25730 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
25740 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a  ble or index..**
25750 20 49 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72   If the table or
25760 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c   index is empty,
25770 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
25780 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74  y to P2..** If t
25790 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
257a0 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20  x is not empty, 
257b0 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20  fall through to 
257c0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a  the following .*
257d0 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  * instruction..*
257e0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
257f0 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
25800 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
25810 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
25820 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
25830 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f  the beginning to
25840 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49  ward the end.  I
25850 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
25860 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20  he cursor is.** 
25870 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73  configured to us
25880 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76  e Next, not Prev
25890 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77  ..*/.case OP_Rew
258a0 69 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ind: {        /*
258b0 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43   jump */.  VdbeC
258c0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
258d0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
258e0 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65  int res;..  asse
258f0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
25900 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
25910 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
25920 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
25930 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25940 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69  0 );.  assert( i
25950 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f  sSorter(pC)==(pO
25960 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f  p->opcode==OP_So
25970 72 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72  rterSort) );.  r
25980 65 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53  es = 1;.#ifdef S
25990 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
259a0 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65  ->seekOp = OP_Re
259b0 77 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69  wind;.#endif.  i
259c0 66 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20  f( isSorter(pC) 
259d0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
259e0 74 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77  te3VdbeSorterRew
259f0 69 6e 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20  ind(pC, &res);. 
25a00 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43 72 73   }else{.    pCrs
25a10 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b  r = pC->pCursor;
25a20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 72  .    assert( pCr
25a30 73 72 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73  sr );.    rc = s
25a40 71 6c 69 74 65 33 42 74 72 65 65 46 69 72 73 74  qlite3BtreeFirst
25a50 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
25a60 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
25a70 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
25a80 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25a90 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
25aa0 7d 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  }.  pC->nullRow 
25ab0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
25ac0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
25ad0 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
25ae0 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
25af0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
25b00 0a 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20 20  .  if( res ){.  
25b10 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d    pc = pOp->p2 -
25b20 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b   1;.  }.  break;
25b30 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
25b40 65 78 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ext P1 P2 P3 P4 
25b50 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65  P5.**.** Advance
25b60 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
25b70 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
25b80 74 68 65 20 6e 65 78 74 20 6b 65 79 2f 64 61 74  the next key/dat
25b90 61 20 70 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a  a pair in its.**
25ba0 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e   table or index.
25bb0 20 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6e    If there are n
25bc0 6f 20 6d 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65  o more key/value
25bd0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
25be0 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
25bf0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
25c00 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
25c10 66 20 74 68 65 20 63 75 72 73 6f 72 20 61 64 76  f the cursor adv
25c20 61 6e 63 65 20 77 61 73 20 73 75 63 63 65 73 73  ance was success
25c30 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d  ful,.** jump imm
25c40 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a  ediately to P2..
25c50 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f  **.** The Next o
25c60 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
25c70 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
25c80 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
25c90 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64   or.** OP_Rewind
25ca0 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
25cb0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
25cc0 73 6f 72 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f  sor.  Next is no
25cd0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
25ce0 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53  follow SeekLT, S
25cf0 65 65 6b 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73  eekLE, or OP_Las
25d00 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  t..**.** The P1 
25d10 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
25d20 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
25d30 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
25d40 62 6c 65 2e 20 20 50 31 20 6d 75 73 74 20 68 61  ble.  P1 must ha
25d50 76 65 0a 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65  ve.** been opene
25d60 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
25d70 6f 70 63 6f 64 65 20 6f 72 20 74 68 65 20 70 72  opcode or the pr
25d80 6f 67 72 61 6d 20 77 69 6c 6c 20 73 65 67 66 61  ogram will segfa
25d90 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ult..**.** The P
25da0 33 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e  3 value is a hin
25db0 74 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69  t to the btree i
25dc0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49  mplementation. I
25dd0 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a  f P3==1, that.**
25de0 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20   means P1 is an 
25df0 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68  SQL index and th
25e00 61 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  at this instruct
25e10 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62  ion could have b
25e20 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69  een.** omitted i
25e30 66 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64  f that index had
25e40 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50   been unique.  P
25e50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20  3 is usually 0. 
25e60 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73   P3 is.** always
25e70 20 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a   either 0 or 1..
25e80 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61  **.** P4 is alwa
25e90 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44  ys of type P4_AD
25ea0 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74  VANCE. The funct
25eb0 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e  ion pointer poin
25ec0 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33  ts to.** sqlite3
25ed0 42 74 72 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a  BtreeNext()..**.
25ee0 2a 2a 20 49 66 20 50 35 20 69 73 20 70 6f 73 69  ** If P5 is posi
25ef0 74 69 76 65 20 61 6e 64 20 74 68 65 20 6a 75 6d  tive and the jum
25f00 70 20 69 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e  p is taken, then
25f10 20 65 76 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a   event counter.*
25f20 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31 20 69 6e  * number P5-1 in
25f30 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73 74   the prepared st
25f40 61 74 65 6d 65 6e 74 20 69 73 20 69 6e 63 72 65  atement is incre
25f50 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  mented..**.** Se
25f60 65 20 61 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65  e also: Prev, Ne
25f70 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f  xtIfOpen.*/./* O
25f80 70 63 6f 64 65 3a 20 4e 65 78 74 49 66 4f 70 65  pcode: NextIfOpe
25f90 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  n P1 P2 P3 P4 P5
25fa0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
25fb0 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69  de works just li
25fc0 6b 65 20 4e 65 78 74 20 65 78 63 65 70 74 20 74  ke Next except t
25fd0 68 61 74 20 69 66 20 63 75 72 73 6f 72 20 50 31  hat if cursor P1
25fe0 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20   is not.** open 
25ff0 69 74 20 62 65 68 61 76 65 73 20 61 20 6e 6f 2d  it behaves a no-
26000 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  op..*/./* Opcode
26010 3a 20 50 72 65 76 20 50 31 20 50 32 20 50 33 20  : Prev P1 P2 P3 
26020 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b  P4 P5.**.** Back
26030 20 75 70 20 63 75 72 73 6f 72 20 50 31 20 73 6f   up cursor P1 so
26040 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20   that it points 
26050 74 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  to the previous 
26060 6b 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e  key/data pair in
26070 20 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72   its.** table or
26080 20 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72   index.  If ther
26090 65 20 69 73 20 6e 6f 20 70 72 65 76 69 6f 75 73  e is no previous
260a0 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72 73   key/value pairs
260b0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
260c0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
260d0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
260e0 6f 6e 2e 20 20 42 75 74 20 69 66 20 74 68 65 20  on.  But if the 
260f0 63 75 72 73 6f 72 20 62 61 63 6b 75 70 20 77 61  cursor backup wa
26100 73 20 73 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a  s successful,.**
26110 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
26120 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a  y to P2..**.**.*
26130 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64  * The Prev opcod
26140 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20  e is only valid 
26150 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65  following an See
26160 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a  kLT, SeekLE, or.
26170 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64  ** OP_Last opcod
26180 65 20 75 73 65 64 20 74 6f 20 70 6f 73 69 74 69  e used to positi
26190 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20  on the cursor.  
261a0 50 72 65 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f  Prev is not allo
261b0 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77  wed.** to follow
261c0 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c   SeekGT, SeekGE,
261d0 20 6f 72 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a   or OP_Rewind..*
261e0 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72 73  *.** The P1 curs
261f0 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20 61  or must be for a
26200 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74   real table, not
26210 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
26220 20 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f    If P1 is.** no
26230 74 20 6f 70 65 6e 20 74 68 65 6e 20 74 68 65 20  t open then the 
26240 62 65 68 61 76 69 6f 72 20 69 73 20 75 6e 64 65  behavior is unde
26250 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  fined..**.** The
26260 20 50 33 20 76 61 6c 75 65 20 69 73 20 61 20 68   P3 value is a h
26270 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72 65 65  int to the btree
26280 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
26290 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a   If P3==1, that.
262a0 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73 20 61  ** means P1 is a
262b0 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e 64 20  n SQL index and 
262c0 74 68 61 74 20 74 68 69 73 20 69 6e 73 74 72 75  that this instru
262d0 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65  ction could have
262e0 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64   been.** omitted
262f0 20 69 66 20 74 68 61 74 20 69 6e 64 65 78 20 68   if that index h
26300 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65 2e 20  ad been unique. 
26310 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79 20 30   P3 is usually 0
26320 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61  .  P3 is.** alwa
26330 79 73 20 65 69 74 68 65 72 20 30 20 6f 72 20 31  ys either 0 or 1
26340 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c  ..**.** P4 is al
26350 77 61 79 73 20 6f 66 20 74 79 70 65 20 50 34 5f  ways of type P4_
26360 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66 75 6e  ADVANCE. The fun
26370 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f  ction pointer po
26380 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74  ints to.** sqlit
26390 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 28  e3BtreePrevious(
263a0 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
263b0 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
263c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
263d0 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
263e0 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
263f0 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
26400 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
26410 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f   incremented..*/
26420 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 72 65 76  ./* Opcode: Prev
26430 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20  IfOpen P1 P2 P3 
26440 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73  P4 P5.**.** This
26450 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75   opcode works ju
26460 73 74 20 6c 69 6b 65 20 50 72 65 76 20 65 78 63  st like Prev exc
26470 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73  ept that if curs
26480 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  or P1 is not.** 
26490 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20  open it behaves 
264a0 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65  a no-op..*/.case
264b0 20 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20   OP_SorterNext: 
264c0 7b 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20  {  /* jump */.  
264d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
264e0 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43    int res;..  pC
264f0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
26500 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
26510 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
26520 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20    res = 0;.  rc 
26530 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
26540 74 65 72 4e 65 78 74 28 64 62 2c 20 70 43 2c 20  terNext(db, pC, 
26550 26 72 65 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65  &res);.  goto ne
26560 78 74 5f 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50  xt_tail;.case OP
26570 5f 50 72 65 76 49 66 4f 70 65 6e 3a 20 20 20 20  _PrevIfOpen:    
26580 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20  /* jump */.case 
26590 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20  OP_NextIfOpen:  
265a0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69    /* jump */.  i
265b0 66 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  f( p->apCsr[pOp-
265c0 3e 70 31 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b  >p1]==0 ) break;
265d0 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
265e0 67 68 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72  gh */.case OP_Pr
265f0 65 76 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ev:          /* 
26600 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
26610 4e 65 78 74 3a 20 20 20 20 20 20 20 20 20 20 2f  Next:          /
26620 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
26630 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
26640 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
26650 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74  rsor );.  assert
26660 28 20 70 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53  ( pOp->p5<ArrayS
26670 69 7a 65 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29  ize(p->aCounter)
26680 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
26690 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
266a0 72 65 73 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  res = pOp->p3;. 
266b0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
266c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
266d0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
266e0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
266f0 43 2d 3e 70 43 75 72 73 6f 72 20 29 3b 0a 20 20  C->pCursor );.  
26700 61 73 73 65 72 74 28 20 72 65 73 3d 3d 30 20 7c  assert( res==0 |
26710 7c 20 28 72 65 73 3d 3d 31 20 26 26 20 70 43 2d  | (res==1 && pC-
26720 3e 69 73 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a  >isTable==0) );.
26730 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73 3d    testcase( res=
26740 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
26750 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f  pOp->opcode!=OP_
26760 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Next || pOp->p4.
26770 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
26780 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
26790 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
267a0 6f 64 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20  ode!=OP_Prev || 
267b0 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
267c0 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
267d0 65 76 69 6f 75 73 20 29 3b 0a 20 20 61 73 73 65  evious );.  asse
267e0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  rt( pOp->opcode!
267f0 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c  =OP_NextIfOpen |
26800 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  | pOp->p4.xAdvan
26810 63 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65  ce==sqlite3Btree
26820 4e 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74  Next );.  assert
26830 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  ( pOp->opcode!=O
26840 50 5f 50 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20  P_PrevIfOpen || 
26850 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65  pOp->p4.xAdvance
26860 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  ==sqlite3BtreePr
26870 65 76 69 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54  evious);..  /* T
26880 68 65 20 4e 65 78 74 20 6f 70 63 6f 64 65 20 69  he Next opcode i
26890 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74 65  s only used afte
268a0 72 20 53 65 65 6b 47 54 2c 20 53 65 65 6b 47 45  r SeekGT, SeekGE
268b0 2c 20 61 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20  , and Rewind..  
268c0 2a 2a 20 54 68 65 20 50 72 65 76 20 6f 70 63 6f  ** The Prev opco
268d0 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  de is only used 
268e0 61 66 74 65 72 20 53 65 65 6b 4c 54 2c 20 53 65  after SeekLT, Se
268f0 65 6b 4c 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20  ekLE, and Last. 
26900 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
26910 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
26920 74 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  t || pOp->opcode
26930 21 3d 4f 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a  !=OP_NextIfOpen.
26940 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
26950 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ekOp==OP_SeekGT 
26960 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26970 50 5f 53 65 65 6b 47 45 0a 20 20 20 20 20 20 20  P_SeekGE.       
26980 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26990 50 5f 52 65 77 69 6e 64 20 7c 7c 20 70 43 2d 3e  P_Rewind || pC->
269a0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 46 6f 75 6e 64  seekOp==OP_Found
269b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
269c0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65  ->opcode!=OP_Pre
269d0 76 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  v || pOp->opcode
269e0 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70 65 6e 0a  !=OP_PrevIfOpen.
269f0 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65         || pC->se
26a00 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 54 20  ekOp==OP_SeekLT 
26a10 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26a20 50 5f 53 65 65 6b 4c 45 0a 20 20 20 20 20 20 20  P_SeekLE.       
26a30 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
26a40 50 5f 4c 61 73 74 20 29 3b 0a 0a 20 20 72 63 20  P_Last );..  rc 
26a50 3d 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e  = pOp->p4.xAdvan
26a60 63 65 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20  ce(pC->pCursor, 
26a70 26 72 65 73 29 3b 0a 6e 65 78 74 5f 74 61 69 6c  &res);.next_tail
26a80 3a 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  :.  pC->cacheSta
26a90 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
26aa0 45 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  E;.  VdbeBranchT
26ab0 61 6b 65 6e 28 72 65 73 3d 3d 30 2c 32 29 3b 0a  aken(res==0,2);.
26ac0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
26ad0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
26ae0 3d 20 30 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f  = 0;.    pc = pO
26af0 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 70  p->p2 - 1;.    p
26b00 2d 3e 61 43 6f 75 6e 74 65 72 5b 70 4f 70 2d 3e  ->aCounter[pOp->
26b10 70 35 5d 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51  p5]++;.#ifdef SQ
26b20 4c 49 54 45 5f 54 45 53 54 0a 20 20 20 20 73 71  LITE_TEST.    sq
26b30 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f 75  lite3_search_cou
26b40 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20 7d  nt++;.#endif.  }
26b50 65 6c 73 65 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  else{.    pC->nu
26b60 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 7d 0a 20  llRow = 1;.  }. 
26b70 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
26b80 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a  interrupt;.}../*
26b90 20 4f 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65   Opcode: IdxInse
26ba0 72 74 20 50 31 20 50 32 20 50 33 20 2a 20 50 35  rt P1 P2 P3 * P5
26bb0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
26bc0 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
26bd0 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
26be0 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
26bf0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
26c00 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
26c10 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
26c20 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
26c30 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
26c40 20 74 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20   the index P1.  
26c50 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74  Data for the ent
26c60 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a  ry is nil..**.**
26c70 20 50 33 20 69 73 20 61 20 66 6c 61 67 20 74 68   P3 is a flag th
26c80 61 74 20 70 72 6f 76 69 64 65 73 20 61 20 68 69  at provides a hi
26c90 6e 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65  nt to the b-tree
26ca0 20 6c 61 79 65 72 20 74 68 61 74 20 74 68 69 73   layer that this
26cb0 0a 2a 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69  .** insert is li
26cc0 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70  kely to be an ap
26cd0 70 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  pend..**.** If P
26ce0 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47  5 has the OPFLAG
26cf0 5f 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74  _NCHANGE bit set
26d00 2c 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67  , then the chang
26d10 65 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20  e counter is.** 
26d20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74  incremented by t
26d30 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
26d40 20 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f    If the OPFLAG_
26d50 4e 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63  NCHANGE bit is c
26d60 6c 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68  lear,.** then th
26d70 65 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  e change counter
26d80 20 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a   is unchanged..*
26d90 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74  *.** If P5 has t
26da0 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  he OPFLAG_USESEE
26db0 4b 52 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c  KRESULT bit set,
26dc0 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
26dd0 20 6d 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75   must have.** ju
26de0 73 74 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74  st done a seek t
26df0 6f 20 74 68 65 20 73 70 6f 74 20 77 68 65 72 65  o the spot where
26e00 20 74 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69   the new entry i
26e10 73 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  s to be inserted
26e20 2e 0a 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61  ..** This flag a
26e30 76 6f 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65  voids doing an e
26e40 78 74 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a  xtra seek..**.**
26e50 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
26e60 6e 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  n only works for
26e70 20 69 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65   indices.  The e
26e80 71 75 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75  quivalent instru
26e90 63 74 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62  ction.** for tab
26ea0 6c 65 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74  les is OP_Insert
26eb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
26ec0 74 65 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20  terInsert:      
26ed0 20 2f 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20   /* in2 */.case 
26ee0 4f 50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20  OP_IdxInsert: { 
26ef0 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f         /* in2 */
26f00 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
26f10 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70  C;.  BtCursor *p
26f20 43 72 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79  Crsr;.  int nKey
26f30 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  ;.  const char *
26f40 7a 4b 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28  zKey;..  assert(
26f50 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
26f60 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
26f70 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
26f80 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
26f90 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
26fa0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26fb0 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e  rter(pC)==(pOp->
26fc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65  opcode==OP_Sorte
26fd0 72 49 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49  rInsert) );.  pI
26fe0 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
26ff0 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
27000 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In2->flags & MEM
27010 5f 42 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72  _Blob );.  pCrsr
27020 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
27030 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
27040 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
27050 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
27060 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d   assert( pCrsr!=
27070 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27080 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b  C->isTable==0 );
27090 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
270a0 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20  ob(pIn2);.  if( 
270b0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
270c0 0a 20 20 20 20 69 66 28 20 69 73 53 6f 72 74 65  .    if( isSorte
270d0 72 28 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72  r(pC) ){.      r
270e0 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
270f0 6f 72 74 65 72 57 72 69 74 65 28 70 43 2c 20 70  orterWrite(pC, p
27100 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  In2);.    }else{
27110 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20 70 49  .      nKey = pI
27120 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a 4b 65  n2->n;.      zKe
27130 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20  y = pIn2->z;.   
27140 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
27150 74 72 65 65 49 6e 73 65 72 74 28 70 43 72 73 72  treeInsert(pCrsr
27160 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20 22 22  , zKey, nKey, ""
27170 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70 33 2c  , 0, 0, pOp->p3,
27180 20 0a 20 20 20 20 20 20 20 20 20 20 28 28 70 4f   .          ((pO
27190 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55  p->p5 & OPFLAG_U
271a0 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20  SESEEKRESULT) ? 
271b0 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a  pC->seekResult :
271c0 20 30 29 0a 20 20 20 20 20 20 20 20 20 20 29 3b   0).          );
271d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
271e0 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
271f0 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 70 43  o==0 );.      pC
27200 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20  ->cacheStatus = 
27210 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 20  CACHE_STALE;.   
27220 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
27230 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
27240 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33  xDelete P1 P2 P3
27250 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
27260 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a 2a  : key=r[P2@P3].*
27270 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e 74  *.** The content
27280 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72 73   of P3 registers
27290 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65 67   starting at reg
272a0 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a 2a  ister P2 form.**
272b0 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
272c0 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70 63  ex key. This opc
272d0 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61 74  ode removes that
272e0 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65 20   entry from the 
272f0 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65 64  .** index opened
27300 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a   by cursor P1..*
27310 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65 6c  /.case OP_IdxDel
27320 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ete: {.  VdbeCur
27330 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
27340 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
27350 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
27360 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
27370 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20  sert( pOp->p3>0 
27380 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
27390 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p2>0 && pOp->p
273a0 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  2+pOp->p3<=(p->n
273b0 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
273c0 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  1 );.  assert( p
273d0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
273e0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
273f0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
27400 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
27410 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
27420 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70 43    pCrsr = pC->pC
27430 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74 28  ursor;.  assert(
27440 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 61   pCrsr!=0 );.  a
27450 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d  ssert( pOp->p5==
27460 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  0 );.  r.pKeyInf
27470 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
27480 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
27490 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 72  u16)pOp->p3;.  r
274a0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
274b0 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65  .  r.aMem = &aMe
274c0 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69 66 64  m[pOp->p2];.#ifd
274d0 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
274e0 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28 69    { int i; for(i
274f0 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20  =0; i<r.nField; 
27500 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65 6d  i++) assert( mem
27510 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b  IsValid(&r.aMem[
27520 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a  i]) ); }.#endif.
27530 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
27540 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
27550 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30 2c 20  d(pCrsr, &r, 0, 
27560 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66 28 20  0, &res);.  if( 
27570 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
27580 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
27590 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
275a0 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b 0a 20  Delete(pCrsr);. 
275b0 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d   }.  assert( pC-
275c0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
275d0 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  =0 );.  pC->cach
275e0 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
275f0 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b 3b 0a  STALE;.  break;.
27600 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  }../* Opcode: Id
27610 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
27620 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
27630 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
27640 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
27650 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
27660 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
27670 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
27680 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
27690 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
276a0 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
276b0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
276c0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
276d0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
276e0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
276f0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
27700 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
27710 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
27720 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
27730 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
27740 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77  /.case OP_IdxRow
27750 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
27760 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
27770 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43 75 72  lease */.  BtCur
27780 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 56 64  sor *pCrsr;.  Vd
27790 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
277a0 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20 61 73  i64 rowid;..  as
277b0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
277c0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
277d0 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
277e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
277f0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
27800 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  !=0 );.  pCrsr =
27810 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
27820 61 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30  assert( pCrsr!=0
27830 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67   );.  pOut->flag
27840 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  s = MEM_Null;.  
27850 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61  assert( pC->isTa
27860 62 6c 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ble==0 );.  asse
27870 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
27880 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 20 20  Moveto==0 );..  
27890 2f 2a 20 73 71 6c 69 74 65 33 56 62 65 43 75 72  /* sqlite3VbeCur
278a0 73 6f 72 52 65 73 74 6f 72 65 28 29 20 63 61 6e  sorRestore() can
278b0 20 6f 6e 6c 79 20 66 61 69 6c 20 69 66 20 74 68   only fail if th
278c0 65 20 72 65 63 6f 72 64 20 68 61 73 20 62 65 65  e record has bee
278d0 6e 20 64 65 6c 65 74 65 64 0a 20 20 2a 2a 20 6f  n deleted.  ** o
278e0 75 74 20 66 72 6f 6d 20 75 6e 64 65 72 20 74 68  ut from under th
278f0 65 20 63 75 72 73 6f 72 2e 20 20 54 68 61 74 20  e cursor.  That 
27900 77 69 6c 6c 20 6e 65 76 65 72 20 68 61 70 70 65  will never happe
27910 6e 64 20 66 6f 72 20 61 6e 20 49 64 78 52 6f 77  nd for an IdxRow
27920 69 64 0a 20 20 2a 2a 20 6f 70 63 6f 64 65 2c 20  id.  ** opcode, 
27930 68 65 6e 63 65 20 74 68 65 20 4e 45 56 45 52 28  hence the NEVER(
27940 29 20 61 72 72 6f 75 6e 64 20 74 68 65 20 63 68  ) arround the ch
27950 65 63 6b 20 6f 66 20 74 68 65 20 72 65 74 75 72  eck of the retur
27960 6e 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  n value..  */.  
27970 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
27980 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
27990 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 72  );.  if( NEVER(r
279a0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20  c!=SQLITE_OK) ) 
279b0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
279c0 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20  o_error;..  if( 
279d0 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a  !pC->nullRow ){.
279e0 20 20 20 20 72 6f 77 69 64 20 3d 20 30 3b 20 20      rowid = 0;  
279f0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
27a00 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
27a10 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
27a20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  */.    rc = sqli
27a30 74 65 33 56 64 62 65 49 64 78 52 6f 77 69 64 28  te3VdbeIdxRowid(
27a40 64 62 2c 20 70 43 72 73 72 2c 20 26 72 6f 77 69  db, pCrsr, &rowi
27a50 64 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  d);.    if( rc!=
27a60 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
27a70 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
27a80 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
27a90 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20  }.    pOut->u.i 
27aa0 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20 70 4f 75  = rowid;.    pOu
27ab0 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
27ac0 6e 74 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  nt;.  }.  break;
27ad0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
27ae0 64 78 47 45 20 50 31 20 50 32 20 50 33 20 50 34  dxGE P1 P2 P3 P4
27af0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
27b00 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
27b10 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
27b20 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
27b30 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
27b40 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
27b50 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
27b60 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
27b70 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65  RY KEY.  Compare
27b80 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
27b90 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65  against the inde
27ba0 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73  x .** that P1 is
27bb0 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
27bc0 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67  ing to, ignoring
27bd0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27be0 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69   or ROWID .** fi
27bf0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e  elds at the end.
27c00 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31  .**.** If the P1
27c10 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20   index entry is 
27c20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20  greater than or 
27c30 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
27c40 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a   value.** then j
27c50 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65  ump to P2.  Othe
27c60 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75  rwise fall throu
27c70 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69  gh to the next i
27c80 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f  nstruction..*/./
27c90 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47 54 20  * Opcode: IdxGT 
27ca0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
27cb0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
27cc0 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54  r[P3@P4].**.** T
27cd0 68 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76  he P4 register v
27ce0 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20  alues beginning 
27cf0 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20  with P3 form an 
27d00 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a  unpacked index .
27d10 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74  ** key that omit
27d20 73 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  s the PRIMARY KE
27d30 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73  Y.  Compare this
27d40 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e   key value again
27d50 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a  st the index .**
27d60 20 74 68 61 74 20 50 31 20 69 73 20 63 75 72 72   that P1 is curr
27d70 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74  ently pointing t
27d80 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68 65 20  o, ignoring the 
27d90 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72 20 52  PRIMARY KEY or R
27da0 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20  OWID .** fields 
27db0 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a  at the end..**.*
27dc0 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64 65  * If the P1 inde
27dd0 78 20 65 6e 74 72 79 20 69 73 20 67 72 65 61 74  x entry is great
27de0 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
27df0 76 61 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75  value.** then ju
27e00 6d 70 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72  mp to P2.  Other
27e10 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
27e20 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27e30 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
27e40 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 54 20 50   Opcode: IdxLT P
27e50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
27e60 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
27e70 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
27e80 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
27e90 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
27ea0 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
27eb0 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
27ec0 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
27ed0 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
27ee0 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
27ef0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
27f00 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
27f10 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
27f20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27f30 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
27f40 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
27f50 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
27f60 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
27f70 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27f80 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
27f90 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b 65 79  ess than the key
27fa0 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
27fb0 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72   to P2..** Other
27fc0 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
27fd0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27fe0 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  struction..*/./*
27ff0 20 4f 70 63 6f 64 65 3a 20 49 64 78 4c 45 20 50   Opcode: IdxLE P
28000 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
28010 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
28020 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68  [P3@P4].**.** Th
28030 65 20 50 34 20 72 65 67 69 73 74 65 72 20 76 61  e P4 register va
28040 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77  lues beginning w
28050 69 74 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75  ith P3 form an u
28060 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a  npacked index .*
28070 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73  * key that omits
28080 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59   the PRIMARY KEY
28090 20 6f 72 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70   or ROWID.  Comp
280a0 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c  are this key val
280b0 75 65 20 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68  ue against.** th
280c0 65 20 69 6e 64 65 78 20 74 68 61 74 20 50 31 20  e index that P1 
280d0 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
280e0 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69  nting to, ignori
280f0 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b  ng the PRIMARY K
28100 45 59 20 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f  EY or.** ROWID o
28110 6e 20 74 68 65 20 50 31 20 69 6e 64 65 78 2e 0a  n the P1 index..
28120 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
28130 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 6c  index entry is l
28140 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61  ess than or equa
28150 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61 6c  l to the key val
28160 75 65 20 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20  ue then jump.** 
28170 74 6f 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  to P2. Otherwise
28180 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
28190 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
281a0 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
281b0 50 5f 49 64 78 4c 45 3a 20 20 20 20 20 20 20 20  P_IdxLE:        
281c0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
281d0 65 20 4f 50 5f 49 64 78 47 54 3a 20 20 20 20 20  e OP_IdxGT:     
281e0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
281f0 63 61 73 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20  case OP_IdxLT:  
28200 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
28210 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 45  */.case OP_IdxGE
28220 3a 20 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75  :  {       /* ju
28230 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  mp */.  VdbeCurs
28240 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65  or *pC;.  int re
28250 73 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63  s;.  UnpackedRec
28260 6f 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74  ord r;..  assert
28270 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28280 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28290 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
282a0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
282b0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
282c0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
282d0 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20 20  >isOrdered );.  
282e0 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
282f0 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73 65 72  sor!=0);.  asser
28300 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
28310 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73  oveto==0 );.  as
28320 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30  sert( pOp->p5==0
28330 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29   || pOp->p5==1 )
28340 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
28350 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33  >p4type==P4_INT3
28360 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e 66  2 );.  r.pKeyInf
28370 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
28380 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20 28  ;.  r.nField = (
28390 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  u16)pOp->p4.i;. 
283a0 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
283b0 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20 20 20  <OP_IdxLT ){.   
283c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
283d0 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c  code==OP_IdxLE |
283e0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
283f0 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20 20 72  P_IdxGT );.    r
28400 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
28410 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61  ;.  }else{.    a
28420 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
28430 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20  de==OP_IdxGE || 
28440 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
28450 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 2e 64  IdxLT );.    r.d
28460 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20  efault_rc = 0;. 
28470 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61   }.  r.aMem = &a
28480 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69  Mem[pOp->p3];.#i
28490 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
284a0 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
284b0 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
284c0 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
284d0 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
284e0 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
284f0 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20 2f 2a  f.  res = 0;  /*
28500 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e   Not needed.  On
28510 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e  ly used to silen
28520 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f  ce a warning. */
28530 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
28540 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61 72 65  dbeIdxKeyCompare
28550 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26 72 65  (db, pC, &r, &re
28560 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
28570 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
28580 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
28590 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
285a0 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
285b0 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
285c0 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
285d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
285e0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
285f0 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
28600 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
28610 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
28620 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
28630 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
28640 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
28650 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28660 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
28670 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
28680 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
28690 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a  .  if( res>0 ){.
286a0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
286b0 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1 ;.  }.  bre
286c0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
286d0 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
286e0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
286f0 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
28700 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28710 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
28720 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
28730 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
28740 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
28750 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
28760 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
28770 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
28780 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
28790 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
287a0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
287b0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
287c0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
287d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
287e0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
287f0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
28800 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
28810 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
28820 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
28830 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
28840 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
28850 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
28860 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
28870 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
28880 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
28890 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
288a0 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
288b0 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
288c0 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
288d0 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
288e0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
288f0 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
28900 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
28910 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
28920 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
28930 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
28940 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
28950 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
28960 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
28970 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
28980 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
28990 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
289a0 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
289b0 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
289c0 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
289d0 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
289e0 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
289f0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
28a00 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
28a10 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
28a20 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
28a30 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
28a40 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
28a50 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
28a60 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
28a70 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
28a80 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
28a90 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
28aa0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
28ab0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
28ac0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28ad0 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20  MEM_Null;.  if( 
28ae0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20  db->nVdbeRead > 
28af0 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20  db->nVDestroy+1 
28b00 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
28b10 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70  TE_LOCKED;.    p
28b20 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20  ->errorAction = 
28b30 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c 73  OE_Abort;.  }els
28b40 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f 70  e{.    iDb = pOp
28b50 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72 74  ->p3;.    assert
28b60 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
28b70 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20  btreeMask, iDb) 
28b80 29 3b 0a 20 20 20 20 69 4d 6f 76 65 64 20 3d 20  );.    iMoved = 
28b90 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
28ba0 64 2e 20 20 4f 6e 6c 79 20 74 6f 20 73 69 6c 65  d.  Only to sile
28bb0 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a  nce a warning. *
28bc0 2f 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  /.    rc = sqlit
28bd0 65 33 42 74 72 65 65 44 72 6f 70 54 61 62 6c 65  e3BtreeDropTable
28be0 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
28bf0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f  t, pOp->p1, &iMo
28c00 76 65 64 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  ved);.    pOut->
28c10 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
28c20 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
28c30 20 69 4d 6f 76 65 64 3b 0a 23 69 66 6e 64 65 66   iMoved;.#ifndef
28c40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
28c50 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66 28 20  OVACUUM.    if( 
28c60 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
28c70 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20 20   iMoved!=0 ){.  
28c80 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74 50      sqlite3RootP
28c90 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44 62  ageMoved(db, iDb
28ca0 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e 70  , iMoved, pOp->p
28cb0 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c 6c  1);.      /* All
28cc0 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65 72   OP_Destroy oper
28cd0 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e 20  ations occur on 
28ce0 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20 2a  the same btree *
28cf0 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
28d00 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75  resetSchemaOnFau
28d10 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53 63  lt==0 || resetSc
28d20 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44 62  hemaOnFault==iDb
28d30 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73 65  +1 );.      rese
28d40 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20 3d  tSchemaOnFault =
28d50 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23 65   iDb+1;.    }.#e
28d60 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ndif.  }.  break
28d70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
28d80 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a 2a  Clear P1 P2 P3.*
28d90 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20  *.** Delete all 
28da0 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65 20  contents of the 
28db0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
28dc0 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
28dd0 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74 68  ot page.** in th
28de0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
28df0 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 20  is given by P1. 
28e00 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65 73   But, unlike Des
28e10 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a 20  troy, do not.** 
28e20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c 65  remove the table
28e30 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20 74   or index from t
28e40 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
28e50 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c  ..**.** The tabl
28e60 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69 73  e being clear is
28e70 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
28e80 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 32  abase file if P2
28e90 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d 3d  ==0.  If.** P2==
28ea0 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
28eb0 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
28ec0 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
28ed0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
28ee0 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
28ef0 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
28f00 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
28f10 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
28f20 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  LE..**.** If the
28f30 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e   P3 value is non
28f40 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
28f50 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20 74  table referred t
28f60 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a 20  o must be an.** 
28f70 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61 6e  intkey table (an
28f80 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74 20   SQL table, not 
28f90 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74 68  an index). In th
28fa0 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77 20  is case the row 
28fb0 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e 74  change .** count
28fc0 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
28fd0 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  by the number of
28fe0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62   rows in the tab
28ff0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64  le being cleared
29000 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 67  . .** If P3 is g
29010 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72 6f  reater than zero
29020 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
29030 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
29040 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c 73  ter P3 is.** als
29050 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79  o incremented by
29060 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
29070 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ows in the table
29080 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e 0a   being cleared..
29090 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
290a0 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65 20  Destroy.*/.case 
290b0 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69 6e  OP_Clear: {.  in
290c0 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20 6e  t nChange;. .  n
290d0 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61 73  Change = 0;.  as
290e0 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
290f0 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y==0 );.  assert
29100 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
29110 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
29120 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  p2) );.  rc = sq
29130 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72 54  lite3BtreeClearT
29140 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d 3e  able(.      db->
29150 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42 74  aDb[pOp->p2].pBt
29160 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70 2d  , pOp->p1, (pOp-
29170 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20 3a  >p3 ? &nChange :
29180 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20 70   0).  );.  if( p
29190 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70 2d  Op->p3 ){.    p-
291a0 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68 61  >nChange += nCha
291b0 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f 70  nge;.    if( pOp
291c0 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20 20  ->p3>0 ){.      
291d0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
291e0 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33  id(&aMem[pOp->p3
291f0 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41  ]) );.      memA
29200 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
29210 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
29220 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70 2d  .      aMem[pOp-
29230 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68 61  >p3].u.i += nCha
29240 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  nge;.    }.  }. 
29250 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
29260 63 6f 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65  code: ResetSorte
29270 72 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  r P1 * * * *.**.
29280 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f  ** Delete all co
29290 6e 74 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20  ntents from the 
292a0 65 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  ephemeral table 
292b0 6f 72 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61  or sorter.** tha
292c0 74 20 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72  t is open on cur
292d0 73 6f 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68  sor P1..**.** Th
292e0 69 73 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77  is opcode only w
292f0 6f 72 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73  orks for cursors
29300 20 75 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e   used for sortin
29310 67 20 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20  g and.** opened 
29320 77 69 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65  with OP_OpenEphe
29330 6d 65 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74  meral or OP_Sort
29340 65 72 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20  erOpen..*/.case 
29350 4f 50 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20  OP_ResetSorter: 
29360 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
29370 70 43 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20  pC;. .  assert( 
29380 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
29390 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
293a0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
293b0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
293c0 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
293d0 0a 20 20 69 66 28 20 70 43 2d 3e 70 53 6f 72 74  .  if( pC->pSort
293e0 65 72 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  er ){.    sqlite
293f0 33 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74  3VdbeSorterReset
29400 28 64 62 2c 20 70 43 2d 3e 70 53 6f 72 74 65 72  (db, pC->pSorter
29410 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
29420 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73 45 70  assert( pC->isEp
29430 68 65 6d 65 72 61 6c 20 29 3b 0a 20 20 20 20 72  hemeral );.    r
29440 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
29450 43 6c 65 61 72 54 61 62 6c 65 4f 66 43 75 72 73  ClearTableOfCurs
29460 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b  or(pC->pCursor);
29470 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
29480 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61  ./* Opcode: Crea
29490 74 65 54 61 62 6c 65 20 50 31 20 50 32 20 2a 20  teTable P1 P2 * 
294a0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
294b0 20 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d   r[P2]=root iDb=
294c0 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74  P1.**.** Allocat
294d0 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 69 6e  e a new table in
294e0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
294f0 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30  se file if P1==0
29500 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75   or in the.** au
29510 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
29520 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f   file if P1==1 o
29530 72 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64  r in an attached
29540 20 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20   database if.** 
29550 50 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65  P1>1.  Write the
29560 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65   root page numbe
29570 72 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62  r of the new tab
29580 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  le into.** regis
29590 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  ter P2.**.** The
295a0 20 64 69 66 66 65 72 65 6e 63 65 20 62 65 74 77   difference betw
295b0 65 65 6e 20 61 20 74 61 62 6c 65 20 61 6e 64 20  een a table and 
295c0 61 6e 20 69 6e 64 65 78 20 69 73 20 74 68 69 73  an index is this
295d0 3a 20 20 41 20 74 61 62 6c 65 20 6d 75 73 74 0a  :  A table must.
295e0 2a 2a 20 68 61 76 65 20 61 20 34 2d 62 79 74 65  ** have a 4-byte
295f0 20 69 6e 74 65 67 65 72 20 6b 65 79 20 61 6e 64   integer key and
29600 20 63 61 6e 20 68 61 76 65 20 61 72 62 69 74 72   can have arbitr
29610 61 72 79 20 64 61 74 61 2e 20 20 41 6e 20 69 6e  ary data.  An in
29620 64 65 78 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72  dex.** has an ar
29630 62 69 74 72 61 72 79 20 6b 65 79 20 62 75 74 20  bitrary key but 
29640 6e 6f 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53  no data..**.** S
29650 65 65 20 61 6c 73 6f 3a 20 43 72 65 61 74 65 49  ee also: CreateI
29660 6e 64 65 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ndex.*/./* Opcod
29670 65 3a 20 43 72 65 61 74 65 49 6e 64 65 78 20 50  e: CreateIndex P
29680 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
29690 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f  nopsis: r[P2]=ro
296a0 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20  ot iDb=P1.**.** 
296b0 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 69  Allocate a new i
296c0 6e 64 65 78 20 69 6e 20 74 68 65 20 6d 61 69 6e  ndex in the main
296d0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
296e0 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68  f P1==0 or in th
296f0 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64  e.** auxiliary d
29700 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
29710 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61  P1==1 or in an a
29720 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
29730 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72   if.** P1>1.  Wr
29740 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67  ite the root pag
29750 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20  e number of the 
29760 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a  new table into.*
29770 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  * register P2..*
29780 2a 0a 2a 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e  *.** See documen
29790 74 61 74 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65  tation on OP_Cre
297a0 61 74 65 54 61 62 6c 65 20 66 6f 72 20 61 64 64  ateTable for add
297b0 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
297c0 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
297d0 43 72 65 61 74 65 49 6e 64 65 78 3a 20 20 20 20  CreateIndex:    
297e0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
297f0 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 63 61  prerelease */.ca
29800 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  se OP_CreateTabl
29810 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 2f 2a  e: {          /*
29820 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65   out2-prerelease
29830 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
29840 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
29850 62 20 2a 70 44 62 3b 0a 0a 20 20 70 67 6e 6f 20  b *pDb;..  pgno 
29860 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70  = 0;.  assert( p
29870 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
29880 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
29890 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
298a0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
298b0 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20  k, pOp->p1) );. 
298c0 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
298d0 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62  Only==0 );.  pDb
298e0 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d   = &db->aDb[pOp-
298f0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29900 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20  pDb->pBt!=0 );. 
29910 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
29920 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  ==OP_CreateTable
29930 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67 73   ){.    /* flags
29940 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b   = BTREE_INTKEY;
29950 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d 20   */.    flags = 
29960 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20 20  BTREE_INTKEY;.  
29970 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67 73  }else{.    flags
29980 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45 59   = BTREE_BLOBKEY
29990 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71 6c  ;.  }.  rc = sql
299a0 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65 54  ite3BtreeCreateT
299b0 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20 26  able(pDb->pBt, &
299c0 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20 20  pgno, flags);.  
299d0 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f  pOut->u.i = pgno
299e0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
299f0 20 4f 70 63 6f 64 65 3a 20 50 61 72 73 65 53 63   Opcode: ParseSc
29a00 68 65 6d 61 20 50 31 20 2a 20 2a 20 50 34 20 2a  hema P1 * * P4 *
29a10 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 61 6e 64 20  .**.** Read and 
29a20 70 61 72 73 65 20 61 6c 6c 20 65 6e 74 72 69 65  parse all entrie
29a30 73 20 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54  s from the SQLIT
29a40 45 5f 4d 41 53 54 45 52 20 74 61 62 6c 65 20 6f  E_MASTER table o
29a50 66 20 64 61 74 61 62 61 73 65 20 50 31 0a 2a 2a  f database P1.**
29a60 20 74 68 61 74 20 6d 61 74 63 68 20 74 68 65 20   that match the 
29a70 57 48 45 52 45 20 63 6c 61 75 73 65 20 50 34 2e  WHERE clause P4.
29a80 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63   .**.** This opc
29a90 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
29aa0 70 61 72 73 65 72 20 74 6f 20 63 72 65 61 74 65  parser to create
29ab0 20 61 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d   a new virtual m
29ac0 61 63 68 69 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20  achine,.** then 
29ad0 72 75 6e 73 20 74 68 65 20 6e 65 77 20 76 69 72  runs the new vir
29ae0 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
29af0 74 20 69 73 20 74 68 75 73 20 61 20 72 65 2d 65  t is thus a re-e
29b00 6e 74 72 61 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a  ntrant opcode..*
29b10 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 73 65 53  /.case OP_ParseS
29b20 63 68 65 6d 61 3a 20 7b 0a 20 20 69 6e 74 20 69  chema: {.  int i
29b30 44 62 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  Db;.  const char
29b40 20 2a 7a 4d 61 73 74 65 72 3b 0a 20 20 63 68 61   *zMaster;.  cha
29b50 72 20 2a 7a 53 71 6c 3b 0a 20 20 49 6e 69 74 44  r *zSql;.  InitD
29b60 61 74 61 20 69 6e 69 74 44 61 74 61 3b 0a 0a 20  ata initData;.. 
29b70 20 2f 2a 20 41 6e 79 20 70 72 65 70 61 72 65 64   /* Any prepared
29b80 20 73 74 61 74 65 6d 65 6e 74 20 74 68 61 74 20   statement that 
29b90 69 6e 76 6f 6b 65 73 20 74 68 69 73 20 6f 70 63  invokes this opc
29ba0 6f 64 65 20 77 69 6c 6c 20 68 6f 6c 64 20 6d 75  ode will hold mu
29bb0 74 65 78 65 73 0a 20 20 2a 2a 20 6f 6e 20 65 76  texes.  ** on ev
29bc0 65 72 79 20 62 74 72 65 65 2e 20 20 54 68 69 73  ery btree.  This
29bd0 20 69 73 20 61 20 70 72 65 72 65 71 75 69 73 69   is a prerequisi
29be0 74 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e 67 20  te for invoking 
29bf0 0a 20 20 2a 2a 20 73 71 6c 69 74 65 33 49 6e 69  .  ** sqlite3Ini
29c00 74 43 61 6c 6c 62 61 63 6b 28 29 2e 0a 20 20 2a  tCallback()..  *
29c10 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
29c20 44 45 42 55 47 0a 20 20 66 6f 72 28 69 44 62 3d  DEBUG.  for(iDb=
29c30 30 3b 20 69 44 62 3c 64 62 2d 3e 6e 44 62 3b 20  0; iDb<db->nDb; 
29c40 69 44 62 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65  iDb++){.    asse
29c50 72 74 28 20 69 44 62 3d 3d 31 20 7c 7c 20 73 71  rt( iDb==1 || sq
29c60 6c 69 74 65 33 42 74 72 65 65 48 6f 6c 64 73 4d  lite3BtreeHoldsM
29c70 75 74 65 78 28 64 62 2d 3e 61 44 62 5b 69 44 62  utex(db->aDb[iDb
29c80 5d 2e 70 42 74 29 20 29 3b 0a 20 20 7d 0a 23 65  ].pBt) );.  }.#e
29c90 6e 64 69 66 0a 0a 20 20 69 44 62 20 3d 20 70 4f  ndif..  iDb = pO
29ca0 70 2d 3e 70 31 3b 0a 20 20 61 73 73 65 72 74 28  p->p1;.  assert(
29cb0 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
29cc0 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
29cd0 72 74 28 20 44 62 48 61 73 50 72 6f 70 65 72 74  rt( DbHasPropert
29ce0 79 28 64 62 2c 20 69 44 62 2c 20 44 42 5f 53 63  y(db, iDb, DB_Sc
29cf0 68 65 6d 61 4c 6f 61 64 65 64 29 20 29 3b 0a 20  hemaLoaded) );. 
29d00 20 2f 2a 20 55 73 65 64 20 74 6f 20 62 65 20 61   /* Used to be a
29d10 20 63 6f 6e 64 69 74 69 6f 6e 61 6c 20 2a 2f 20   conditional */ 
29d20 7b 0a 20 20 20 20 7a 4d 61 73 74 65 72 20 3d 20  {.    zMaster = 
29d30 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 69 44 62  SCHEMA_TABLE(iDb
29d40 29 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e  );.    initData.
29d50 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69  db = db;.    ini
29d60 74 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d  tData.iDb = pOp-
29d70 3e 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74  >p1;.    initDat
29d80 61 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d  a.pzErrMsg = &p-
29d90 3e 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53  >zErrMsg;.    zS
29da0 71 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ql = sqlite3MPri
29db0 6e 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22  ntf(db,.       "
29dc0 53 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f  SELECT name, roo
29dd0 74 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20  tpage, sql FROM 
29de0 27 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73  '%q'.%s WHERE %s
29df0 20 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22   ORDER BY rowid"
29e00 2c 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62  ,.       db->aDb
29e10 5b 69 44 62 5d 2e 7a 4e 61 6d 65 2c 20 7a 4d 61  [iDb].zName, zMa
29e20 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ster, pOp->p4.z)
29e30 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d  ;.    if( zSql==
29e40 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  0 ){.      rc = 
29e50 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
29e60 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 61    }else{.      a
29e70 73 73 65 72 74 28 20 64 62 2d 3e 69 6e 69 74 2e  ssert( db->init.
29e80 62 75 73 79 3d 3d 30 20 29 3b 0a 20 20 20 20 20  busy==0 );.     
29e90 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
29ea0 20 31 3b 0a 20 20 20 20 20 20 69 6e 69 74 44 61   1;.      initDa
29eb0 74 61 2e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f  ta.rc = SQLITE_O
29ec0 4b 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  K;.      assert(
29ed0 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c   !db->mallocFail
29ee0 65 64 20 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ed );.      rc =
29ef0 20 73 71 6c 69 74 65 33 5f 65 78 65 63 28 64 62   sqlite3_exec(db
29f00 2c 20 7a 53 71 6c 2c 20 73 71 6c 69 74 65 33 49  , zSql, sqlite3I
29f10 6e 69 74 43 61 6c 6c 62 61 63 6b 2c 20 26 69 6e  nitCallback, &in
29f20 69 74 44 61 74 61 2c 20 30 29 3b 0a 20 20 20 20  itData, 0);.    
29f30 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
29f40 5f 4f 4b 20 29 20 72 63 20 3d 20 69 6e 69 74 44  _OK ) rc = initD
29f50 61 74 61 2e 72 63 3b 0a 20 20 20 20 20 20 73 71  ata.rc;.      sq
29f60 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
29f70 7a 53 71 6c 29 3b 0a 20 20 20 20 20 20 64 62 2d  zSql);.      db-
29f80 3e 69 6e 69 74 2e 62 75 73 79 20 3d 20 30 3b 0a  >init.busy = 0;.
29f90 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
29fa0 72 63 20 29 20 73 71 6c 69 74 65 33 52 65 73 65  rc ) sqlite3Rese
29fb0 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e  tAllSchemasOfCon
29fc0 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 69  nection(db);.  i
29fd0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f  f( rc==SQLITE_NO
29fe0 4d 45 4d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  MEM ){.    goto 
29ff0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72  no_mem;.  }.  br
2a000 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
2a010 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2a020 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
2a030 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
2a040 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
2a050 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
2a060 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
2a070 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2a080 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
2a090 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
2a0a0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
2a0b0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
2a0c0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
2a0d0 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
2a0e0 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
2a0f0 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
2a100 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
2a110 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
2a120 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
2a130 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
2a140 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2a150 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2a160 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2a170 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2a180 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 62  b, pOp->p1);.  b
2a190 72 65 61 6b 3b 20 20 0a 7d 0a 23 65 6e 64 69 66  reak;  .}.#endif
2a1a0 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
2a1b0 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45  ITE_OMIT_ANALYZE
2a1c0 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ) */../* Opcode:
2a1d0 20 44 72 6f 70 54 61 62 6c 65 20 50 31 20 2a 20   DropTable P1 * 
2a1e0 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d  * P4 *.**.** Rem
2a1f0 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ove the internal
2a200 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74   (in-memory) dat
2a210 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68 61  a structures tha
2a220 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68  t describe.** th
2a230 65 20 74 61 62 6c 65 20 6e 61 6d 65 64 20 50 34  e table named P4
2a240 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2a250 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2a260 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 0a 2a   after a table.*
2a270 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f  * is dropped fro
2a280 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68  m disk (using th
2a290 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65  e Destroy opcode
2a2a0 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65  ) in order to ke
2a2b0 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72  ep .** the inter
2a2c0 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69  nal representati
2a2d0 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68  on of the.** sch
2a2e0 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77  ema consistent w
2a2f0 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64  ith what is on d
2a300 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  isk..*/.case OP_
2a310 44 72 6f 70 54 61 62 6c 65 3a 20 7b 0a 20 20 73  DropTable: {.  s
2a320 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2a330 65 6c 65 74 65 54 61 62 6c 65 28 64 62 2c 20 70  eleteTable(db, p
2a340 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e  Op->p1, pOp->p4.
2a350 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  z);.  break;.}..
2a360 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 49  /* Opcode: DropI
2a370 6e 64 65 78 20 50 31 20 2a 20 2a 20 50 34 20 2a  ndex P1 * * P4 *
2a380 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2a390 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2a3a0 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2a3b0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2a3c0 72 69 62 65 0a 2a 2a 20 74 68 65 20 69 6e 64 65  ribe.** the inde
2a3d0 78 20 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61  x named P4 in da
2a3e0 74 61 62 61 73 65 20 50 31 2e 20 20 54 68 69 73  tabase P1.  This
2a3f0 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72   is called after
2a400 20 61 6e 20 69 6e 64 65 78 0a 2a 2a 20 69 73 20   an index.** is 
2a410 64 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73  dropped from dis
2a420 6b 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73  k (using the Des
2a430 74 72 6f 79 20 6f 70 63 6f 64 65 29 0a 2a 2a 20  troy opcode).** 
2a440 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2a450 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2a460 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2a470 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2a480 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2a490 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2a4a0 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 49 6e  /.case OP_DropIn
2a4b0 64 65 78 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  dex: {.  sqlite3
2a4c0 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
2a4d0 6e 64 65 78 28 64 62 2c 20 70 4f 70 2d 3e 70 31  ndex(db, pOp->p1
2a4e0 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
2a4f0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a500 6f 64 65 3a 20 44 72 6f 70 54 72 69 67 67 65 72  ode: DropTrigger
2a510 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2a520 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e  ** Remove the in
2a530 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72  ternal (in-memor
2a540 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75 72  y) data structur
2a550 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62 65  es that describe
2a560 0a 2a 2a 20 74 68 65 20 74 72 69 67 67 65 72 20  .** the trigger 
2a570 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2a580 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2a590 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2a5a0 20 74 72 69 67 67 65 72 0a 2a 2a 20 69 73 20 64   trigger.** is d
2a5b0 72 6f 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b  ropped from disk
2a5c0 20 28 75 73 69 6e 67 20 74 68 65 20 44 65 73 74   (using the Dest
2a5d0 72 6f 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f  roy opcode) in o
2a5e0 72 64 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a  rder to keep .**
2a5f0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65   the internal re
2a600 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20  presentation of 
2a610 74 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f  the.** schema co
2a620 6e 73 69 73 74 65 6e 74 20 77 69 74 68 20 77 68  nsistent with wh
2a630 61 74 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a  at is on disk..*
2a640 2f 0a 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 72  /.case OP_DropTr
2a650 69 67 67 65 72 3a 20 7b 0a 20 20 73 71 6c 69 74  igger: {.  sqlit
2a660 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
2a670 65 54 72 69 67 67 65 72 28 64 62 2c 20 70 4f 70  eTrigger(db, pOp
2a680 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2a690 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23  ;.  break;.}...#
2a6a0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a6b0 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2a6c0 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  CK./* Opcode: In
2a6d0 74 65 67 72 69 74 79 43 6b 20 50 31 20 50 32 20  tegrityCk P1 P2 
2a6e0 50 33 20 2a 20 50 35 0a 2a 2a 0a 2a 2a 20 44 6f  P3 * P5.**.** Do
2a6f0 20 61 6e 20 61 6e 61 6c 79 73 69 73 20 6f 66 20   an analysis of 
2a700 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  the currently op
2a710 65 6e 20 64 61 74 61 62 61 73 65 2e 20 20 53 74  en database.  St
2a720 6f 72 65 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74  ore in.** regist
2a730 65 72 20 50 31 20 74 68 65 20 74 65 78 74 20 6f  er P1 the text o
2a740 66 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  f an error messa
2a750 67 65 20 64 65 73 63 72 69 62 69 6e 67 20 61 6e  ge describing an
2a760 79 20 70 72 6f 62 6c 65 6d 73 2e 0a 2a 2a 20 49  y problems..** I
2a770 66 20 6e 6f 20 70 72 6f 62 6c 65 6d 73 20 61 72  f no problems ar
2a780 65 20 66 6f 75 6e 64 2c 20 73 74 6f 72 65 20 61  e found, store a
2a790 20 4e 55 4c 4c 20 69 6e 20 72 65 67 69 73 74 65   NULL in registe
2a7a0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  r P1..**.** The 
2a7b0 72 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  register P3 cont
2a7c0 61 69 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d  ains the maximum
2a7d0 20 6e 75 6d 62 65 72 20 6f 66 20 61 6c 6c 6f 77   number of allow
2a7e0 65 64 20 65 72 72 6f 72 73 2e 0a 2a 2a 20 41 74  ed errors..** At
2a7f0 20 6d 6f 73 74 20 72 65 67 28 50 33 29 20 65 72   most reg(P3) er
2a800 72 6f 72 73 20 77 69 6c 6c 20 62 65 20 72 65 70  rors will be rep
2a810 6f 72 74 65 64 2e 0a 2a 2a 20 49 6e 20 6f 74 68  orted..** In oth
2a820 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 61 6e  er words, the an
2a830 61 6c 79 73 69 73 20 73 74 6f 70 73 20 61 73 20  alysis stops as 
2a840 73 6f 6f 6e 20 61 73 20 72 65 67 28 50 31 29 20  soon as reg(P1) 
2a850 65 72 72 6f 72 73 20 61 72 65 20 0a 2a 2a 20 73  errors are .** s
2a860 65 65 6e 2e 20 20 52 65 67 28 50 31 29 20 69 73  een.  Reg(P1) is
2a870 20 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68   updated with th
2a880 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  e number of erro
2a890 72 73 20 72 65 6d 61 69 6e 69 6e 67 2e 0a 2a 2a  rs remaining..**
2a8a0 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 20 70 61 67  .** The root pag
2a8b0 65 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 6c 6c  e numbers of all
2a8c0 20 74 61 62 6c 65 73 20 69 6e 20 74 68 65 20 64   tables in the d
2a8d0 61 74 61 62 61 73 65 20 61 72 65 20 69 6e 74 65  atabase are inte
2a8e0 67 65 72 0a 2a 2a 20 73 74 6f 72 65 64 20 69 6e  ger.** stored in
2a8f0 20 72 65 67 28 50 31 29 2c 20 72 65 67 28 50 31   reg(P1), reg(P1
2a900 2b 31 29 2c 20 72 65 67 28 50 31 2b 32 29 2c 20  +1), reg(P1+2), 
2a910 2e 2e 2e 2e 20 20 54 68 65 72 65 20 61 72 65 20  ....  There are 
2a920 50 32 20 74 61 62 6c 65 73 0a 2a 2a 20 74 6f 74  P2 tables.** tot
2a930 61 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  al..**.** If P5 
2a940 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
2a950 20 63 68 65 63 6b 20 69 73 20 64 6f 6e 65 20 6f   check is done o
2a960 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79 20  n the auxiliary 
2a970 64 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65  database.** file
2a980 2c 20 6e 6f 74 20 74 68 65 20 6d 61 69 6e 20 64  , not the main d
2a990 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a  atabase file..**
2a9a0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2a9b0 69 73 20 75 73 65 64 20 74 6f 20 69 6d 70 6c 65  is used to imple
2a9c0 6d 65 6e 74 20 74 68 65 20 69 6e 74 65 67 72 69  ment the integri
2a9d0 74 79 5f 63 68 65 63 6b 20 70 72 61 67 6d 61 2e  ty_check pragma.
2a9e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65  .*/.case OP_Inte
2a9f0 67 72 69 74 79 43 6b 3a 20 7b 0a 20 20 69 6e 74  grityCk: {.  int
2aa00 20 6e 52 6f 6f 74 3b 20 20 20 20 20 20 2f 2a 20   nRoot;      /* 
2aa10 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73  Number of tables
2aa20 20 74 6f 20 63 68 65 63 6b 2e 20 20 28 4e 75 6d   to check.  (Num
2aa30 62 65 72 20 6f 66 20 72 6f 6f 74 20 70 61 67 65  ber of root page
2aa40 73 2e 29 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 52  s.) */.  int *aR
2aa50 6f 6f 74 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oot;     /* Arra
2aa60 79 20 6f 66 20 72 6f 6f 74 70 61 67 65 20 6e 75  y of rootpage nu
2aa70 6d 62 65 72 73 20 66 6f 72 20 74 61 62 6c 65 73  mbers for tables
2aa80 20 74 6f 20 62 65 20 63 68 65 63 6b 65 64 20 2a   to be checked *
2aa90 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20  /.  int j;      
2aaa0 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
2aab0 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72  ter */.  int nEr
2aac0 72 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  r;       /* Numb
2aad0 65 72 20 6f 66 20 65 72 72 6f 72 73 20 72 65 70  er of errors rep
2aae0 6f 72 74 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  orted */.  char 
2aaf0 2a 7a 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 65  *z;        /* Te
2ab00 78 74 20 6f 66 20 74 68 65 20 65 72 72 6f 72 20  xt of the error 
2ab10 72 65 70 6f 72 74 20 2a 2f 0a 20 20 4d 65 6d 20  report */.  Mem 
2ab20 2a 70 6e 45 72 72 3b 20 20 20 20 20 2f 2a 20 52  *pnErr;     /* R
2ab30 65 67 69 73 74 65 72 20 6b 65 65 70 69 6e 67 20  egister keeping 
2ab40 74 72 61 63 6b 20 6f 66 20 65 72 72 6f 72 73 20  track of errors 
2ab50 72 65 6d 61 69 6e 69 6e 67 20 2a 2f 0a 0a 20 20  remaining */..  
2ab60 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
2ab70 61 64 65 72 20 29 3b 0a 20 20 6e 52 6f 6f 74 20  ader );.  nRoot 
2ab80 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
2ab90 65 72 74 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a  ert( nRoot>0 );.
2aba0 20 20 61 52 6f 6f 74 20 3d 20 73 71 6c 69 74 65    aRoot = sqlite
2abb0 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c  3DbMallocRaw(db,
2abc0 20 73 69 7a 65 6f 66 28 69 6e 74 29 2a 28 6e 52   sizeof(int)*(nR
2abd0 6f 6f 74 2b 31 29 20 29 3b 0a 20 20 69 66 28 20  oot+1) );.  if( 
2abe0 61 52 6f 6f 74 3d 3d 30 20 29 20 67 6f 74 6f 20  aRoot==0 ) goto 
2abf0 6e 6f 5f 6d 65 6d 3b 0a 20 20 61 73 73 65 72 74  no_mem;.  assert
2ac00 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
2ac10 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
2ac20 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
2ac30 20 20 70 6e 45 72 72 20 3d 20 26 61 4d 65 6d 5b    pnErr = &aMem[
2ac40 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
2ac50 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67  rt( (pnErr->flag
2ac60 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2ac70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e  );.  assert( (pn
2ac80 45 72 72 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Err->flags & (ME
2ac90 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29  M_Str|MEM_Blob))
2aca0 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31 20 3d 20  ==0 );.  pIn1 = 
2acb0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2acc0 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 6e 52 6f    for(j=0; j<nRo
2acd0 6f 74 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 61 52  ot; j++){.    aR
2ace0 6f 6f 74 5b 6a 5d 20 3d 20 28 69 6e 74 29 73 71  oot[j] = (int)sq
2acf0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
2ad00 65 28 26 70 49 6e 31 5b 6a 5d 29 3b 0a 20 20 7d  e(&pIn1[j]);.  }
2ad10 0a 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d 20 30 3b  .  aRoot[j] = 0;
2ad20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
2ad30 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20  p5<db->nDb );.  
2ad40 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65  assert( DbMaskTe
2ad50 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c  st(p->btreeMask,
2ad60 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20 20 7a   pOp->p5) );.  z
2ad70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49   = sqlite3BtreeI
2ad80 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28 64 62  ntegrityCheck(db
2ad90 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d 2e 70  ->aDb[pOp->p5].p
2ada0 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f 6f 74  Bt, aRoot, nRoot
2adb0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2add0 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d 3e 75     (int)pnErr->u
2ade0 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20 73 71  .i, &nErr);.  sq
2adf0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
2ae00 61 52 6f 6f 74 29 3b 0a 20 20 70 6e 45 72 72 2d  aRoot);.  pnErr-
2ae10 3e 75 2e 69 20 2d 3d 20 6e 45 72 72 3b 0a 20 20  >u.i -= nErr;.  
2ae20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2ae30 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 69  tNull(pIn1);.  i
2ae40 66 28 20 6e 45 72 72 3d 3d 30 20 29 7b 0a 20 20  f( nErr==0 ){.  
2ae50 20 20 61 73 73 65 72 74 28 20 7a 3d 3d 30 20 29    assert( z==0 )
2ae60 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 7a 3d  ;.  }else if( z=
2ae70 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  =0 ){.    goto n
2ae80 6f 5f 6d 65 6d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  o_mem;.  }else{.
2ae90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
2aea0 65 6d 53 65 74 53 74 72 28 70 49 6e 31 2c 20 7a  emSetStr(pIn1, z
2aeb0 2c 20 2d 31 2c 20 53 51 4c 49 54 45 5f 55 54 46  , -1, SQLITE_UTF
2aec0 38 2c 20 73 71 6c 69 74 65 33 5f 66 72 65 65 29  8, sqlite3_free)
2aed0 3b 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d  ;.  }.  UPDATE_M
2aee0 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31  AX_BLOBSIZE(pIn1
2aef0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
2af00 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
2af10 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  In1, encoding);.
2af20 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
2af30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
2af40 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
2af50 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20   */../* Opcode: 
2af60 52 6f 77 53 65 74 41 64 64 20 50 31 20 50 32 20  RowSetAdd P1 P2 
2af70 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2af80 73 3a 20 20 72 6f 77 73 65 74 28 50 31 29 3d 72  s:  rowset(P1)=r
2af90 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 49 6e 73 65 72  [P2].**.** Inser
2afa0 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
2afb0 6c 75 65 20 68 65 6c 64 20 62 79 20 72 65 67 69  lue held by regi
2afc0 73 74 65 72 20 50 32 20 69 6e 74 6f 20 61 20 62  ster P2 into a b
2afd0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 0a 2a 2a 20  oolean index.** 
2afe0 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65 72  held in register
2aff0 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 61 73   P1..**.** An as
2b000 73 65 72 74 69 6f 6e 20 66 61 69 6c 73 20 69 66  sertion fails if
2b010 20 50 32 20 69 73 20 6e 6f 74 20 61 6e 20 69 6e   P2 is not an in
2b020 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
2b030 50 5f 52 6f 77 53 65 74 41 64 64 3a 20 7b 20 20  P_RowSetAdd: {  
2b040 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 69 6e 32       /* in1, in2
2b050 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2b060 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
2b070 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
2b080 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p2];.  assert( 
2b090 28 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn2->flags & M
2b0a0 45 4d 5f 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20  EM_Int)!=0 );.  
2b0b0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2b0c0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2b0d0 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
2b0e0 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65 74  VdbeMemSetRowSet
2b0f0 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28 20  (pIn1);.    if( 
2b100 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2b110 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29 20  EM_RowSet)==0 ) 
2b120 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2b130 0a 20 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  .  sqlite3RowSet
2b140 49 6e 73 65 72 74 28 70 49 6e 31 2d 3e 75 2e 70  Insert(pIn1->u.p
2b150 52 6f 77 53 65 74 2c 20 70 49 6e 32 2d 3e 75 2e  RowSet, pIn2->u.
2b160 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  i);.  break;.}..
2b170 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65  /* Opcode: RowSe
2b180 74 52 65 61 64 20 50 31 20 50 32 20 50 33 20 2a  tRead P1 P2 P3 *
2b190 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2b1a0 20 72 5b 50 33 5d 3d 72 6f 77 73 65 74 28 50 31   r[P3]=rowset(P1
2b1b0 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72 61 63 74 20  ).**.** Extract 
2b1c0 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c  the smallest val
2b1d0 75 65 20 66 72 6f 6d 20 62 6f 6f 6c 65 61 6e 20  ue from boolean 
2b1e0 69 6e 64 65 78 20 50 31 20 61 6e 64 20 70 75 74  index P1 and put
2b1f0 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f   that value into
2b200 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 33 2e  .** register P3.
2b210 20 20 4f 72 2c 20 69 66 20 62 6f 6f 6c 65 61 6e    Or, if boolean
2b220 20 69 6e 64 65 78 20 50 31 20 69 73 20 69 6e 69   index P1 is ini
2b230 74 69 61 6c 6c 79 20 65 6d 70 74 79 2c 20 6c 65  tially empty, le
2b240 61 76 65 20 50 33 0a 2a 2a 20 75 6e 63 68 61 6e  ave P3.** unchan
2b250 67 65 64 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20  ged and jump to 
2b260 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a  instruction P2..
2b270 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65  */.case OP_RowSe
2b280 74 52 65 61 64 3a 20 7b 20 20 20 20 20 20 20 2f  tRead: {       /
2b290 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 6f 75 74  * jump, in1, out
2b2a0 33 20 2a 2f 0a 20 20 69 36 34 20 76 61 6c 3b 0a  3 */.  i64 val;.
2b2b0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
2b2c0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
2b2d0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
2b2e0 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 0a 20  EM_RowSet)==0 . 
2b2f0 20 20 7c 7c 20 73 71 6c 69 74 65 33 52 6f 77 53    || sqlite3RowS
2b300 65 74 4e 65 78 74 28 70 49 6e 31 2d 3e 75 2e 70  etNext(pIn1->u.p
2b310 52 6f 77 53 65 74 2c 20 26 76 61 6c 29 3d 3d 30  RowSet, &val)==0
2b320 0a 20 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  .  ){.    /* The
2b330 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 69   boolean index i
2b340 73 20 65 6d 70 74 79 20 2a 2f 0a 20 20 20 20 73  s empty */.    s
2b350 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
2b360 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a 20 20 20 20  Null(pIn1);.    
2b370 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2b380 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2b390 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 7d 65  Taken(1,2);.  }e
2b3a0 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61  lse{.    /* A va
2b3b0 6c 75 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66  lue was pulled f
2b3c0 72 6f 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f  rom the index */
2b3d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2b3e0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2b3f0 6d 5b 70 4f 70 2d 3e 70 33 5d 2c 20 76 61 6c 29  m[pOp->p3], val)
2b400 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  ;.    VdbeBranch
2b410 54 61 6b 65 6e 28 30 2c 32 29 3b 0a 20 20 7d 0a  Taken(0,2);.  }.
2b420 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72    goto check_for
2b430 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f  _interrupt;.}../
2b440 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74  * Opcode: RowSet
2b450 54 65 73 74 20 50 31 20 50 32 20 50 33 20 50 34  Test P1 P2 P3 P4
2b460 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2b470 20 72 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74   r[P3] in rowset
2b480 28 50 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  (P1) goto P2.**.
2b490 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33 20 69  ** Register P3 i
2b4a0 73 20 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c  s assumed to hol
2b4b0 64 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  d a 64-bit integ
2b4c0 65 72 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67  er value. If reg
2b4d0 69 73 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74  ister P1.** cont
2b4e0 61 69 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62  ains a RowSet ob
2b4f0 6a 65 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f  ject and that Ro
2b500 77 53 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74  wSet object cont
2b510 61 69 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75  ains.** the valu
2b520 65 20 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75  e held in P3, ju
2b530 6d 70 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  mp to register P
2b540 32 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e  2. Otherwise, in
2b550 73 65 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65  sert the.** inte
2b560 67 65 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74  ger in P3 into t
2b570 68 65 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f  he RowSet and co
2b580 6e 74 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65  ntinue on to the
2b590 0a 2a 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e  .** next opcode.
2b5a0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65  .**.** The RowSe
2b5b0 74 20 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69  t object is opti
2b5c0 6d 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61  mized for the ca
2b5d0 73 65 20 77 68 65 72 65 20 73 75 63 63 65 73 73  se where success
2b5e0 69 76 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69  ive sets.** of i
2b5f0 6e 74 65 67 65 72 73 2c 20 77 68 65 72 65 20 65  ntegers, where e
2b600 61 63 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73  ach set contains
2b610 20 6e 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20   no duplicates. 
2b620 45 61 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76  Each set.** of v
2b630 61 6c 75 65 73 20 69 73 20 69 64 65 6e 74 69 66  alues is identif
2b640 69 65 64 20 62 79 20 61 20 75 6e 69 71 75 65 20  ied by a unique 
2b650 50 34 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69  P4 value. The fi
2b660 72 73 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20  rst set.** must 
2b670 68 61 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20  have P4==0, the 
2b680 66 69 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e  final set P4=-1.
2b690 20 20 50 34 20 6d 75 73 74 20 62 65 20 65 69 74    P4 must be eit
2b6a0 68 65 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e  her -1 or.** non
2b6b0 2d 6e 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20  -negative.  For 
2b6c0 6e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c  non-negative val
2b6d0 75 65 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74  ues of P4 only t
2b6e0 68 65 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69  he lower 4.** bi
2b6f0 74 73 20 61 72 65 20 73 69 67 6e 69 66 69 63 61  ts are significa
2b700 6e 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61  nt..**.** This a
2b710 6c 6c 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69  llows optimizati
2b720 6f 6e 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34  ons: (a) when P4
2b730 3d 3d 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20  ==0 there is no 
2b740 6e 65 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20  need to test.** 
2b750 74 68 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63  the rowset objec
2b760 74 20 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20  t for P3, as it 
2b770 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f  is guaranteed no
2b780 74 20 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c  t to contain it,
2b790 0a 2a 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d  .** (b) when P4=
2b7a0 3d 2d 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20  =-1 there is no 
2b7b0 6e 65 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74  need to insert t
2b7c0 68 65 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20  he value, as it 
2b7d0 77 69 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65  will.** never be
2b7e0 20 74 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64   tested for, and
2b7f0 20 28 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75   (c) when a valu
2b800 65 20 74 68 61 74 20 69 73 20 70 61 72 74 20 6f  e that is part o
2b810 66 20 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e  f set X is.** in
2b820 73 65 72 74 65 64 2c 20 74 68 65 72 65 20 69 73  serted, there is
2b830 20 6e 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72   no need to sear
2b840 63 68 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ch to see if the
2b850 20 73 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a   same value was.
2b860 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e  ** previously in
2b870 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2b880 66 20 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66  f set X (only if
2b890 20 69 74 20 77 61 73 20 70 72 65 76 69 6f 75 73   it was previous
2b8a0 6c 79 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61  ly.** inserted a
2b8b0 73 20 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f  s part of some o
2b8c0 74 68 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61  ther set)..*/.ca
2b8d0 73 65 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74  se OP_RowSetTest
2b8e0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2b8f0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
2b900 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
2b910 6e 74 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65  nt iSet;.  int e
2b920 78 69 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d  xists;..  pIn1 =
2b930 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2b940 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
2b950 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74  pOp->p3];.  iSet
2b960 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20   = pOp->p4.i;.  
2b970 61 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c  assert( pIn3->fl
2b980 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a  ags&MEM_Int );..
2b990 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
2b9a0 20 61 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20   anything other 
2b9b0 74 68 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62  than a rowset ob
2b9c0 6a 65 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63  ject in memory c
2b9d0 65 6c 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c  ell P1,.  ** del
2b9e0 65 74 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69  ete it now and i
2b9f0 6e 69 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74  nitialize P1 wit
2ba00 68 20 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65  h an empty rowse
2ba10 74 0a 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49  t.  */.  if( (pI
2ba20 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
2ba30 52 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20  RowSet)==0 ){.  
2ba40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
2ba50 53 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b  SetRowSet(pIn1);
2ba60 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
2ba70 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2ba80 65 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f  et)==0 ) goto no
2ba90 5f 6d 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73  _mem;.  }..  ass
2baa0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2bab0 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2bac0 61 73 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31  assert( iSet==-1
2bad0 20 7c 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20   || iSet>=0 );. 
2bae0 20 69 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20   if( iSet ){.   
2baf0 20 65 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65   exists = sqlite
2bb00 33 52 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31  3RowSetTest(pIn1
2bb10 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65  ->u.pRowSet, iSe
2bb20 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20  t, pIn3->u.i);. 
2bb30 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2bb40 65 6e 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b  en(exists!=0,2);
2bb50 0a 20 20 20 20 69 66 28 20 65 78 69 73 74 73 20  .    if( exists 
2bb60 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20 70 4f  ){.      pc = pO
2bb70 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 20  p->p2 - 1;.     
2bb80 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 20 20   break;.    }.  
2bb90 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2bba0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2bbb0 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2bbc0 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2bbd0 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2bbe0 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2bbf0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2bc00 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2bc10 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2bc20 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2bc30 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2bc40 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2bc50 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2bc60 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2bc70 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2bc80 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2bc90 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2bca0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2bcb0 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2bcc0 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2bcd0 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2bce0 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2bcf0 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2bd00 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2bd10 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2bd20 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2bd30 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2bd40 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2bd50 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2bd60 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2bd70 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2bd80 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2bd90 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2bda0 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2bdb0 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2bdc0 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2bdd0 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2bde0 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2bdf0 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2be00 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2be10 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2be20 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2be30 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2be40 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2be50 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2be60 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2be70 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2be80 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2be90 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2bea0 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2beb0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2bec0 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2bee0 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2bef0 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2bf00 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2bf10 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2bf20 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2bf30 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2bf40 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2bf50 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2bf60 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2bf70 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2bf80 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2bf90 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2bfa0 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2bfb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2bfc0 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2bfd0 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2bfe0 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2bff0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2c000 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2c010 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2c020 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2c030 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2c040 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2c050 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2c060 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2c070 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2c080 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2c090 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2c0a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2c0b0 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2c0c0 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2c0d0 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2c0e0 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2c0f0 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2c100 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2c110 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2c120 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2c130 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2c140 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2c150 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2c160 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2c170 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2c180 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2c190 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2c1a0 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2c1b0 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2c1c0 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2c1d0 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2c1e0 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2c1f0 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2c200 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2c210 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2c220 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2c230 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2c240 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2c250 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2c260 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2c270 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2c280 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2c290 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2c2a0 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2c2b0 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2c2c0 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2c2d0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2c2e0 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2c2f0 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2c300 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2c310 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2c320 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2c330 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2c340 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2c350 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2c360 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2c370 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2c380 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2c390 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2c3a0 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2c3b0 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2c3c0 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2c3d0 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2c3e0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2c3f0 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2c400 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2c410 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2c420 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2c430 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2c440 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2c450 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2c460 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2c470 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2c480 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2c490 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2c4a0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2c4b0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  ;.    sqlite3Set
2c4c0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2c4d0 73 67 2c 20 64 62 2c 20 22 74 6f 6f 20 6d 61 6e  sg, db, "too man
2c4e0 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72 69 67  y levels of trig
2c4f0 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22 29 3b  ger recursion");
2c500 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
2c510 0a 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 70  .  /* Register p
2c520 52 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74  Rt is used to st
2c530 6f 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 72  ore the memory r
2c540 65 71 75 69 72 65 64 20 74 6f 20 73 61 76 65 20  equired to save 
2c550 74 68 65 20 73 74 61 74 65 0a 20 20 2a 2a 20 6f  the state.  ** o
2c560 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72  f the current pr
2c570 6f 67 72 61 6d 2c 20 61 6e 64 20 74 68 65 20 6d  ogram, and the m
2c580 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 61  emory required a
2c590 74 20 72 75 6e 74 69 6d 65 20 74 6f 20 65 78 65  t runtime to exe
2c5a0 63 75 74 65 0a 20 20 2a 2a 20 74 68 65 20 74 72  cute.  ** the tr
2c5b0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e 20 49  igger program. I
2c5c0 66 20 74 68 69 73 20 74 72 69 67 67 65 72 20 68  f this trigger h
2c5d0 61 73 20 62 65 65 6e 20 66 69 72 65 64 20 62 65  as been fired be
2c5e0 66 6f 72 65 2c 20 74 68 65 6e 20 70 52 74 20 0a  fore, then pRt .
2c5f0 20 20 2a 2a 20 69 73 20 61 6c 72 65 61 64 79 20    ** is already 
2c600 61 6c 6c 6f 63 61 74 65 64 2e 20 4f 74 68 65 72  allocated. Other
2c610 77 69 73 65 2c 20 69 74 20 6d 75 73 74 20 62 65  wise, it must be
2c620 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 20 2a   initialized.  *
2c630 2f 0a 20 20 69 66 28 20 28 70 52 74 2d 3e 66 6c  /.  if( (pRt->fl
2c640 61 67 73 26 4d 45 4d 5f 46 72 61 6d 65 29 3d 3d  ags&MEM_Frame)==
2c650 30 20 29 7b 0a 20 20 20 20 2f 2a 20 53 75 62 50  0 ){.    /* SubP
2c660 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20 69 73 20 73  rogram.nMem is s
2c670 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72  et to the number
2c680 20 6f 66 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73   of memory cells
2c690 20 75 73 65 64 20 62 79 20 74 68 65 20 0a 20 20   used by the .  
2c6a0 20 20 2a 2a 20 70 72 6f 67 72 61 6d 20 73 74 6f    ** program sto
2c6b0 72 65 64 20 69 6e 20 53 75 62 50 72 6f 67 72 61  red in SubProgra
2c6c0 6d 2e 61 4f 70 2e 20 41 73 20 77 65 6c 6c 20 61  m.aOp. As well a
2c6d0 73 20 74 68 65 73 65 2c 20 6f 6e 65 20 6d 65 6d  s these, one mem
2c6e0 6f 72 79 0a 20 20 20 20 2a 2a 20 63 65 6c 6c 20  ory.    ** cell 
2c6f0 69 73 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  is required for 
2c700 65 61 63 68 20 63 75 72 73 6f 72 20 75 73 65 64  each cursor used
2c710 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
2c720 20 53 65 74 20 6c 6f 63 61 6c 0a 20 20 20 20 2a   Set local.    *
2c730 2a 20 76 61 72 69 61 62 6c 65 20 6e 4d 65 6d 20  * variable nMem 
2c740 28 61 6e 64 20 6c 61 74 65 72 2c 20 56 64 62 65  (and later, Vdbe
2c750 46 72 61 6d 65 2e 6e 43 68 69 6c 64 4d 65 6d 29  Frame.nChildMem)
2c760 20 74 6f 20 74 68 69 73 20 76 61 6c 75 65 2e 0a   to this value..
2c770 20 20 20 20 2a 2f 0a 20 20 20 20 6e 4d 65 6d 20      */.    nMem 
2c780 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  = pProgram->nMem
2c790 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   + pProgram->nCs
2c7a0 72 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52  r;.    nByte = R
2c7b0 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62  OUND8(sizeof(Vdb
2c7c0 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20  eFrame)).       
2c7d0 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20         + nMem * 
2c7e0 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20  sizeof(Mem).    
2c7f0 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f            + pPro
2c800 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a  gram->nCsr * siz
2c810 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a  eof(VdbeCursor *
2c820 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
2c830 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 6e 63  + pProgram->nOnc
2c840 65 20 2a 20 73 69 7a 65 6f 66 28 75 38 29 3b 0a  e * sizeof(u8);.
2c850 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71 6c      pFrame = sql
2c860 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f  ite3DbMallocZero
2c870 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20 20  (db, nByte);.   
2c880 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b 0a   if( !pFrame ){.
2c890 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65        goto no_me
2c8a0 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  m;.    }.    sql
2c8b0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2c8c0 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52 74  se(pRt);.    pRt
2c8d0 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46 72  ->flags = MEM_Fr
2c8e0 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75 2e  ame;.    pRt->u.
2c8f0 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2c900 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76 20  ..    pFrame->v 
2c910 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  = p;.    pFrame-
2c920 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d 65  >nChildMem = nMe
2c930 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e  m;.    pFrame->n
2c940 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f 67  ChildCsr = pProg
2c950 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 70  ram->nCsr;.    p
2c960 46 72 61 6d 65 2d 3e 70 63 20 3d 20 70 63 3b 0a  Frame->pc = pc;.
2c970 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d      pFrame->aMem
2c980 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20   = p->aMem;.    
2c990 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pFrame->nMem = p
2c9a0 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61  ->nMem;.    pFra
2c9b0 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61  me->apCsr = p->a
2c9c0 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65  pCsr;.    pFrame
2c9d0 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e  ->nCursor = p->n
2c9e0 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61  Cursor;.    pFra
2c9f0 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70  me->aOp = p->aOp
2ca00 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f  ;.    pFrame->nO
2ca10 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20  p = p->nOp;.    
2ca20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20  pFrame->token = 
2ca30 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b  pProgram->token;
2ca40 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 6e  .    pFrame->aOn
2ca50 63 65 46 6c 61 67 20 3d 20 70 2d 3e 61 4f 6e 63  ceFlag = p->aOnc
2ca60 65 46 6c 61 67 3b 0a 20 20 20 20 70 46 72 61 6d  eFlag;.    pFram
2ca70 65 2d 3e 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70  e->nOnceFlag = p
2ca80 2d 3e 6e 4f 6e 63 65 46 6c 61 67 3b 0a 23 69 66  ->nOnceFlag;.#if
2ca90 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2caa0 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54 55  E_STMT_SCANSTATU
2cab0 53 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 6e  S.    pFrame->an
2cac0 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45 78 65 63  Exec = p->anExec
2cad0 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 70 45  ;.#endif..    pE
2cae0 6e 64 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d  nd = &VdbeFrameM
2caf0 65 6d 28 70 46 72 61 6d 65 29 5b 70 46 72 61 6d  em(pFrame)[pFram
2cb00 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20  e->nChildMem];. 
2cb10 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56 64 62 65     for(pMem=Vdbe
2cb20 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
2cb30 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b 20 70 4d  ; pMem!=pEnd; pM
2cb40 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20 70 4d 65  em++){.      pMe
2cb50 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  m->flags = MEM_U
2cb60 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20 20 20 20  ndefined;.      
2cb70 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62 3b 0a 20  pMem->db = db;. 
2cb80 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2cb90 20 20 70 46 72 61 6d 65 20 3d 20 70 52 74 2d 3e    pFrame = pRt->
2cba0 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20 20 61 73  u.pFrame;.    as
2cbb0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2cbc0 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e  nMem+pProgram->n
2cbd0 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68  Csr==pFrame->nCh
2cbe0 69 6c 64 4d 65 6d 20 29 3b 0a 20 20 20 20 61 73  ildMem );.    as
2cbf0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
2cc00 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43  nCsr==pFrame->nC
2cc10 68 69 6c 64 43 73 72 20 29 3b 0a 20 20 20 20 61  hildCsr );.    a
2cc20 73 73 65 72 74 28 20 70 63 3d 3d 70 46 72 61 6d  ssert( pc==pFram
2cc30 65 2d 3e 70 63 20 29 3b 0a 20 20 7d 0a 0a 20 20  e->pc );.  }..  
2cc40 70 2d 3e 6e 46 72 61 6d 65 2b 2b 3b 0a 20 20 70  p->nFrame++;.  p
2cc50 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 20 3d  Frame->pParent =
2cc60 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 46   p->pFrame;.  pF
2cc70 72 61 6d 65 2d 3e 6c 61 73 74 52 6f 77 69 64 20  rame->lastRowid 
2cc80 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70  = lastRowid;.  p
2cc90 46 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d  Frame->nChange =
2cca0 20 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70   p->nChange;.  p
2ccb0 46 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65  Frame->nDbChange
2ccc0 20 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67   = p->db->nChang
2ccd0 65 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20  e;.  p->nChange 
2cce0 3d 20 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65  = 0;.  p->pFrame
2ccf0 20 3d 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e   = pFrame;.  p->
2cd00 61 4d 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 26 56  aMem = aMem = &V
2cd10 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
2cd20 6d 65 29 5b 2d 31 5d 3b 0a 20 20 70 2d 3e 6e 4d  me)[-1];.  p->nM
2cd30 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
2cd40 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
2cd50 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
2cd60 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
2cd70 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
2cd80 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
2cd90 5b 70 2d 3e 6e 4d 65 6d 2b 31 5d 3b 0a 20 20 70  [p->nMem+1];.  p
2cda0 2d 3e 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50  ->aOp = aOp = pP
2cdb0 72 6f 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70  rogram->aOp;.  p
2cdc0 2d 3e 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d  ->nOp = pProgram
2cdd0 2d 3e 6e 4f 70 3b 0a 20 20 70 2d 3e 61 4f 6e 63  ->nOp;.  p->aOnc
2cde0 65 46 6c 61 67 20 3d 20 28 75 38 20 2a 29 26 70  eFlag = (u8 *)&p
2cdf0 2d 3e 61 70 43 73 72 5b 70 2d 3e 6e 43 75 72 73  ->apCsr[p->nCurs
2ce00 6f 72 5d 3b 0a 20 20 70 2d 3e 6e 4f 6e 63 65 46  or];.  p->nOnceF
2ce10 6c 61 67 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  lag = pProgram->
2ce20 6e 4f 6e 63 65 3b 0a 23 69 66 64 65 66 20 53 51  nOnce;.#ifdef SQ
2ce30 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54  LITE_ENABLE_STMT
2ce40 5f 53 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d  _SCANSTATUS.  p-
2ce50 3e 61 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e  >anExec = 0;.#en
2ce60 64 69 66 0a 20 20 70 63 20 3d 20 2d 31 3b 0a 20  dif.  pc = -1;. 
2ce70 20 6d 65 6d 73 65 74 28 70 2d 3e 61 4f 6e 63 65   memset(p->aOnce
2ce80 46 6c 61 67 2c 20 30 2c 20 70 2d 3e 6e 4f 6e 63  Flag, 0, p->nOnc
2ce90 65 46 6c 61 67 29 3b 0a 0a 20 20 62 72 65 61 6b  eFlag);..  break
2cea0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2ceb0 50 61 72 61 6d 20 50 31 20 50 32 20 2a 20 2a 20  Param P1 P2 * * 
2cec0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
2ced0 6f 64 65 20 69 73 20 6f 6e 6c 79 20 65 76 65 72  ode is only ever
2cee0 20 70 72 65 73 65 6e 74 20 69 6e 20 73 75 62 2d   present in sub-
2cef0 70 72 6f 67 72 61 6d 73 20 63 61 6c 6c 65 64 20  programs called 
2cf00 76 69 61 20 74 68 65 20 0a 2a 2a 20 4f 50 5f 50  via the .** OP_P
2cf10 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
2cf20 6f 6e 2e 20 43 6f 70 79 20 61 20 76 61 6c 75 65  on. Copy a value
2cf30 20 63 75 72 72 65 6e 74 6c 79 20 73 74 6f 72 65   currently store
2cf40 64 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 0a 2a  d in a memory .*
2cf50 2a 20 63 65 6c 6c 20 6f 66 20 74 68 65 20 63 61  * cell of the ca
2cf60 6c 6c 69 6e 67 20 28 70 61 72 65 6e 74 29 20 66  lling (parent) f
2cf70 72 61 6d 65 20 74 6f 20 63 65 6c 6c 20 50 32 20  rame to cell P2 
2cf80 69 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 66  in the current f
2cf90 72 61 6d 65 73 20 0a 2a 2a 20 61 64 64 72 65 73  rames .** addres
2cfa0 73 20 73 70 61 63 65 2e 20 54 68 69 73 20 69 73  s space. This is
2cfb0 20 75 73 65 64 20 62 79 20 74 72 69 67 67 65 72   used by trigger
2cfc0 20 70 72 6f 67 72 61 6d 73 20 74 6f 20 61 63 63   programs to acc
2cfd0 65 73 73 20 74 68 65 20 6e 65 77 2e 2a 20 0a 2a  ess the new.* .*
2cfe0 2a 20 61 6e 64 20 6f 6c 64 2e 2a 20 76 61 6c 75  * and old.* valu
2cff0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 64  es..**.** The ad
2d000 64 72 65 73 73 20 6f 66 20 74 68 65 20 63 65 6c  dress of the cel
2d010 6c 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  l in the parent 
2d020 66 72 61 6d 65 20 69 73 20 64 65 74 65 72 6d 69  frame is determi
2d030 6e 65 64 20 62 79 20 61 64 64 69 6e 67 0a 2a 2a  ned by adding.**
2d040 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2d050 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2d060 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
2d070 65 20 50 31 20 61 72 67 75 6d 65 6e 74 20 74 6f  e P1 argument to
2d080 20 74 68 65 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20   the.** calling 
2d090 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74 72  OP_Program instr
2d0a0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  uction..*/.case 
2d0b0 4f 50 5f 50 61 72 61 6d 3a 20 7b 20 20 20 20 20  OP_Param: {     
2d0c0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
2d0d0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 56 64  erelease */.  Vd
2d0e0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
2d0f0 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20 70  .  Mem *pIn;.  p
2d100 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d  Frame = p->pFram
2d110 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46 72 61  e;.  pIn = &pFra
2d120 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31  me->aMem[pOp->p1
2d130 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70 5b 70   + pFrame->aOp[p
2d140 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d 3b 20  Frame->pc].p1]; 
2d150 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65    .  sqlite3Vdbe
2d160 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
2d170 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f 45 70  Out, pIn, MEM_Ep
2d180 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  hem);.  break;.}
2d190 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  ..#endif /* #ifn
2d1a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d1b0 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69 66 6e  TRIGGER */..#ifn
2d1c0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d1d0 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a 20 4f  FOREIGN_KEY./* O
2d1e0 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74 65 72  pcode: FkCounter
2d1f0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
2d200 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74 72 5b  Synopsis: fkctr[
2d210 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20 49 6e  P1]+=P2.**.** In
2d220 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e 73 74  crement a "const
2d230 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22 20 62  raint counter" b
2d240 79 20 50 32 20 28 50 32 20 6d 61 79 20 62 65 20  y P2 (P2 may be 
2d250 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f 73 69  negative or posi
2d260 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50 31 20  tive)..** If P1 
2d270 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2d280 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73 74 72   database constr
2d290 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69 73 20  aint counter is 
2d2a0 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a 2a 20  incremented .** 
2d2b0 28 64 65 66 65 72 72 65 64 20 66 6f 72 65 69 67  (deferred foreig
2d2c0 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
2d2d0 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69  s). Otherwise, i
2d2e0 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74 68  f P1 is zero, th
2d2f0 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20  e .** statement 
2d300 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
2d310 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69 61 74  mented (immediat
2d320 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
2d330 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f 0a 63  nstraints)..*/.c
2d340 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74 65 72  ase OP_FkCounter
2d350 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e 66 6c  : {.  if( db->fl
2d360 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44 65 66  ags & SQLITE_Def
2d370 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64 62 2d  erFKs ){.    db-
2d380 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d390 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  s += pOp->p2;.  
2d3a0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
2d3b0 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65  1 ){.    db->nDe
2d3c0 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20 70 4f  ferredCons += pO
2d3d0 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  p->p2;.  }else{.
2d3e0 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72      p->nFkConstr
2d3f0 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b  aint += pOp->p2;
2d400 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2d410 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b 49 66  ./* Opcode: FkIf
2d420 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a 20 2a  Zero P1 P2 * * *
2d430 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
2d440 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20 67 6f   fkctr[P1]==0 go
2d450 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  to P2.**.** This
2d460 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20 69 66   opcode tests if
2d470 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63   a foreign key c
2d480 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65  onstraint-counte
2d490 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
2d4a0 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c 20 6a  ero..** If so, j
2d4b0 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2d4c0 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69 73 65  on P2. Otherwise
2d4d0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  , fall through t
2d4e0 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a 20 69  o the next .** i
2d4f0 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
2d500 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a  * If P1 is non-z
2d510 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20 6a 75  ero, then the ju
2d520 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20 74  mp is taken if t
2d530 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
2d540 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72 0a 2a  traint-counter.*
2d550 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65 20 6f  * is zero (the o
2d560 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73 20 64  ne that counts d
2d570 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
2d580 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 20  nt violations). 
2d590 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65 72 6f  If P1 is.** zero
2d5a0 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  , the jump is ta
2d5b0 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61 74 65  ken if the state
2d5c0 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e 74 2d  ment constraint-
2d5d0 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72 6f 0a  counter is zero.
2d5e0 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f  ** (immediate fo
2d5f0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
2d600 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
2d610 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6b 49  ..*/.case OP_FkI
2d620 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  fZero: {        
2d630 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66   /* jump */.  if
2d640 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20  ( pOp->p1 ){.   
2d650 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2d660 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f  (db->nDeferredCo
2d670 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  ns==0 && db->nDe
2d680 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2d690 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20 64 62  , 2);.    if( db
2d6a0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d  ->nDeferredCons=
2d6b0 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72  =0 && db->nDefer
2d6c0 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20  redImmCons==0 ) 
2d6d0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
2d6e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
2d6f0 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d 3e  eBranchTaken(p->
2d700 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30  nFkConstraint==0
2d710 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
2d720 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
2d730 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e 46 6b 43  .    if( p->nFkC
2d740 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
2d750 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
2d760 43 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70  Cons==0 ) pc = p
2d770 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20  Op->p2-1;.  }.  
2d780 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
2d790 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /* #ifndef SQLIT
2d7a0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2d7b0 45 59 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  EY */..#ifndef S
2d7c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
2d7d0 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f  NCREMENT./* Opco
2d7e0 64 65 3a 20 4d 65 6d 4d 61 78 20 50 31 20 50 32  de: MemMax P1 P2
2d7f0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
2d800 69 73 3a 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b  is: r[P1]=max(r[
2d810 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a  P1],r[P2]).**.**
2d820 20 50 31 20 69 73 20 61 20 72 65 67 69 73 74 65   P1 is a registe
2d830 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
2d840 61 6d 65 20 6f 66 20 74 68 69 73 20 56 4d 20 28  ame of this VM (
2d850 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 69  the root frame i
2d860 73 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 66  s.** different f
2d870 72 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 20  rom the current 
2d880 66 72 61 6d 65 20 69 66 20 74 68 69 73 20 69 6e  frame if this in
2d890 73 74 72 75 63 74 69 6f 6e 20 69 73 20 62 65 69  struction is bei
2d8a0 6e 67 20 65 78 65 63 75 74 65 64 0a 2a 2a 20 77  ng executed.** w
2d8b0 69 74 68 69 6e 20 61 20 73 75 62 2d 70 72 6f 67  ithin a sub-prog
2d8c0 72 61 6d 29 2e 20 53 65 74 20 74 68 65 20 76 61  ram). Set the va
2d8d0 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20  lue of register 
2d8e0 50 31 20 74 6f 20 74 68 65 20 6d 61 78 69 6d 75  P1 to the maximu
2d8f0 6d 20 6f 66 20 0a 2a 2a 20 69 74 73 20 63 75 72  m of .** its cur
2d900 72 65 6e 74 20 76 61 6c 75 65 20 61 6e 64 20 74  rent value and t
2d910 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
2d920 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54  ster P2..**.** T
2d930 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
2d940 74 68 72 6f 77 73 20 61 6e 20 65 72 72 6f 72 20  throws an error 
2d950 69 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65  if the memory ce
2d960 6c 6c 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61  ll is not initia
2d970 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65  lly.** an intege
2d980 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65  r..*/.case OP_Me
2d990 6d 4d 61 78 3a 20 7b 20 20 20 20 20 20 20 20 2f  mMax: {        /
2d9a0 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46  * in2 */.  VdbeF
2d9b0 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20  rame *pFrame;.  
2d9c0 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b  if( p->pFrame ){
2d9d0 0a 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d  .    for(pFrame=
2d9e0 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
2d9f0 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
2da00 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
2da10 6e 74 29 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20  nt);.    pIn1 = 
2da20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f  &pFrame->aMem[pO
2da30 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b  p->p1];.  }else{
2da40 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  .    pIn1 = &aMe
2da50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a  m[pOp->p1];.  }.
2da60 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2da70 61 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20  alid(pIn1) );.  
2da80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2da90 74 65 67 65 72 69 66 79 28 70 49 6e 31 29 3b 0a  tegerify(pIn1);.
2daa0 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70    pIn2 = &aMem[p
2dab0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
2dac0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
2dad0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 69 66 28  ify(pIn2);.  if(
2dae0 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d   pIn1->u.i<pIn2-
2daf0 3e 75 2e 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d  >u.i){.    pIn1-
2db00 3e 75 2e 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69  >u.i = pIn2->u.i
2db10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2db20 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2db30 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
2db40 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  MENT */../* Opco
2db50 64 65 3a 20 49 66 50 6f 73 20 50 31 20 50 32 20  de: IfPos P1 P2 
2db60 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2db70 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20 67 6f  s: if r[P1]>0 go
2db80 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69  to P2.**.** Regi
2db90 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2dba0 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2dbb0 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65  .** If the value
2dbc0 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
2dbd0 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c  is 1 or greater,
2dbe0 20 6a 75 6d 70 20 74 6f 20 50 32 20 61 6e 64 0a   jump to P2 and.
2dbf0 2a 2a 20 61 64 64 20 74 68 65 20 6c 69 74 65 72  ** add the liter
2dc00 61 6c 20 76 61 6c 75 65 20 50 33 20 74 6f 20 72  al value P3 to r
2dc10 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a  egister P1..**.*
2dc20 2a 20 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c  * If the initial
2dc30 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74   value of regist
2dc40 65 72 20 50 31 20 69 73 20 6c 65 73 73 20 74 68  er P1 is less th
2dc50 61 6e 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a  an 1, then the.*
2dc60 2a 20 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61  * value is uncha
2dc70 6e 67 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c  nged and control
2dc80 20 70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20   passes through 
2dc90 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2dca0 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65  ruction..*/.case
2dcb0 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
2dcc0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2dcd0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2dce0 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2dcf0 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2dd00 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2dd10 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2dd20 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
2dd30 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2dd40 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
2dd50 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2dd60 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2dd70 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
2dd80 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
2dd90 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d  ynopsis: r[P1]+=
2dda0 50 33 2c 20 69 66 20 72 5b 50 31 5d 3c 30 20 67  P3, if r[P1]<0 g
2ddb0 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67  oto P2.**.** Reg
2ddc0 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f  ister P1 must co
2ddd0 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72  ntain an integer
2dde0 2e 20 20 41 64 64 20 6c 69 74 65 72 61 6c 20 50  .  Add literal P
2ddf0 33 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 69  3 to the value i
2de00 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  n.** register P1
2de10 20 74 68 65 6e 20 69 66 20 74 68 65 20 76 61 6c   then if the val
2de20 75 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  ue of register P
2de30 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 7a  1 is less than z
2de40 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e  ero, jump to P2.
2de50 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e   .*/.case OP_IfN
2de60 65 67 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  eg: {        /* 
2de70 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  jump, in1 */.  p
2de80 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2de90 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2dea0 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn1->flags&MEM_
2deb0 49 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75  Int );.  pIn1->u
2dec0 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i += pOp->p3;. 
2ded0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2dee0 28 70 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29  (pIn1->u.i<0, 2)
2def0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2df00 69 3c 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i<0 ){.     pc =
2df10 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2df20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2df30 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74 5a 65   Opcode: IfNotZe
2df40 72 6f 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ro P1 P2 P3 * *.
2df50 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
2df60 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e 20 72 5b  r[P1]!=0 then r[
2df70 50 31 5d 2b 3d 50 33 2c 20 67 6f 74 6f 20 50 32  P1]+=P3, goto P2
2df80 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20  .**.** Register 
2df90 50 31 20 6d 75 73 74 20 63 6f 6e 74 61 69 6e 20  P1 must contain 
2dfa0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 49 66 20  an integer.  If 
2dfb0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
2dfc0 65 67 69 73 74 65 72 20 50 31 20 69 73 0a 2a 2a  egister P1 is.**
2dfd0 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f 6e 7a 65   initially nonze
2dfe0 72 6f 2c 20 74 68 65 6e 20 61 64 64 20 50 33 20  ro, then add P3 
2dff0 74 6f 20 50 31 20 61 6e 64 20 6a 75 6d 70 20 74  to P1 and jump t
2e000 6f 20 50 32 2e 20 20 49 66 20 72 65 67 69 73 74  o P2.  If regist
2e010 65 72 20 50 31 20 69 73 0a 2a 2a 20 69 6e 69 74  er P1 is.** init
2e020 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
2e030 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61  e it unchanged a
2e040 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e  nd fall through.
2e050 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f  .*/.case OP_IfNo
2e060 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20  tZero: {        
2e070 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  /* jump, in1 */.
2e080 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2e090 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
2e0a0 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d  t( pIn1->flags&M
2e0b0 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65  EM_Int );.  Vdbe
2e0c0 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31  BranchTaken(pIn1
2e0d0 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69  ->u.i<0, 2);.  i
2e0e0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a  f( pIn1->u.i ){.
2e0f0 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b       pIn1->u.i +
2e100 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 20  = pOp->p3;.     
2e110 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
2e120 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
2e130 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 63  ../* Opcode: Dec
2e140 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50 32 20  rJumpZero P1 P2 
2e150 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2e160 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d 29 3d  s: if (--r[P1])=
2e170 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  =0 goto P2.**.**
2e180 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
2e190 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65 67 65  t hold an intege
2e1a0 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20 74 68  r.  Decrement th
2e1b0 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
2e1c0 74 65 72 20 50 31 0a 2a 2a 20 74 68 65 6e 20 6a  ter P1.** then j
2e1d0 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68 65  ump to P2 if the
2e1e0 20 6e 65 77 20 76 61 6c 75 65 20 69 73 20 65 78   new value is ex
2e1f0 61 63 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  actly zero..*/.c
2e200 61 73 65 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a  ase OP_DecrJumpZ
2e210 65 72 6f 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a  ero: {      /* j
2e220 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  ump, in1 */.  pI
2e230 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2e240 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2e250 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49  In1->flags&MEM_I
2e260 6e 74 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e  nt );.  pIn1->u.
2e270 69 2d 2d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  i--;.  VdbeBranc
2e280 68 54 61 6b 65 6e 28 70 49 6e 31 2d 3e 75 2e 69  hTaken(pIn1->u.i
2e290 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  ==0, 2);.  if( p
2e2a0 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20 29 7b 0a 20  In1->u.i==0 ){. 
2e2b0 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
2e2c0 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   - 1;.  }.  brea
2e2d0 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65  k;.}.../* Opcode
2e2e0 3a 20 4a 75 6d 70 5a 65 72 6f 49 6e 63 72 20 50  : JumpZeroIncr P
2e2f0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2e300 6e 6f 70 73 69 73 3a 20 69 66 20 28 72 5b 50 31  nopsis: if (r[P1
2e310 5d 2b 2b 29 3d 3d 30 20 29 20 67 6f 74 6f 20 50  ]++)==0 ) goto P
2e320 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69  2.**.** The regi
2e330 73 74 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e  ster P1 must con
2e340 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e  tain an integer.
2e350 20 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31    If register P1
2e360 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a   is initially.**
2e370 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
2e380 20 74 6f 20 50 32 2e 20 20 49 6e 63 72 65 6d 65   to P2.  Increme
2e390 6e 74 20 72 65 67 69 73 74 65 72 20 50 31 20 72  nt register P1 r
2e3a0 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65  egardless of whe
2e3b0 74 68 65 72 20 6f 72 0a 2a 2a 20 6e 6f 74 20 74  ther or.** not t
2e3c0 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
2e3d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d  ..*/.case OP_Jum
2e3e0 70 5a 65 72 6f 49 6e 63 72 3a 20 7b 20 20 20 20  pZeroIncr: {    
2e3f0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2e400 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2e410 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2e420 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2e430 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2e440 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2e450 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29  pIn1->u.i==0, 2)
2e460 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 75  ;.  if( (pIn1->u
2e470 2e 69 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20  .i++)==0 ){.    
2e480 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2e490 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2e4a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  }../* Opcode: Ag
2e4b0 67 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34  gStep * P2 P3 P4
2e4c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2e4d0 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65   accum=r[P3] ste
2e4e0 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a  p(r[P2@P5]).**.*
2e4f0 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74  * Execute the st
2e500 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20  ep function for 
2e510 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54  an aggregate.  T
2e520 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68  he.** function h
2e530 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e  as P5 arguments.
2e540 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74     P4 is a point
2e550 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65  er to the FuncDe
2e560 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74  f.** structure t
2e570 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74 68  hat specifies th
2e580 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 55 73 65  e function.  Use
2e590 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 20   register.** P3 
2e5a0 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c 61 74  as the accumulat
2e5b0 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35  or..**.** The P5
2e5c0 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 74   arguments are t
2e5d0 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74  aken from regist
2e5e0 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a  er P2 and its.**
2e5f0 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a   successors..*/.
2e600 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a  case OP_AggStep:
2e610 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e   {.  int n;.  in
2e620 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d  t i;.  Mem *pMem
2e630 3b 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 0a 20  ;.  Mem *pRec;. 
2e640 20 4d 65 6d 20 74 3b 0a 20 20 73 71 6c 69 74 65   Mem t;.  sqlite
2e650 33 5f 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20  3_context ctx;. 
2e660 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a   sqlite3_value *
2e670 2a 61 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70  *apVal;..  n = p
2e680 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74  Op->p5;.  assert
2e690 28 20 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63  ( n>=0 );.  pRec
2e6a0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
2e6b0 5d 3b 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e  ];.  apVal = p->
2e6c0 61 70 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28  apArg;.  assert(
2e6d0 20 61 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29   apVal || n==0 )
2e6e0 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e  ;.  for(i=0; i<n
2e6f0 3b 20 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a  ; i++, pRec++){.
2e700 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
2e710 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
2e720 20 20 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70      apVal[i] = p
2e730 52 65 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  Rec;.    memAbou
2e740 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65  tToChange(p, pRe
2e750 63 29 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46  c);.  }.  ctx.pF
2e760 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46  unc = pOp->p4.pF
2e770 75 6e 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70  unc;.  assert( p
2e780 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
2e790 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d  >p3<=(p->nMem-p-
2e7a0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63  >nCursor) );.  c
2e7b0 74 78 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d  tx.pMem = pMem =
2e7c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2e7d0 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20  .  pMem->n++;.  
2e7e0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e  sqlite3VdbeMemIn
2e7f0 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e  it(&t, db, MEM_N
2e800 75 6c 6c 29 3b 0a 20 20 63 74 78 2e 70 4f 75 74  ull);.  ctx.pOut
2e810 20 3d 20 26 74 3b 0a 20 20 63 74 78 2e 69 73 45   = &t;.  ctx.isE
2e820 72 72 6f 72 20 3d 20 30 3b 0a 20 20 63 74 78 2e  rror = 0;.  ctx.
2e830 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 63 74 78  pVdbe = p;.  ctx
2e840 2e 69 4f 70 20 3d 20 70 63 3b 0a 20 20 63 74 78  .iOp = pc;.  ctx
2e850 2e 73 6b 69 70 46 6c 61 67 20 3d 20 30 3b 0a 20  .skipFlag = 0;. 
2e860 20 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74   (ctx.pFunc->xSt
2e870 65 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56  ep)(&ctx, n, apV
2e880 61 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32  al); /* IMP: R-2
2e890 34 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20  4505-23230 */.  
2e8a0 69 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20  if( ctx.isError 
2e8b0 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65  ){.    sqlite3Se
2e8c0 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72  tString(&p->zErr
2e8d0 4d 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73  Msg, db, "%s", s
2e8e0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
2e8f0 74 28 26 74 29 29 3b 0a 20 20 20 20 72 63 20 3d  t(&t));.    rc =
2e900 20 63 74 78 2e 69 73 45 72 72 6f 72 3b 0a 20 20   ctx.isError;.  
2e910 7d 0a 20 20 69 66 28 20 63 74 78 2e 73 6b 69 70  }.  if( ctx.skip
2e920 46 6c 61 67 20 29 7b 0a 20 20 20 20 61 73 73 65  Flag ){.    asse
2e930 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f  rt( pOp[-1].opco
2e940 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65 71 20 29  de==OP_CollSeq )
2e950 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70 5b 2d 31  ;.    i = pOp[-1
2e960 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28 20 69 20  ].p1;.    if( i 
2e970 29 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ) sqlite3VdbeMem
2e980 53 65 74 49 6e 74 36 34 28 26 61 4d 65 6d 5b 69  SetInt64(&aMem[i
2e990 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 73 71 6c  ], 1);.  }.  sql
2e9a0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
2e9b0 73 65 28 26 74 29 3b 0a 20 20 62 72 65 61 6b 3b  se(&t);.  break;
2e9c0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41  .}../* Opcode: A
2e9d0 67 67 46 69 6e 61 6c 20 50 31 20 50 32 20 2a 20  ggFinal P1 P2 * 
2e9e0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
2e9f0 3a 20 61 63 63 75 6d 3d 72 5b 50 31 5d 20 4e 3d  : accum=r[P1] N=
2ea00 50 32 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  P2.**.** Execute
2ea10 20 74 68 65 20 66 69 6e 61 6c 69 7a 65 72 20 66   the finalizer f
2ea20 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61  unction for an a
2ea30 67 67 72 65 67 61 74 65 2e 20 20 50 31 20 69 73  ggregate.  P1 is
2ea40 0a 2a 2a 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c  .** the memory l
2ea50 6f 63 61 74 69 6f 6e 20 74 68 61 74 20 69 73 20  ocation that is 
2ea60 74 68 65 20 61 63 63 75 6d 75 6c 61 74 6f 72 20  the accumulator 
2ea70 66 6f 72 20 74 68 65 20 61 67 67 72 65 67 61 74  for the aggregat
2ea80 65 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  e..**.** P2 is t
2ea90 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 61 72 67  he number of arg
2eaa0 75 6d 65 6e 74 73 20 74 68 61 74 20 74 68 65 20  uments that the 
2eab0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 74 61  step function ta
2eac0 6b 65 73 20 61 6e 64 0a 2a 2a 20 50 34 20 69 73  kes and.** P4 is
2ead0 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
2eae0 65 20 46 75 6e 63 44 65 66 20 66 6f 72 20 74 68  e FuncDef for th
2eaf0 69 73 20 66 75 6e 63 74 69 6f 6e 2e 20 20 54 68  is function.  Th
2eb00 65 20 50 32 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  e P2.** argument
2eb10 20 69 73 20 6e 6f 74 20 75 73 65 64 20 62 79 20   is not used by 
2eb20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20 20 49 74  this opcode.  It
2eb30 20 69 73 20 6f 6e 6c 79 20 74 68 65 72 65 20 74   is only there t
2eb40 6f 20 64 69 73 61 6d 62 69 67 75 61 74 65 0a 2a  o disambiguate.*
2eb50 2a 20 66 75 6e 63 74 69 6f 6e 73 20 74 68 61 74  * functions that
2eb60 20 63 61 6e 20 74 61 6b 65 20 76 61 72 79 69 6e   can take varyin
2eb70 67 20 6e 75 6d 62 65 72 73 20 6f 66 20 61 72 67  g numbers of arg
2eb80 75 6d 65 6e 74 73 2e 20 20 54 68 65 0a 2a 2a 20  uments.  The.** 
2eb90 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  P4 argument is o
2eba0 6e 6c 79 20 6e 65 65 64 65 64 20 66 6f 72 20 74  nly needed for t
2ebb0 68 65 20 64 65 67 65 6e 65 72 61 74 65 20 63 61  he degenerate ca
2ebc0 73 65 20 77 68 65 72 65 0a 2a 2a 20 74 68 65 20  se where.** the 
2ebd0 73 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 77 61  step function wa
2ebe0 73 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79  s not previously
2ebf0 20 63 61 6c 6c 65 64 2e 0a 2a 2f 0a 63 61 73 65   called..*/.case
2ec00 20 4f 50 5f 41 67 67 46 69 6e 61 6c 3a 20 7b 0a   OP_AggFinal: {.
2ec10 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 61    Mem *pMem;.  a
2ec20 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30  ssert( pOp->p1>0
2ec30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d   && pOp->p1<=(p-
2ec40 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
2ec50 29 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61  ) );.  pMem = &a
2ec60 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ec70 61 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66  assert( (pMem->f
2ec80 6c 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c  lags & ~(MEM_Nul
2ec90 6c 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29  l|MEM_Agg))==0 )
2eca0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
2ecb0 56 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28  VdbeMemFinalize(
2ecc0 70 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46  pMem, pOp->p4.pF
2ecd0 75 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29  unc);.  if( rc )
2ece0 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2ecf0 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2ed00 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2ed10 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2ed20 28 70 4d 65 6d 29 29 3b 0a 20 20 7d 0a 20 20 73  (pMem));.  }.  s
2ed30 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
2ed40 45 6e 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65  Encoding(pMem, e
2ed50 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41  ncoding);.  UPDA
2ed60 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
2ed70 70 4d 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c  pMem);.  if( sql
2ed80 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
2ed90 67 28 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67  g(pMem) ){.    g
2eda0 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
2edb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66  .  break;.}..#if
2edc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2edd0 5f 57 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _WAL./* Opcode: 
2ede0 43 68 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32  Checkpoint P1 P2
2edf0 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68   P3 * *.**.** Ch
2ee00 65 63 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73  eckpoint databas
2ee10 65 20 50 31 2e 20 54 68 69 73 20 69 73 20 61 20  e P1. This is a 
2ee20 6e 6f 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e  no-op if P1 is n
2ee30 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a  ot currently in.
2ee40 2a 2a 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72  ** WAL mode. Par
2ee50 61 6d 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65  ameter P2 is one
2ee60 20 6f 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b   of SQLITE_CHECK
2ee70 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46  POINT_PASSIVE, F
2ee80 55 4c 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c  ULL,.** RESTART,
2ee90 20 6f 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57   or TRUNCATE.  W
2eea0 72 69 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f  rite 1 or 0 into
2eeb0 20 6d 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20   mem[P3] if the 
2eec0 63 68 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72  checkpoint retur
2eed0 6e 73 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53  ns.** SQLITE_BUS
2eee0 59 20 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63  Y or not, respec
2eef0 74 69 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74  tively.  Write t
2ef00 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  he number of pag
2ef10 65 73 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c  es in the.** WAL
2ef20 20 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b   after the check
2ef30 70 6f 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50  point into mem[P
2ef40 33 2b 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d  3+1] and the num
2ef50 62 65 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20  ber of pages.** 
2ef60 69 6e 20 74 68 65 20 57 41 4c 20 74 68 61 74 20  in the WAL that 
2ef70 68 61 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70  have been checkp
2ef80 6f 69 6e 74 65 64 20 61 66 74 65 72 20 74 68 65  ointed after the
2ef90 20 63 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63   checkpoint.** c
2efa0 6f 6d 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65  ompletes into me
2efb0 6d 5b 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65  m[P3+2].  Howeve
2efc0 72 20 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d  r on an error, m
2efd0 65 6d 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20  em[P3+1] and.** 
2efe0 6d 65 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e  mem[P3+2] are in
2eff0 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e  itialized to -1.
2f000 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63  .*/.case OP_Chec
2f010 6b 70 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20  kpoint: {.  int 
2f020 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  i;              
2f030 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c              /* L
2f040 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2f050 20 69 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20   int aRes[3];   
2f060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f070 20 2f 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20   /* Results */. 
2f080 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20   Mem *pMem;     
2f090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0a0 20 2f 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74   /* Write result
2f0b0 73 20 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73  s here */..  ass
2f0c0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f0d0 3d 3d 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d  ==0 );.  aRes[0]
2f0e0 20 3d 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20   = 0;.  aRes[1] 
2f0f0 3d 20 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a  = aRes[2] = -1;.
2f100 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f110 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
2f120 4f 49 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20  OINT_PASSIVE.   
2f130 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
2f140 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
2f150 54 5f 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c  T_FULL.       ||
2f160 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
2f170 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54  _CHECKPOINT_REST
2f180 41 52 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f  ART.       || pO
2f190 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48  p->p2==SQLITE_CH
2f1a0 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54  ECKPOINT_TRUNCAT
2f1b0 45 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  E.  );.  rc = sq
2f1c0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2f1d0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2f1e0 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2f1f0 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2f200 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2f210 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2f220 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2f230 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2f240 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2f250 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2f260 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2f270 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2f280 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2f290 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2f2a0 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2f2b0 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2f2c0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2f2d0 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2f2e0 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2f2f0 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2f300 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2f310 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2f320 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2f330 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2f340 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2f350 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2f360 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2f370 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2f380 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2f390 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2f3a0 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2f3b0 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2f3c0 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2f3d0 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2f3e0 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2f3f0 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2f400 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2f410 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2f420 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2f430 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2f440 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2f450 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2f460 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2f470 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2f480 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2f490 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2f4a0 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2f4b0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2f4c0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2f4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f4e0 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2f4f0 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2f500 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2f510 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2f520 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2f530 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2f540 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2f550 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2f560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2f570 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2f580 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2f590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f5a0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2f5b0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2f5c0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2f5d0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
2f5e0 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2f5f0 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2f600 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2f610 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2f620 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65  */.#endif..  eNe
2f630 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2f640 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2f650 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2f660 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2f670 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f680 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2f690 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2f6a0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f6b0 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2f6c0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2f6d0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f6e0 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2f6f0 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f700 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2f710 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2f720 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f730 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2f740 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f750 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2f760 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f770 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2f780 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2f790 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f7a0 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
2f7b0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2f7c0 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2f7d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2f7e0 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2f7f0 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2f800 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2f810 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2f820 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f830 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2f840 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2f850 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2f860 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2f870 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2f880 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2f890 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2f8a0 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2f8b0 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2f8c0 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
2f8d0 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
2f8e0 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
2f8f0 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
2f900 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
2f910 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
2f920 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
2f930 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
2f940 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
2f950 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
2f960 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2f970 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f980 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
2f990 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
2f9a0 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
2f9b0 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
2f9c0 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
2f9d0 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
2f9e0 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
2f9f0 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
2fa00 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
2fa10 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
2fa20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
2fa30 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
2fa40 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
2fa50 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2fa60 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2fa70 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
2fa80 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
2fa90 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
2faa0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
2fab0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2fac0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2fad0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2fae0 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2faf0 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20   db, .          
2fb00 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
2fb10 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
2fb20 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2fb30 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
2fb40 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2fb50 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2fb60 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
2fb70 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
2fb80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c    break;.    }el
2fb90 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
2fba0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2fbb0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
2fbc0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
2fbd0 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
2fbe0 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
2fbf0 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
2fc00 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
2fc10 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
2fc20 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
2fc30 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
2fc40 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
2fc50 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
2fc60 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
2fc70 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
2fc80 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
2fc90 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2fca0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
2fcb0 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
2fcc0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
2fcd0 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
2fce0 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
2fcf0 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
2fd00 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2fd10 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2fd20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2fd30 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2fd40 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
2fd50 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2fd60 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
2fd70 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2fd80 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
2fd90 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
2fda0 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
2fdb0 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
2fdc0 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
2fdd0 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
2fde0 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
2fdf0 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
2fe00 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2fe10 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
2fe20 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2fe30 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
2fe40 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
2fe50 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
2fe60 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2fe70 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
2fe80 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
2fe90 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
2fea0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
2feb0 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
2fec0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
2fed0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
2fee0 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2fef0 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
2ff00 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
2ff10 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2ff20 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2ff30 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
2ff40 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
2ff50 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2ff60 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
2ff70 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2ff80 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
2ff90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2ffa0 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
2ffb0 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20  c ){.    eNew = 
2ffc0 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77  eOld;.  }.  eNew
2ffd0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53   = sqlite3PagerS
2ffe0 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2fff0 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20  ager, eNew);..  
30000 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
30010 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p2];.  pOut->f
30020 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
30030 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
30040 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
30050 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
30060 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
30070 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
30080 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
30090 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
300a0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
300b0 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
300c0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
300d0 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
300e0 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
300f0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30100 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
30110 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
30120 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
30130 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
30140 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
30150 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
30160 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
30170 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
30180 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
30190 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
301a0 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
301b0 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
301c0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
301d0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
301e0 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
301f0 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
30200 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
30210 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
30220 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
30230 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
30240 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
30250 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
30260 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
30270 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
30280 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
30290 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
302a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
302b0 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
302c0 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
302d0 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
302e0 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
302f0 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
30300 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
30310 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
30320 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
30330 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
30340 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
30350 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
30360 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
30370 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
30380 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
30390 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
303a0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
303b0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
303c0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
303d0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
303e0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
303f0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
30400 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
30410 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
30420 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
30430 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
30440 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
30450 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
30460 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
30470 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
30480 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
30490 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
304a0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
304b0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
304c0 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d  p2 - 1;.    rc =
304d0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
304e0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
304f0 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
30500 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
30510 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
30520 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
30530 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
30540 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
30550 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
30560 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
30570 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
30580 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
30590 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
305a0 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
305b0 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
305c0 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
305d0 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
305e0 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
305f0 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
30600 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
30610 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
30620 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
30630 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
30640 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
30650 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
30660 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
30670 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
30680 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
30690 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
306a0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
306b0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
306c0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
306d0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
306e0 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
306f0 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
30700 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
30710 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
30720 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
30730 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
30740 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
30750 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
30760 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
30770 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
30780 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
30790 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
307a0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
307b0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
307c0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
307d0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
307e0 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
307f0 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
30800 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
30810 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
30820 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
30830 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
30840 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
30850 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
30860 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
30870 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
30880 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
30890 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
308a0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
308b0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
308c0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
308d0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
308e0 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
308f0 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
30900 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
30910 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
30920 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
30930 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
30940 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
30950 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
30960 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
30970 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
30980 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
30990 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
309a0 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
309b0 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
309c0 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
309d0 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
309e0 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
309f0 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
30a00 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
30a10 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
30a20 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
30a30 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
30a40 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
30a50 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
30a60 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
30a70 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
30a80 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
30a90 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
30aa0 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
30ab0 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
30ac0 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
30ad0 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
30ae0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
30af0 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
30b00 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
30b10 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
30b20 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
30b30 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
30b40 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
30b50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30b60 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30b70 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
30b80 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
30b90 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
30ba0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
30bb0 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
30bc0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
30bd0 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
30be0 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
30bf0 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
30c00 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
30c10 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
30c20 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
30c30 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
30c40 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
30c50 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
30c60 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
30c70 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
30c80 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
30c90 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
30ca0 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
30cb0 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
30cc0 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
30cd0 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
30ce0 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
30cf0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
30d00 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
30d10 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
30d20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
30d30 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
30d40 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
30d50 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
30d60 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
30d70 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61  rtErrmsg(p, pVTa
30d80 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
30d90 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
30da0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
30db0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
30dc0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
30dd0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30de0 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
30df0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
30e00 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67 69 73  ** P2 is a regis
30e10 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 74  ter that holds t
30e20 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76 69 72  he name of a vir
30e30 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20 64 61  tual table in da
30e40 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e 20 43  tabase .** P1. C
30e50 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74 65 20  all the xCreate 
30e60 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61 74 20  method for that 
30e70 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  table..*/.case O
30e80 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20 20 4d  P_VCreate: {.  M
30e90 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20 20 20  em sMem;        
30ea0 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69 6e 67    /* For storing
30eb0 20 74 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e   the record bein
30ec0 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63  g decoded */.  c
30ed0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 62 3b  onst char *zTab;
30ee0 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65    /* Name of the
30ef0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 2a   virtual table *
30f00 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73 4d 65  /..  memset(&sMe
30f10 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
30f20 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62 20 3d  m));.  sMem.db =
30f30 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61 75 73   db;.  /* Becaus
30f40 65 20 50 32 20 69 73 20 61 6c 77 61 79 73 20 61  e P2 is always a
30f50 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 2c 20   static string, 
30f60 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65  it is impossible
30f70 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 71   for the.  ** sq
30f80 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70 79  lite3VdbeMemCopy
30f90 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a 20 20  () to fail */.  
30fa0 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
30fb0 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
30fc0 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a 20 20  EM_Str)!=0 );.  
30fd0 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b 70 4f  assert( (aMem[pO
30fe0 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26 20 4d  p->p2].flags & M
30ff0 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20 29 3b  EM_Static)!=0 );
31000 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
31010 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d 65 6d  dbeMemCopy(&sMem
31020 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
31030 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
31040 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20  =SQLITE_OK );.  
31050 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20 63 68  zTab = (const ch
31060 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61 6c 75  ar*)sqlite3_valu
31070 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b 0a 20  e_text(&sMem);. 
31080 20 61 73 73 65 72 74 28 20 7a 54 61 62 20 7c 7c   assert( zTab ||
31090 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
310a0 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61 62 20  d );.  if( zTab 
310b0 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  ){.    rc = sqli
310c0 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61 74  te3VtabCallCreat
310d0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 7a  e(db, pOp->p1, z
310e0 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d 73 67  Tab, &p->zErrMsg
310f0 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
31100 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
31110 73 4d 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  sMem);.  break;.
31120 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31130 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31140 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31150 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31160 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31170 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20 50 31  ode: VDestroy P1
31180 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20   * * P4 *.**.** 
31190 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f  P4 is the name o
311a0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
311b0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  e in database P1
311c0 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44 65 73  .  Call the xDes
311d0 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a 20 6f  troy method.** o
311e0 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  f that table..*/
311f0 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74 72 6f  .case OP_VDestro
31200 79 3a 20 7b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  y: {.  db->nVDes
31210 74 72 6f 79 2b 2b 3b 0a 20 20 72 63 20 3d 20 73  troy++;.  rc = s
31220 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65  qlite3VtabCallDe
31230 73 74 72 6f 79 28 64 62 2c 20 70 4f 70 2d 3e 70  stroy(db, pOp->p
31240 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  1, pOp->p4.z);. 
31250 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2d 2d   db->nVDestroy--
31260 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
31270 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
31280 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
31290 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
312a0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
312b0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
312c0 56 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20  VOpen P1 * * P4 
312d0 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  *.**.** P4 is a 
312e0 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72  pointer to a vir
312f0 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63  tual table objec
31300 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74  t, an sqlite3_vt
31310 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  ab structure..**
31320 20 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20   P1 is a cursor 
31330 6e 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70  number.  This op
31340 63 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72  code opens a cur
31350 73 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75  sor to the virtu
31360 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20  al.** table and 
31370 73 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73  stores that curs
31380 6f 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73  or in P1..*/.cas
31390 65 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20  e OP_VOpen: {.  
313a0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
313b0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  ;.  sqlite3_vtab
313c0 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43 75  _cursor *pVtabCu
313d0 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f  rsor;.  sqlite3_
313e0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
313f0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
31400 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20  ule *pModule;.. 
31410 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
31420 65 61 64 65 72 20 29 3b 0a 20 20 70 43 75 72 20  eader );.  pCur 
31430 3d 20 30 3b 0a 20 20 70 56 74 61 62 43 75 72 73  = 0;.  pVtabCurs
31440 6f 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20  or = 0;.  pVtab 
31450 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
31460 3e 70 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56  >pVtab;.  if( pV
31470 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28  tab==0 || NEVER(
31480 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d  pVtab->pModule==
31490 30 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  0) ){.    rc = S
314a0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20  QLITE_LOCKED;.  
314b0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70    break;.  }.  p
314c0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
314d0 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20  pModule;.  rc = 
314e0 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
314f0 56 74 61 62 2c 20 26 70 56 74 61 62 43 75 72 73  Vtab, &pVtabCurs
31500 6f 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  or);.  sqlite3Vt
31510 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
31520 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
31530 53 51 4c 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b  SQLITE_OK==rc ){
31540 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
31550 7a 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  ze sqlite3_vtab_
31560 63 75 72 73 6f 72 20 62 61 73 65 20 63 6c 61 73  cursor base clas
31570 73 20 2a 2f 0a 20 20 20 20 70 56 74 61 62 43 75  s */.    pVtabCu
31580 72 73 6f 72 2d 3e 70 56 74 61 62 20 3d 20 70 56  rsor->pVtab = pV
31590 74 61 62 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69  tab;..    /* Ini
315a0 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75 72  tialize vdbe cur
315b0 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  sor object */.  
315c0 20 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74    pCur = allocat
315d0 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e  eCursor(p, pOp->
315e0 70 31 2c 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20  p1, 0, -1, 0);. 
315f0 20 20 20 69 66 28 20 70 43 75 72 20 29 7b 0a 20     if( pCur ){. 
31600 20 20 20 20 20 70 43 75 72 2d 3e 70 56 74 61 62       pCur->pVtab
31610 43 75 72 73 6f 72 20 3d 20 70 56 74 61 62 43 75  Cursor = pVtabCu
31620 72 73 6f 72 3b 0a 20 20 20 20 20 20 70 56 74 61  rsor;.      pVta
31630 62 2d 3e 6e 52 65 66 2b 2b 3b 0a 20 20 20 20 7d  b->nRef++;.    }
31640 65 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e  else{.      db->
31650 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31  mallocFailed = 1
31660 3b 0a 20 20 20 20 20 20 70 4d 6f 64 75 6c 65 2d  ;.      pModule-
31670 3e 78 43 6c 6f 73 65 28 70 56 74 61 62 43 75 72  >xClose(pVtabCur
31680 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  sor);.    }.  }.
31690 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
316a0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
316b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
316c0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
316d0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
316e0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
316f0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
31700 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
31710 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
31720 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
31730 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
31740 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
31750 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
31760 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
31770 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
31780 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
31790 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
317a0 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
317b0 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
317c0 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
317d0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
317e0 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
317f0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
31800 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
31810 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
31820 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
31830 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
31840 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
31850 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
31860 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
31870 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
31880 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
31890 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
318a0 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
318b0 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
318c0 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
318d0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
318e0 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
318f0 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
31900 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
31910 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
31920 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
31930 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
31940 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
31950 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
31960 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
31970 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
31980 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
31990 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
319a0 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
319b0 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
319c0 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
319d0 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
319e0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
319f0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
31a00 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
31a10 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
31a20 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
31a30 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
31a40 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
31a50 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
31a60 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
31a70 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
31a80 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
31a90 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
31aa0 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
31ab0 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a 20   *pVtabCursor;. 
31ac0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
31ad0 56 74 61 62 3b 0a 20 20 56 64 62 65 43 75 72 73  Vtab;.  VdbeCurs
31ae0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 69 6e 74 20  or *pCur;.  int 
31af0 72 65 73 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  res;.  int i;.  
31b00 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a 0a 20 20  Mem **apArg;..  
31b10 70 51 75 65 72 79 20 3d 20 26 61 4d 65 6d 5b 70  pQuery = &aMem[p
31b20 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70 41 72 67 63  Op->p3];.  pArgc
31b30 20 3d 20 26 70 51 75 65 72 79 5b 31 5d 3b 0a 20   = &pQuery[1];. 
31b40 20 70 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72   pCur = p->apCsr
31b50 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31b60 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
31b70 70 51 75 65 72 79 29 20 29 3b 0a 20 20 52 45 47  pQuery) );.  REG
31b80 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
31b90 3e 70 33 2c 20 70 51 75 65 72 79 29 3b 0a 20 20  >p3, pQuery);.  
31ba0 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70 56  assert( pCur->pV
31bb0 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  tabCursor );.  p
31bc0 56 74 61 62 43 75 72 73 6f 72 20 3d 20 70 43 75  VtabCursor = pCu
31bd0 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r->pVtabCursor;.
31be0 20 20 70 56 74 61 62 20 3d 20 70 56 74 61 62 43    pVtab = pVtabC
31bf0 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20  ursor->pVtab;.  
31c00 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d  pModule = pVtab-
31c10 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a 20  >pModule;..  /* 
31c20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20 6e  Grab the index n
31c30 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20 70  umber and argc p
31c40 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20 61  arameters */.  a
31c50 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d 3e  ssert( (pQuery->
31c60 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21 3d  flags&MEM_Int)!=
31c70 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61 67  0 && pArgc->flag
31c80 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  s==MEM_Int );.  
31c90 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72 67  nArg = (int)pArg
31ca0 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72 79  c->u.i;.  iQuery
31cb0 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d 3e   = (int)pQuery->
31cc0 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  u.i;..  /* Invok
31cd0 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65  e the xFilter me
31ce0 74 68 6f 64 20 2a 2f 0a 20 20 7b 0a 20 20 20 20  thod */.  {.    
31cf0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 61 70 41  res = 0;.    apA
31d00 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20  rg = p->apArg;. 
31d10 20 20 20 66 6f 72 28 69 20 3d 20 30 3b 20 69 3c     for(i = 0; i<
31d20 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  nArg; i++){.    
31d30 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 26 70 41    apArg[i] = &pA
31d40 72 67 63 5b 69 2b 31 5d 3b 0a 20 20 20 20 7d 0a  rgc[i+1];.    }.
31d50 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
31d60 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61 62  e->xFilter(pVtab
31d70 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c 20  Cursor, iQuery, 
31d80 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c  pOp->p4.z, nArg,
31d90 20 61 70 41 72 67 29 3b 0a 20 20 20 20 73 71 6c   apArg);.    sql
31da0 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
31db0 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
31dc0 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
31dd0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
31de0 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45  es = pModule->xE
31df0 6f 66 28 70 56 74 61 62 43 75 72 73 6f 72 29 3b  of(pVtabCursor);
31e00 0a 20 20 20 20 7d 0a 20 20 20 20 56 64 62 65 42  .    }.    VdbeB
31e10 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d  ranchTaken(res!=
31e20 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 72 65  0,2);.    if( re
31e30 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
31e40 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
31e50 20 7d 0a 20 20 7d 0a 20 20 70 43 75 72 2d 3e 6e   }.  }.  pCur->n
31e60 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 0a 20 20 62  ullRow = 0;..  b
31e70 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
31e80 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
31e90 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
31ea0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
31eb0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
31ec0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c 75  /* Opcode: VColu
31ed0 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mn P1 P2 P3 * *.
31ee0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
31ef0 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a  3]=vcolumn(P2).*
31f00 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 76  *.** Store the v
31f10 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d 74  alue of the P2-t
31f20 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74  h column of.** t
31f30 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76 69  he row of the vi
31f40 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61 74  rtual-table that
31f50 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72 73   the .** P1 curs
31f60 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20 74  or is pointing t
31f70 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  o into register 
31f80 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P3..*/.case OP_V
31f90 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69  Column: {.  sqli
31fa0 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
31fb0 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
31fc0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
31fd0 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 0a  ;.  Mem *pDest;.
31fe0 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78    sqlite3_contex
31ff0 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20 56  t sContext;..  V
32000 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 20  dbeCursor *pCur 
32010 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
32020 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
32030 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
32040 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
32050 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
32060 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
32070 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
32080 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
32090 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
320a0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
320b0 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
320c0 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
320d0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
320e0 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
320f0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
32100 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
32110 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
32120 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
32130 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
32140 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
32150 43 6f 6c 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73  Column );.  mems
32160 65 74 28 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c  et(&sContext, 0,
32170 20 73 69 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74   sizeof(sContext
32180 29 29 3b 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70  ));.  sContext.p
32190 4f 75 74 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d  Out = pDest;.  M
321a0 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 44  emSetTypeFlag(pD
321b0 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  est, MEM_Null);.
321c0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
321d0 78 43 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56  xColumn(pCur->pV
321e0 74 61 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e  tabCursor, &sCon
321f0 74 65 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a  text, pOp->p2);.
32200 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
32210 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
32220 61 62 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74  ab);.  if( sCont
32230 65 78 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20  ext.isError ){. 
32240 20 20 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74     rc = sContext
32250 2e 69 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 20 20  .isError;.  }.  
32260 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
32270 65 45 6e 63 6f 64 69 6e 67 28 70 44 65 73 74 2c  eEncoding(pDest,
32280 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 52 45   encoding);.  RE
32290 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
322a0 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b 0a 20 20  ->p3, pDest);.  
322b0 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
322c0 49 5a 45 28 70 44 65 73 74 29 3b 0a 0a 20 20 69  IZE(pDest);..  i
322d0 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
322e0 6d 54 6f 6f 42 69 67 28 70 44 65 73 74 29 20 29  mTooBig(pDest) )
322f0 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62  {.    goto too_b
32300 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  ig;.  }.  break;
32310 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
32320 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
32330 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
32340 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
32350 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
32360 63 6f 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50  code: VNext P1 P
32370 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64  2 * * *.**.** Ad
32380 76 61 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61  vance virtual ta
32390 62 6c 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65  ble P1 to the ne
323a0 78 74 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65  xt row in its re
323b0 73 75 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20  sult set and.** 
323c0 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
323d0 69 6f 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20  ion P2.  Or, if 
323e0 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
323f0 65 20 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a  e has reached.**
32400 20 74 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20   the end of its 
32410 72 65 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e  result set, then
32420 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f   fall through to
32430 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
32440 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
32450 50 5f 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20  P_VNext: {   /* 
32460 6a 75 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65  jump */.  sqlite
32470 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20  3_vtab *pVtab;. 
32480 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d   const sqlite3_m
32490 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a  odule *pModule;.
324a0 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62    int res;.  Vdb
324b0 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a  eCursor *pCur;..
324c0 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75    res = 0;.  pCu
324d0 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  r = p->apCsr[pOp
324e0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
324f0 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73   pCur->pVtabCurs
32500 6f 72 20 29 3b 0a 20 20 69 66 28 20 70 43 75 72  or );.  if( pCur
32510 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
32520 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
32530 74 61 62 20 3d 20 70 43 75 72 2d 3e 70 56 74 61  tab = pCur->pVta
32540 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
32550 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61    pModule = pVta
32560 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73  b->pModule;.  as
32570 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78  sert( pModule->x
32580 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  Next );..  /* In
32590 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28 29  voke the xNext()
325a0 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20 6d   method of the m
325b0 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73 20  odule. There is 
325c0 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a 20  no way for the. 
325d0 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 69   ** underlying i
325e0 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f  mplementation to
325f0 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72   return an error
32600 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20 64   if one occurs d
32610 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74  uring.  ** xNext
32620 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66 20  (). Instead, if 
32630 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73 2c  an error occurs,
32640 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e 65   true is returne
32650 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74 68  d (indicating th
32660 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69 73  at .  ** data is
32670 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64 20   available) and 
32680 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 72  the error code r
32690 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43 6f  eturned when xCo
326a0 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d  lumn or.  ** som
326b0 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20 69  e other method i
326c0 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f  s next invoked o
326d0 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74 75  n the save virtu
326e0 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72 2e  al table cursor.
326f0 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d 6f  .  */.  rc = pMo
32700 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75 72  dule->xNext(pCur
32710 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a  ->pVtabCursor);.
32720 20 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70    sqlite3VtabImp
32730 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74  ortErrmsg(p, pVt
32740 61 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  ab);.  if( rc==S
32750 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
32760 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78  res = pModule->x
32770 45 6f 66 28 70 43 75 72 2d 3e 70 56 74 61 62 43  Eof(pCur->pVtabC
32780 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 56 64  ursor);.  }.  Vd
32790 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 21 72  beBranchTaken(!r
327a0 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21 72 65  es,2);.  if( !re
327b0 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74  s ){.    /* If t
327c0 68 65 72 65 20 69 73 20 64 61 74 61 2c 20 6a 75  here is data, ju
327d0 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20  mp to P2 */.    
327e0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
327f0 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
32800 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
32810 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
32820 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
32830 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
32840 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
32850 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
32860 70 63 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50  pcode: VRename P
32870 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
32880 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
32890 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
328a0 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73  ble object, an s
328b0 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
328c0 63 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f  cture..** This o
328d0 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68  pcode invokes th
328e0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
328f0 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20  xRename method. 
32900 54 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  The value.** in 
32910 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 70  register P1 is p
32920 61 73 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61  assed as the zNa
32930 6d 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74  me argument to t
32940 68 65 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f  he xRename metho
32950 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52  d..*/.case OP_VR
32960 65 6e 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74  ename: {.  sqlit
32970 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32980 20 20 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20    Mem *pName;.. 
32990 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34   pVtab = pOp->p4
329a0 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20  .pVtab->pVtab;. 
329b0 20 70 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70   pName = &aMem[p
329c0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
329d0 74 28 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  t( pVtab->pModul
329e0 65 2d 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20  e->xRename );.  
329f0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
32a00 69 64 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61  id(pName) );.  a
32a10 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
32a20 6c 79 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53  ly==0 );.  REGIS
32a30 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
32a40 31 2c 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73  1, pName);.  ass
32a50 65 72 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67  ert( pName->flag
32a60 73 20 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20  s & MEM_Str );. 
32a70 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
32a80 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
32a90 46 38 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  F8 );.  testcase
32aa0 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51  ( pName->enc==SQ
32ab0 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
32ac0 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d    testcase( pNam
32ad0 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  e->enc==SQLITE_U
32ae0 54 46 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d  TF16LE );.  rc =
32af0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
32b00 67 65 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65  geEncoding(pName
32b10 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a  , SQLITE_UTF8);.
32b20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32b30 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  _OK ){.    rc = 
32b40 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e  pVtab->pModule->
32b50 78 52 65 6e 61 6d 65 28 70 56 74 61 62 2c 20 70  xRename(pVtab, p
32b60 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20 20 20 73 71  Name->z);.    sq
32b70 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
32b80 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
32b90 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
32ba0 3d 20 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 0;.  }.  break
32bb0 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
32bc0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
32bd0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
32be0 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
32bf0 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
32c00 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61  * Synopsis: data
32c10 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P2].**.** 
32c20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
32c30 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
32c40 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
32c50 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
32c60 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
32c70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
32c80 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
32c90 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
32ca0 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
32cb0 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
32cc0 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
32cd0 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
32ce0 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
32cf0 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
32d00 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
32d10 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
32d20 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
32d30 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
32d40 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
32d50 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
32d60 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
32d70 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
32d80 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
32d90 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
32da0 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
32db0 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
32dc0 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
32dd0 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
32de0 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
32df0 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
32e00 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
32e10 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
32e20 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
32e30 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
32e40 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
32e50 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
32e60 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
32e70 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
32e80 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
32e90 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
32ea0 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
32eb0 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
32ec0 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
32ed0 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
32ee0 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
32ef0 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
32f00 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
32f10 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
32f20 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
32f30 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
32f40 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
32f50 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
32f60 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
32f70 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
32f80 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
32f90 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
32fa0 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
32fb0 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
32fc0 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
32fd0 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
32fe0 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
32ff0 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
33000 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
33010 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
33020 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
33030 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a  t inserted..**.*
33040 2a 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f  * P5 is the erro
33050 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65  r actions (OE_Re
33060 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20  place, OE_Fail, 
33070 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20  OE_Ignore, etc) 
33080 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74  to.** apply in t
33090 68 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e  he case of a con
330a0 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20  straint failure 
330b0 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20  on an insert or 
330c0 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
330d0 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
330e0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
330f0 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
33100 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
33110 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
33120 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
33130 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
33140 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
33150 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
33160 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
33170 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
33180 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
33190 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
331a0 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
331b0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
331c0 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
331d0 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
331e0 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
331f0 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
33200 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
33210 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
33220 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
33230 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20  .  if( pVtab==0 
33240 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e  || NEVER(pVtab->
33250 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20  pModule==0) ){. 
33260 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
33270 4f 43 4b 45 44 3b 0a 20 20 20 20 62 72 65 61 6b  OCKED;.    break
33280 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c 65 20  ;.  }.  pModule 
33290 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
332a0 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70 2d 3e  ;.  nArg = pOp->
332b0 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
332c0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 56 54  p->p4type==P4_VT
332d0 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c 57 41  AB );.  if( ALWA
332e0 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64  YS(pModule->xUpd
332f0 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38 20 76  ate) ){.    u8 v
33300 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20  tabOnConflict = 
33310 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69  db->vtabOnConfli
33320 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20 3d 20  ct;.    apArg = 
33330 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20 70 58  p->apArg;.    pX
33340 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
33350 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  ];.    for(i=0; 
33360 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a 20 20  i<nArg; i++){.  
33370 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
33380 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a 20 20  sValid(pX) );.  
33390 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
333a0 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20 20 20  ange(p, pX);.   
333b0 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20 70 58     apArg[i] = pX
333c0 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a 20 20  ;.      pX++;.  
333d0 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74 61 62    }.    db->vtab
333e0 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70 4f 70  OnConflict = pOp
333f0 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d 20 70  ->p5;.    rc = p
33400 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74 65 28  Module->xUpdate(
33410 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61 70 41  pVtab, nArg, apA
33420 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20 20 20  rg, &rowid);.   
33430 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c   db->vtabOnConfl
33440 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f 6e 66  ict = vtabOnConf
33450 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  lict;.    sqlite
33460 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
33470 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20  g(p, pVtab);.   
33480 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
33490 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20 29 7b  OK && pOp->p1 ){
334a0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6e  .      assert( n
334b0 41 72 67 3e 31 20 26 26 20 61 70 41 72 67 5b 30  Arg>1 && apArg[0
334c0 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d 2d 3e  ] && (apArg[0]->
334d0 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c 29 20  flags&MEM_Null) 
334e0 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c 61 73  );.      db->las
334f0 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f 77  tRowid = lastRow
33500 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  id = rowid;.    
33510 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26 30 78  }.    if( (rc&0x
33520 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53  ff)==SQLITE_CONS
33530 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d 3e 70  TRAINT && pOp->p
33540 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73 74 72  4.pVtab->bConstr
33550 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20 69 66  aint ){.      if
33560 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 49 67  ( pOp->p5==OE_Ig
33570 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 20 20  nore ){.        
33580 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  rc = SQLITE_OK;.
33590 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
335a0 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41 63 74       p->errorAct
335b0 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70 35 3d  ion = ((pOp->p5=
335c0 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f 20 4f  =OE_Replace) ? O
335d0 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d 3e 70  E_Abort : pOp->p
335e0 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  5);.      }.    
335f0 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 2d 3e  }else{.      p->
33600 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20 20 7d  nChange++;.    }
33610 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
33620 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33630 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
33640 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 20  LE */..#ifndef  
33650 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
33660 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70 63  R_PRAGMAS./* Opc
33670 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20 50  ode: Pagecount P
33680 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
33690 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72 65   Write the curre
336a0 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  nt number of pag
336b0 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  es in database P
336c0 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  1 to memory cell
336d0 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
336e0 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20 20  Pagecount: {    
336f0 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
33700 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
33710 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69  pOut->u.i = sqli
33720 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65  te3BtreeLastPage
33730 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31  (db->aDb[pOp->p1
33740 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b  ].pBt);.  break;
33750 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e  .}.#endif...#ifn
33760 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54  def  SQLITE_OMIT
33770 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
33780 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63  * Opcode: MaxPgc
33790 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nt P1 P2 P3 * *.
337a0 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74  **.** Try to set
337b0 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67   the maximum pag
337c0 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61  e count for data
337d0 62 61 73 65 20 50 31 20 74 6f 20 74 68 65 20 76  base P1 to the v
337e0 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44  alue in P3..** D
337f0 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61  o not let the ma
33800 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
33810 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20   fall below the 
33820 63 75 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75  current page cou
33830 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74  nt and.** do not
33840 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69   change the maxi
33850 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76  mum page count v
33860 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a  alue if P3==0..*
33870 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d  *.** Store the m
33880 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e  aximum page coun
33890 74 20 61 66 74 65 72 20 74 68 65 20 63 68 61 6e  t after the chan
338a0 67 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ge in register P
338b0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61  2..*/.case OP_Ma
338c0 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20  xPgcnt: {       
338d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
338e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75 6e 73  release */.  uns
338f0 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d 61 78  igned int newMax
33900 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  ;.  Btree *pBt;.
33910 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
33920 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
33930 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20 20 69   newMax = 0;.  i
33940 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
33950 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c 69 74    newMax = sqlit
33960 65 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28  e3BtreeLastPage(
33970 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20 6e 65  pBt);.    if( ne
33980 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e 65 64  wMax < (unsigned
33990 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77 4d 61  )pOp->p3 ) newMa
339a0 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29 70 4f  x = (unsigned)pO
339b0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70 4f 75  p->p3;.  }.  pOu
339c0 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65 33  t->u.i = sqlite3
339d0 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f 75 6e  BtreeMaxPageCoun
339e0 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29 3b 0a  t(pBt, newMax);.
339f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
33a00 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  f.../* Opcode: I
33a10 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  nit * P2 * P4 *.
33a20 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 53 74  ** Synopsis:  St
33a30 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a 2a 20  art at P2.**.** 
33a40 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61 69 6e  Programs contain
33a50 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74 61 6e   a single instan
33a60 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  ce of this opcod
33a70 65 20 61 73 20 74 68 65 20 76 65 72 79 20 66 69  e as the very fi
33a80 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e 0a 2a  rst.** opcode..*
33a90 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e 67 20  *.** If tracing 
33aa0 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79 20 74  is enabled (by t
33ab0 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  he sqlite3_trace
33ac0 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c 20 74  ()) interface, t
33ad0 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46 2d 38  hen.** the UTF-8
33ae0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 65   string containe
33af0 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69 74 74  d in P4 is emitt
33b00 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63 65 20  ed on the trace 
33b10 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f 72 20  callback..** Or 
33b20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b 2c 20  if P4 is blank, 
33b30 75 73 65 20 74 68 65 20 73 74 72 69 6e 67 20 72  use the string r
33b40 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
33b50 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a 2a 20  e3_sql()..**.** 
33b60 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  If P2 is not zer
33b70 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72  o, jump to instr
33b80 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61  uction P2..*/.ca
33b90 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20 20 20  se OP_Init: {   
33ba0 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
33bb0 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61 63 65  /.  char *zTrace
33bc0 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a 20 20  ;.  char *z;..  
33bd0 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b 0a 20  if( pOp->p2 ){. 
33be0 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20     pc = pOp->p2 
33bf0 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64 65 66  - 1;.  }.#ifndef
33c00 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 41   SQLITE_OMIT_TRA
33c10 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78 54 72  CE.  if( db->xTr
33c20 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e 64 6f  ace.   && !p->do
33c30 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26 20 28  ingRerun.   && (
33c40 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70  zTrace = (pOp->p
33c50 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20  4.z ? pOp->p4.z 
33c60 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30 0a 20  : p->zSql))!=0. 
33c70 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71 6c 69   ){.    z = sqli
33c80 74 65 33 56 64 62 65 45 78 70 61 6e 64 53 71 6c  te3VdbeExpandSql
33c90 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 20  (p, zTrace);.   
33ca0 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62 2d 3e   db->xTrace(db->
33cb0 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b 0a 20  pTraceArg, z);. 
33cc0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
33cd0 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23 69 66  (db, z);.  }.#if
33ce0 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45 5f 46  def SQLITE_USE_F
33cf0 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a 54 72  CNTL_TRACE.  zTr
33d00 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34 2e 7a  ace = (pOp->p4.z
33d10 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a 20 70   ? pOp->p4.z : p
33d20 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28 20 7a  ->zSql);.  if( z
33d30 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69 6e 74  Trace ){.    int
33d40 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b   i;.    for(i=0;
33d50 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
33d60 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62 4d 61  {.      if( DbMa
33d70 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
33d80 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63 6f 6e  ask, i)==0 ) con
33d90 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
33da0 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
33db0 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  l(db, db->aDb[i]
33dc0 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45 5f 46  .zName, SQLITE_F
33dd0 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54 72 61  CNTL_TRACE, zTra
33de0 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 23  ce);.    }.  }.#
33df0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
33e00 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43 45 20  USE_FCNTL_TRACE 
33e10 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
33e20 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28 64 62  _DEBUG.  if( (db
33e30 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
33e40 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a 20 20  _SqlTrace)!=0.  
33e50 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20 28 70   && (zTrace = (p
33e60 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e  Op->p4.z ? pOp->
33e70 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29  p4.z : p->zSql))
33e80 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73 71 6c  !=0.  ){.    sql
33e90 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
33ea0 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73 5c 6e  "SQL-trace: %s\n
33eb0 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20 7d 0a  ", zTrace);.  }.
33ec0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
33ed0 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64 69 66  _DEBUG */.#endif
33ee0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
33ef0 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65 61 6b  TRACE */.  break
33f00 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
33f10 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20 2a 0a   Noop * * * * *.
33f20 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69 6e 67  **.** Do nothing
33f30 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  .  This instruct
33f40 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75 73 65  ion is often use
33f50 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a 2a 2a  ful as a jump.**
33f60 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a 2a 2f   destination..*/
33f70 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67 69 63  ./*.** The magic
33f80 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64 65 20   Explain opcode 
33f90 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72 74 65  are only inserte
33fa0 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e 3d 3d  d when explain==
33fb0 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73 20 74  2 (which.** is t
33fc0 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65 20 45  o say when the E
33fd0 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41  XPLAIN QUERY PLA
33fe0 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73 65 64  N syntax is used
33ff0 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  .).** This opcod
34000 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f 72 6d  e records inform
34010 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 6f  ation from the o
34020 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20 69 73  ptimizer.  It is
34030 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61 6d 65   the.** the same
34040 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 54 68   as a no-op.  Th
34050 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65 72 20  is opcodesnever 
34060 61 70 70 65 61 72 73 20 69 6e 20 61 20 72 65 61  appears in a rea
34070 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f  l VM program..*/
34080 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20 20 20  .default: {     
34090 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20       /* This is 
340a0 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70 20 61  really OP_Noop a
340b0 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20 2a 2f  nd OP_Explain */
340c0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
340d0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f 70 20  opcode==OP_Noop 
340e0 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
340f0 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a 20 20  OP_Explain );.  
34100 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a 2a 2a  break;.}../*****
34110 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34120 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34130 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34140 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34150 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68 65 20  ********.** The 
34160 63 61 73 65 73 20 6f 66 20 74 68 65 20 73 77 69  cases of the swi
34170 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20 61 62  tch statement ab
34180 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20 73 68  ove this line sh
34190 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e 64 65  ould all be inde
341a0 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73 70 61  nted.** by 6 spa
341b0 63 65 73 2e 20 20 42 75 74 20 74 68 65 20 6c 65  ces.  But the le
341c0 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63 65 73  ft-most 6 spaces
341d0 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d 6f 76   have been remov
341e0 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20 74 68  ed to improve th
341f0 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69 74 79  e.** readability
34200 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70 6f 69  .  From this poi
34210 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68 65 20  nt on down, the 
34220 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61 74 69  normal indentati
34230 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a 2a 20  on rules are.** 
34240 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a 2a 2a  restored..******
34250 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34260 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34270 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34280 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
34290 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d 0a 0a  *******/.    }..
342a0 23 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46  #ifdef VDBE_PROF
342b0 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ILE.    {.      
342c0 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20 73 71  u64 endTime = sq
342d0 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 20  lite3Hwtime();. 
342e0 20 20 20 20 20 69 66 28 20 65 6e 64 54 69 6d 65       if( endTime
342f0 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e 63 79  >start ) pOp->cy
34300 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d 65 20  cles += endTime 
34310 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20 20 70  - start;.      p
34320 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20 20 7d  Op->cnt++;.    }
34330 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20  .#endif..    /* 
34340 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f  The following co
34350 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e 67 20  de adds nothing 
34360 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20 66 75  to the actual fu
34370 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20 20 20  nctionality.    
34380 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67 72 61  ** of the progra
34390 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 68  m.  It is only h
343a0 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e 67 20  ere for testing 
343b0 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e 0a 20  and debugging.. 
343c0 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f 74 68     ** On the oth
343d0 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f 65 73  er hand, it does
343e0 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c 65 73   burn CPU cycles
343f0 20 65 76 65 72 79 20 74 69 6d 65 20 74 68 72 6f   every time thro
34400 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65 20 65  ugh.    ** the e
34410 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e 20 20  valuator loop.  
34420 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76 65 20  So we can leave 
34430 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44 45 42  it out when NDEB
34440 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20  UG is defined.. 
34450 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 4e 44     */.#ifndef ND
34460 45 42 55 47 0a 20 20 20 20 61 73 73 65 72 74 28  EBUG.    assert(
34470 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c 70 2d   pc>=-1 && pc<p-
34480 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65 66 20  >nOp );..#ifdef 
34490 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20  SQLITE_DEBUG.   
344a0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
344b0 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63   SQLITE_VdbeTrac
344c0 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 72  e ){.      if( r
344d0 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28 22 72  c!=0 ) printf("r
344e0 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20 20 20  c=%d\n",rc);.   
344f0 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 66 6c     if( pOp->opfl
34500 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f 55 54  ags & (OPFLG_OUT
34510 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f 50 46  2_PRERELEASE|OPF
34520 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20 20 20  LG_OUT2) ){.    
34530 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63      registerTrac
34540 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d  e(pOp->p2, &aMem
34550 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20  [pOp->p2]);.    
34560 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 4f    }.      if( pO
34570 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46  p->opflags & OPF
34580 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20 20 20  LG_OUT3 ){.     
34590 20 20 20 72 65 67 69 73 74 65 72 54 72 61 63 65     registerTrace
345a0 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d 5b  (pOp->p3, &aMem[
345b0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
345c0 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 20   }.    }.#endif 
345d0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
345e0 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a 20 4e   */.#endif  /* N
345f0 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20 2f 2a  DEBUG */.  }  /*
34600 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   The end of the 
34610 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74 68 65  for(;;) loop the
34620 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68 20 6f   loops through o
34630 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f 2a 20  pcodes */..  /* 
34640 49 66 20 77 65 20 72 65 61 63 68 20 74 68 69 73  If we reach this
34650 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61 6e 73   point, it means
34660 20 74 68 61 74 20 65 78 65 63 75 74 69 6f 6e 20   that execution 
34670 69 73 20 66 69 6e 69 73 68 65 64 20 77 69 74 68  is finished with
34680 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72 20 6f  .  ** an error o
34690 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20 20 2a  f some kind..  *
346a0 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68 61 6c  /.vdbe_error_hal
346b0 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72 63 20  t:.  assert( rc 
346c0 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b  );.  p->rc = rc;
346d0 0a 20 20 74 65 73 74 63 61 73 65 28 20 73 71 6c  .  testcase( sql
346e0 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
346f0 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20 73 71  .xLog!=0 );.  sq
34700 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20 22 73  lite3_log(rc, "s
34710 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74 73 20  tatement aborts 
34720 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73 22 2c  at %d: [%s] %s",
34730 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
34740 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53 71 6c       pc, p->zSql
34750 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20  , p->zErrMsg);. 
34760 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
34770 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  (p);.  if( rc==S
34780 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
34790 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  M ) db->mallocFa
347a0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  iled = 1;.  rc =
347b0 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
347c0 20 69 66 28 20 72 65 73 65 74 53 63 68 65 6d 61   if( resetSchema
347d0 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20 20 20  OnFault>0 ){.   
347e0 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65   sqlite3ResetOne
347f0 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73 65 74  Schema(db, reset
34800 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d 31 29  SchemaOnFault-1)
34810 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68 69 73  ;.  }..  /* This
34820 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79   is the only way
34830 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70 72 6f   out of this pro
34840 63 65 64 75 72 65 2e 20 20 57 65 20 68 61 76 65  cedure.  We have
34850 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61 73 65   to.  ** release
34860 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f 6e 20   the mutexes on 
34870 62 74 72 65 65 73 20 74 68 61 74 20 77 65 72 65  btrees that were
34880 20 61 63 71 75 69 72 65 64 20 61 74 20 74 68 65   acquired at the
34890 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a 76 64  .  ** top. */.vd
348a0 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64 62 2d  be_return:.  db-
348b0 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73  >lastRowid = las
348c0 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74 63 61  tRowid;.  testca
348d0 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20 29 3b  se( nVmStep>0 );
348e0 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  .  p->aCounter[S
348f0 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
34900 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28 69 6e  _VM_STEP] += (in
34910 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73 71 6c  t)nVmStep;.  sql
34920 69 74 65 33 56 64 62 65 4c 65 61 76 65 28 70 29  ite3VdbeLeave(p)
34930 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b 0a 0a  ;.  return rc;..
34940 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72    /* Jump to her
34950 65 20 69 66 20 61 20 73 74 72 69 6e 67 20 6f 72  e if a string or
34960 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74 68 61   blob larger tha
34970 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e  n SQLITE_MAX_LEN
34980 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e 63 6f  GTH.  ** is enco
34990 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a 74 6f  untered..  */.to
349a0 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74 65 33  o_big:.  sqlite3
349b0 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
349c0 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74 72 69  rrMsg, db, "stri
349d0 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62  ng or blob too b
349e0 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53 51 4c  ig");.  rc = SQL
349f0 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20 67 6f  ITE_TOOBIG;.  go
34a00 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34a10 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34a20 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61 6c 6c  o here if a mall
34a30 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20 2a 2f  oc() fails..  */
34a40 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d 3e 6d  .no_mem:.  db->m
34a50 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
34a60 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  .  sqlite3SetStr
34a70 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
34a80 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d 65 6d   db, "out of mem
34a90 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20 53 51  ory");.  rc = SQ
34aa0 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20 67 6f  LITE_NOMEM;.  go
34ab0 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f 68 61  to vdbe_error_ha
34ac0 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74  lt;..  /* Jump t
34ad0 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79 20 6f  o here for any o
34ae0 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66 61 74  ther kind of fat
34af0 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65 20 22  al error.  The "
34b00 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20 20 2a  rc" variable.  *
34b10 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20 74 68  * should hold th
34b20 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72 2e 0a  e error number..
34b30 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74    */.abort_due_t
34b40 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73 65 72  o_error:.  asser
34b50 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d 3d 30  t( p->zErrMsg==0
34b60 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6d 61   );.  if( db->ma
34b70 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72 63 20  llocFailed ) rc 
34b80 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
34b90 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
34ba0 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29 7b 0a  _IOERR_NOMEM ){.
34bb0 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74      sqlite3SetSt
34bc0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34bd0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34be0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34bf0 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f    }.  goto vdbe_
34c00 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20 20 2f  error_halt;..  /
34c10 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65 20 69  * Jump to here i
34c20 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 69 6e  f the sqlite3_in
34c30 74 65 72 72 75 70 74 28 29 20 41 50 49 20 73 65  terrupt() API se
34c40 74 73 20 74 68 65 20 69 6e 74 65 72 72 75 70 74  ts the interrupt
34c50 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20 2a 2f  .  ** flag..  */
34c60 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e  .abort_due_to_in
34c70 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73 65 72  terrupt:.  asser
34c80 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  t( db->u1.isInte
34c90 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72 63 20  rrupted );.  rc 
34ca0 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55  = SQLITE_INTERRU
34cb0 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72 63  PT;.  p->rc = rc
34cc0 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53 74  ;.  sqlite3SetSt
34cd0 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67  ring(&p->zErrMsg
34ce0 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71 6c 69  , db, "%s", sqli
34cf0 74 65 33 45 72 72 53 74 72 28 72 63 29 29 3b 0a  te3ErrStr(rc));.
34d00 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f    goto vdbe_erro
34d10 72 5f 68 61 6c 74 3b 0a 7d 0a                    r_halt;.}.