/ Hex Artifact Content
Login

Artifact 79cd84435224f9f4edd420467f3a7bad29fffa8f:


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 69 73 20 6d 61 63 72 6f 20 65 76 61 6c 75 61  his macro evalua
0c70: 74 65 73 20 74 6f 20 74 72 75 65 20 69 66 20 65  tes to true if e
0c80: 69 74 68 65 72 20 74 68 65 20 75 70 64 61 74 65  ither the update
0c90: 20 68 6f 6f 6b 20 6f 72 20 74 68 65 20 70 72 65   hook or the pre
0ca0: 75 70 64 61 74 65 0a 2a 2a 20 68 6f 6f 6b 20 61  update.** hook a
0cb0: 72 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 64  re enabled for d
0cc0: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 20  atabase connect 
0cd0: 44 42 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  DB..*/.#ifdef SQ
0ce0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
0cf0: 50 44 41 54 45 5f 48 4f 4f 4b 0a 23 20 64 65 66  PDATE_HOOK.# def
0d00: 69 6e 65 20 48 41 53 5f 55 50 44 41 54 45 5f 48  ine HAS_UPDATE_H
0d10: 4f 4f 4b 28 44 42 29 20 20 20 28 28 44 42 29 2d  OOK(DB)   ((DB)-
0d20: 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
0d30: 61 63 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61  ack||(DB)->xUpda
0d40: 74 65 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73  teCallback).#els
0d50: 65 0a 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55  e.# define HAS_U
0d60: 50 44 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 20  PDATE_HOOK(DB)  
0d70: 28 28 44 42 29 2d 3e 78 55 70 64 61 74 65 43 61  ((DB)->xUpdateCa
0d80: 6c 6c 62 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a  llback).#endif..
0d90: 2f 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 67  /*.** The next g
0da0: 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 69  lobal variable i
0db0: 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 65 61  s incremented ea
0dc0: 63 68 20 74 69 6d 65 20 74 68 65 20 4f 50 5f 46  ch time the OP_F
0dd0: 6f 75 6e 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69  ound opcode.** i
0de0: 73 20 65 78 65 63 75 74 65 64 2e 20 54 68 69 73  s executed. This
0df0: 20 69 73 20 75 73 65 64 20 74 6f 20 74 65 73 74   is used to test
0e00: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
0e10: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a  the foreign key.
0e20: 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70  ** operation imp
0e30: 6c 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 20 4f  lemented using O
0e40: 50 5f 46 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f  P_FkIsZero is wo
0e50: 72 6b 69 6e 67 2e 20 54 68 69 73 20 76 61 72 69  rking. This vari
0e60: 61 62 6c 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66  able.** has no f
0e70: 75 6e 63 74 69 6f 6e 20 6f 74 68 65 72 20 74 68  unction other th
0e80: 61 6e 20 74 6f 20 68 65 6c 70 20 76 65 72 69 66  an to help verif
0e90: 79 20 74 68 65 20 63 6f 72 72 65 63 74 20 6f 70  y the correct op
0ea0: 65 72 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a  eration of the.*
0eb0: 2a 20 6c 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69  * library..*/.#i
0ec0: 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
0ed0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 66 6f 75  .int sqlite3_fou
0ee0: 6e 64 5f 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65  nd_count = 0;.#e
0ef0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74  ndif../*.** Test
0f00: 20 61 20 72 65 67 69 73 74 65 72 20 74 6f 20 73   a register to s
0f10: 65 65 20 69 66 20 69 74 20 65 78 63 65 65 64 73  ee if it exceeds
0f20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 6d 61 78   the current max
0f30: 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a  imum blob size..
0f40: 2a 2a 20 49 66 20 69 74 20 64 6f 65 73 2c 20 72  ** If it does, r
0f50: 65 63 6f 72 64 20 74 68 65 20 6e 65 77 20 6d 61  ecord the new ma
0f60: 78 69 6d 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e  ximum blob size.
0f70: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
0f80: 53 51 4c 49 54 45 5f 54 45 53 54 29 20 26 26 20  SQLITE_TEST) && 
0f90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fa0: 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
0fb0: 54 29 0a 23 20 64 65 66 69 6e 65 20 55 50 44 41  T).# define UPDA
0fc0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
0fd0: 50 29 20 20 75 70 64 61 74 65 4d 61 78 42 6c 6f  P)  updateMaxBlo
0fe0: 62 73 69 7a 65 28 50 29 0a 23 65 6c 73 65 0a 23  bsize(P).#else.#
0ff0: 20 64 65 66 69 6e 65 20 55 50 44 41 54 45 5f 4d   define UPDATE_M
1000: 41 58 5f 42 4c 4f 42 53 49 5a 45 28 50 29 0a 23  AX_BLOBSIZE(P).#
1010: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 76  endif../*.** Inv
1020: 6f 6b 65 20 74 68 65 20 56 44 42 45 20 63 6f 76  oke the VDBE cov
1030: 65 72 61 67 65 20 63 61 6c 6c 62 61 63 6b 2c 20  erage callback, 
1040: 69 66 20 74 68 61 74 20 63 61 6c 6c 62 61 63 6b  if that callback
1050: 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
1060: 69 73 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  is.** feature is
1070: 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 20 73   used for test s
1080: 75 69 74 65 20 76 61 6c 69 64 61 74 69 6f 6e 20  uite validation 
1090: 6f 6e 6c 79 20 61 6e 64 20 64 6f 65 73 20 6e 6f  only and does no
10a0: 74 20 61 70 70 65 61 72 20 61 6e 0a 2a 2a 20 70  t appear an.** p
10b0: 72 6f 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 73  roduction builds
10c0: 2e 0a 2a 2a 0a 2a 2a 20 4d 20 69 73 20 61 6e 20  ..**.** M is an 
10d0: 69 6e 74 65 67 65 72 2c 20 32 20 6f 72 20 33 2c  integer, 2 or 3,
10e0: 20 74 68 61 74 20 69 6e 64 69 63 65 73 20 68 6f   that indices ho
10f0: 77 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74  w many different
1100: 20 77 61 79 73 20 74 68 65 0a 2a 2a 20 62 72 61   ways the.** bra
1110: 6e 63 68 20 63 61 6e 20 67 6f 2e 20 20 49 74 20  nch can go.  It 
1120: 69 73 20 75 73 75 61 6c 6c 79 20 32 2e 20 20 22  is usually 2.  "
1130: 49 22 20 69 73 20 74 68 65 20 64 69 72 65 63 74  I" is the direct
1140: 69 6f 6e 20 74 68 65 20 62 72 61 6e 63 68 0a 2a  ion the branch.*
1150: 2a 20 67 6f 65 73 2e 20 20 30 20 6d 65 61 6e 73  * goes.  0 means
1160: 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 2e 20   falls through. 
1170: 20 31 20 6d 65 61 6e 73 20 62 72 61 6e 63 68 20   1 means branch 
1180: 69 73 20 74 61 6b 65 6e 2e 20 20 32 20 6d 65 61  is taken.  2 mea
1190: 6e 73 20 74 68 65 0a 2a 2a 20 73 65 63 6f 6e 64  ns the.** second
11a0: 20 61 6c 74 65 72 6e 61 74 69 76 65 20 62 72 61   alternative bra
11b0: 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 0a 2a 2f  nch is taken..*/
11c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
11d0: 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
11e0: 47 45 29 0a 23 20 64 65 66 69 6e 65 20 56 64 62  GE).# define Vdb
11f0: 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 49 2c 4d  eBranchTaken(I,M
1200: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
1210: 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1220: 28 49 2c 4d 29 20 76 64 62 65 54 61 6b 65 42 72  (I,M) vdbeTakeBr
1230: 61 6e 63 68 28 70 4f 70 2d 3e 69 53 72 63 4c 69  anch(pOp->iSrcLi
1240: 6e 65 2c 49 2c 4d 29 0a 20 20 73 74 61 74 69 63  ne,I,M).  static
1250: 20 76 6f 69 64 20 76 64 62 65 54 61 6b 65 42 72   void vdbeTakeBr
1260: 61 6e 63 68 28 69 6e 74 20 69 53 72 63 4c 69 6e  anch(int iSrcLin
1270: 65 2c 20 75 38 20 49 2c 20 75 38 20 4d 29 7b 0a  e, u8 I, u8 M){.
1280: 20 20 20 20 69 66 28 20 69 53 72 63 4c 69 6e 65      if( iSrcLine
1290: 3c 3d 32 20 26 26 20 41 4c 57 41 59 53 28 69 53  <=2 && ALWAYS(iS
12a0: 72 63 4c 69 6e 65 3e 30 29 20 29 7b 0a 20 20 20  rcLine>0) ){.   
12b0: 20 20 20 4d 20 3d 20 69 53 72 63 4c 69 6e 65 3b     M = iSrcLine;
12c0: 0a 20 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74  .      /* Assert
12d0: 20 74 68 65 20 74 72 75 74 68 20 6f 66 20 56 64   the truth of Vd
12e0: 62 65 43 6f 76 65 72 61 67 65 41 6c 77 61 79 73  beCoverageAlways
12f0: 54 61 6b 65 6e 28 29 20 61 6e 64 20 0a 20 20 20  Taken() and .   
1300: 20 20 20 2a 2a 20 56 64 62 65 43 6f 76 65 72 61     ** VdbeCovera
1310: 67 65 4e 65 76 65 72 54 61 6b 65 6e 28 29 20 2a  geNeverTaken() *
1320: 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  /.      assert( 
1330: 28 4d 20 26 20 49 29 3d 3d 49 20 29 3b 0a 20 20  (M & I)==I );.  
1340: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
1350: 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  f( sqlite3Global
1360: 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e  Config.xVdbeBran
1370: 63 68 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 20  ch==0 ) return; 
1380: 20 2f 2a 4e 4f 5f 54 45 53 54 2a 2f 0a 20 20 20   /*NO_TEST*/.   
1390: 20 20 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c     sqlite3Global
13a0: 43 6f 6e 66 69 67 2e 78 56 64 62 65 42 72 61 6e  Config.xVdbeBran
13b0: 63 68 28 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ch(sqlite3Global
13c0: 43 6f 6e 66 69 67 2e 70 56 64 62 65 42 72 61 6e  Config.pVdbeBran
13d0: 63 68 41 72 67 2c 0a 20 20 20 20 20 20 20 20 20  chArg,.         
13e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 53 72               iSr
1400: 63 4c 69 6e 65 2c 49 2c 4d 29 3b 0a 20 20 20 20  cLine,I,M);.    
1410: 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  }.  }.#endif../*
1420: 0a 2a 2a 20 43 6f 6e 76 65 72 74 20 74 68 65 20  .** Convert the 
1430: 67 69 76 65 6e 20 72 65 67 69 73 74 65 72 20 69  given register i
1440: 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 69 66 20  nto a string if 
1450: 69 74 20 69 73 6e 27 74 20 6f 6e 65 0a 2a 2a 20  it isn't one.** 
1460: 61 6c 72 65 61 64 79 2e 20 52 65 74 75 72 6e 20  already. Return 
1470: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 6d 61  non-zero if a ma
1480: 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 2a 2f  lloc() fails..*/
1490: 0a 23 64 65 66 69 6e 65 20 53 74 72 69 6e 67 69  .#define Stringi
14a0: 66 79 28 50 2c 20 65 6e 63 29 20 5c 0a 20 20 20  fy(P, enc) \.   
14b0: 69 66 28 28 28 50 29 2d 3e 66 6c 61 67 73 26 28  if(((P)->flags&(
14c0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
14d0: 29 29 3d 3d 30 20 26 26 20 73 71 6c 69 74 65 33  ))==0 && sqlite3
14e0: 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79  VdbeMemStringify
14f0: 28 50 2c 65 6e 63 29 29 20 5c 0a 20 20 20 20 20  (P,enc)) \.     
1500: 7b 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 20 7d  { goto no_mem; }
1510: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 65 70 68 65 6d  ../*.** An ephem
1520: 65 72 61 6c 20 73 74 72 69 6e 67 20 76 61 6c 75  eral string valu
1530: 65 20 28 73 69 67 6e 69 66 69 65 64 20 62 79 20  e (signified by 
1540: 74 68 65 20 4d 45 4d 5f 45 70 68 65 6d 20 66 6c  the MEM_Ephem fl
1550: 61 67 29 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ag) contains.** 
1560: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 64  a pointer to a d
1570: 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63  ynamically alloc
1580: 61 74 65 64 20 73 74 72 69 6e 67 20 77 68 65 72  ated string wher
1590: 65 20 73 6f 6d 65 20 6f 74 68 65 72 20 65 6e 74  e some other ent
15a0: 69 74 79 0a 2a 2a 20 69 73 20 72 65 73 70 6f 6e  ity.** is respon
15b0: 73 69 62 6c 65 20 66 6f 72 20 64 65 61 6c 6c 6f  sible for deallo
15c0: 63 61 74 69 6e 67 20 74 68 61 74 20 73 74 72 69  cating that stri
15d0: 6e 67 2e 20 20 42 65 63 61 75 73 65 20 74 68 65  ng.  Because the
15e0: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 64 6f 65   register.** doe
15f0: 73 20 6e 6f 74 20 63 6f 6e 74 72 6f 6c 20 74 68  s not control th
1600: 65 20 73 74 72 69 6e 67 2c 20 69 74 20 6d 69 67  e string, it mig
1610: 68 74 20 62 65 20 64 65 6c 65 74 65 64 20 77 69  ht be deleted wi
1620: 74 68 6f 75 74 20 74 68 65 20 72 65 67 69 73 74  thout the regist
1630: 65 72 0a 2a 2a 20 6b 6e 6f 77 69 6e 67 20 69 74  er.** knowing it
1640: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 72 6f 75  ..**.** This rou
1650: 74 69 6e 65 20 63 6f 6e 76 65 72 74 73 20 61 6e  tine converts an
1660: 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69 6e   ephemeral strin
1670: 67 20 69 6e 74 6f 20 61 20 64 79 6e 61 6d 69 63  g into a dynamic
1680: 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 0a 2a  ally allocated.*
1690: 2a 20 73 74 72 69 6e 67 20 74 68 61 74 20 74 68  * string that th
16a0: 65 20 72 65 67 69 73 74 65 72 20 69 74 73 65 6c  e register itsel
16b0: 66 20 63 6f 6e 74 72 6f 6c 73 2e 20 20 49 6e 20  f controls.  In 
16c0: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69 74 0a  other words, it.
16d0: 2a 2a 20 63 6f 6e 76 65 72 74 73 20 61 6e 20 4d  ** converts an M
16e0: 45 4d 5f 45 70 68 65 6d 20 73 74 72 69 6e 67 20  EM_Ephem string 
16f0: 69 6e 74 6f 20 61 20 73 74 72 69 6e 67 20 77 69  into a string wi
1700: 74 68 20 50 2e 7a 3d 3d 50 2e 7a 4d 61 6c 6c 6f  th P.z==P.zMallo
1710: 63 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 65  c..*/.#define De
1720: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 50 29 20  ephemeralize(P) 
1730: 5c 0a 20 20 20 69 66 28 20 28 28 50 29 2d 3e 66  \.   if( ((P)->f
1740: 6c 61 67 73 26 4d 45 4d 5f 45 70 68 65 6d 29 21  lags&MEM_Ephem)!
1750: 3d 30 20 5c 0a 20 20 20 20 20 20 20 26 26 20 73  =0 \.       && s
1760: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 61 6b  qlite3VdbeMemMak
1770: 65 57 72 69 74 65 61 62 6c 65 28 50 29 20 29 7b  eWriteable(P) ){
1780: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 7d 0a 0a   goto no_mem;}..
1790: 2f 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69  /* Return true i
17a0: 66 20 74 68 65 20 63 75 72 73 6f 72 20 77 61 73  f the cursor was
17b0: 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20 74 68   opened using th
17c0: 65 20 4f 50 5f 4f 70 65 6e 53 6f 72 74 65 72 20  e OP_OpenSorter 
17d0: 6f 70 63 6f 64 65 2e 20 2a 2f 0a 23 64 65 66 69  opcode. */.#defi
17e0: 6e 65 20 69 73 53 6f 72 74 65 72 28 78 29 20 28  ne isSorter(x) (
17f0: 28 78 29 2d 3e 70 53 6f 72 74 65 72 21 3d 30 29  (x)->pSorter!=0)
1800: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  ../*.** Allocate
1810: 20 56 64 62 65 43 75 72 73 6f 72 20 6e 75 6d 62   VdbeCursor numb
1820: 65 72 20 69 43 75 72 2e 20 20 52 65 74 75 72 6e  er iCur.  Return
1830: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 69 74   a pointer to it
1840: 2e 20 20 52 65 74 75 72 6e 20 4e 55 4c 4c 0a 2a  .  Return NULL.*
1850: 2a 20 69 66 20 77 65 20 72 75 6e 20 6f 75 74 20  * if we run out 
1860: 6f 66 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 0a 73 74  of memory..*/.st
1870: 61 74 69 63 20 56 64 62 65 43 75 72 73 6f 72 20  atic VdbeCursor 
1880: 2a 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28  *allocateCursor(
1890: 0a 20 20 56 64 62 65 20 2a 70 2c 20 20 20 20 20  .  Vdbe *p,     
18a0: 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
18b0: 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20  virtual machine 
18c0: 2a 2f 0a 20 20 69 6e 74 20 69 43 75 72 2c 20 20  */.  int iCur,  
18d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
18e0: 64 65 78 20 6f 66 20 74 68 65 20 6e 65 77 20 56  dex of the new V
18f0: 64 62 65 43 75 72 73 6f 72 20 2a 2f 0a 20 20 69  dbeCursor */.  i
1900: 6e 74 20 6e 46 69 65 6c 64 2c 20 20 20 20 20 20  nt nField,      
1910: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1920: 66 20 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20  f fields in the 
1930: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 2a  table or index *
1940: 2f 0a 20 20 69 6e 74 20 69 44 62 2c 20 20 20 20  /.  int iDb,    
1950: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
1960: 61 62 61 73 65 20 74 68 65 20 63 75 72 73 6f 72  abase the cursor
1970: 20 62 65 6c 6f 6e 67 73 20 74 6f 2c 20 6f 72 20   belongs to, or 
1980: 2d 31 20 2a 2f 0a 20 20 69 6e 74 20 69 73 42 74  -1 */.  int isBt
1990: 72 65 65 43 75 72 73 6f 72 20 20 20 20 20 2f 2a  reeCursor     /*
19a0: 20 54 72 75 65 20 66 6f 72 20 42 2d 54 72 65 65   True for B-Tree
19b0: 2e 20 20 46 61 6c 73 65 20 66 6f 72 20 70 73 65  .  False for pse
19c0: 75 64 6f 2d 74 61 62 6c 65 20 6f 72 20 76 74 61  udo-table or vta
19d0: 62 20 2a 2f 0a 29 7b 0a 20 20 2f 2a 20 46 69 6e  b */.){.  /* Fin
19e0: 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  d the memory cel
19f0: 6c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  l that will be u
1a00: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1a10: 20 62 6c 6f 62 20 6f 66 20 6d 65 6d 6f 72 79 0a   blob of memory.
1a20: 20 20 2a 2a 20 72 65 71 75 69 72 65 64 20 66 6f    ** required fo
1a30: 72 20 74 68 69 73 20 56 64 62 65 43 75 72 73 6f  r this VdbeCurso
1a40: 72 20 73 74 72 75 63 74 75 72 65 2e 20 49 74 20  r structure. It 
1a50: 69 73 20 63 6f 6e 76 65 6e 69 65 6e 74 20 74 6f  is convenient to
1a60: 20 75 73 65 20 61 20 0a 20 20 2a 2a 20 76 64 62   use a .  ** vdb
1a70: 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 6f  e memory cell to
1a80: 20 6d 61 6e 61 67 65 20 74 68 65 20 6d 65 6d 6f   manage the memo
1a90: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65  ry allocation re
1aa0: 71 75 69 72 65 64 20 66 6f 72 20 61 0a 20 20 2a  quired for a.  *
1ab0: 2a 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  * VdbeCursor str
1ac0: 75 63 74 75 72 65 20 66 6f 72 20 74 68 65 20 66  ucture for the f
1ad0: 6f 6c 6c 6f 77 69 6e 67 20 72 65 61 73 6f 6e 73  ollowing reasons
1ae0: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 2a 20  :.  **.  **   * 
1af0: 53 6f 6d 65 74 69 6d 65 73 20 63 75 72 73 6f 72  Sometimes cursor
1b00: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
1b10: 64 20 66 6f 72 20 61 20 63 6f 75 70 6c 65 20 6f  d for a couple o
1b20: 66 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  f different.  **
1b30: 20 20 20 20 20 70 75 72 70 6f 73 65 73 20 69 6e       purposes in
1b40: 20 61 20 76 64 62 65 20 70 72 6f 67 72 61 6d 2e   a vdbe program.
1b50: 20 54 68 65 20 64 69 66 66 65 72 65 6e 74 20 75   The different u
1b60: 73 65 73 20 6d 69 67 68 74 20 72 65 71 75 69 72  ses might requir
1b70: 65 0a 20 20 2a 2a 20 20 20 20 20 64 69 66 66 65  e.  **     diffe
1b80: 72 65 6e 74 20 73 69 7a 65 64 20 61 6c 6c 6f 63  rent sized alloc
1b90: 61 74 69 6f 6e 73 2e 20 4d 65 6d 6f 72 79 20 63  ations. Memory c
1ba0: 65 6c 6c 73 20 70 72 6f 76 69 64 65 20 67 72 6f  ells provide gro
1bb0: 77 61 62 6c 65 0a 20 20 2a 2a 20 20 20 20 20 61  wable.  **     a
1bc0: 6c 6c 6f 63 61 74 69 6f 6e 73 2e 0a 20 20 2a 2a  llocations..  **
1bd0: 0a 20 20 2a 2a 20 20 20 2a 20 57 68 65 6e 20 75  .  **   * When u
1be0: 73 69 6e 67 20 45 4e 41 42 4c 45 5f 4d 45 4d 4f  sing ENABLE_MEMO
1bf0: 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54 2c 20 6d  RY_MANAGEMENT, m
1c00: 65 6d 6f 72 79 20 63 65 6c 6c 20 62 75 66 66 65  emory cell buffe
1c10: 72 73 20 63 61 6e 0a 20 20 2a 2a 20 20 20 20 20  rs can.  **     
1c20: 62 65 20 66 72 65 65 64 20 6c 61 7a 69 6c 79 20  be freed lazily 
1c30: 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 33 5f  via the sqlite3_
1c40: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 29  release_memory()
1c50: 20 41 50 49 2e 20 54 68 69 73 0a 20 20 2a 2a 20   API. This.  ** 
1c60: 20 20 20 20 6d 69 6e 69 6d 69 7a 65 73 20 74 68      minimizes th
1c70: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 61 6c 6c  e number of mall
1c80: 6f 63 20 63 61 6c 6c 73 20 6d 61 64 65 20 62 79  oc calls made by
1c90: 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 20 20 2a   the system..  *
1ca0: 2a 0a 20 20 2a 2a 20 4d 65 6d 6f 72 79 20 63 65  *.  ** Memory ce
1cb0: 6c 6c 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20  lls for cursors 
1cc0: 61 72 65 20 61 6c 6c 6f 63 61 74 65 64 20 61 74  are allocated at
1cd0: 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68 65 20   the top of the 
1ce0: 61 64 64 72 65 73 73 0a 20 20 2a 2a 20 73 70 61  address.  ** spa
1cf0: 63 65 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 20  ce. Memory cell 
1d00: 28 70 2d 3e 6e 4d 65 6d 29 20 63 6f 72 72 65 73  (p->nMem) corres
1d10: 70 6f 6e 64 73 20 74 6f 20 63 75 72 73 6f 72 20  ponds to cursor 
1d20: 30 2e 20 53 70 61 63 65 20 66 6f 72 0a 20 20 2a  0. Space for.  *
1d30: 2a 20 63 75 72 73 6f 72 20 31 20 69 73 20 6d 61  * cursor 1 is ma
1d40: 6e 61 67 65 64 20 62 79 20 6d 65 6d 6f 72 79 20  naged by memory 
1d50: 63 65 6c 6c 20 28 70 2d 3e 6e 4d 65 6d 2d 31 29  cell (p->nMem-1)
1d60: 2c 20 65 74 63 2e 0a 20 20 2a 2f 0a 20 20 4d 65  , etc..  */.  Me
1d70: 6d 20 2a 70 4d 65 6d 20 3d 20 26 70 2d 3e 61 4d  m *pMem = &p->aM
1d80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d  em[p->nMem-iCur]
1d90: 3b 0a 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a  ;..  int nByte;.
1da0: 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
1db0: 78 20 3d 20 30 3b 0a 20 20 6e 42 79 74 65 20 3d  x = 0;.  nByte =
1dc0: 20 0a 20 20 20 20 20 20 52 4f 55 4e 44 38 28 73   .      ROUND8(s
1dd0: 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72  izeof(VdbeCursor
1de0: 29 29 20 2b 20 32 2a 73 69 7a 65 6f 66 28 75 33  )) + 2*sizeof(u3
1df0: 32 29 2a 6e 46 69 65 6c 64 20 2b 20 0a 20 20 20  2)*nField + .   
1e00: 20 20 20 28 69 73 42 74 72 65 65 43 75 72 73 6f     (isBtreeCurso
1e10: 72 3f 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  r?sqlite3BtreeCu
1e20: 72 73 6f 72 53 69 7a 65 28 29 3a 30 29 3b 0a 0a  rsorSize():0);..
1e30: 20 20 61 73 73 65 72 74 28 20 69 43 75 72 3c 70    assert( iCur<p
1e40: 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
1e50: 66 28 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72  f( p->apCsr[iCur
1e60: 5d 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ] ){.    sqlite3
1e70: 56 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70  VdbeFreeCursor(p
1e80: 2c 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d  , p->apCsr[iCur]
1e90: 29 3b 0a 20 20 20 20 70 2d 3e 61 70 43 73 72 5b  );.    p->apCsr[
1ea0: 69 43 75 72 5d 20 3d 20 30 3b 0a 20 20 7d 0a 20  iCur] = 0;.  }. 
1eb0: 20 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 3d 3d   if( SQLITE_OK==
1ec0: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
1ed0: 6f 77 28 70 4d 65 6d 2c 20 6e 42 79 74 65 2c 20  ow(pMem, nByte, 
1ee0: 30 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43  0) ){.    p->apC
1ef0: 73 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d  sr[iCur] = pCx =
1f00: 20 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d   (VdbeCursor*)pM
1f10: 65 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65  em->z;.    memse
1f20: 74 28 70 43 78 2c 20 30 2c 20 73 69 7a 65 6f 66  t(pCx, 0, sizeof
1f30: 28 56 64 62 65 43 75 72 73 6f 72 29 29 3b 0a 20  (VdbeCursor));. 
1f40: 20 20 20 70 43 78 2d 3e 69 44 62 20 3d 20 69 44     pCx->iDb = iD
1f50: 62 3b 0a 20 20 20 20 70 43 78 2d 3e 6e 46 69 65  b;.    pCx->nFie
1f60: 6c 64 20 3d 20 6e 46 69 65 6c 64 3b 0a 20 20 20  ld = nField;.   
1f70: 20 69 66 28 20 69 73 42 74 72 65 65 43 75 72 73   if( isBtreeCurs
1f80: 6f 72 20 29 7b 0a 20 20 20 20 20 20 70 43 78 2d  or ){.      pCx-
1f90: 3e 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75  >pCursor = (BtCu
1fa0: 72 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20  rsor*).         
1fb0: 20 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38   &pMem->z[ROUND8
1fc0: 28 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73  (sizeof(VdbeCurs
1fd0: 6f 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33  or))+2*sizeof(u3
1fe0: 32 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20  2)*nField];.    
1ff0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75    sqlite3BtreeCu
2000: 72 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 70 43  rsorZero(pCx->pC
2010: 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20  ursor);.    }.  
2020: 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78 3b 0a  }.  return pCx;.
2030: 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20  }../*.** Try to 
2040: 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75 65 20  convert a value 
2050: 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63 20 72  into a numeric r
2060: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 66  epresentation if
2070: 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20 73 6f   we can.** do so
2080: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
2090: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 49   information.  I
20a0: 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 69  n other words, i
20b0: 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a 2a 20  f the string.** 
20c0: 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e 75 6d  looks like a num
20d0: 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 20  ber, convert it 
20e0: 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e 20 20  into a number.  
20f0: 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a 2a  If it does not.*
2100: 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20 6e 75  * look like a nu
2110: 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74 20 61  mber, leave it a
2120: 6c 6f 6e 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  lone..*/.static 
2130: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2140: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2150: 52 65 63 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Rec){.  double r
2160: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2170: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2180: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 69 66 28  pRec->enc;.  if(
2190: 20 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45   (pRec->flags&ME
21a0: 4d 5f 53 74 72 29 3d 3d 30 20 29 20 72 65 74 75  M_Str)==0 ) retu
21b0: 72 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65  rn;.  if( sqlite
21c0: 33 41 74 6f 46 28 70 52 65 63 2d 3e 7a 2c 20 26  3AtoF(pRec->z, &
21d0: 72 56 61 6c 75 65 2c 20 70 52 65 63 2d 3e 6e 2c  rValue, pRec->n,
21e0: 20 65 6e 63 29 3d 3d 30 20 29 20 72 65 74 75 72   enc)==0 ) retur
21f0: 6e 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69  n;.  if( 0==sqli
2200: 74 65 33 41 74 6f 69 36 34 28 70 52 65 63 2d 3e  te3Atoi64(pRec->
2210: 7a 2c 20 26 69 56 61 6c 75 65 2c 20 70 52 65 63  z, &iValue, pRec
2220: 2d 3e 6e 2c 20 65 6e 63 29 20 29 7b 0a 20 20 20  ->n, enc) ){.   
2230: 20 70 52 65 63 2d 3e 75 2e 69 20 3d 20 69 56 61   pRec->u.i = iVa
2240: 6c 75 65 3b 0a 20 20 20 20 70 52 65 63 2d 3e 66  lue;.    pRec->f
2250: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 49 6e 74 3b  lags |= MEM_Int;
2260: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 52  .  }else{.    pR
2270: 65 63 2d 3e 72 20 3d 20 72 56 61 6c 75 65 3b 0a  ec->r = rValue;.
2280: 20 20 20 20 70 52 65 63 2d 3e 66 6c 61 67 73 20      pRec->flags 
2290: 7c 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 7d  |= MEM_Real;.  }
22a0: 0a 7d 0a 23 64 65 66 69 6e 65 20 41 70 70 6c 79  .}.#define Apply
22b0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
22c0: 58 29 20 20 5c 0a 20 20 20 69 66 28 28 28 58 29  X)  \.   if(((X)
22d0: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
22e0: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 3d 3d 30 29 7b  l|MEM_Int))==0){
22f0: 61 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69  applyNumericAffi
2300: 6e 69 74 79 28 58 29 3b 7d 0a 0a 2f 2a 0a 2a 2a  nity(X);}../*.**
2310: 20 50 72 6f 63 65 73 73 69 6e 67 20 69 73 20 64   Processing is d
2320: 65 74 65 72 6d 69 6e 65 20 62 79 20 74 68 65 20  etermine by the 
2330: 61 66 66 69 6e 69 74 79 20 70 61 72 61 6d 65 74  affinity paramet
2340: 65 72 3a 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  er:.**.** SQLITE
2350: 5f 41 46 46 5f 49 4e 54 45 47 45 52 3a 0a 2a 2a  _AFF_INTEGER:.**
2360: 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c   SQLITE_AFF_REAL
2370: 3a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f  :.** SQLITE_AFF_
2380: 4e 55 4d 45 52 49 43 3a 0a 2a 2a 20 20 20 20 54  NUMERIC:.**    T
2390: 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20 70 52  ry to convert pR
23a0: 65 63 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  ec to an integer
23b0: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
23c0: 6f 72 20 61 20 0a 2a 2a 20 20 20 20 66 6c 6f 61  or a .**    floa
23d0: 74 69 6e 67 2d 70 6f 69 6e 74 20 72 65 70 72 65  ting-point repre
23e0: 73 65 6e 74 61 74 69 6f 6e 20 69 66 20 61 6e 20  sentation if an 
23f0: 69 6e 74 65 67 65 72 20 72 65 70 72 65 73 65 6e  integer represen
2400: 74 61 74 69 6f 6e 0a 2a 2a 20 20 20 20 69 73 20  tation.**    is 
2410: 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 20 20 4e  not possible.  N
2420: 6f 74 65 20 74 68 61 74 20 74 68 65 20 69 6e 74  ote that the int
2430: 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61 74  eger representat
2440: 69 6f 6e 20 69 73 0a 2a 2a 20 20 20 20 61 6c 77  ion is.**    alw
2450: 61 79 73 20 70 72 65 66 65 72 72 65 64 2c 20 65  ays preferred, e
2460: 76 65 6e 20 69 66 20 74 68 65 20 61 66 66 69 6e  ven if the affin
2470: 69 74 79 20 69 73 20 52 45 41 4c 2c 20 62 65 63  ity is REAL, bec
2480: 61 75 73 65 0a 2a 2a 20 20 20 20 61 6e 20 69 6e  ause.**    an in
2490: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24a0: 74 69 6f 6e 20 69 73 20 6d 6f 72 65 20 73 70 61  tion is more spa
24b0: 63 65 20 65 66 66 69 63 69 65 6e 74 20 6f 6e 20  ce efficient on 
24c0: 64 69 73 6b 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49  disk..**.** SQLI
24d0: 54 45 5f 41 46 46 5f 54 45 58 54 3a 0a 2a 2a 20  TE_AFF_TEXT:.** 
24e0: 20 20 20 43 6f 6e 76 65 72 74 20 70 52 65 63 20     Convert pRec 
24f0: 74 6f 20 61 20 74 65 78 74 20 72 65 70 72 65 73  to a text repres
2500: 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  entation..**.** 
2510: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e 45 3a  SQLITE_AFF_NONE:
2520: 0a 2a 2a 20 20 20 20 4e 6f 2d 6f 70 2e 20 20 70  .**    No-op.  p
2530: 52 65 63 20 69 73 20 75 6e 63 68 61 6e 67 65 64  Rec is unchanged
2540: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
2550: 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a   applyAffinity(.
2560: 20 20 4d 65 6d 20 2a 70 52 65 63 2c 20 20 20 20    Mem *pRec,    
2570: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 76 61 6c        /* The val
2580: 75 65 20 74 6f 20 61 70 70 6c 79 20 61 66 66 69  ue to apply affi
2590: 6e 69 74 79 20 74 6f 20 2a 2f 0a 20 20 63 68 61  nity to */.  cha
25a0: 72 20 61 66 66 69 6e 69 74 79 2c 20 20 20 20 20  r affinity,     
25b0: 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79   /* The affinity
25c0: 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64 20 2a   to be applied *
25d0: 2f 0a 20 20 75 38 20 65 6e 63 20 20 20 20 20 20  /.  u8 enc      
25e0: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 74          /* Use t
25f0: 68 69 73 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  his text encodin
2600: 67 20 2a 2f 0a 29 7b 0a 20 20 69 66 28 20 61 66  g */.){.  if( af
2610: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2620: 46 46 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 2f  FF_TEXT ){.    /
2630: 2a 20 4f 6e 6c 79 20 61 74 74 65 6d 70 74 20 74  * Only attempt t
2640: 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f  he conversion to
2650: 20 54 45 58 54 20 69 66 20 74 68 65 72 65 20 69   TEXT if there i
2660: 73 20 61 6e 20 69 6e 74 65 67 65 72 20 6f 72 20  s an integer or 
2670: 72 65 61 6c 0a 20 20 20 20 2a 2a 20 72 65 70 72  real.    ** repr
2680: 65 73 65 6e 74 61 74 69 6f 6e 20 28 62 6c 6f 62  esentation (blob
2690: 20 61 6e 64 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74   and NULL do not
26a0: 20 67 65 74 20 63 6f 6e 76 65 72 74 65 64 29 20   get converted) 
26b0: 62 75 74 20 6e 6f 20 73 74 72 69 6e 67 0a 20 20  but no string.  
26c0: 20 20 2a 2a 20 72 65 70 72 65 73 65 6e 74 61 74    ** representat
26d0: 69 6f 6e 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20  ion..    */.    
26e0: 69 66 28 20 30 3d 3d 28 70 52 65 63 2d 3e 66 6c  if( 0==(pRec->fl
26f0: 61 67 73 26 4d 45 4d 5f 53 74 72 29 20 26 26 20  ags&MEM_Str) && 
2700: 28 70 52 65 63 2d 3e 66 6c 61 67 73 26 28 4d 45  (pRec->flags&(ME
2710: 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e 74 29 29  M_Real|MEM_Int))
2720: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
2730: 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66  3VdbeMemStringif
2740: 79 28 70 52 65 63 2c 20 65 6e 63 29 3b 0a 20 20  y(pRec, enc);.  
2750: 20 20 7d 0a 20 20 20 20 70 52 65 63 2d 3e 66 6c    }.    pRec->fl
2760: 61 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 52 65 61  ags &= ~(MEM_Rea
2770: 6c 7c 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65  l|MEM_Int);.  }e
2780: 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
2790: 21 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 4f 4e  !=SQLITE_AFF_NON
27a0: 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  E ){.    assert(
27b0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
27c0: 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 7c 7c  E_AFF_INTEGER ||
27d0: 20 61 66 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54   affinity==SQLIT
27e0: 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20 20 20 20  E_AFF_REAL.     
27f0: 20 20 20 20 20 20 20 20 7c 7c 20 61 66 66 69 6e          || affin
2800: 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f  ity==SQLITE_AFF_
2810: 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 20 20 41  NUMERIC );.    A
2820: 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
2830: 69 74 79 28 70 52 65 63 29 3b 0a 20 20 20 20 69  ity(pRec);.    i
2840: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2850: 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20 20   MEM_Real ){.   
2860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e     sqlite3VdbeIn
2870: 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70 52  tegerAffinity(pR
2880: 65 63 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  ec);.    }.  }.}
2890: 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 63  ../*.** Try to c
28a0: 6f 6e 76 65 72 74 20 74 68 65 20 74 79 70 65 20  onvert the type 
28b0: 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 61 72  of a function ar
28c0: 67 75 6d 65 6e 74 20 6f 72 20 61 20 72 65 73 75  gument or a resu
28d0: 6c 74 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 69 6e 74  lt column.** int
28e0: 6f 20 61 20 6e 75 6d 65 72 69 63 20 72 65 70 72  o a numeric repr
28f0: 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 55 73 65  esentation.  Use
2900: 20 65 69 74 68 65 72 20 49 4e 54 45 47 45 52 20   either INTEGER 
2910: 6f 72 20 52 45 41 4c 20 77 68 69 63 68 65 76 65  or REAL whicheve
2920: 72 0a 2a 2a 20 69 73 20 61 70 70 72 6f 70 72 69  r.** is appropri
2930: 61 74 65 2e 20 20 42 75 74 20 6f 6e 6c 79 20 64  ate.  But only d
2940: 6f 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e  o the conversion
2950: 20 69 66 20 69 74 20 69 73 20 70 6f 73 73 69 62   if it is possib
2960: 6c 65 20 77 69 74 68 6f 75 74 0a 2a 2a 20 6c 6f  le without.** lo
2970: 73 73 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f  ss of informatio
2980: 6e 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  n and return the
2990: 20 72 65 76 69 73 65 64 20 74 79 70 65 20 6f 66   revised type of
29a0: 20 74 68 65 20 61 72 67 75 6d 65 6e 74 2e 0a 2a   the argument..*
29b0: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 5f 76 61  /.int sqlite3_va
29c0: 6c 75 65 5f 6e 75 6d 65 72 69 63 5f 74 79 70 65  lue_numeric_type
29d0: 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a  (sqlite3_value *
29e0: 70 56 61 6c 29 7b 0a 20 20 69 6e 74 20 65 54 79  pVal){.  int eTy
29f0: 70 65 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c  pe = sqlite3_val
2a00: 75 65 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20  ue_type(pVal);. 
2a10: 20 69 66 28 20 65 54 79 70 65 3d 3d 53 51 4c 49   if( eType==SQLI
2a20: 54 45 5f 54 45 58 54 20 29 7b 0a 20 20 20 20 4d  TE_TEXT ){.    M
2a30: 65 6d 20 2a 70 4d 65 6d 20 3d 20 28 4d 65 6d 2a  em *pMem = (Mem*
2a40: 29 70 56 61 6c 3b 0a 20 20 20 20 61 70 70 6c 79  )pVal;.    apply
2a50: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2a60: 70 4d 65 6d 29 3b 0a 20 20 20 20 65 54 79 70 65  pMem);.    eType
2a70: 20 3d 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65   = sqlite3_value
2a80: 5f 74 79 70 65 28 70 56 61 6c 29 3b 0a 20 20 7d  _type(pVal);.  }
2a90: 0a 20 20 72 65 74 75 72 6e 20 65 54 79 70 65 3b  .  return eType;
2aa0: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74  .}../*.** Export
2ab0: 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 61 70  ed version of ap
2ac0: 70 6c 79 41 66 66 69 6e 69 74 79 28 29 2e 20 54  plyAffinity(). T
2ad0: 68 69 73 20 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e  his one works on
2ae0: 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c   sqlite3_value*,
2af0: 20 0a 2a 2a 20 6e 6f 74 20 74 68 65 20 69 6e 74   .** not the int
2b00: 65 72 6e 61 6c 20 4d 65 6d 2a 20 74 79 70 65 2e  ernal Mem* type.
2b10: 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .*/.void sqlite3
2b20: 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69 6e 69  ValueApplyAffini
2b30: 74 79 28 0a 20 20 73 71 6c 69 74 65 33 5f 76 61  ty(.  sqlite3_va
2b40: 6c 75 65 20 2a 70 56 61 6c 2c 20 0a 20 20 75 38  lue *pVal, .  u8
2b50: 20 61 66 66 69 6e 69 74 79 2c 20 0a 20 20 75 38   affinity, .  u8
2b60: 20 65 6e 63 0a 29 7b 0a 20 20 61 70 70 6c 79 41   enc.){.  applyA
2b70: 66 66 69 6e 69 74 79 28 28 4d 65 6d 20 2a 29 70  ffinity((Mem *)p
2b80: 56 61 6c 2c 20 61 66 66 69 6e 69 74 79 2c 20 65  Val, affinity, e
2b90: 6e 63 29 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65  nc);.}../*.** Re
2ba0: 74 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63  turn the numeric
2bb0: 20 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20   type for pMem, 
2bc0: 65 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f  either MEM_Int o
2bd0: 72 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f  r MEM_Real or bo
2be0: 74 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20  th or.** none.  
2bf0: 0a 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70  .**.** Unlike ap
2c00: 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
2c10: 74 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69  ty(), this routi
2c20: 6e 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69  ne does not modi
2c30: 66 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a  fy pMem->flags..
2c40: 2a 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73  ** But it does s
2c50: 65 74 20 70 4d 65 6d 2d 3e 72 20 61 6e 64 20 70  et pMem->r and p
2c60: 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70 72  Mem->u.i appropr
2c70: 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  iately..*/.stati
2c80: 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79 70  c u16 numericTyp
2c90: 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20 20  e(Mem *pMem){.  
2ca0: 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  if( pMem->flags 
2cb0: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
2cc0: 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74 75  eal) ){.    retu
2cd0: 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  rn pMem->flags &
2ce0: 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
2cf0: 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70  al);.  }.  if( p
2d00: 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45  Mem->flags & (ME
2d10: 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20  M_Str|MEM_Blob) 
2d20: 29 7b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74  ){.    if( sqlit
2d30: 65 33 41 74 6f 46 28 70 4d 65 6d 2d 3e 7a 2c 20  e3AtoF(pMem->z, 
2d40: 26 70 4d 65 6d 2d 3e 72 2c 20 70 4d 65 6d 2d 3e  &pMem->r, pMem->
2d50: 6e 2c 20 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 30  n, pMem->enc)==0
2d60: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
2d70: 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66   0;.    }.    if
2d80: 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28  ( sqlite3Atoi64(
2d90: 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e  pMem->z, &pMem->
2da0: 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d  u.i, pMem->n, pM
2db0: 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49 54 45  em->enc)==SQLITE
2dc0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74  _OK ){.      ret
2dd0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  urn MEM_Int;.   
2de0: 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 20 4d 45   }.    return ME
2df0: 4d 5f 52 65 61 6c 3b 0a 20 20 7d 0a 20 20 72 65  M_Real;.  }.  re
2e00: 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64 65  turn 0;.}..#ifde
2e10: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
2e20: 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69 63  *.** Write a nic
2e30: 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73 65  e string represe
2e40: 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  ntation of the c
2e50: 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c 20  ontents of cell 
2e60: 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75 66  pMem.** into buf
2e70: 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74 68  fer zBuf, length
2e80: 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20 73   nBuf..*/.void s
2e90: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
2ea0: 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70 4d  ttyPrint(Mem *pM
2eb0: 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29 7b  em, char *zBuf){
2ec0: 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d 20  .  char *zCsr = 
2ed0: 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d 20  zBuf;.  int f = 
2ee0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20 20  pMem->flags;..  
2ef0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
2f00: 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d 65  r *const encname
2f10: 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22 28  s[] = {"(X)", "(
2f20: 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20 22  8)", "(16LE)", "
2f30: 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66 28  (16BE)"};..  if(
2f40: 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a 20   f&MEM_Blob ){. 
2f50: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63 68     int i;.    ch
2f60: 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66 20  ar c;.    if( f 
2f70: 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20 20  & MEM_Dyn ){.   
2f80: 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20 20     c = 'z';.    
2f90: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
2fa0: 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 45  MEM_Static|MEM_E
2fb0: 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20  phem))==0 );.   
2fc0: 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d   }else if( f & M
2fd0: 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20 20  EM_Static ){.   
2fe0: 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20 20     c = 't';.    
2ff0: 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20 28    assert( (f & (
3000: 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68 65  MEM_Dyn|MEM_Ephe
3010: 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65  m))==0 );.    }e
3020: 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d 5f  lse if( f & MEM_
3030: 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20 63  Ephem ){.      c
3040: 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73   = 'e';.      as
3050: 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f  sert( (f & (MEM_
3060: 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29  Static|MEM_Dyn))
3070: 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65  ==0 );.    }else
3080: 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27 3b  {.      c = 's';
3090: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
30a0: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
30b0: 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63 29  , zCsr, "%c", c)
30c0: 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73 71  ;.    zCsr += sq
30d0: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 43  lite3Strlen30(zC
30e0: 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  sr);.    sqlite3
30f0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a  _snprintf(100, z
3100: 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65 6d  Csr, "%d[", pMem
3110: 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  ->n);.    zCsr +
3120: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3130: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f 72  0(zCsr);.    for
3140: 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69 3c  (i=0; i<16 && i<
3150: 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a 20  pMem->n; i++){. 
3160: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70       sqlite3_snp
3170: 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72 2c  rintf(100, zCsr,
3180: 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29 70   "%02X", ((int)p
3190: 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46 46  Mem->z[i] & 0xFF
31a0: 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20 2b  ));.      zCsr +
31b0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
31c0: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a 20  0(zCsr);.    }. 
31d0: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31 36     for(i=0; i<16
31e0: 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20 69   && i<pMem->n; i
31f0: 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72 20  ++){.      char 
3200: 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b 0a  z = pMem->z[i];.
3210: 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20 7c        if( z<32 |
3220: 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72 2b  | z>126 ) *zCsr+
3230: 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20 65  + = '.';.      e
3240: 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a 3b  lse *zCsr++ = z;
3250: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c 69  .    }..    sqli
3260: 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30  te3_snprintf(100
3270: 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20 65  , zCsr, "]%s", e
3280: 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65 6e  ncnames[pMem->en
3290: 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d  c]);.    zCsr +=
32a0: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
32b0: 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28 20  (zCsr);.    if( 
32c0: 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a  f & MEM_Zero ){.
32d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
32e0: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
32f0: 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75 2e  ,"+%dz",pMem->u.
3300: 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a 43  nZero);.      zC
3310: 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74 72  sr += sqlite3Str
3320: 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20 20  len30(zCsr);.   
3330: 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20 27   }.    *zCsr = '
3340: 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28  \0';.  }else if(
3350: 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b 0a   f & MEM_Str ){.
3360: 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20 20      int j, k;.  
3370: 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27 3b    zBuf[0] = ' ';
3380: 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45 4d  .    if( f & MEM
3390: 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a 42  _Dyn ){.      zB
33a0: 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20 20  uf[1] = 'z';.   
33b0: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
33c0: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
33d0: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
33e0: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
33f0: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3400: 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27 74      zBuf[1] = 't
3410: 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ';.      assert(
3420: 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c 4d   (f & (MEM_Dyn|M
3430: 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b  EM_Ephem))==0 );
3440: 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66  .    }else if( f
3450: 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b 0a   & MEM_Ephem ){.
3460: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3470: 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72  'e';.      asser
3480: 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74 61  t( (f & (MEM_Sta
3490: 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d 30  tic|MEM_Dyn))==0
34a0: 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   );.    }else{. 
34b0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
34c0: 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b 20  s';.    }.    k 
34d0: 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
34e0: 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 26  _snprintf(100, &
34f0: 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20 70  zBuf[k], "%d", p
3500: 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20 2b  Mem->n);.    k +
3510: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3520: 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20  0(&zBuf[k]);.   
3530: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b 27   zBuf[k++] = '['
3540: 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a  ;.    for(j=0; j
3550: 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e 6e  <15 && j<pMem->n
3560: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75 38  ; j++){.      u8
3570: 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d 3b   c = pMem->z[j];
3580: 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30 78  .      if( c>=0x
3590: 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b 0a  20 && c<0x7f ){.
35a0: 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b 2b          zBuf[k++
35b0: 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65 6c  ] = c;.      }el
35c0: 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75 66  se{.        zBuf
35d0: 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20 20  [k++] = '.';.   
35e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 7a     }.    }.    z
35f0: 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b 0a  Buf[k++] = ']';.
3600: 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70 72      sqlite3_snpr
3610: 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b 6b  intf(100,&zBuf[k
3620: 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d  ], encnames[pMem
3630: 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20 2b  ->enc]);.    k +
3640: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3650: 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20 20  0(&zBuf[k]);.   
3660: 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b 0a   zBuf[k++] = 0;.
3670: 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69    }.}.#endif..#i
3680: 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
3690: 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74 68  G./*.** Print th
36a0: 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65 67  e value of a reg
36b0: 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69 6e  ister for tracin
36c0: 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a 73  g purposes:.*/.s
36d0: 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54 72  tatic void memTr
36e0: 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70 29  acePrint(Mem *p)
36f0: 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  {.  if( p->flags
3700: 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64   & MEM_Undefined
3710: 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22   ){.    printf("
3720: 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20 20   undefined");.  
3730: 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61  }else if( p->fla
3740: 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
3750: 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e 55  .    printf(" NU
3760: 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69 66  LL");.  }else if
3770: 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28 4d  ( (p->flags & (M
3780: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29 29  EM_Int|MEM_Str))
3790: 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53  ==(MEM_Int|MEM_S
37a0: 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e 74  tr) ){.    print
37b0: 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70 2d  f(" si:%lld", p-
37c0: 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20 69  >u.i);.  }else i
37d0: 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d 45  f( p->flags & ME
37e0: 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72 69  M_Int ){.    pri
37f0: 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20 70  ntf(" i:%lld", p
3800: 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66 20  ->u.i);.#ifndef 
3810: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
3820: 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65 6c  TING_POINT.  }el
3830: 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73 20  se if( p->flags 
3840: 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20 20  & MEM_Real ){.  
3850: 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67 22    printf(" r:%g"
3860: 2c 20 70 2d 3e 72 29 3b 0a 23 65 6e 64 69 66 0a  , p->r);.#endif.
3870: 20 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66    }else if( p->f
3880: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
3890: 74 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  t ){.    printf(
38a0: 22 20 28 72 6f 77 73 65 74 29 22 29 3b 0a 20 20  " (rowset)");.  
38b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68 61 72 20  }else{.    char 
38c0: 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20 20 20 73  zBuf[200];.    s
38d0: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72 65  qlite3VdbeMemPre
38e0: 74 74 79 50 72 69 6e 74 28 70 2c 20 7a 42 75 66  ttyPrint(p, zBuf
38f0: 29 3b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20  );.    printf(" 
3900: 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20 20 7d 0a  %s", zBuf);.  }.
3910: 7d 0a 73 74 61 74 69 63 20 76 6f 69 64 20 72 65  }.static void re
3920: 67 69 73 74 65 72 54 72 61 63 65 28 69 6e 74 20  gisterTrace(int 
3930: 69 52 65 67 2c 20 4d 65 6d 20 2a 70 29 7b 0a 20  iReg, Mem *p){. 
3940: 20 70 72 69 6e 74 66 28 22 52 45 47 5b 25 64 5d   printf("REG[%d]
3950: 20 3d 20 22 2c 20 69 52 65 67 29 3b 0a 20 20 6d   = ", iReg);.  m
3960: 65 6d 54 72 61 63 65 50 72 69 6e 74 28 70 29 3b  emTracePrint(p);
3970: 0a 20 20 70 72 69 6e 74 66 28 22 5c 6e 22 29 3b  .  printf("\n");
3980: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  .}.#endif..#ifde
3990: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
39a0: 20 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45    define REGISTE
39b0: 52 5f 54 52 41 43 45 28 52 2c 4d 29 20 69 66 28  R_TRACE(R,M) if(
39c0: 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45  db->flags&SQLITE
39d0: 5f 56 64 62 65 54 72 61 63 65 29 72 65 67 69 73  _VdbeTrace)regis
39e0: 74 65 72 54 72 61 63 65 28 52 2c 4d 29 0a 23 65  terTrace(R,M).#e
39f0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 52 45  lse.#  define RE
3a00: 47 49 53 54 45 52 5f 54 52 41 43 45 28 52 2c 4d  GISTER_TRACE(R,M
3a10: 29 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 64 65  ).#endif...#ifde
3a20: 66 20 56 44 42 45 5f 50 52 4f 46 49 4c 45 0a 0a  f VDBE_PROFILE..
3a30: 2f 2a 20 0a 2a 2a 20 68 77 74 69 6d 65 2e 68 20  /* .** hwtime.h 
3a40: 63 6f 6e 74 61 69 6e 73 20 69 6e 6c 69 6e 65 20  contains inline 
3a50: 61 73 73 65 6d 62 6c 65 72 20 63 6f 64 65 20 66  assembler code f
3a60: 6f 72 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  or implementing 
3a70: 0a 2a 2a 20 68 69 67 68 2d 70 65 72 66 6f 72 6d  .** high-perform
3a80: 61 6e 63 65 20 74 69 6d 69 6e 67 20 72 6f 75 74  ance timing rout
3a90: 69 6e 65 73 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64  ines..*/.#includ
3aa0: 65 20 22 68 77 74 69 6d 65 2e 68 22 0a 0a 23 65  e "hwtime.h"..#e
3ab0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 4e 44  ndif..#ifndef ND
3ac0: 45 42 55 47 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  EBUG./*.** This 
3ad0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f 6e 6c 79  function is only
3ae0: 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
3af0: 68 69 6e 20 61 6e 20 61 73 73 65 72 74 28 29 20  hin an assert() 
3b00: 65 78 70 72 65 73 73 69 6f 6e 2e 20 49 74 0a 2a  expression. It.*
3b10: 2a 20 63 68 65 63 6b 73 20 74 68 61 74 20 74 68  * checks that th
3b20: 65 20 73 71 6c 69 74 65 33 2e 6e 54 72 61 6e 73  e sqlite3.nTrans
3b30: 61 63 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20  action variable 
3b40: 69 73 20 63 6f 72 72 65 63 74 6c 79 20 73 65 74  is correctly set
3b50: 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65   to.** the numbe
3b60: 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61 63  r of non-transac
3b70: 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73 20  tion savepoints 
3b80: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 74 68 65  currently in the
3b90: 20 0a 2a 2a 20 6c 69 6e 6b 65 64 20 6c 69 73 74   .** linked list
3ba0: 20 73 74 61 72 74 69 6e 67 20 61 74 20 73 71 6c   starting at sql
3bb0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
3bc0: 0a 2a 2a 20 0a 2a 2a 20 55 73 61 67 65 3a 0a 2a  .** .** Usage:.*
3bd0: 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
3be0: 20 63 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43   checkSavepointC
3bf0: 6f 75 6e 74 28 64 62 29 20 29 3b 0a 2a 2f 0a 73  ount(db) );.*/.s
3c00: 74 61 74 69 63 20 69 6e 74 20 63 68 65 63 6b 53  tatic int checkS
3c10: 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 73 71  avepointCount(sq
3c20: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 6e  lite3 *db){.  in
3c30: 74 20 6e 20 3d 20 30 3b 0a 20 20 53 61 76 65 70  t n = 0;.  Savep
3c40: 6f 69 6e 74 20 2a 70 3b 0a 20 20 66 6f 72 28 70  oint *p;.  for(p
3c50: 3d 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b  =db->pSavepoint;
3c60: 20 70 3b 20 70 3d 70 2d 3e 70 4e 65 78 74 29 20   p; p=p->pNext) 
3c70: 6e 2b 2b 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  n++;.  assert( n
3c80: 3d 3d 28 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  ==(db->nSavepoin
3c90: 74 20 2b 20 64 62 2d 3e 69 73 54 72 61 6e 73 61  t + db->isTransa
3ca0: 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 29 20  ctionSavepoint) 
3cb0: 29 3b 0a 20 20 72 65 74 75 72 6e 20 31 3b 0a 7d  );.  return 1;.}
3cc0: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
3cd0: 45 78 65 63 75 74 65 20 61 73 20 6d 75 63 68 20  Execute as much 
3ce0: 6f 66 20 61 20 56 44 42 45 20 70 72 6f 67 72 61  of a VDBE progra
3cf0: 6d 20 61 73 20 77 65 20 63 61 6e 2e 0a 2a 2a 20  m as we can..** 
3d00: 54 68 69 73 20 69 73 20 74 68 65 20 63 6f 72 65  This is the core
3d10: 20 6f 66 20 73 71 6c 69 74 65 33 5f 73 74 65 70   of sqlite3_step
3d20: 28 29 2e 20 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c  ().  .*/.int sql
3d30: 69 74 65 33 56 64 62 65 45 78 65 63 28 0a 20 20  ite3VdbeExec(.  
3d40: 56 64 62 65 20 2a 70 20 20 20 20 20 20 20 20 20  Vdbe *p         
3d50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
3d60: 65 20 56 44 42 45 20 2a 2f 0a 29 7b 0a 20 20 69  e VDBE */.){.  i
3d70: 6e 74 20 70 63 3d 30 3b 20 20 20 20 20 20 20 20  nt pc=0;        
3d80: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
3d90: 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72   program counter
3da0: 20 2a 2f 0a 20 20 4f 70 20 2a 61 4f 70 20 3d 20   */.  Op *aOp = 
3db0: 70 2d 3e 61 4f 70 3b 20 20 20 20 20 20 20 20 20  p->aOp;         
3dc0: 20 2f 2a 20 43 6f 70 79 20 6f 66 20 70 2d 3e 61   /* Copy of p->a
3dd0: 4f 70 20 2a 2f 0a 20 20 4f 70 20 2a 70 4f 70 3b  Op */.  Op *pOp;
3de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3df0: 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 6f 70     /* Current op
3e00: 65 72 61 74 69 6f 6e 20 2a 2f 0a 20 20 69 6e 74  eration */.  int
3e10: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b   rc = SQLITE_OK;
3e20: 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65          /* Value
3e30: 20 74 6f 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20   to return */.  
3e40: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 2d  sqlite3 *db = p-
3e50: 3e 64 62 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  >db;       /* Th
3e60: 65 20 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20  e database */.  
3e70: 75 38 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  u8 resetSchemaOn
3e80: 46 61 75 6c 74 20 3d 20 30 3b 20 2f 2a 20 52 65  Fault = 0; /* Re
3e90: 73 65 74 20 73 63 68 65 6d 61 20 61 66 74 65 72  set schema after
3ea0: 20 61 6e 20 65 72 72 6f 72 20 69 66 20 70 6f 73   an error if pos
3eb0: 69 74 69 76 65 20 2a 2f 0a 20 20 75 38 20 65 6e  itive */.  u8 en
3ec0: 63 6f 64 69 6e 67 20 3d 20 45 4e 43 28 64 62 29  coding = ENC(db)
3ed0: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74  ;     /* The dat
3ee0: 61 62 61 73 65 20 65 6e 63 6f 64 69 6e 67 20 2a  abase encoding *
3ef0: 2f 0a 20 20 69 6e 74 20 69 43 6f 6d 70 61 72 65  /.  int iCompare
3f00: 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 20 2f   = 0;          /
3f10: 2a 20 52 65 73 75 6c 74 20 6f 66 20 6c 61 73 74  * Result of last
3f20: 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70 65 72   OP_Compare oper
3f30: 61 74 69 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69 67  ation */.  unsig
3f40: 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30 3b  ned nVmStep = 0;
3f50: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
3f60: 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  of virtual machi
3f70: 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66 6e  ne steps */.#ifn
3f80: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
3f90: 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43  PROGRESS_CALLBAC
3fa0: 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72  K.  unsigned nPr
3fb0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30 3b  ogressLimit = 0;
3fc0: 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67 72  /* Invoke xProgr
3fd0: 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53 74  ess() when nVmSt
3fe0: 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73 20  ep reaches this 
3ff0: 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d 20  */.#endif.  Mem 
4000: 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b  *aMem = p->aMem;
4010: 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f         /* Copy o
4020: 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20 4d  f p->aMem */.  M
4030: 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20 20  em *pIn1 = 0;   
4040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
4050: 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20 2a   input operand *
4060: 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d 20  /.  Mem *pIn2 = 
4070: 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  0;             /
4080: 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65 72  * 2nd input oper
4090: 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49  and */.  Mem *pI
40a0: 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20  n3 = 0;         
40b0: 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75 74      /* 3rd input
40c0: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d 65   operand */.  Me
40d0: 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20 20  m *pOut = 0;    
40e0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74 70           /* Outp
40f0: 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ut operand */.  
4100: 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d 20  int *aPermute = 
4110: 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 65  0;         /* Pe
4120: 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f 6c  rmutation of col
4130: 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d 70  umns for OP_Comp
4140: 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73  are */.  i64 las
4150: 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61 73  tRowid = db->las
4160: 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76 65  tRowid;  /* Save
4170: 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6c  d value of the l
4180: 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49 44  ast insert ROWID
4190: 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45 5f   */.#ifdef VDBE_
41a0: 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73 74  PROFILE.  u64 st
41b0: 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  art;            
41c0: 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f 63       /* CPU cloc
41d0: 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72 74  k count at start
41e0: 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 65   of opcode */.#e
41f0: 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53 45  ndif.  /*** INSE
4200: 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20 48  RT STACK UNION H
4210: 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73 65  ERE ***/..  asse
4220: 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56 44  rt( p->magic==VD
4230: 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b 20  BE_MAGIC_RUN ); 
4240: 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65 70   /* sqlite3_step
4250: 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69 73  () verifies this
4260: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64 62   */.  sqlite3Vdb
4270: 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66 28  eEnter(p);.  if(
4280: 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4e   p->rc==SQLITE_N
4290: 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  OMEM ){.    /* T
42a0: 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20 61  his happens if a
42b0: 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64 65   malloc() inside
42c0: 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69 74   a call to sqlit
42d0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 29  e3_column_text()
42e0: 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74   or.    ** sqlit
42f0: 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31 36  e3_column_text16
4300: 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a 20  () failed.  */. 
4310: 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
4320: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 2d    }.  assert( p-
4330: 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c  >rc==SQLITE_OK |
4340: 7c 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  | p->rc==SQLITE_
4350: 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65 72 74  BUSY );.  assert
4360: 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 7c  ( p->bIsReader |
4370: 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21 3d 30  | p->readOnly!=0
4380: 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 53 51   );.  p->rc = SQ
4390: 4c 49 54 45 5f 4f 4b 3b 0a 20 20 70 2d 3e 69 43  LITE_OK;.  p->iC
43a0: 75 72 72 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a  urrentTime = 0;.
43b0: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 65 78 70    assert( p->exp
43c0: 6c 61 69 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e  lain==0 );.  p->
43d0: 70 52 65 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a  pResultSet = 0;.
43e0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
43f0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 69  r.nBusy = 0;.  i
4400: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
4410: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
4420: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
4430: 72 72 75 70 74 3b 0a 20 20 73 71 6c 69 74 65 33  rrupt;.  sqlite3
4440: 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c 28 70  VdbeIOTraceSql(p
4450: 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
4460: 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f  E_OMIT_PROGRESS_
4470: 43 41 4c 4c 42 41 43 4b 0a 20 20 69 66 28 20 64  CALLBACK.  if( d
4480: 62 2d 3e 78 50 72 6f 67 72 65 73 73 20 29 7b 0a  b->xProgress ){.
4490: 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c 20      assert( 0 < 
44a0: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
44b0: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
44c0: 73 4c 69 6d 69 74 20 3d 20 28 75 6e 73 69 67 6e  sLimit = (unsign
44d0: 65 64 29 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53  ed)p->aCounter[S
44e0: 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53  QLITE_STMTSTATUS
44f0: 5f 56 4d 5f 53 54 45 50 5d 3b 0a 20 20 20 20 69  _VM_STEP];.    i
4500: 66 28 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  f( nProgressLimi
4510: 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 6e 50  t==0 ){.      nP
4520: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64  rogressLimit = d
4530: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b  b->nProgressOps;
4540: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
4550: 20 20 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74    nProgressLimit
4560: 20 25 3d 20 28 75 6e 73 69 67 6e 65 64 29 64 62   %= (unsigned)db
4570: 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 0a  ->nProgressOps;.
4580: 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66      }.  }.#endif
4590: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
45a0: 45 42 55 47 0a 20 20 73 71 6c 69 74 65 33 42 65  EBUG.  sqlite3Be
45b0: 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28  ginBenignMalloc(
45c0: 29 3b 0a 20 20 69 66 28 20 70 2d 3e 70 63 3d 3d  );.  if( p->pc==
45d0: 30 0a 20 20 20 26 26 20 28 70 2d 3e 64 62 2d 3e  0.   && (p->db->
45e0: 66 6c 61 67 73 20 26 20 28 53 51 4c 49 54 45 5f  flags & (SQLITE_
45f0: 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c 49  VdbeListing|SQLI
4600: 54 45 5f 56 64 62 65 45 51 50 7c 53 51 4c 49 54  TE_VdbeEQP|SQLIT
4610: 45 5f 56 64 62 65 54 72 61 63 65 29 29 21 3d 30  E_VdbeTrace))!=0
4620: 0a 20 20 29 7b 0a 20 20 20 20 69 6e 74 20 69 3b  .  ){.    int i;
4630: 0a 20 20 20 20 69 6e 74 20 6f 6e 63 65 20 3d 20  .    int once = 
4640: 31 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  1;.    sqlite3Vd
4650: 62 65 50 72 69 6e 74 53 71 6c 28 70 29 3b 0a 20  bePrintSql(p);. 
4660: 20 20 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c     if( p->db->fl
4670: 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62  ags & SQLITE_Vdb
4680: 65 4c 69 73 74 69 6e 67 20 29 7b 0a 20 20 20 20  eListing ){.    
4690: 20 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 50    printf("VDBE P
46a0: 72 6f 67 72 61 6d 20 4c 69 73 74 69 6e 67 3a 5c  rogram Listing:\
46b0: 6e 22 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69  n");.      for(i
46c0: 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b  =0; i<p->nOp; i+
46d0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  +){.        sqli
46e0: 74 65 33 56 64 62 65 50 72 69 6e 74 4f 70 28 73  te3VdbePrintOp(s
46f0: 74 64 6f 75 74 2c 20 69 2c 20 26 61 4f 70 5b 69  tdout, i, &aOp[i
4700: 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ]);.      }.    
4710: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
4720: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
4730: 56 64 62 65 45 51 50 20 29 7b 0a 20 20 20 20 20  VdbeEQP ){.     
4740: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e   for(i=0; i<p->n
4750: 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Op; i++){.      
4760: 20 20 69 66 28 20 61 4f 70 5b 69 5d 2e 6f 70 63    if( aOp[i].opc
4770: 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20  ode==OP_Explain 
4780: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
4790: 20 6f 6e 63 65 20 29 20 70 72 69 6e 74 66 28 22   once ) printf("
47a0: 56 44 42 45 20 51 75 65 72 79 20 50 6c 61 6e 3a  VDBE Query Plan:
47b0: 5c 6e 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  \n");.          
47c0: 70 72 69 6e 74 66 28 22 25 73 5c 6e 22 2c 20 61  printf("%s\n", a
47d0: 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b 0a 20 20 20  Op[i].p4.z);.   
47e0: 20 20 20 20 20 20 20 6f 6e 63 65 20 3d 20 30 3b         once = 0;
47f0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
4800: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28   }.    }.    if(
4810: 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20   p->db->flags & 
4820: 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65  SQLITE_VdbeTrace
4830: 20 29 20 20 70 72 69 6e 74 66 28 22 56 44 42 45   )  printf("VDBE
4840: 20 54 72 61 63 65 3a 5c 6e 22 29 3b 0a 20 20 7d   Trace:\n");.  }
4850: 0a 20 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  .  sqlite3EndBen
4860: 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 23 65 6e  ignMalloc();.#en
4870: 64 69 66 0a 20 20 66 6f 72 28 70 63 3d 70 2d 3e  dif.  for(pc=p->
4880: 70 63 3b 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  pc; rc==SQLITE_O
4890: 4b 3b 20 70 63 2b 2b 29 7b 0a 20 20 20 20 61 73  K; pc++){.    as
48a0: 73 65 72 74 28 20 70 63 3e 3d 30 20 26 26 20 70  sert( pc>=0 && p
48b0: 63 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 20 20  c<p->nOp );.    
48c0: 69 66 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61  if( db->mallocFa
48d0: 69 6c 65 64 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  iled ) goto no_m
48e0: 65 6d 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f  em;.#ifdef VDBE_
48f0: 50 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72  PROFILE.    star
4900: 74 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d  t = sqlite3Hwtim
4910: 65 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  e();.#endif.    
4920: 6e 56 6d 53 74 65 70 2b 2b 3b 0a 20 20 20 20 70  nVmStep++;.    p
4930: 4f 70 20 3d 20 26 61 4f 70 5b 70 63 5d 3b 0a 0a  Op = &aOp[pc];..
4940: 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61 6c 6c 6f      /* Only allo
4950: 77 20 74 72 61 63 69 6e 67 20 69 66 20 53 51 4c  w tracing if SQL
4960: 49 54 45 5f 44 45 42 55 47 20 69 73 20 64 65 66  ITE_DEBUG is def
4970: 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66  ined..    */.#if
4980: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
4990: 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61  .    if( db->fla
49a0: 67 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65  gs & SQLITE_Vdbe
49b0: 54 72 61 63 65 20 29 7b 0a 20 20 20 20 20 20 73  Trace ){.      s
49c0: 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74 4f  qlite3VdbePrintO
49d0: 70 28 73 74 64 6f 75 74 2c 20 70 63 2c 20 70 4f  p(stdout, pc, pO
49e0: 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  p);.    }.#endif
49f0: 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a 20  .      ..    /* 
4a00: 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20  Check to see if 
4a10: 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75 6c  we need to simul
4a20: 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70 74  ate an interrupt
4a30: 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61 70  .  This only hap
4a40: 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20 77  pens.    ** if w
4a50: 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61 6c  e have a special
4a60: 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20 20   test build..   
4a70: 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
4a80: 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20 73  E_TEST.    if( s
4a90: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
4aa0: 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20 20  _count>0 ){.    
4ab0: 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72    sqlite3_interr
4ac0: 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20 20  upt_count--;.   
4ad0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69     if( sqlite3_i
4ae0: 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d 3d  nterrupt_count==
4af0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  0 ){.        sql
4b00: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 64  ite3_interrupt(d
4b10: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
4b20: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a  }.#endif..    /*
4b30: 20 4f 6e 20 61 6e 79 20 6f 70 63 6f 64 65 20 77   On any opcode w
4b40: 69 74 68 20 74 68 65 20 22 6f 75 74 32 2d 70 72  ith the "out2-pr
4b50: 65 72 65 6c 65 61 73 65 22 20 74 61 67 2c 20 66  erelease" tag, f
4b60: 72 65 65 20 61 6e 79 0a 20 20 20 20 2a 2a 20 65  ree any.    ** e
4b70: 78 74 65 72 6e 61 6c 20 61 6c 6c 6f 63 61 74 69  xternal allocati
4b80: 6f 6e 73 20 6f 75 74 20 6f 66 20 6d 65 6d 5b 70  ons out of mem[p
4b90: 32 5d 20 61 6e 64 20 73 65 74 20 6d 65 6d 5b 70  2] and set mem[p
4ba0: 32 5d 20 74 6f 20 62 65 0a 20 20 20 20 2a 2a 20  2] to be.    ** 
4bb0: 61 6e 20 75 6e 64 65 66 69 6e 65 64 20 69 6e 74  an undefined int
4bc0: 65 67 65 72 2e 20 20 4f 70 63 6f 64 65 73 20 77  eger.  Opcodes w
4bd0: 69 6c 6c 20 65 69 74 68 65 72 20 66 69 6c 6c 20  ill either fill 
4be0: 69 6e 20 74 68 65 20 69 6e 74 65 67 65 72 0a 20  in the integer. 
4bf0: 20 20 20 2a 2a 20 76 61 6c 75 65 20 6f 72 20 63     ** value or c
4c00: 6f 6e 76 65 72 74 20 6d 65 6d 5b 70 32 5d 20 74  onvert mem[p2] t
4c10: 6f 20 61 20 64 69 66 66 65 72 65 6e 74 20 74 79  o a different ty
4c20: 70 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 61  pe..    */.    a
4c30: 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 66 6c  ssert( pOp->opfl
4c40: 61 67 73 3d 3d 73 71 6c 69 74 65 33 4f 70 63 6f  ags==sqlite3Opco
4c50: 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70 2d 3e  deProperty[pOp->
4c60: 6f 70 63 6f 64 65 5d 20 29 3b 0a 20 20 20 20 69  opcode] );.    i
4c70: 66 28 20 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20  f( pOp->opflags 
4c80: 26 20 4f 50 46 4c 47 5f 4f 55 54 32 5f 50 52 45  & OPFLG_OUT2_PRE
4c90: 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
4ca0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4cb0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
4cc0: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
4cd0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
4ce0: 29 20 29 3b 0a 20 20 20 20 20 20 70 4f 75 74 20  ) );.      pOut 
4cf0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
4d00: 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74  ;.      memAbout
4d10: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
4d20: 29 3b 0a 20 20 20 20 20 20 56 64 62 65 4d 65 6d  );.      VdbeMem
4d30: 52 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20  Release(pOut);. 
4d40: 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73       pOut->flags
4d50: 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20   = MEM_Int;.    
4d60: 7d 0a 0a 20 20 20 20 2f 2a 20 53 61 6e 69 74 79  }..    /* Sanity
4d70: 20 63 68 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68   checking on oth
4d80: 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23  er operands */.#
4d90: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
4da0: 55 47 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d  UG.    if( (pOp-
4db0: 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47  >opflags & OPFLG
4dc0: 5f 49 4e 31 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN1)!=0 ){.    
4dd0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
4de0: 31 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73  1>0 );.      ass
4df0: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28 70  ert( pOp->p1<=(p
4e00: 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
4e10: 72 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  r) );.      asse
4e20: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
4e30: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29  aMem[pOp->p1]) )
4e40: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
4e50: 73 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b  sqlite3VdbeCheck
4e60: 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61  MemInvariants(&a
4e70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 20 29 3b  Mem[pOp->p1]) );
4e80: 0a 20 20 20 20 20 20 52 45 47 49 53 54 45 52 5f  .      REGISTER_
4e90: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 26  TRACE(pOp->p1, &
4ea0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  aMem[pOp->p1]);.
4eb0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 28 70      }.    if( (p
4ec0: 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f 50  Op->opflags & OP
4ed0: 46 4c 47 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20  FLG_IN2)!=0 ){. 
4ee0: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
4ef0: 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20  ->p2>0 );.      
4f00: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c  assert( pOp->p2<
4f10: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
4f20: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 61  rsor) );.      a
4f30: 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
4f40: 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  d(&aMem[pOp->p2]
4f50: 29 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  ) );.      asser
4f60: 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  t( sqlite3VdbeCh
4f70: 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74 73  eckMemInvariants
4f80: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29  (&aMem[pOp->p2])
4f90: 20 29 3b 0a 20 20 20 20 20 20 52 45 47 49 53 54   );.      REGIST
4fa0: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
4fb0: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  , &aMem[pOp->p2]
4fc0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
4fd0: 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26   (pOp->opflags &
4fe0: 20 4f 50 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29   OPFLG_IN3)!=0 )
4ff0: 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
5000: 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20  pOp->p3>0 );.   
5010: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
5020: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
5030: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
5040: 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
5050: 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  alid(&aMem[pOp->
5060: 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 61 73  p3]) );.      as
5070: 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64 62  sert( sqlite3Vdb
5080: 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61  eCheckMemInvaria
5090: 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  nts(&aMem[pOp->p
50a0: 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 52 45 47  3]) );.      REG
50b0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
50c0: 3e 70 33 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p3, &aMem[pOp->
50d0: 70 33 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  p3]);.    }.    
50e0: 69 66 28 20 28 70 4f 70 2d 3e 6f 70 66 6c 61 67  if( (pOp->opflag
50f0: 73 20 26 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21  s & OPFLG_OUT2)!
5100: 3d 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65  =0 ){.      asse
5110: 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
5120: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
5130: 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p2<=(p->nMem
5140: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
5150: 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
5160: 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
5170: 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 7d  pOp->p2]);.    }
5180: 0a 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  .    if( (pOp->o
5190: 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 47 5f 4f  pflags & OPFLG_O
51a0: 55 54 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20  UT3)!=0 ){.     
51b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
51c0: 3e 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  >0 );.      asse
51d0: 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  rt( pOp->p3<=(p-
51e0: 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
51f0: 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
5200: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26  outToChange(p, &
5210: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a  aMem[pOp->p3]);.
5220: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a      }.#endif.  .
5230: 20 20 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d      switch( pOp-
5240: 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f 2a 2a 2a  >opcode ){../***
5250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 57 68  **********.** Wh
52a0: 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73 20 61 20  at follows is a 
52b0: 6d 61 73 73 69 76 65 20 73 77 69 74 63 68 20 73  massive switch s
52c0: 74 61 74 65 6d 65 6e 74 20 77 68 65 72 65 20 65  tatement where e
52d0: 61 63 68 20 63 61 73 65 20 69 6d 70 6c 65 6d 65  ach case impleme
52e0: 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61 72 61 74  nts a.** separat
52f0: 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6e  e instruction in
5300: 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   the virtual mac
5310: 68 69 6e 65 2e 20 20 49 66 20 77 65 20 66 6f 6c  hine.  If we fol
5320: 6c 6f 77 20 74 68 65 20 75 73 75 61 6c 0a 2a 2a  low the usual.**
5330: 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20 63 6f 6e   indentation con
5340: 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63 68 20 63  ventions, each c
5350: 61 73 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  ase should be in
5360: 64 65 6e 74 65 64 20 62 79 20 36 20 73 70 61 63  dented by 6 spac
5370: 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74 68 61 74  es.  But.** that
5380: 20 69 73 20 61 20 6c 6f 74 20 6f 66 20 77 61 73   is a lot of was
5390: 74 65 64 20 73 70 61 63 65 20 6f 6e 20 74 68 65  ted space on the
53a0: 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e 20 20 53   left margin.  S
53b0: 6f 20 74 68 65 20 63 6f 64 65 20 77 69 74 68 69  o the code withi
53c0: 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74 63 68 20  n.** the switch 
53d0: 73 74 61 74 65 6d 65 6e 74 20 77 69 6c 6c 20 62  statement will b
53e0: 72 65 61 6b 20 77 69 74 68 20 63 6f 6e 76 65 6e  reak with conven
53f0: 74 69 6f 6e 20 61 6e 64 20 62 65 20 66 6c 75 73  tion and be flus
5400: 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68 65 72 0a  h-left. Another.
5410: 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e 74 20 28  ** big comment (
5420: 73 69 6d 69 6c 61 72 20 74 6f 20 74 68 69 73 20  similar to this 
5430: 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72 6b 20 74  one) will mark t
5440: 68 65 20 70 6f 69 6e 74 20 69 6e 20 74 68 65 20  he point in the 
5450: 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a 20 77 65  code where.** we
5460: 20 74 72 61 6e 73 69 74 69 6f 6e 20 62 61 63 6b   transition back
5470: 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e   to normal inden
5480: 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  tation..**.** Th
5490: 65 20 66 6f 72 6d 61 74 74 69 6e 67 20 6f 66 20  e formatting of 
54a0: 65 61 63 68 20 63 61 73 65 20 69 73 20 69 6d 70  each case is imp
54b0: 6f 72 74 61 6e 74 2e 20 20 54 68 65 20 6d 61 6b  ortant.  The mak
54c0: 65 66 69 6c 65 20 66 6f 72 20 53 51 4c 69 74 65  efile for SQLite
54d0: 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73 20 74 77  .** generates tw
54e0: 6f 20 43 20 66 69 6c 65 73 20 22 6f 70 63 6f 64  o C files "opcod
54f0: 65 73 2e 68 22 20 61 6e 64 20 22 6f 70 63 6f 64  es.h" and "opcod
5500: 65 73 2e 63 22 20 62 79 20 73 63 61 6e 6e 69 6e  es.c" by scannin
5510: 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c 65 20 6c  g this.** file l
5520: 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69 6e 65 73  ooking for lines
5530: 20 74 68 61 74 20 62 65 67 69 6e 20 77 69 74 68   that begin with
5540: 20 22 63 61 73 65 20 4f 50 5f 22 2e 20 20 54 68   "case OP_".  Th
5550: 65 20 6f 70 63 6f 64 65 73 2e 68 20 66 69 6c 65  e opcodes.h file
5560: 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20 66 69 6c  s.** will be fil
5570: 6c 65 64 20 77 69 74 68 20 23 64 65 66 69 6e 65  led with #define
5580: 73 20 74 68 61 74 20 67 69 76 65 20 75 6e 69 71  s that give uniq
5590: 75 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  ue integer value
55a0: 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20 6f 70 63  s to each.** opc
55b0: 6f 64 65 20 61 6e 64 20 74 68 65 20 6f 70 63 6f  ode and the opco
55c0: 64 65 73 2e 63 20 66 69 6c 65 20 69 73 20 66 69  des.c file is fi
55d0: 6c 6c 65 64 20 77 69 74 68 20 61 6e 20 61 72 72  lled with an arr
55e0: 61 79 20 6f 66 20 73 74 72 69 6e 67 73 20 77 68  ay of strings wh
55f0: 65 72 65 0a 2a 2a 20 65 61 63 68 20 73 74 72 69  ere.** each stri
5600: 6e 67 20 69 73 20 74 68 65 20 73 79 6d 62 6f 6c  ng is the symbol
5610: 69 63 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  ic name for the 
5620: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 6f 70  corresponding op
5630: 63 6f 64 65 2e 20 20 49 66 20 74 68 65 0a 2a 2a  code.  If the.**
5640: 20 63 61 73 65 20 73 74 61 74 65 6d 65 6e 74 20   case statement 
5650: 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  is followed by a
5660: 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74 68 65 20   comment of the 
5670: 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65 20 61 73  form "/# same as
5680: 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74 68 61 74   ... #/".** that
5690: 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75 73 65 64   comment is used
56a0: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68   to determine th
56b0: 65 20 70 61 72 74 69 63 75 6c 61 72 20 76 61 6c  e particular val
56c0: 75 65 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65  ue of the opcode
56d0: 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 20 6b 65  ..**.** Other ke
56e0: 79 77 6f 72 64 73 20 69 6e 20 74 68 65 20 63 6f  ywords in the co
56f0: 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f 6c 6c 6f  mment that follo
5700: 77 73 20 65 61 63 68 20 63 61 73 65 20 61 72 65  ws each case are
5710: 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63 6f 6e 73   used to.** cons
5720: 74 72 75 63 74 20 74 68 65 20 4f 50 46 4c 47 5f  truct the OPFLG_
5730: 49 4e 49 54 49 41 4c 49 5a 45 52 20 76 61 6c 75  INITIALIZER valu
5740: 65 20 74 68 61 74 20 69 6e 69 74 69 61 6c 69 7a  e that initializ
5750: 65 73 20 6f 70 63 6f 64 65 50 72 6f 70 65 72 74  es opcodePropert
5760: 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f 72 64 73  y[]..** Keywords
5770: 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31 2c 20 69   include: in1, i
5780: 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32 5f 70 72  n2, in3, out2_pr
5790: 65 72 65 6c 65 61 73 65 2c 20 6f 75 74 32 2c 20  erelease, out2, 
57a0: 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20 74 68  out3.  See.** th
57b0: 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77 6b 20  e mkopcodeh.awk 
57c0: 73 63 72 69 70 74 20 66 6f 72 20 61 64 64 69 74  script for addit
57d0: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
57e0: 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d 65 6e  n..**.** Documen
57f0: 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56 44 42  tation about VDB
5800: 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67 65 6e  E opcodes is gen
5810: 65 72 61 74 65 64 20 62 79 20 73 63 61 6e 6e 69  erated by scanni
5820: 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a 2a 20  ng this file.** 
5830: 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74 68 61  for lines of tha
5840: 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63 6f 64  t contain "Opcod
5850: 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e 65 20  e:".  That line 
5860: 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71 75 65  and all subseque
5870: 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20 6c 69  nt.** comment li
5880: 6e 65 73 20 61 72 65 20 75 73 65 64 20 69 6e 20  nes are used in 
5890: 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
58a0: 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68 74 6d  f the opcode.htm
58b0: 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 0a  l documentation.
58c0: 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  ** file..**.** S
58d0: 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20 20 20  UMMARY:.**.**   
58e0: 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69 73 20    Formatting is 
58f0: 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73 63 72  important to scr
5900: 69 70 74 73 20 74 68 61 74 20 73 63 61 6e 20 74  ipts that scan t
5910: 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20 20 20  his file..**    
5920: 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74 65 20   Do not deviate 
5930: 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61 74 74  from the formatt
5940: 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72 65 6e  ing style curren
5950: 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a 0a 2a  tly in use..**.*
5960: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5970: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5980: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5990: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
59a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
59b0: 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74 6f 20  * Opcode:  Goto 
59c0: 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  * P2 * * *.**.**
59d0: 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f 6e 61   An unconditiona
59e0: 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72 65 73  l jump to addres
59f0: 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e 65 78  s P2..** The nex
5a00: 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 78  t instruction ex
5a10: 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65 20 0a  ecuted will be .
5a20: 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20 69 6e  ** the one at in
5a30: 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68 65 20  dex P2 from the 
5a40: 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a 2a 20  beginning of.** 
5a50: 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a  the program..**.
5a60: 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61 6d 65  ** The P1 parame
5a70: 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74 75 61  ter is not actua
5a80: 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68 69 73  lly used by this
5a90: 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65 76 65   opcode.  Howeve
5aa0: 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f 6d 65  r, it.** is some
5ab0: 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31 20 69  times set to 1 i
5ac0: 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73 20 61  nstead of 0 as a
5ad0: 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63 6f 6d   hint to the com
5ae0: 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c 0a  mand-line shell.
5af0: 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47 6f 74  ** that this Got
5b00: 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  o is the bottom 
5b10: 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20 74 68  of a loop and th
5b20: 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66 72 6f  at the lines fro
5b30: 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74 6f 20  m P2 down.** to 
5b40: 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69 6e 65  the current line
5b50: 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64 65 6e   should be inden
5b60: 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ted for EXPLAIN 
5b70: 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20  output..*/.case 
5b80: 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20 20 20  OP_Goto: {      
5b90: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
5ba0: 2f 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  /.  pc = pOp->p2
5bb0: 20 2d 20 31 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f   - 1;..  /* Opco
5bc0: 64 65 73 20 74 68 61 74 20 61 72 65 20 75 73 65  des that are use
5bd0: 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f 6d 20  d as the bottom 
5be0: 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65  of a loop (OP_Ne
5bf0: 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a  xt, OP_Prev,.  *
5c00: 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52  * OP_VNext, OP_R
5c10: 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50  owSetNext, or OP
5c20: 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61 6c 6c  _SorterNext) all
5c30: 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a   jump here upon.
5c40: 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e    ** completion.
5c50: 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69    Check to see i
5c60: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
5c70: 75 70 74 28 29 20 68 61 73 20 62 65 65 6e 20 63  upt() has been c
5c80: 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66  alled.  ** or if
5c90: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
5ca0: 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74 6f 20  llback needs to 
5cb0: 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a  be invoked. .  *
5cc0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f 64 65  *.  ** This code
5cd0: 20 75 73 65 73 20 75 6e 73 74 72 75 63 74 75 72   uses unstructur
5ce0: 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74 65 6d  ed "goto" statem
5cf0: 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f  ents and does no
5d00: 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20  t look clean..  
5d10: 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73 20 6e  ** But that is n
5d20: 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70 70 79  ot due to sloppy
5d30: 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73 2e 20   coding habits. 
5d40: 54 68 65 20 63 6f 64 65 20 69 73 20 77 72 69 74  The code is writ
5d50: 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20 77 61  ten this.  ** wa
5d60: 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63  y for performanc
5d70: 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61 76 69  e, to avoid havi
5d80: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20 69 6e  ng to run the in
5d90: 74 65 72 72 75 70 74 20 61 6e 64 20 70 72 6f 67  terrupt and prog
5da0: 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73  ress.  ** checks
5db0: 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f 64 65   on every opcode
5dc0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 73 71  .  This helps sq
5dd0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74 6f 20  lite3_step() to 
5de0: 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25 0a 20  run about 1.5%. 
5df0: 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63 6f 72   ** faster accor
5e00: 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72 69 6e  ding to "valgrin
5e10: 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72  d --tool=cachegr
5e20: 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f  ind" */.check_fo
5e30: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 69  r_interrupt:.  i
5e40: 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65  f( db->u1.isInte
5e50: 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f 20 61  rrupted ) goto a
5e60: 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65  bort_due_to_inte
5e70: 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66 20 53  rrupt;.#ifndef S
5e80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52  QLITE_OMIT_PROGR
5e90: 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f  ESS_CALLBACK.  /
5ea0: 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f 67 72  * Call the progr
5eb0: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69 66 20  ess callback if 
5ec0: 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64  it is configured
5ed0: 20 61 6e 64 20 74 68 65 20 72 65 71 75 69 72 65   and the require
5ee0: 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66  d number.  ** of
5ef0: 20 56 44 42 45 20 6f 70 73 20 68 61 76 65 20 62   VDBE ops have b
5f00: 65 65 6e 20 65 78 65 63 75 74 65 64 20 28 65 69  een executed (ei
5f10: 74 68 65 72 20 73 69 6e 63 65 20 74 68 69 73 20  ther since this 
5f20: 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20  invocation of.  
5f30: 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65 45 78  ** sqlite3VdbeEx
5f40: 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20 6c 61  ec() or since la
5f50: 73 74 20 74 69 6d 65 20 74 68 65 20 70 72 6f 67  st time the prog
5f60: 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 77 61  ress callback wa
5f70: 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20  s called)..  ** 
5f80: 49 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  If the progress 
5f90: 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72 6e 73  callback returns
5fa0: 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20   non-zero, exit 
5fb0: 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63 68  the virtual mach
5fc0: 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20 61 20  ine with.  ** a 
5fd0: 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51 4c 49  return code SQLI
5fe0: 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20  TE_ABORT..  */. 
5ff0: 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65   if( db->xProgre
6000: 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74 65 70  ss!=0 && nVmStep
6010: 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69 74  >=nProgressLimit
6020: 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
6030: 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73  db->nProgressOps
6040: 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67  !=0 );.    nProg
6050: 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53  ressLimit = nVmS
6060: 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72  tep + db->nProgr
6070: 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65  essOps - (nVmSte
6080: 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  p%db->nProgressO
6090: 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64 62 2d  ps);.    if( db-
60a0: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
60b0: 50 72 6f 67 72 65 73 73 41 72 67 29 20 29 7b 0a  ProgressArg) ){.
60c0: 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
60d0: 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20  E_INTERRUPT;.   
60e0: 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72 72     goto vdbe_err
60f0: 6f 72 5f 68 61 6c 74 3b 0a 20 20 20 20 7d 0a 20  or_halt;.    }. 
6100: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
6110: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6120: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6130: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6140: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6150: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6160: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6170: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6180: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6190: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
61a0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
61b0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
61c0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
61d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43  <=(p->nMem-p->nC
61e0: 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 49 6e 31  ursor) );.  pIn1
61f0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
6200: 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 56 64 62  ];.  assert( Vdb
6210: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31  eMemDynamic(pIn1
6220: 29 3d 3d 30 20 29 3b 0a 20 20 6d 65 6d 41 62 6f  )==0 );.  memAbo
6230: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
6240: 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  n1);.  pIn1->fla
6250: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6260: 70 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 63 3b 0a  pIn1->u.i = pc;.
6270: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6280: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6290: 0a 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20  .  pc = pOp->p2 
62a0: 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  - 1;.  break;.}.
62b0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65 74  ./* Opcode:  Ret
62c0: 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  urn P1 * * * *.*
62d0: 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65  *.** Jump to the
62e0: 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   next instructio
62f0: 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64 72  n after the addr
6300: 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72 20  ess in register 
6310: 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74 68  P1.  After.** th
6320: 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65 72  e jump, register
6330: 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64 65   P1 becomes unde
6340: 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  fined..*/.case O
6350: 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20 20  P_Return: {     
6360: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
6370: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
6380: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6390: 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d  t( pIn1->flags==
63a0: 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 63 20  MEM_Int );.  pc 
63b0: 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e 75 2e 69  = (int)pIn1->u.i
63c0: 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
63d0: 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b  = MEM_Undefined;
63e0: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
63f0: 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43 6f 72 6f  Opcode: InitCoro
6400: 75 74 69 6e 65 20 50 31 20 50 32 20 50 33 20 2a  utine P1 P2 P3 *
6410: 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20 75 70 20   *.**.** Set up 
6420: 72 65 67 69 73 74 65 72 20 50 31 20 73 6f 20 74  register P1 so t
6430: 68 61 74 20 69 74 20 77 69 6c 6c 20 59 69 65 6c  hat it will Yiel
6440: 64 20 74 6f 20 74 68 65 20 63 6f 72 6f 75 74 69  d to the corouti
6450: 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64 20 61 74  ne.** located at
6460: 20 61 64 64 72 65 73 73 20 50 33 2e 0a 2a 2a 0a   address P3..**.
6470: 2a 2a 20 49 66 20 50 32 21 3d 30 20 74 68 65 6e  ** If P2!=0 then
6480: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69   the coroutine i
6490: 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6d  mplementation im
64a0: 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77  mediately follow
64b0: 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63 6f 64 65  s.** this opcode
64c0: 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76 65 72 20  .  So jump over 
64d0: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 69 6d  the coroutine im
64e0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 0a  plementation to.
64f0: 2a 2a 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a  ** address P2..*
6500: 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 45  *.** See also: E
6510: 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  ndCoroutine.*/.c
6520: 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f 72 6f 75  ase OP_InitCorou
6530: 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f 2a 20 6a  tine: {     /* j
6540: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
6550: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 20 70   pOp->p1>0 &&  p
6560: 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
6570: 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a  -p->nCursor) );.
6580: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
6590: 32 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 32 3c  2>=0 && pOp->p2<
65a0: 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 61 73 73 65  p->nOp );.  asse
65b0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 26  rt( pOp->p3>=0 &
65c0: 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70  & pOp->p3<p->nOp
65d0: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d   );.  pOut = &aM
65e0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
65f0: 73 73 65 72 74 28 20 21 56 64 62 65 4d 65 6d 44  ssert( !VdbeMemD
6600: 79 6e 61 6d 69 63 28 70 4f 75 74 29 20 29 3b 0a  ynamic(pOut) );.
6610: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 70 4f    pOut->u.i = pO
6620: 70 2d 3e 70 33 20 2d 20 31 3b 0a 20 20 70 4f 75  p->p3 - 1;.  pOu
6630: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
6640: 6e 74 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  nt;.  if( pOp->p
6650: 32 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32  2 ) pc = pOp->p2
6660: 20 2d 20 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d   - 1;.  break;.}
6670: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 45 6e  ../* Opcode:  En
6680: 64 43 6f 72 6f 75 74 69 6e 65 20 50 31 20 2a 20  dCoroutine P1 * 
6690: 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20  * * *.**.** The 
66a0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 74  instruction at t
66b0: 68 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65  he address in re
66c0: 67 69 73 74 65 72 20 50 31 20 69 73 20 61 6e 20  gister P1 is an 
66d0: 59 69 65 6c 64 2e 0a 2a 2a 20 4a 75 6d 70 20 74  Yield..** Jump t
66e0: 6f 20 74 68 65 20 50 32 20 70 61 72 61 6d 65 74  o the P2 paramet
66f0: 65 72 20 6f 66 20 74 68 61 74 20 59 69 65 6c 64  er of that Yield
6700: 2e 0a 2a 2a 20 41 66 74 65 72 20 74 68 65 20 6a  ..** After the j
6710: 75 6d 70 2c 20 72 65 67 69 73 74 65 72 20 50 31  ump, register P1
6720: 20 62 65 63 6f 6d 65 73 20 75 6e 64 65 66 69 6e   becomes undefin
6730: 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  ed..**.** See al
6740: 73 6f 3a 20 49 6e 69 74 43 6f 72 6f 75 74 69 6e  so: InitCoroutin
6750: 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6e 64  e.*/.case OP_End
6760: 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20  Coroutine: {    
6770: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6780: 0a 20 20 56 64 62 65 4f 70 20 2a 70 43 61 6c 6c  .  VdbeOp *pCall
6790: 65 72 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d  er;.  pIn1 = &aM
67a0: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
67b0: 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
67c0: 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
67d0: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 75   assert( pIn1->u
67e0: 2e 69 3e 3d 30 20 26 26 20 70 49 6e 31 2d 3e 75  .i>=0 && pIn1->u
67f0: 2e 69 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  .i<p->nOp );.  p
6800: 43 61 6c 6c 65 72 20 3d 20 26 61 4f 70 5b 70 49  Caller = &aOp[pI
6810: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 61 73 73 65  n1->u.i];.  asse
6820: 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 6f 70 63  rt( pCaller->opc
6830: 6f 64 65 3d 3d 4f 50 5f 59 69 65 6c 64 20 29 3b  ode==OP_Yield );
6840: 0a 20 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c  .  assert( pCall
6850: 65 72 2d 3e 70 32 3e 3d 30 20 26 26 20 70 43 61  er->p2>=0 && pCa
6860: 6c 6c 65 72 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20  ller->p2<p->nOp 
6870: 29 3b 0a 20 20 70 63 20 3d 20 70 43 61 6c 6c 65  );.  pc = pCalle
6880: 72 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 70 49 6e  r->p2 - 1;.  pIn
6890: 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55  1->flags = MEM_U
68a0: 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61  ndefined;.  brea
68b0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
68c0: 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a 20    Yield P1 P2 * 
68d0: 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20 74  * *.**.** Swap t
68e0: 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e 74  he program count
68f0: 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c 75  er with the valu
6900: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
6910: 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20 74  .  This.** has t
6920: 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69 65  he effect of yie
6930: 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f 75  lding to a corou
6940: 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  tine..**.** If t
6950: 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68 61  he coroutine tha
6960: 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62 79  t is launched by
6970: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
6980: 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20 59  n ends with.** Y
6990: 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20 74  ield or Return t
69a0: 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  hen continue to 
69b0: 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  the next instruc
69c0: 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a 2a  tion.  But if.**
69d0: 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 6c   the coroutine l
69e0: 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73 20  aunched by this 
69f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64 73  instruction ends
6a00: 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f   with.** EndCoro
6a10: 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d 70  utine, then jump
6a20: 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74 68   to P2 rather th
6a30: 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77 69  an continuing wi
6a40: 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20 69  th the.** next i
6a50: 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a  nstruction..**.*
6a60: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74  * See also: Init
6a70: 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73  Coroutine.*/.cas
6a80: 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20 20  e OP_Yield: {   
6a90: 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 2c           /* in1,
6aa0: 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20 70   jump */.  int p
6ab0: 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d 20  cDest;.  pIn1 = 
6ac0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
6ad0: 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d 65    assert( VdbeMe
6ae0: 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d 3d  mDynamic(pIn1)==
6af0: 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  0 );.  pIn1->fla
6b00: 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20  gs = MEM_Int;.  
6b10: 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70 49  pcDest = (int)pI
6b20: 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31 2d  n1->u.i;.  pIn1-
6b30: 3e 75 2e 69 20 3d 20 70 63 3b 0a 20 20 52 45 47  >u.i = pc;.  REG
6b40: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
6b50: 3e 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 63  >p1, pIn1);.  pc
6b60: 20 3d 20 70 63 44 65 73 74 3b 0a 20 20 62 72 65   = pcDest;.  bre
6b70: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6b80: 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20 50  :  HaltIfNull  P
6b90: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
6ba0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 69 66 20 72   Synopsis:  if r
6bb0: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
6bc0: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
6bd0: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6be0: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
6bf0: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
6c00: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
6c10: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
6c20: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
6c30: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
6c40: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
6c50: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
6c60: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
6c70: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
6c80: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
6c90: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
6ca0: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
6cb0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
6cc0: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
6cd0: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
6ce0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
6cf0: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
6d00: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
6d10: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
6d20: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
6d30: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
6d40: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
6d50: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
6d60: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
6d70: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
6d80: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
6d90: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
6da0: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
6db0: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
6dc0: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
6dd0: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
6de0: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
6df0: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
6e00: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
6e10: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
6e20: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
6e30: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
6e40: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
6e50: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
6e60: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
6e70: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
6e80: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
6e90: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
6ea0: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
6eb0: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
6ec0: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
6ed0: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
6ee0: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
6ef0: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
6f00: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
6f10: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
6f20: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
6f30: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
6f40: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
6f50: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
6f60: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
6f70: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
6f80: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
6f90: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
6fa0: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
6fb0: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
6fc0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
6fd0: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
6fe0: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
6ff0: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
7000: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
7010: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
7020: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
7030: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
7040: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7050: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7060: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
7070: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
7080: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7090: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
70a0: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
70b0: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
70c0: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
70d0: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
70e0: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
70f0: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7100: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7110: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7120: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7130: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7140: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7150: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7160: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
7170: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
7180: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
7190: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
71a0: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
71b0: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
71c0: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
71d0: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
71e0: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
71f0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 63 6f   OP_Halt: {.  co
7200: 6e 73 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b  nst char *zType;
7210: 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
7220: 4c 6f 67 46 6d 74 3b 0a 0a 20 20 69 66 28 20 70  LogFmt;..  if( p
7230: 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f  Op->p1==SQLITE_O
7240: 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29  K && p->pFrame )
7250: 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68  {.    /* Halt th
7260: 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52  e sub-program. R
7270: 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f  eturn control to
7280: 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
7290: 65 2e 20 2a 2f 0a 20 20 20 20 56 64 62 65 46 72  e. */.    VdbeFr
72a0: 61 6d 65 20 2a 70 46 72 61 6d 65 20 3d 20 70 2d  ame *pFrame = p-
72b0: 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20 70 2d 3e  >pFrame;.    p->
72c0: 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 2d  pFrame = pFrame-
72d0: 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20 20 70 2d  >pParent;.    p-
72e0: 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20 20 20 73  >nFrame--;.    s
72f0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68 61  qlite3VdbeSetCha
7300: 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e 43 68 61  nges(db, p->nCha
7310: 6e 67 65 29 3b 0a 20 20 20 20 70 63 20 3d 20 73  nge);.    pc = s
7320: 71 6c 69 74 65 33 56 64 62 65 46 72 61 6d 65 52  qlite3VdbeFrameR
7330: 65 73 74 6f 72 65 28 70 46 72 61 6d 65 29 3b 0a  estore(pFrame);.
7340: 20 20 20 20 6c 61 73 74 52 6f 77 69 64 20 3d 20      lastRowid = 
7350: 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  db->lastRowid;. 
7360: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d     if( pOp->p2==
7370: 4f 45 5f 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20  OE_Ignore ){.   
7380: 20 20 20 2f 2a 20 49 6e 73 74 72 75 63 74 69 6f     /* Instructio
7390: 6e 20 70 63 20 69 73 20 74 68 65 20 4f 50 5f 50  n pc is the OP_P
73a0: 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6e 76 6f  rogram that invo
73b0: 6b 65 64 20 74 68 65 20 73 75 62 2d 70 72 6f 67  ked the sub-prog
73c0: 72 61 6d 20 0a 20 20 20 20 20 20 2a 2a 20 63 75  ram .      ** cu
73d0: 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 68 61  rrently being ha
73e0: 6c 74 65 64 2e 20 49 66 20 74 68 65 20 70 32 20  lted. If the p2 
73f0: 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20 74  instruction of t
7400: 68 69 73 20 4f 50 5f 48 61 6c 74 0a 20 20 20 20  his OP_Halt.    
7410: 20 20 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e    ** instruction
7420: 20 69 73 20 73 65 74 20 74 6f 20 4f 45 5f 49 67   is set to OE_Ig
7430: 6e 6f 72 65 2c 20 74 68 65 6e 20 74 68 65 20 73  nore, then the s
7440: 75 62 2d 70 72 6f 67 72 61 6d 20 69 73 20 74 68  ub-program is th
7450: 72 6f 77 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  rowing.      ** 
7460: 61 6e 20 49 47 4e 4f 52 45 20 65 78 63 65 70 74  an IGNORE except
7470: 69 6f 6e 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ion. In this cas
7480: 65 20 6a 75 6d 70 20 74 6f 20 74 68 65 20 61 64  e jump to the ad
7490: 64 72 65 73 73 20 73 70 65 63 69 66 69 65 64 0a  dress specified.
74a0: 20 20 20 20 20 20 2a 2a 20 61 73 20 74 68 65 20        ** as the 
74b0: 70 32 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  p2 of the callin
74c0: 67 20 4f 50 5f 50 72 6f 67 72 61 6d 2e 20 20 2a  g OP_Program.  *
74d0: 2f 0a 20 20 20 20 20 20 70 63 20 3d 20 70 2d 3e  /.      pc = p->
74e0: 61 4f 70 5b 70 63 5d 2e 70 32 2d 31 3b 0a 20 20  aOp[pc].p2-1;.  
74f0: 20 20 7d 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d    }.    aOp = p-
7500: 3e 61 4f 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d  >aOp;.    aMem =
7510: 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 62 72   p->aMem;.    br
7520: 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e 72 63  eak;.  }.  p->rc
7530: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d   = pOp->p1;.  p-
7540: 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 28  >errorAction = (
7550: 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d  u8)pOp->p2;.  p-
7560: 3e 70 63 20 3d 20 70 63 3b 0a 20 20 69 66 28 20  >pc = pc;.  if( 
7570: 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20 69 66 28  p->rc ){.    if(
7580: 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20   pOp->p5 ){.    
7590: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
75a0: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 54 79  har * const azTy
75b0: 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54 20 4e 55  pe[] = { "NOT NU
75c0: 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22 2c 20 22  LL", "UNIQUE", "
75d0: 43 48 45 43 4b 22 2c 0a 20 20 20 20 20 20 20 20  CHECK",.        
75e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7600: 20 20 20 20 20 22 46 4f 52 45 49 47 4e 20 4b 45       "FOREIGN KE
7610: 59 22 20 7d 3b 0a 20 20 20 20 20 20 61 73 73 65  Y" };.      asse
7620: 72 74 28 20 70 4f 70 2d 3e 70 35 3e 3d 31 20 26  rt( pOp->p5>=1 &
7630: 26 20 70 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a  & pOp->p5<=4 );.
7640: 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
7650: 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20  pOp->p5==1 );.  
7660: 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f      testcase( pO
7670: 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20 20  p->p5==2 );.    
7680: 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d    testcase( pOp-
7690: 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20 20  >p5==3 );.      
76a0: 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
76b0: 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 7a 54  5==4 );.      zT
76c0: 79 70 65 20 3d 20 61 7a 54 79 70 65 5b 70 4f 70  ype = azType[pOp
76d0: 2d 3e 70 35 2d 31 5d 3b 0a 20 20 20 20 7d 65 6c  ->p5-1];.    }el
76e0: 73 65 7b 0a 20 20 20 20 20 20 7a 54 79 70 65 20  se{.      zType 
76f0: 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  = 0;.    }.    a
7700: 73 73 65 72 74 28 20 7a 54 79 70 65 21 3d 30 20  ssert( zType!=0 
7710: 7c 7c 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20  || pOp->p4.z!=0 
7720: 29 3b 0a 20 20 20 20 7a 4c 6f 67 46 6d 74 20 3d  );.    zLogFmt =
7730: 20 22 61 62 6f 72 74 20 61 74 20 25 64 20 69 6e   "abort at %d in
7740: 20 5b 25 73 5d 3a 20 25 73 22 3b 0a 20 20 20 20   [%s]: %s";.    
7750: 69 66 28 20 7a 54 79 70 65 20 26 26 20 70 4f 70  if( zType && pOp
7760: 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20 20 20 20 20  ->p4.z ){.      
7770: 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67  sqlite3SetString
7780: 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62  (&p->zErrMsg, db
7790: 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74  , "%s constraint
77a0: 20 66 61 69 6c 65 64 3a 20 25 73 22 2c 20 0a 20   failed: %s", . 
77b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77c0: 20 20 20 20 20 20 7a 54 79 70 65 2c 20 70 4f 70        zType, pOp
77d0: 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 65 6c  ->p4.z);.    }el
77e0: 73 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 7a  se if( pOp->p4.z
77f0: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
7800: 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a  3SetString(&p->z
7810: 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25 73 22  ErrMsg, db, "%s"
7820: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20  , pOp->p4.z);.  
7830: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
7840: 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
7850: 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
7860: 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e 74 20   "%s constraint 
7870: 66 61 69 6c 65 64 22 2c 20 7a 54 79 70 65 29 3b  failed", zType);
7880: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
7890: 65 33 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20  e3_log(pOp->p1, 
78a0: 7a 4c 6f 67 46 6d 74 2c 20 70 63 2c 20 70 2d 3e  zLogFmt, pc, p->
78b0: 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67  zSql, p->zErrMsg
78c0: 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  );.  }.  rc = sq
78d0: 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70 29  lite3VdbeHalt(p)
78e0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
78f0: 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20 72  SQLITE_BUSY || r
7900: 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c==SQLITE_OK || 
7910: 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f 52  rc==SQLITE_ERROR
7920: 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51   );.  if( rc==SQ
7930: 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
7940: 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
7950: 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c  LITE_BUSY;.  }el
7960: 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
7970: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
7980: 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d 3d 53   (p->rc&0xff)==S
7990: 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e 54  QLITE_CONSTRAINT
79a0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
79b0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
79c0: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f   db->nDeferredCo
79d0: 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e 6e 44 65 66  ns>0 || db->nDef
79e0: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3e 30 20 29  erredImmCons>0 )
79f0: 3b 0a 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63  ;.    rc = p->rc
7a00: 20 3f 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20   ? SQLITE_ERROR 
7a10: 3a 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20  : SQLITE_DONE;. 
7a20: 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72   }.  goto vdbe_r
7a30: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
7a40: 6f 64 65 3a 20 49 6e 74 65 67 65 72 20 50 31 20  ode: Integer P1 
7a50: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
7a60: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a  psis: r[P2]=P1.*
7a70: 2a 0a 2a 2a 20 54 68 65 20 33 32 2d 62 69 74 20  *.** The 32-bit 
7a80: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 31  integer value P1
7a90: 20 69 73 20 77 72 69 74 74 65 6e 20 69 6e 74 6f   is written into
7aa0: 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
7ab0: 0a 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 65 72  .case OP_Integer
7ac0: 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
7ad0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7ae0: 2f 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  /.  pOut->u.i = 
7af0: 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65 61 6b  pOp->p1;.  break
7b00: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
7b10: 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50 34 20  Int64 * P2 * P4 
7b20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
7b30: 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34  [P2]=P4.**.** P4
7b40: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
7b50: 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65   a 64-bit intege
7b60: 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74  r value..** Writ
7b70: 65 20 74 68 61 74 20 76 61 6c 75 65 20 69 6e 74  e that value int
7b80: 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
7b90: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36 34 3a  /.case OP_Int64:
7ba0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20   {           /* 
7bb0: 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
7bc0: 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
7bd0: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
7be0: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
7bf0: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
7c00: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
7c10: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
7c20: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
7c30: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
7c40: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
7c50: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
7c60: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
7c70: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
7c80: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
7c90: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
7ca0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
7cb0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
7cc0: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
7cd0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
7ce0: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
7cf0: 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
7d00: 2f 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  /.  pOut->flags 
7d10: 3d 20 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73  = MEM_Real;.  as
7d20: 73 65 72 74 28 20 21 73 71 6c 69 74 65 33 49 73  sert( !sqlite3Is
7d30: 4e 61 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65  NaN(*pOp->p4.pRe
7d40: 61 6c 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 72  al) );.  pOut->r
7d50: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
7d60: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
7d70: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
7d80: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
7d90: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
7da0: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a  : r[P2]='P4'.**.
7db0: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
7dc0: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
7dd0: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
7de0: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
7df0: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
7e00: 74 6f 20 61 6e 20 4f 50 5f 53 74 72 69 6e 67 20  to an OP_String 
7e10: 62 65 66 6f 72 65 20 69 74 20 69 73 20 65 78 65  before it is exe
7e20: 63 75 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cuted for the fi
7e30: 72 73 74 20 74 69 6d 65 2e 20 20 44 75 72 69 6e  rst time.  Durin
7e40: 67 0a 2a 2a 20 74 68 69 73 20 74 72 61 6e 73 66  g.** this transf
7e50: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 6c 65  ormation, the le
7e60: 6e 67 74 68 20 6f 66 20 73 74 72 69 6e 67 20 50  ngth of string P
7e70: 34 20 69 73 20 63 6f 6d 70 75 74 65 64 20 61 6e  4 is computed an
7e80: 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61 73 20 74  d stored.** as t
7e90: 68 65 20 50 31 20 70 61 72 61 6d 65 74 65 72 2e  he P1 parameter.
7ea0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74 72 69  .*/.case OP_Stri
7eb0: 6e 67 38 3a 20 7b 20 20 20 20 20 20 20 20 20 2f  ng8: {         /
7ec0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53 54 52  * same as TK_STR
7ed0: 49 4e 47 2c 20 6f 75 74 32 2d 70 72 65 72 65 6c  ING, out2-prerel
7ee0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
7ef0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
7f00: 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ;.  pOp->opcode 
7f10: 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20 70  = OP_String;.  p
7f20: 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65 33  Op->p1 = sqlite3
7f30: 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70 34  Strlen30(pOp->p4
7f40: 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  .z);..#ifndef SQ
7f50: 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
7f60: 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21 3d    if( encoding!=
7f70: 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a 20  SQLITE_UTF8 ){. 
7f80: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
7f90: 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75  dbeMemSetStr(pOu
7fa0: 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d 31  t, pOp->p4.z, -1
7fb0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53  , SQLITE_UTF8, S
7fc0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
7fd0: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
7fe0: 45 5f 54 4f 4f 42 49 47 20 29 20 67 6f 74 6f 20  E_TOOBIG ) goto 
7ff0: 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 69 66 28  too_big;.    if(
8000: 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c 69   SQLITE_OK!=sqli
8010: 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
8020: 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f  oding(pOut, enco
8030: 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f 5f  ding) ) goto no_
8040: 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  mem;.    assert(
8050: 20 70 4f 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d   pOut->zMalloc==
8060: 70 4f 75 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61  pOut->z );.    a
8070: 73 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79  ssert( VdbeMemDy
8080: 6e 61 6d 69 63 28 70 4f 75 74 29 3d 3d 30 20 29  namic(pOut)==0 )
8090: 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 7a 4d 61 6c  ;.    pOut->zMal
80a0: 6c 6f 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75  loc = 0;.    pOu
80b0: 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
80c0: 53 74 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20  Static;.    if( 
80d0: 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
80e0: 44 59 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20  DYNAMIC ){.     
80f0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
8100: 62 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  b, pOp->p4.z);. 
8110: 20 20 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34     }.    pOp->p4
8120: 74 79 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49  type = P4_DYNAMI
8130: 43 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a  C;.    pOp->p4.z
8140: 20 3d 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20   = pOut->z;.    
8150: 70 4f 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e  pOp->p1 = pOut->
8160: 6e 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  n;.  }.#endif.  
8170: 69 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e  if( pOp->p1>db->
8180: 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49  aLimit[SQLITE_LI
8190: 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20  MIT_LENGTH] ){. 
81a0: 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
81b0: 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
81c0: 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
81d0: 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74 72 69  xt case, OP_Stri
81e0: 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20 4f 70  ng */.}.  ./* Op
81f0: 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50 31 20  code: String P1 
8200: 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
8210: 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 27 50 34  opsis: r[P2]='P4
8220: 27 20 28 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a  ' (len=P1).**.**
8230: 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
8240: 65 20 50 34 20 6f 66 20 6c 65 6e 67 74 68 20 50  e P4 of length P
8250: 31 20 28 62 79 74 65 73 29 20 69 73 20 73 74 6f  1 (bytes) is sto
8260: 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
8270: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  P2..*/.case OP_S
8280: 74 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20  tring: {        
8290: 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c    /* out2-prerel
82a0: 65 61 73 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  ease */.  assert
82b0: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
82c0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
82d0: 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74  = MEM_Str|MEM_St
82e0: 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20  atic|MEM_Term;. 
82f0: 20 70 4f 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e   pOut->z = pOp->
8300: 70 34 2e 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  p4.z;.  pOut->n 
8310: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75  = pOp->p1;.  pOu
8320: 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e  t->enc = encodin
8330: 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  g;.  UPDATE_MAX_
8340: 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a  BLOBSIZE(pOut);.
8350: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
8360: 70 63 6f 64 65 3a 20 4e 75 6c 6c 20 50 31 20 50  pcode: Null P1 P
8370: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
8380: 70 73 69 73 3a 20 20 72 5b 50 32 2e 2e 50 33 5d  psis:  r[P2..P3]
8390: 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =NULL.**.** Writ
83a0: 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65  e a NULL into re
83b0: 67 69 73 74 65 72 73 20 50 32 2e 20 20 49 66 20  gisters P2.  If 
83c0: 50 33 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  P3 greater than 
83d0: 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f 20 77 72  P2, then also wr
83e0: 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69 6e 74 6f  ite.** NULL into
83f0: 20 72 65 67 69 73 74 65 72 20 50 33 20 61 6e 64   register P3 and
8400: 20 65 76 65 72 79 20 72 65 67 69 73 74 65 72 20   every register 
8410: 69 6e 20 62 65 74 77 65 65 6e 20 50 32 20 61 6e  in between P2 an
8420: 64 20 50 33 2e 20 20 49 66 20 50 33 0a 2a 2a 20  d P3.  If P3.** 
8430: 69 73 20 6c 65 73 73 20 74 68 61 6e 20 50 32 20  is less than P2 
8440: 28 74 79 70 69 63 61 6c 6c 79 20 50 33 20 69 73  (typically P3 is
8450: 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f 6e 6c 79   zero) then only
8460: 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73 0a   register P2 is.
8470: 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c 4c 2e 0a  ** set to NULL..
8480: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
8490: 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72  value is non-zer
84a0: 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20 73 65 74  o, then also set
84b0: 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61 72 65 64   the MEM_Cleared
84c0: 20 66 6c 61 67 20 73 6f 20 74 68 61 74 0a 2a 2a   flag so that.**
84d0: 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20 77 69 6c   NULL values wil
84e0: 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65 20 65 71  l not compare eq
84f0: 75 61 6c 20 65 76 65 6e 20 69 66 20 53 51 4c 49  ual even if SQLI
8500: 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74  TE_NULLEQ is set
8510: 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20 6f 72 20   on.** OP_Ne or 
8520: 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73 65 20 4f  OP_Eq..*/.case O
8530: 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 20  P_Null: {       
8540: 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
8550: 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
8560: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
8570: 6c 61 67 3b 0a 20 20 63 6e 74 20 3d 20 70 4f 70  lag;.  cnt = pOp
8580: 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20 20  ->p3-pOp->p2;.  
8590: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
85a0: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
85b0: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
85c0: 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61  >flags = nullFla
85d0: 67 20 3d 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d  g = pOp->p1 ? (M
85e0: 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61  EM_Null|MEM_Clea
85f0: 72 65 64 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b  red) : MEM_Null;
8600: 0a 20 20 77 68 69 6c 65 28 20 63 6e 74 3e 30 20  .  while( cnt>0 
8610: 29 7b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  ){.    pOut++;. 
8620: 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61     memAboutToCha
8630: 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20  nge(p, pOut);.  
8640: 20 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65    VdbeMemRelease
8650: 28 70 4f 75 74 29 3b 0a 20 20 20 20 70 4f 75 74  (pOut);.    pOut
8660: 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c 6c 46 6c  ->flags = nullFl
8670: 61 67 3b 0a 20 20 20 20 63 6e 74 2d 2d 3b 0a 20  ag;.    cnt--;. 
8680: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
8690: 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 66 74 4e 75  * Opcode: SoftNu
86a0: 6c 6c 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ll P1 * * * *.**
86b0: 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b 50 31   Synopsis:  r[P1
86c0: 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 53 65 74  ]=NULL.**.** Set
86d0: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
86e0: 68 61 76 65 20 74 68 65 20 76 61 6c 75 65 20 4e  have the value N
86f0: 55 4c 4c 20 61 73 20 73 65 65 6e 20 62 79 20 74  ULL as seen by t
8700: 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  he OP_MakeRecord
8710: 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c  .** instruction,
8720: 20 62 75 74 20 64 6f 20 6e 6f 74 20 66 72 65 65   but do not free
8730: 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20 62   any string or b
8740: 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63  lob memory assoc
8750: 69 61 74 65 64 20 77 69 74 68 0a 2a 2a 20 74 68  iated with.** th
8760: 65 20 72 65 67 69 73 74 65 72 2c 20 73 6f 20 74  e register, so t
8770: 68 61 74 20 69 66 20 74 68 65 20 76 61 6c 75 65  hat if the value
8780: 20 77 61 73 20 61 20 73 74 72 69 6e 67 20 6f 72   was a string or
8790: 20 62 6c 6f 62 20 74 68 61 74 20 77 61 73 0a 2a   blob that was.*
87a0: 2a 20 70 72 65 76 69 6f 75 73 6c 79 20 63 6f 70  * previously cop
87b0: 69 65 64 20 75 73 69 6e 67 20 4f 50 5f 53 43 6f  ied using OP_SCo
87c0: 70 79 2c 20 74 68 65 20 63 6f 70 69 65 73 20 77  py, the copies w
87d0: 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  ill continue to 
87e0: 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a 63 61 73  be valid..*/.cas
87f0: 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c 3a 20 7b  e OP_SoftNull: {
8800: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
8810: 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  p1>0 && pOp->p1<
8820: 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75  =(p->nMem-p->nCu
8830: 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20  rsor) );.  pOut 
8840: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
8850: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
8860: 3d 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d  = (pOut->flags|M
8870: 45 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e  EM_Null)&~MEM_Un
8880: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
8890: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
88a0: 42 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20  Blob P1 P2 * P4 
88b0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
88c0: 5b 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29  [P2]=P4 (len=P1)
88d0: 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73  .**.** P4 points
88e0: 20 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61   to a blob of da
88f0: 74 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67  ta P1 bytes long
8900: 2e 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a  .  Store this.**
8910: 20 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65   blob in registe
8920: 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P2..*/.case OP
8930: 5f 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20  _Blob: {        
8940: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d          /* out2-
8950: 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20  prerelease */.  
8960: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 20  assert( pOp->p1 
8970: 3c 3d 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c 45  <= SQLITE_MAX_LE
8980: 4e 47 54 48 20 29 3b 0a 20 20 73 71 6c 69 74 65  NGTH );.  sqlite
8990: 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
89a0: 4f 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20  Out, pOp->p4.z, 
89b0: 70 4f 70 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a  pOp->p1, 0, 0);.
89c0: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
89d0: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
89e0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
89f0: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
8a00: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 72 69  ./* Opcode: Vari
8a10: 61 62 6c 65 20 50 31 20 50 32 20 2a 20 50 34 20  able P1 P2 * P4 
8a20: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
8a30: 5b 50 32 5d 3d 70 61 72 61 6d 65 74 65 72 28 50  [P2]=parameter(P
8a40: 31 2c 50 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e  1,P4).**.** Tran
8a50: 73 66 65 72 20 74 68 65 20 76 61 6c 75 65 73 20  sfer the values 
8a60: 6f 66 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  of bound paramet
8a70: 65 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73  er P1 into regis
8a80: 74 65 72 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20  ter P2.**.** If 
8a90: 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 69 73  the parameter is
8aa0: 20 6e 61 6d 65 64 2c 20 74 68 65 6e 20 69 74 73   named, then its
8ab0: 20 6e 61 6d 65 20 61 70 70 65 61 72 73 20 69 6e   name appears in
8ac0: 20 50 34 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76   P4..** The P4 v
8ad0: 61 6c 75 65 20 69 73 20 75 73 65 64 20 62 79 20  alue is used by 
8ae0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61 72  sqlite3_bind_par
8af0: 61 6d 65 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a  ameter_name()..*
8b00: 2f 0a 63 61 73 65 20 4f 50 5f 56 61 72 69 61 62  /.case OP_Variab
8b10: 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  le: {           
8b20: 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65   /* out2-prerele
8b30: 61 73 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 56  ase */.  Mem *pV
8b40: 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  ar;       /* Val
8b50: 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73 66 65  ue being transfe
8b60: 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73 65 72  rred */..  asser
8b70: 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20  t( pOp->p1>0 && 
8b80: 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56 61 72  pOp->p1<=p->nVar
8b90: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
8ba0: 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20 70 4f  p->p4.z==0 || pO
8bb0: 70 2d 3e 70 34 2e 7a 3d 3d 70 2d 3e 61 7a 56 61  p->p4.z==p->azVa
8bc0: 72 5b 70 4f 70 2d 3e 70 31 2d 31 5d 20 29 3b 0a  r[pOp->p1-1] );.
8bd0: 20 20 70 56 61 72 20 3d 20 26 70 2d 3e 61 56 61    pVar = &p->aVa
8be0: 72 5b 70 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a  r[pOp->p1 - 1];.
8bf0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
8c00: 65 4d 65 6d 54 6f 6f 42 69 67 28 70 56 61 72 29  eMemTooBig(pVar)
8c10: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
8c20: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  _big;.  }.  sqli
8c30: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
8c40: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
8c50: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
8c60: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
8c70: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
8c80: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8c90: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
8ca0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8cb0: 3a 20 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31  :  r[P2@P3]=r[P1
8cc0: 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20  @P3].**.** Move 
8cd0: 74 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e  the P3 values in
8ce0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31   register P1..P1
8cf0: 2b 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a  +P3-1 over into.
8d00: 2a 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e  ** registers P2.
8d10: 2e 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73  .P2+P3-1.  Regis
8d20: 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31  ters P1..P1+P3-1
8d30: 20 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c   are.** left hol
8d40: 64 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74  ding a NULL.  It
8d50: 20 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72   is an error for
8d60: 20 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73   register ranges
8d70: 0a 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  .** P1..P1+P3-1 
8d80: 61 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20  and P2..P2+P3-1 
8d90: 74 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20  to overlap.  It 
8da0: 69 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66  is an error.** f
8db0: 6f 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73  or P3 to be less
8dc0: 20 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65   than 1..*/.case
8dd0: 20 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 63 68   OP_Move: {.  ch
8de0: 61 72 20 2a 7a 4d 61 6c 6c 6f 63 3b 20 20 20 2f  ar *zMalloc;   /
8df0: 2a 20 48 6f 6c 64 69 6e 67 20 76 61 72 69 61 62  * Holding variab
8e00: 6c 65 20 66 6f 72 20 61 6c 6c 6f 63 61 74 65 64  le for allocated
8e10: 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74   memory */.  int
8e20: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
8e30: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
8e40: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
8e50: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
8e60: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
8e70: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
8e80: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
8e90: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
8ea0: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
8eb0: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
8ec0: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
8ed0: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
8ee0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
8ef0: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
8f00: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
8f10: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
8f20: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
8f30: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
8f40: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64  = &aMem[p2];.  d
8f50: 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o{.    assert( p
8f60: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  Out<=&aMem[(p->n
8f70: 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d  Mem-p->nCursor)]
8f80: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
8f90: 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e  pIn1<=&aMem[(p->
8fa0: 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
8fb0: 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  ] );.    assert(
8fc0: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e 31   memIsValid(pIn1
8fd0: 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75  ) );.    memAbou
8fe0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
8ff0: 74 29 3b 0a 20 20 20 20 56 64 62 65 4d 65 6d 52  t);.    VdbeMemR
9000: 65 6c 65 61 73 65 28 70 4f 75 74 29 3b 0a 20 20  elease(pOut);.  
9010: 20 20 7a 4d 61 6c 6c 6f 63 20 3d 20 70 4f 75 74    zMalloc = pOut
9020: 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 6d  ->zMalloc;.    m
9030: 65 6d 63 70 79 28 70 4f 75 74 2c 20 70 49 6e 31  emcpy(pOut, pIn1
9040: 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a  , sizeof(Mem));.
9050: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9060: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
9070: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
9080: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
9090: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 26 61 4d 65  >pScopyFrom<&aMe
90a0: 6d 5b 70 31 2b 70 4f 70 2d 3e 70 33 5d 20 29 7b  m[p1+pOp->p3] ){
90b0: 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63  .      pOut->pSc
90c0: 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 31 20 2d 20  opyFrom += p1 - 
90d0: 70 4f 70 2d 3e 70 32 3b 0a 20 20 20 20 7d 0a 23  pOp->p2;.    }.#
90e0: 65 6e 64 69 66 0a 20 20 20 20 70 49 6e 31 2d 3e  endif.    pIn1->
90f0: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65  flags = MEM_Unde
9100: 66 69 6e 65 64 3b 0a 20 20 20 20 70 49 6e 31 2d  fined;.    pIn1-
9110: 3e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 20 20 70  >xDel = 0;.    p
9120: 49 6e 31 2d 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 7a  In1->zMalloc = z
9130: 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20 52 45 47 49  Malloc;.    REGI
9140: 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b 2b 2c  STER_TRACE(p2++,
9150: 20 70 4f 75 74 29 3b 0a 20 20 20 20 70 49 6e 31   pOut);.    pIn1
9160: 2b 2b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a  ++;.    pOut++;.
9170: 20 20 7d 77 68 69 6c 65 28 20 2d 2d 6e 20 29 3b    }while( --n );
9180: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9190: 4f 70 63 6f 64 65 3a 20 43 6f 70 79 20 50 31 20  Opcode: Copy P1 
91a0: 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
91b0: 6f 70 73 69 73 3a 20 72 5b 50 32 40 50 33 2b 31  opsis: r[P2@P3+1
91c0: 5d 3d 72 5b 50 31 40 50 33 2b 31 5d 0a 2a 2a 0a  ]=r[P1@P3+1].**.
91d0: 2a 2a 20 4d 61 6b 65 20 61 20 63 6f 70 79 20 6f  ** Make a copy o
91e0: 66 20 72 65 67 69 73 74 65 72 73 20 50 31 2e 2e  f registers P1..
91f0: 50 31 2b 50 33 20 69 6e 74 6f 20 72 65 67 69 73  P1+P3 into regis
9200: 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33 2e 0a  ters P2..P2+P3..
9210: 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
9220: 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61 20 64  uction makes a d
9230: 65 65 70 20 63 6f 70 79 20 6f 66 20 74 68 65 20  eep copy of the 
9240: 76 61 6c 75 65 2e 20 20 41 20 64 75 70 6c 69 63  value.  A duplic
9250: 61 74 65 0a 2a 2a 20 69 73 20 6d 61 64 65 20 6f  ate.** is made o
9260: 66 20 61 6e 79 20 73 74 72 69 6e 67 20 6f 72 20  f any string or 
9270: 62 6c 6f 62 20 63 6f 6e 73 74 61 6e 74 2e 20 20  blob constant.  
9280: 53 65 65 20 61 6c 73 6f 20 4f 50 5f 53 43 6f 70  See also OP_SCop
9290: 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f  y..*/.case OP_Co
92a0: 70 79 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 0a  py: {.  int n;..
92b0: 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20    n = pOp->p3;. 
92c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
92d0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p1];.  pOut =
92e0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
92f0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21  .  assert( pOut!
9300: 3d 70 49 6e 31 20 29 3b 0a 20 20 77 68 69 6c 65  =pIn1 );.  while
9310: 28 20 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ( 1 ){.    sqlit
9320: 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77  e3VdbeMemShallow
9330: 43 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c  Copy(pOut, pIn1,
9340: 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20 20 20   MEM_Ephem);.   
9350: 20 44 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28   Deephemeralize(
9360: 70 4f 75 74 29 3b 0a 23 69 66 64 65 66 20 53 51  pOut);.#ifdef SQ
9370: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 70  LITE_DEBUG.    p
9380: 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20  Out->pScopyFrom 
9390: 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20  = 0;.#endif.    
93a0: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
93b0: 4f 70 2d 3e 70 32 2b 70 4f 70 2d 3e 70 33 2d 6e  Op->p2+pOp->p3-n
93c0: 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 69 66 28  , pOut);.    if(
93d0: 20 28 6e 2d 2d 29 3d 3d 30 20 29 20 62 72 65 61   (n--)==0 ) brea
93e0: 6b 3b 0a 20 20 20 20 70 4f 75 74 2b 2b 3b 0a 20  k;.    pOut++;. 
93f0: 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
9400: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
9410: 63 6f 64 65 3a 20 53 43 6f 70 79 20 50 31 20 50  code: SCopy P1 P
9420: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
9430: 73 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  sis: r[P2]=r[P1]
9440: 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 73 68  .**.** Make a sh
9450: 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66 20 72 65  allow copy of re
9460: 67 69 73 74 65 72 20 50 31 20 69 6e 74 6f 20 72  gister P1 into r
9470: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
9480: 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
9490: 6f 6e 20 6d 61 6b 65 73 20 61 20 73 68 61 6c 6c  on makes a shall
94a0: 6f 77 20 63 6f 70 79 20 6f 66 20 74 68 65 20 76  ow copy of the v
94b0: 61 6c 75 65 2e 20 20 49 66 20 74 68 65 20 76 61  alue.  If the va
94c0: 6c 75 65 0a 2a 2a 20 69 73 20 61 20 73 74 72 69  lue.** is a stri
94d0: 6e 67 20 6f 72 20 62 6c 6f 62 2c 20 74 68 65 6e  ng or blob, then
94e0: 20 74 68 65 20 63 6f 70 79 20 69 73 20 6f 6e 6c   the copy is onl
94f0: 79 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  y a pointer to t
9500: 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 61  he.** original a
9510: 6e 64 20 68 65 6e 63 65 20 69 66 20 74 68 65 20  nd hence if the 
9520: 6f 72 69 67 69 6e 61 6c 20 63 68 61 6e 67 65 73  original changes
9530: 20 73 6f 20 77 69 6c 6c 20 74 68 65 20 63 6f 70   so will the cop
9540: 79 2e 0a 2a 2a 20 57 6f 72 73 65 2c 20 69 66 20  y..** Worse, if 
9550: 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 69 73 20  the original is 
9560: 64 65 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68 65  deallocated, the
9570: 20 63 6f 70 79 20 62 65 63 6f 6d 65 73 20 69 6e   copy becomes in
9580: 76 61 6c 69 64 2e 0a 2a 2a 20 54 68 75 73 20 74  valid..** Thus t
9590: 68 65 20 70 72 6f 67 72 61 6d 20 6d 75 73 74 20  he program must 
95a0: 67 75 61 72 61 6e 74 65 65 20 74 68 61 74 20 74  guarantee that t
95b0: 68 65 20 6f 72 69 67 69 6e 61 6c 20 77 69 6c 6c  he original will
95c0: 20 6e 6f 74 20 63 68 61 6e 67 65 0a 2a 2a 20 64   not change.** d
95d0: 75 72 69 6e 67 20 74 68 65 20 6c 69 66 65 74 69  uring the lifeti
95e0: 6d 65 20 6f 66 20 74 68 65 20 63 6f 70 79 2e 20  me of the copy. 
95f0: 20 55 73 65 20 4f 50 5f 43 6f 70 79 20 74 6f 20   Use OP_Copy to 
9600: 6d 61 6b 65 20 61 20 63 6f 6d 70 6c 65 74 65 0a  make a complete.
9610: 2a 2a 20 63 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  ** copy..*/.case
9620: 20 4f 50 5f 53 43 6f 70 79 3a 20 7b 20 20 20 20   OP_SCopy: {    
9630: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
9640: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
9650: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
9660: 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
9670: 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p2];.  assert( p
9680: 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20 20 73  Out!=pIn1 );.  s
9690: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61  qlite3VdbeMemSha
96a0: 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70  llowCopy(pOut, p
96b0: 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  In1, MEM_Ephem);
96c0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
96d0: 45 42 55 47 0a 20 20 69 66 28 20 70 4f 75 74 2d  EBUG.  if( pOut-
96e0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3d 3d 30 20 29  >pScopyFrom==0 )
96f0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
9700: 6d 20 3d 20 70 49 6e 31 3b 0a 23 65 6e 64 69 66  m = pIn1;.#endif
9710: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
9720: 4f 70 63 6f 64 65 3a 20 52 65 73 75 6c 74 52 6f  Opcode: ResultRo
9730: 77 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  w P1 P2 * * *.**
9740: 20 53 79 6e 6f 70 73 69 73 3a 20 20 6f 75 74 70   Synopsis:  outp
9750: 75 74 3d 72 5b 50 31 40 50 32 5d 0a 2a 2a 0a 2a  ut=r[P1@P2].**.*
9760: 2a 20 54 68 65 20 72 65 67 69 73 74 65 72 73 20  * The registers 
9770: 50 31 20 74 68 72 6f 75 67 68 20 50 31 2b 50 32  P1 through P1+P2
9780: 2d 31 20 63 6f 6e 74 61 69 6e 20 61 20 73 69 6e  -1 contain a sin
9790: 67 6c 65 20 72 6f 77 20 6f 66 0a 2a 2a 20 72 65  gle row of.** re
97a0: 73 75 6c 74 73 2e 20 54 68 69 73 20 6f 70 63 6f  sults. This opco
97b0: 64 65 20 63 61 75 73 65 73 20 74 68 65 20 73 71  de causes the sq
97c0: 6c 69 74 65 33 5f 73 74 65 70 28 29 20 63 61 6c  lite3_step() cal
97d0: 6c 20 74 6f 20 74 65 72 6d 69 6e 61 74 65 0a 2a  l to terminate.*
97e0: 2a 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45  * with an SQLITE
97f0: 5f 52 4f 57 20 72 65 74 75 72 6e 20 63 6f 64 65  _ROW return code
9800: 20 61 6e 64 20 69 74 20 73 65 74 73 20 75 70 20   and it sets up 
9810: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
9820: 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20 74 6f  .** structure to
9830: 20 70 72 6f 76 69 64 65 20 61 63 63 65 73 73 20   provide access 
9840: 74 6f 20 74 68 65 20 72 28 50 31 29 2e 2e 72 28  to the r(P1)..r(
9850: 50 31 2b 50 32 2d 31 29 20 76 61 6c 75 65 73 20  P1+P2-1) values 
9860: 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  as.** the result
9870: 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50   row..*/.case OP
9880: 5f 52 65 73 75 6c 74 52 6f 77 3a 20 7b 0a 20 20  _ResultRow: {.  
9890: 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 69 6e 74  Mem *pMem;.  int
98a0: 20 69 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   i;.  assert( p-
98b0: 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d 3d 70 4f 70  >nResColumn==pOp
98c0: 2d 3e 70 32 20 29 3b 0a 20 20 61 73 73 65 72 74  ->p2 );.  assert
98d0: 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b 0a 20  ( pOp->p1>0 );. 
98e0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
98f0: 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d  +pOp->p2<=(p->nM
9900: 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31  em-p->nCursor)+1
9910: 20 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   );..#ifndef SQL
9920: 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53  ITE_OMIT_PROGRES
9930: 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20  S_CALLBACK.  /* 
9940: 52 75 6e 20 74 68 65 20 70 72 6f 67 72 65 73 73  Run the progress
9950: 20 63 6f 75 6e 74 65 72 20 6a 75 73 74 20 62 65   counter just be
9960: 66 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a  fore returning..
9970: 20 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78    */.  if( db->x
9980: 50 72 6f 67 72 65 73 73 21 3d 30 0a 20 20 20 26  Progress!=0.   &
9990: 26 20 6e 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67  & nVmStep>=nProg
99a0: 72 65 73 73 4c 69 6d 69 74 0a 20 20 20 26 26 20  ressLimit.   && 
99b0: 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62  db->xProgress(db
99c0: 2d 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 21  ->pProgressArg)!
99d0: 3d 30 0a 20 20 29 7b 0a 20 20 20 20 72 63 20 3d  =0.  ){.    rc =
99e0: 20 53 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50   SQLITE_INTERRUP
99f0: 54 3b 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65  T;.    goto vdbe
9a00: 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 20 20 7d  _error_halt;.  }
9a10: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
9a20: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
9a30: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
9a40: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
9a50: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
9a60: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
9a70: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
9a80: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
9a90: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
9aa0: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
9ab0: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
9ac0: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
9ad0: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
9ae0: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
9af0: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
9b00: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
9b10: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
9b20: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
9b30: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
9b40: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
9b50: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
9b60: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
9b70: 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 53  }..  /* If the S
9b80: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
9b90: 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 73  flag is set in s
9ba0: 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d 61 73  qlite3.flags mas
9bb0: 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d  k, then .  ** DM
9bc0: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 76  L statements inv
9bd0: 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64 65 20  oke this opcode 
9be0: 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20 6e 75  to return the nu
9bf0: 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a 20 20  mber of rows .  
9c00: 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f 20 74  ** modified to t
9c10: 68 65 20 75 73 65 72 2e 20 54 68 69 73 20 69 73  he user. This is
9c20: 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20 74 68   the only way th
9c30: 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20 20 2a  at a VM that.  *
9c40: 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74 65 6d  * opens a statem
9c50: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  ent transaction 
9c60: 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69 73 20  may invoke this 
9c70: 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a  opcode..  **.  *
9c80: 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73 20 69  * In case this i
9c90: 73 20 73 75 63 68 20 61 20 73 74 61 74 65 6d 65  s such a stateme
9ca0: 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20 73 74  nt, close any st
9cb0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
9cc0: 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20  ion.  ** opened 
9cd0: 62 79 20 74 68 69 73 20 56 4d 20 62 65 66 6f 72  by this VM befor
9ce0: 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74  e returning cont
9cf0: 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65 72 2e  rol to the user.
9d00: 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a   This is to.  **
9d10: 20 65 6e 73 75 72 65 20 74 68 61 74 20 73 74 61   ensure that sta
9d20: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
9d30: 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73 20 6e  ons are always n
9d40: 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c  ested, not overl
9d50: 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20  apping..  ** If 
9d60: 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65 6d 65  the open stateme
9d70: 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt-transaction i
9d80: 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68 65 72  s not closed her
9d90: 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73 65 72  e, then the user
9da0: 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70 20 61  .  ** may step a
9db0: 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74 20 6f  nother VM that o
9dc0: 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73 74 61  pens its own sta
9dd0: 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
9de0: 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61  on. This.  ** ma
9df0: 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72 6c 61  y lead to overla
9e00: 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e 74 20  pping statement 
9e10: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20  transactions..  
9e20: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74 61 74  **.  ** The stat
9e30: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
9e40: 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74 6f 70  n is never a top
9e50: 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63 74 69  -level transacti
9e60: 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20  on.  Hence.  ** 
9e70: 74 68 65 20 52 45 4c 45 41 53 45 20 63 61 6c 6c  the RELEASE call
9e80: 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72   below can never
9e90: 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73   fail..  */.  as
9ea0: 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74 65 6d  sert( p->iStatem
9eb0: 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c  ent==0 || db->fl
9ec0: 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74  ags&SQLITE_Count
9ed0: 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d 20 73  Rows );.  rc = s
9ee0: 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73 65 53  qlite3VdbeCloseS
9ef0: 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41 56 45  tatement(p, SAVE
9f00: 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a  POINT_RELEASE);.
9f10: 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
9f20: 53 51 4c 49 54 45 5f 4f 4b 29 20 29 7b 0a 20 20  SQLITE_OK) ){.  
9f30: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
9f40: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
9f50: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
9f60: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
9f70: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
9f80: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
9f90: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
9fa0: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
9fb0: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
9fc0: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
9fd0: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
9fe0: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
9ff0: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
a000: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
a010: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
a020: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
a030: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
a040: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
a050: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
a060: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
a070: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
a080: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
a090: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
a0a0: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
a0b0: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
a0c0: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
a0d0: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
a0e0: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
a0f0: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
a100: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
a110: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
a120: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
a130: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
a140: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
a150: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
a160: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
a170: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
a180: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
a190: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
a1a0: 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c  .  /* Return SQL
a1b0: 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70  ITE_ROW.  */.  p
a1c0: 2d 3e 70 63 20 3d 20 70 63 20 2b 20 31 3b 0a 20  ->pc = pc + 1;. 
a1d0: 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f 57   rc = SQLITE_ROW
a1e0: 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65  ;.  goto vdbe_re
a1f0: 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  turn;.}../* Opco
a200: 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50 32  de: Concat P1 P2
a210: 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
a220: 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d  sis: r[P3]=r[P2]
a230: 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64  +r[P1].**.** Add
a240: 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65 67   the text in reg
a250: 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74 68  ister P1 onto th
a260: 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65 78  e end of the tex
a270: 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65 72  t in.** register
a280: 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74 68   P2 and store th
a290: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
a2a0: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
a2b0: 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72 20  ither the P1 or 
a2c0: 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c 4c  P2 text are NULL
a2d0: 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c 4c   then store NULL
a2e0: 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20   in P3..**.**   
a2f0: 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a 2a  P3 = P2 || P1.**
a300: 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
a310: 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33 20  l for P1 and P3 
a320: 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20 72  to be the same r
a330: 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69 6d  egister. Sometim
a340: 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73 20  es,.** if P3 is 
a350: 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74 65  the same registe
a360: 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d 70  r as P2, the imp
a370: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20 61  lementation is a
a380: 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  ble.** to avoid 
a390: 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63  a memcpy()..*/.c
a3a0: 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b  ase OP_Concat: {
a3b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
a3c0: 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54 2c  me as TK_CONCAT,
a3d0: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
a3e0: 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 0a  */.  i64 nByte;.
a3f0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a400: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32  pOp->p1];.  pIn2
a410: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
a420: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
a430: 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
a440: 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75 74  sert( pIn1!=pOut
a450: 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d   );.  if( (pIn1-
a460: 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66  >flags | pIn2->f
a470: 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c  lags) & MEM_Null
a480: 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   ){.    sqlite3V
a490: 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f  dbeMemSetNull(pO
a4a0: 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
a4b0: 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e 64    }.  if( Expand
a4c0: 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45 78  Blob(pIn1) || Ex
a4d0: 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20 29  pandBlob(pIn2) )
a4e0: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
a4f0: 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c 20  Stringify(pIn1, 
a500: 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74 72  encoding);.  Str
a510: 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e 63  ingify(pIn2, enc
a520: 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65 20  oding);.  nByte 
a530: 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32  = pIn1->n + pIn2
a540: 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74 65  ->n;.  if( nByte
a550: 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  >db->aLimit[SQLI
a560: 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d  TE_LIMIT_LENGTH]
a570: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
a580: 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _big;.  }.  if( 
a590: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
a5a0: 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42  ow(pOut, (int)nB
a5b0: 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49 6e  yte+2, pOut==pIn
a5c0: 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e  2) ){.    goto n
a5d0: 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d  o_mem;.  }.  Mem
a5e0: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
a5f0: 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69 66  , MEM_Str);.  if
a600: 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b 0a  ( pOut!=pIn2 ){.
a610: 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74 2d      memcpy(pOut-
a620: 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e  >z, pIn2->z, pIn
a630: 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d  2->n);.  }.  mem
a640: 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e  cpy(&pOut->z[pIn
a650: 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20  2->n], pIn1->z, 
a660: 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74  pIn1->n);.  pOut
a670: 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20 20  ->z[nByte]=0;.  
a680: 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d  pOut->z[nByte+1]
a690: 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c   = 0;.  pOut->fl
a6a0: 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b  ags |= MEM_Term;
a6b0: 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e  .  pOut->n = (in
a6c0: 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74 2d  t)nByte;.  pOut-
a6d0: 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b  >enc = encoding;
a6e0: 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
a6f0: 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20  OBSIZE(pOut);.  
a700: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
a710: 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20 50  ode: Add P1 P2 P
a720: 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
a730: 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b  s:  r[P3]=r[P1]+
a740: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P2].**.** Add 
a750: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
a760: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
a770: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
a780: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
a790: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
a7a0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
a7b0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
a7c0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
a7d0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
a7e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
a7f0: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
a800: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
a810: 5b 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d  [P3]=r[P1]*r[P2]
a820: 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70  .**.**.** Multip
a830: 6c 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ly the value in 
a840: 72 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74  register P1 by t
a850: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
a860: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
a870: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
a880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
a890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
a8a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
a8b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
a8c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75  */./* Opcode: Su
a8d0: 62 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20  btract P1 P2 P3 
a8e0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a8f0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b    r[P3]=r[P2]-r[
a900: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61  P1].**.** Subtra
a910: 63 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ct the value in 
a920: 72 65 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d  register P1 from
a930: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
a940: 67 69 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64  gister P2.** and
a950: 20 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c   store the resul
a960: 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  t in register P3
a970: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69  ..** If either i
a980: 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68  nput is NULL, th
a990: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
a9a0: 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
a9b0: 44 69 76 69 64 65 20 50 31 20 50 32 20 50 33 20  Divide P1 P2 P3 
a9c0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
a9d0: 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b    r[P3]=r[P2]/r[
a9e0: 50 31 5d 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65  P1].**.** Divide
a9f0: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
aa00: 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68 65  gister P1 by the
aa10: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
aa20: 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f  er P2.** and sto
aa30: 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e  re the result in
aa40: 20 72 65 67 69 73 74 65 72 20 50 33 20 28 50 33   register P3 (P3
aa50: 3d 50 32 2f 50 31 29 2e 20 49 66 20 74 68 65 20  =P2/P1). If the 
aa60: 76 61 6c 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67  value in .** reg
aa70: 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72 6f  ister P1 is zero
aa80: 2c 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  , then the resul
aa90: 74 20 69 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69  t is NULL. If ei
aaa0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 0a 2a  ther input is .*
aab0: 2a 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  * NULL, the resu
aac0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f  lt is NULL..*/./
aad0: 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e  * Opcode: Remain
aae0: 64 65 72 20 50 31 20 50 32 20 50 33 20 2a 20 2a  der P1 P2 P3 * *
aaf0: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72  .** Synopsis:  r
ab00: 5b 50 33 5d 3d 72 5b 50 32 5d 25 72 5b 50 31 5d  [P3]=r[P2]%r[P1]
ab10: 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 75 74 65 20 74  .**.** Compute t
ab20: 68 65 20 72 65 6d 61 69 6e 64 65 72 20 61 66 74  he remainder aft
ab30: 65 72 20 69 6e 74 65 67 65 72 20 72 65 67 69 73  er integer regis
ab40: 74 65 72 20 50 32 20 69 73 20 64 69 76 69 64 65  ter P2 is divide
ab50: 64 20 62 79 20 0a 2a 2a 20 72 65 67 69 73 74 65  d by .** registe
ab60: 72 20 50 31 20 61 6e 64 20 73 74 6f 72 65 20 74  r P1 and store t
ab70: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
ab80: 69 73 74 65 72 20 50 33 2e 20 0a 2a 2a 20 49 66  ister P3. .** If
ab90: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
aba0: 67 69 73 74 65 72 20 50 31 20 69 73 20 7a 65 72  gister P1 is zer
abb0: 6f 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  o the result is 
abc0: 4e 55 4c 4c 2e 0a 2a 2a 20 49 66 20 65 69 74 68  NULL..** If eith
abd0: 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
abe0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
abf0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
ac00: 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20 20  OP_Add:         
ac10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
ac20: 65 20 61 73 20 54 4b 5f 50 4c 55 53 2c 20 69 6e  e as TK_PLUS, in
ac30: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
ac40: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
ac50: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  :              /
ac60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4d 49 4e  * same as TK_MIN
ac70: 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  US, in1, in2, ou
ac80: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75  t3 */.case OP_Mu
ac90: 6c 74 69 70 6c 79 3a 20 20 20 20 20 20 20 20 20  ltiply:         
aca0: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
acb0: 54 4b 5f 53 54 41 52 2c 20 69 6e 31 2c 20 69 6e  TK_STAR, in1, in
acc0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
acd0: 4f 50 5f 44 69 76 69 64 65 3a 20 20 20 20 20 20  OP_Divide:      
ace0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
acf0: 65 20 61 73 20 54 4b 5f 53 4c 41 53 48 2c 20 69  e as TK_SLASH, i
ad00: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ad10: 0a 63 61 73 65 20 4f 50 5f 52 65 6d 61 69 6e 64  .case OP_Remaind
ad20: 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  er: {           
ad30: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 45  /* same as TK_RE
ad40: 4d 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74  M, in1, in2, out
ad50: 33 20 2a 2f 0a 20 20 63 68 61 72 20 62 49 6e 74  3 */.  char bInt
ad60: 69 6e 74 3b 20 20 20 2f 2a 20 53 74 61 72 74 65  int;   /* Starte
ad70: 64 20 6f 75 74 20 61 73 20 74 77 6f 20 69 6e 74  d out as two int
ad80: 65 67 65 72 20 6f 70 65 72 61 6e 64 73 20 2a 2f  eger operands */
ad90: 0a 20 20 75 31 36 20 66 6c 61 67 73 3b 20 20 20  .  u16 flags;   
ada0: 20 20 20 2f 2a 20 43 6f 6d 62 69 6e 65 64 20 4d     /* Combined M
adb0: 45 4d 5f 2a 20 66 6c 61 67 73 20 66 72 6f 6d 20  EM_* flags from 
adc0: 62 6f 74 68 20 69 6e 70 75 74 73 20 2a 2f 0a 20  both inputs */. 
add0: 20 75 31 36 20 74 79 70 65 31 3b 20 20 20 20 20   u16 type1;     
ade0: 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70 65   /* Numeric type
adf0: 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61 6e 64   of left operand
ae00: 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65 32 3b   */.  u16 type2;
ae10: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72 69 63        /* Numeric
ae20: 20 74 79 70 65 20 6f 66 20 72 69 67 68 74 20 6f   type of right o
ae30: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20  perand */.  i64 
ae40: 69 41 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 49  iA;         /* I
ae50: 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f 66 20  nteger value of 
ae60: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
ae70: 20 20 69 36 34 20 69 42 3b 20 20 20 20 20 20 20    i64 iB;       
ae80: 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c    /* Integer val
ae90: 75 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72  ue of right oper
aea0: 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20  and */.  double 
aeb0: 72 41 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c  rA;      /* Real
aec0: 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f   value of left o
aed0: 70 65 72 61 6e 64 20 2a 2f 0a 20 20 64 6f 75 62  perand */.  doub
aee0: 6c 65 20 72 42 3b 20 20 20 20 20 20 2f 2a 20 52  le rB;      /* R
aef0: 65 61 6c 20 76 61 6c 75 65 20 6f 66 20 72 69 67  eal value of rig
af00: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 0a 20  ht operand */.. 
af10: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
af20: 70 2d 3e 70 31 5d 3b 0a 20 20 74 79 70 65 31 20  p->p1];.  type1 
af30: 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28 70 49  = numericType(pI
af40: 6e 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  n1);.  pIn2 = &a
af50: 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
af60: 74 79 70 65 32 20 3d 20 6e 75 6d 65 72 69 63 54  type2 = numericT
af70: 79 70 65 28 70 49 6e 32 29 3b 0a 20 20 70 4f 75  ype(pIn2);.  pOu
af80: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
af90: 33 5d 3b 0a 20 20 66 6c 61 67 73 20 3d 20 70 49  3];.  flags = pI
afa0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32  n1->flags | pIn2
afb0: 2d 3e 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28  ->flags;.  if( (
afc0: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
afd0: 29 21 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  )!=0 ) goto arit
afe0: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
aff0: 5f 6e 75 6c 6c 3b 0a 20 20 69 66 28 20 28 74 79  _null;.  if( (ty
b000: 70 65 31 20 26 20 74 79 70 65 32 20 26 20 4d 45  pe1 & type2 & ME
b010: 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a 20 20 20  M_Int)!=0 ){.   
b020: 20 69 41 20 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b   iA = pIn1->u.i;
b030: 0a 20 20 20 20 69 42 20 3d 20 70 49 6e 32 2d 3e  .    iB = pIn2->
b040: 75 2e 69 3b 0a 20 20 20 20 62 49 6e 74 69 6e 74  u.i;.    bIntint
b050: 20 3d 20 31 3b 0a 20 20 20 20 73 77 69 74 63 68   = 1;.    switch
b060: 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b  ( pOp->opcode ){
b070: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 41  .      case OP_A
b080: 64 64 3a 20 20 20 20 20 20 20 69 66 28 20 73 71  dd:       if( sq
b090: 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28 26 69  lite3AddInt64(&i
b0a0: 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70 5f  B,iA) ) goto fp_
b0b0: 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20  math;  break;.  
b0c0: 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62 74      case OP_Subt
b0d0: 72 61 63 74 3a 20 20 69 66 28 20 73 71 6c 69 74  ract:  if( sqlit
b0e0: 65 33 53 75 62 49 6e 74 36 34 28 26 69 42 2c 69  e3SubInt64(&iB,i
b0f0: 41 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74  A) ) goto fp_mat
b100: 68 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  h;  break;.     
b110: 20 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c   case OP_Multipl
b120: 79 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 4d  y:  if( sqlite3M
b130: 75 6c 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20  ulInt64(&iB,iA) 
b140: 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20  ) goto fp_math; 
b150: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b160: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
b170: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
b180: 30 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65  0 ) goto arithme
b190: 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75  tic_result_is_nu
b1a0: 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
b1b0: 69 41 3d 3d 2d 31 20 26 26 20 69 42 3d 3d 53 4d  iA==-1 && iB==SM
b1c0: 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 67  ALLEST_INT64 ) g
b1d0: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 0a 20 20 20  oto fp_math;.   
b1e0: 20 20 20 20 20 69 42 20 2f 3d 20 69 41 3b 0a 20       iB /= iA;. 
b1f0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
b200: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
b210: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
b220: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
b230: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b240: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b250: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
b260: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
b270: 69 42 20 25 3d 20 69 41 3b 0a 20 20 20 20 20 20  iB %= iA;.      
b280: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
b290: 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d  .    }.    pOut-
b2a0: 3e 75 2e 69 20 3d 20 69 42 3b 0a 20 20 20 20 4d  >u.i = iB;.    M
b2b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b2c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20  ut, MEM_Int);.  
b2d0: 7d 65 6c 73 65 7b 0a 20 20 20 20 62 49 6e 74 69  }else{.    bInti
b2e0: 6e 74 20 3d 20 30 3b 0a 66 70 5f 6d 61 74 68 3a  nt = 0;.fp_math:
b2f0: 0a 20 20 20 20 72 41 20 3d 20 73 71 6c 69 74 65  .    rA = sqlite
b300: 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70  3VdbeRealValue(p
b310: 49 6e 31 29 3b 0a 20 20 20 20 72 42 20 3d 20 73  In1);.    rB = s
b320: 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
b330: 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 20 20 73  lue(pIn2);.    s
b340: 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f  witch( pOp->opco
b350: 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  de ){.      case
b360: 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20 20 20   OP_Add:        
b370: 20 72 42 20 2b 3d 20 72 41 3b 20 20 20 20 20 20   rB += rA;      
b380: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
b390: 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20  se OP_Subtract: 
b3a0: 20 20 20 72 42 20 2d 3d 20 72 41 3b 20 20 20 20     rB -= rA;    
b3b0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
b3c0: 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79  case OP_Multiply
b3d0: 3a 20 20 20 20 72 42 20 2a 3d 20 72 41 3b 20 20  :    rB *= rA;  
b3e0: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
b3f0: 20 20 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65    case OP_Divide
b400: 3a 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 28  : {.        /* (
b410: 64 6f 75 62 6c 65 29 30 20 49 6e 20 63 61 73 65  double)0 In case
b420: 20 6f 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   of SQLITE_OMIT_
b430: 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e  FLOATING_POINT..
b440: 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
b450: 20 72 41 3d 3d 28 64 6f 75 62 6c 65 29 30 20 29   rA==(double)0 )
b460: 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63   goto arithmetic
b470: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b  _result_is_null;
b480: 0a 20 20 20 20 20 20 20 20 72 42 20 2f 3d 20 72  .        rB /= r
b490: 41 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b  A;.        break
b4a0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
b4b0: 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20 20 20 20  default: {.     
b4c0: 20 20 20 69 41 20 3d 20 28 69 36 34 29 72 41 3b     iA = (i64)rA;
b4d0: 0a 20 20 20 20 20 20 20 20 69 42 20 3d 20 28 69  .        iB = (i
b4e0: 36 34 29 72 42 3b 0a 20 20 20 20 20 20 20 20 69  64)rB;.        i
b4f0: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
b500: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
b510: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
b520: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 29 20     if( iA==-1 ) 
b530: 69 41 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  iA = 1;.        
b540: 72 42 20 3d 20 28 64 6f 75 62 6c 65 29 28 69 42  rB = (double)(iB
b550: 20 25 20 69 41 29 3b 0a 20 20 20 20 20 20 20 20   % iA);.        
b560: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
b570: 20 20 20 7d 0a 23 69 66 64 65 66 20 53 51 4c 49     }.#ifdef SQLI
b580: 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47  TE_OMIT_FLOATING
b590: 5f 50 4f 49 4e 54 0a 20 20 20 20 70 4f 75 74 2d  _POINT.    pOut-
b5a0: 3e 75 2e 69 20 3d 20 72 42 3b 0a 20 20 20 20 4d  >u.i = rB;.    M
b5b0: 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f  emSetTypeFlag(pO
b5c0: 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65  ut, MEM_Int);.#e
b5d0: 6c 73 65 0a 20 20 20 20 69 66 28 20 73 71 6c 69  lse.    if( sqli
b5e0: 74 65 33 49 73 4e 61 4e 28 72 42 29 20 29 7b 0a  te3IsNaN(rB) ){.
b5f0: 20 20 20 20 20 20 67 6f 74 6f 20 61 72 69 74 68        goto arith
b600: 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f  metic_result_is_
b610: 6e 75 6c 6c 3b 0a 20 20 20 20 7d 0a 20 20 20 20  null;.    }.    
b620: 70 4f 75 74 2d 3e 72 20 3d 20 72 42 3b 0a 20 20  pOut->r = rB;.  
b630: 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67    MemSetTypeFlag
b640: 28 70 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29  (pOut, MEM_Real)
b650: 3b 0a 20 20 20 20 69 66 28 20 28 28 74 79 70 65  ;.    if( ((type
b660: 31 7c 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61  1|type2)&MEM_Rea
b670: 6c 29 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e  l)==0 && !bIntin
b680: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
b690: 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66 66  e3VdbeIntegerAff
b6a0: 69 6e 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20  inity(pOut);.   
b6b0: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
b6c0: 62 72 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74  break;..arithmet
b6d0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
b6e0: 6c 3a 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  l:.  sqlite3Vdbe
b6f0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
b700: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
b710: 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71   Opcode: CollSeq
b720: 20 50 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a   P1 * * P4.**.**
b730: 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
b740: 20 74 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74   to a CollSeq st
b750: 72 75 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78  ruct. If the nex
b760: 74 20 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72  t call to a user
b770: 20 66 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20   function.** or 
b780: 61 67 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20  aggregate calls 
b790: 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f  sqlite3GetFuncCo
b7a0: 6c 6c 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f  llSeq(), this co
b7b0: 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65  llation sequence
b7c0: 20 77 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75   will.** be retu
b7d0: 72 6e 65 64 2e 20 54 68 69 73 20 69 73 20 75 73  rned. This is us
b7e0: 65 64 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d  ed by the built-
b7f0: 69 6e 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20  in min(), max() 
b800: 61 6e 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20  and nullif().** 
b810: 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
b820: 20 49 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65   If P1 is not ze
b830: 72 6f 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61  ro, then it is a
b840: 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 61   register that a
b850: 20 73 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28   subsequent min(
b860: 29 20 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67  ) or.** max() ag
b870: 67 72 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74  gregate will set
b880: 20 74 6f 20 31 20 69 66 20 74 68 65 20 63 75 72   to 1 if the cur
b890: 72 65 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20  rent row is not 
b8a0: 74 68 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a  the minimum or.*
b8b0: 2a 20 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20  * maximum.  The 
b8c0: 50 31 20 72 65 67 69 73 74 65 72 20 69 73 20 69  P1 register is i
b8d0: 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20  nitialized to 0 
b8e0: 62 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  by this instruct
b8f0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  ion..**.** The i
b900: 6e 74 65 72 66 61 63 65 20 75 73 65 64 20 62 79  nterface used by
b910: 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
b920: 69 6f 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65  ion of the afore
b930: 6d 65 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69  mentioned functi
b940: 6f 6e 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65  ons.** to retrie
b950: 76 65 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e  ve the collation
b960: 20 73 65 71 75 65 6e 63 65 20 73 65 74 20 62 79   sequence set by
b970: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   this opcode is 
b980: 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a  not available.**
b990: 20 70 75 62 6c 69 63 6c 79 2c 20 6f 6e 6c 79 20   publicly, only 
b9a0: 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
b9b0: 73 20 64 65 66 69 6e 65 64 20 69 6e 20 66 75 6e  s defined in fun
b9c0: 63 2e 63 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  c.c..*/.case OP_
b9d0: 43 6f 6c 6c 53 65 71 3a 20 7b 0a 20 20 61 73 73  CollSeq: {.  ass
b9e0: 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
b9f0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
ba00: 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b    if( pOp->p1 ){
ba10: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ba20: 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
ba30: 6d 5b 70 4f 70 2d 3e 70 31 5d 2c 20 30 29 3b 0a  m[pOp->p1], 0);.
ba40: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
ba50: 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74  /* Opcode: Funct
ba60: 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  ion P1 P2 P3 P4 
ba70: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
ba80: 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40  r[P3]=func(r[P2@
ba90: 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b  P5]).**.** Invok
baa0: 65 20 61 20 75 73 65 72 20 66 75 6e 63 74 69 6f  e a user functio
bab0: 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69 6e 74  n (P4 is a point
bac0: 65 72 20 74 6f 20 61 20 46 75 6e 63 74 69 6f 6e  er to a Function
bad0: 20 73 74 72 75 63 74 75 72 65 20 74 68 61 74 0a   structure that.
bae0: 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65 20 66  ** defines the f
baf0: 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20 50 35  unction) with P5
bb00: 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e   arguments taken
bb10: 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20 50   from register P
bb20: 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65 73 73  2 and.** success
bb30: 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74  ors.  The result
bb40: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
bb50: 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
bb60: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 52 65  gister P3..** Re
bb70: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
bb80: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
bb90: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
bba0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
bbb0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
bbc0: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
bbd0: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
bbe0: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
bbf0: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
bc00: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
bc10: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
bc20: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
bc30: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
bc40: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
bc50: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
bc60: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
bc70: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
bc80: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
bc90: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
bca0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
bcb0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
bcc0: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
bcd0: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
bce0: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
bcf0: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
bd00: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
bd10: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
bd20: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
bd30: 2a 20 53 65 65 20 61 6c 73 6f 3a 20 41 67 67 53  * See also: AggS
bd40: 74 65 70 20 61 6e 64 20 41 67 67 46 69 6e 61 6c  tep and AggFinal
bd50: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
bd60: 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  tion: {.  int i;
bd70: 0a 20 20 4d 65 6d 20 2a 70 41 72 67 3b 0a 20 20  .  Mem *pArg;.  
bd80: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
bd90: 63 74 78 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76  ctx;.  sqlite3_v
bda0: 61 6c 75 65 20 2a 2a 61 70 56 61 6c 3b 0a 20 20  alue **apVal;.  
bdb0: 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f  int n;..  n = pO
bdc0: 70 2d 3e 70 35 3b 0a 20 20 61 70 56 61 6c 20 3d  p->p5;.  apVal =
bdd0: 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 61 73 73   p->apArg;.  ass
bde0: 65 72 74 28 20 61 70 56 61 6c 20 7c 7c 20 6e 3d  ert( apVal || n=
bdf0: 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
be00: 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
be10: 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
be20: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
be30: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
be40: 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
be50: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
be60: 74 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 6e  t);..  assert( n
be70: 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e  ==0 || (pOp->p2>
be80: 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d  0 && pOp->p2+n<=
be90: 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
bea0: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
beb0: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
bec0: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
bed0: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
bee0: 70 41 72 67 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pArg = &aMem[pOp
bef0: 2d 3e 70 32 5d 3b 0a 20 20 66 6f 72 28 69 3d 30  ->p2];.  for(i=0
bf00: 3b 20 69 3c 6e 3b 20 69 2b 2b 2c 20 70 41 72 67  ; i<n; i++, pArg
bf10: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
bf20: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 41 72 67   memIsValid(pArg
bf30: 29 20 29 3b 0a 20 20 20 20 61 70 56 61 6c 5b 69  ) );.    apVal[i
bf40: 5d 20 3d 20 70 41 72 67 3b 0a 20 20 20 20 44 65  ] = pArg;.    De
bf50: 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 41 72  ephemeralize(pAr
bf60: 67 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52  g);.    REGISTER
bf70: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
bf80: 2c 20 70 41 72 67 29 3b 0a 20 20 7d 0a 0a 20 20  , pArg);.  }..  
bf90: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
bfa0: 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20  ype==P4_FUNCDEF 
bfb0: 29 3b 0a 20 20 63 74 78 2e 70 46 75 6e 63 20 3d  );.  ctx.pFunc =
bfc0: 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a   pOp->p4.pFunc;.
bfd0: 20 20 63 74 78 2e 69 4f 70 20 3d 20 70 63 3b 0a    ctx.iOp = pc;.
bfe0: 20 20 63 74 78 2e 70 56 64 62 65 20 3d 20 70 3b    ctx.pVdbe = p;
bff0: 0a 0a 20 20 2f 2a 20 54 68 65 20 6f 75 74 70 75  ..  /* The outpu
c000: 74 20 63 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61  t cell may alrea
c010: 64 79 20 68 61 76 65 20 61 20 62 75 66 66 65 72  dy have a buffer
c020: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65   allocated. Move
c030: 0a 20 20 2a 2a 20 74 68 65 20 70 6f 69 6e 74 65  .  ** the pointe
c040: 72 20 74 6f 20 63 74 78 2e 73 20 73 6f 20 69 6e  r to ctx.s so in
c050: 20 63 61 73 65 20 74 68 65 20 75 73 65 72 2d 66   case the user-f
c060: 75 6e 63 74 69 6f 6e 20 63 61 6e 20 75 73 65 0a  unction can use.
c070: 20 20 2a 2a 20 74 68 65 20 61 6c 72 65 61 64 79    ** the already
c080: 20 61 6c 6c 6f 63 61 74 65 64 20 62 75 66 66 65   allocated buffe
c090: 72 20 69 6e 73 74 65 61 64 20 6f 66 20 61 6c 6c  r instead of all
c0a0: 6f 63 61 74 69 6e 67 20 61 20 6e 65 77 20 6f 6e  ocating a new on
c0b0: 65 2e 0a 20 20 2a 2f 0a 20 20 6d 65 6d 63 70 79  e..  */.  memcpy
c0c0: 28 26 63 74 78 2e 73 2c 20 70 4f 75 74 2c 20 73  (&ctx.s, pOut, s
c0d0: 69 7a 65 6f 66 28 4d 65 6d 29 29 3b 0a 20 20 70  izeof(Mem));.  p
c0e0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
c0f0: 5f 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 78  _Null;.  pOut->x
c100: 44 65 6c 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d  Del = 0;.  pOut-
c110: 3e 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20  >zMalloc = 0;.  
c120: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 26  MemSetTypeFlag(&
c130: 63 74 78 2e 73 2c 20 4d 45 4d 5f 4e 75 6c 6c 29  ctx.s, MEM_Null)
c140: 3b 0a 0a 20 20 63 74 78 2e 66 45 72 72 6f 72 4f  ;..  ctx.fErrorO
c150: 72 41 75 78 20 3d 20 30 3b 0a 20 20 69 66 28 20  rAux = 0;.  if( 
c160: 63 74 78 2e 70 46 75 6e 63 2d 3e 66 75 6e 63 46  ctx.pFunc->funcF
c170: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 46 55  lags & SQLITE_FU
c180: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 29 7b 0a 20  NC_NEEDCOLL ){. 
c190: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61     assert( pOp>a
c1a0: 4f 70 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  Op );.    assert
c1b0: 28 20 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65  ( pOp[-1].p4type
c1c0: 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a  ==P4_COLLSEQ );.
c1d0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
c1e0: 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
c1f0: 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74  ollSeq );.    ct
c200: 78 2e 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31  x.pColl = pOp[-1
c210: 5d 2e 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a  ].p4.pColl;.  }.
c220: 20 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20    db->lastRowid 
c230: 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 28  = lastRowid;.  (
c240: 2a 63 74 78 2e 70 46 75 6e 63 2d 3e 78 46 75 6e  *ctx.pFunc->xFun
c250: 63 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  c)(&ctx, n, apVa
c260: 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
c270: 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 6c  505-23230 */.  l
c280: 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c  astRowid = db->l
c290: 61 73 74 52 6f 77 69 64 3b 0a 0a 20 20 69 66 28  astRowid;..  if(
c2a0: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
c2b0: 64 20 29 7b 0a 20 20 20 20 2f 2a 20 45 76 65 6e  d ){.    /* Even
c2c0: 20 74 68 6f 75 67 68 20 61 20 6d 61 6c 6c 6f 63   though a malloc
c2d0: 28 29 20 68 61 73 20 66 61 69 6c 65 64 2c 20 74  () has failed, t
c2e0: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c2f0: 6e 20 6f 66 20 74 68 65 0a 20 20 20 20 2a 2a 20  n of the.    ** 
c300: 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 6d 61  user function ma
c310: 79 20 68 61 76 65 20 63 61 6c 6c 65 64 20 61 6e  y have called an
c320: 20 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f   sqlite3_result_
c330: 58 58 58 28 29 20 66 75 6e 63 74 69 6f 6e 0a 20  XXX() function. 
c340: 20 20 20 2a 2a 20 74 6f 20 72 65 74 75 72 6e 20     ** to return 
c350: 61 20 76 61 6c 75 65 2e 20 54 68 65 20 66 6f 6c  a value. The fol
c360: 6c 6f 77 69 6e 67 20 63 61 6c 6c 20 72 65 6c 65  lowing call rele
c370: 61 73 65 73 20 61 6e 79 20 72 65 73 6f 75 72 63  ases any resourc
c380: 65 73 0a 20 20 20 20 2a 2a 20 61 73 73 6f 63 69  es.    ** associ
c390: 61 74 65 64 20 77 69 74 68 20 73 75 63 68 20 61  ated with such a
c3a0: 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
c3b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
c3c0: 6d 52 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29  mRelease(&ctx.s)
c3d0: 3b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ;.    goto no_me
c3e0: 6d 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20  m;.  }..  /* If 
c3f0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  the function ret
c400: 75 72 6e 65 64 20 61 6e 20 65 72 72 6f 72 2c 20  urned an error, 
c410: 74 68 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69  throw an excepti
c420: 6f 6e 20 2a 2f 0a 20 20 69 66 28 20 63 74 78 2e  on */.  if( ctx.
c430: 66 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20  fErrorOrAux ){. 
c440: 20 20 20 69 66 28 20 63 74 78 2e 69 73 45 72 72     if( ctx.isErr
c450: 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  or ){.      sqli
c460: 74 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d  te3SetString(&p-
c470: 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 25  >zErrMsg, db, "%
c480: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
c490: 65 5f 74 65 78 74 28 26 63 74 78 2e 73 29 29 3b  e_text(&ctx.s));
c4a0: 0a 20 20 20 20 20 20 72 63 20 3d 20 63 74 78 2e  .      rc = ctx.
c4b0: 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
c4c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
c4d0: 6c 65 74 65 41 75 78 44 61 74 61 28 70 2c 20 70  leteAuxData(p, p
c4e0: 63 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 7d  c, pOp->p1);.  }
c4f0: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
c500: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
c510: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
c520: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 73 71 6c  ster P3 */.  sql
c530: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
c540: 63 6f 64 69 6e 67 28 26 63 74 78 2e 73 2c 20 65  coding(&ctx.s, e
c550: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 61 73 73 65  ncoding);.  asse
c560: 72 74 28 20 70 4f 75 74 2d 3e 66 6c 61 67 73 3d  rt( pOut->flags=
c570: 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20 20 6d  =MEM_Null );.  m
c580: 65 6d 63 70 79 28 70 4f 75 74 2c 20 26 63 74 78  emcpy(pOut, &ctx
c590: 2e 73 2c 20 73 69 7a 65 6f 66 28 4d 65 6d 29 29  .s, sizeof(Mem))
c5a0: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ;.  if( sqlite3V
c5b0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75  dbeMemTooBig(pOu
c5c0: 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  t) ){.    goto t
c5d0: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 23 69 66  oo_big;.  }..#if
c5e0: 20 30 0a 20 20 2f 2a 20 54 68 65 20 61 70 70 2d   0.  /* The app-
c5f0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
c600: 20 68 61 73 20 64 6f 6e 65 20 73 6f 6d 65 74 68   has done someth
c610: 69 6e 67 20 74 68 61 74 20 61 73 20 63 61 75 73  ing that as caus
c620: 65 64 20 74 68 69 73 0a 20 20 2a 2a 20 73 74 61  ed this.  ** sta
c630: 74 65 6d 65 6e 74 20 74 6f 20 65 78 70 69 72 65  tement to expire
c640: 2e 20 20 28 50 65 72 68 61 70 73 20 74 68 65 20  .  (Perhaps the 
c650: 66 75 6e 63 74 69 6f 6e 20 63 61 6c 6c 65 64 20  function called 
c660: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 29 0a 20  sqlite3_exec(). 
c670: 20 2a 2a 20 77 69 74 68 20 61 20 43 52 45 41 54   ** with a CREAT
c680: 45 20 54 41 42 4c 45 20 73 74 61 74 65 6d 65 6e  E TABLE statemen
c690: 74 2e 29 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70  t.).  */.  if( p
c6a0: 2d 3e 65 78 70 69 72 65 64 20 29 20 72 63 20 3d  ->expired ) rc =
c6b0: 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 3b 0a 23   SQLITE_ABORT;.#
c6c0: 65 6e 64 69 66 0a 0a 20 20 52 45 47 49 53 54 45  endif..  REGISTE
c6d0: 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
c6e0: 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54 45   pOut);.  UPDATE
c6f0: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
c700: 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  ut);.  break;.}.
c710: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 41  ./* Opcode: BitA
c720: 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  nd P1 P2 P3 * *.
c730: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 5b  ** Synopsis:  r[
c740: 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a  P3]=r[P1]&r[P2].
c750: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
c760: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
c770: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
c780: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
c790: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
c7a0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
c7b0: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
c7c0: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
c7d0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
c7e0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
c7f0: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
c800: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
c810: 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72 5b 50  psis:  r[P3]=r[P
c820: 31 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54  1]|r[P2].**.** T
c830: 61 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65  ake the bit-wise
c840: 20 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65   OR of the value
c850: 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  s in register P1
c860: 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73   and P2 and.** s
c870: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
c880: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
c890: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
c8a0: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
c8b0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
c8c0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68  */./* Opcode: Sh
c8d0: 69 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33  iftLeft P1 P2 P3
c8e0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
c8f0: 3a 20 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c  :  r[P3]=r[P2]<<
c900: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66  r[P1].**.** Shif
c910: 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61  t the integer va
c920: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
c930: 50 32 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62  P2 to the left b
c940: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
c950: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
c960: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
c970: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
c980: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
c990: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
c9a0: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
c9b0: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
c9c0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
c9d0: 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ULL..*/./* Opcod
c9e0: 65 3a 20 53 68 69 66 74 52 69 67 68 74 20 50 31  e: ShiftRight P1
c9f0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
ca00: 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
ca10: 5b 50 32 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a  [P2]>>r[P1].**.*
ca20: 2a 20 53 68 69 66 74 20 74 68 65 20 69 6e 74 65  * Shift the inte
ca30: 67 65 72 20 76 61 6c 75 65 20 69 6e 20 72 65 67  ger value in reg
ca40: 69 73 74 65 72 20 50 32 20 74 6f 20 74 68 65 20  ister P2 to the 
ca50: 72 69 67 68 74 20 62 79 20 74 68 65 0a 2a 2a 20  right by the.** 
ca60: 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 73  number of bits s
ca70: 70 65 63 69 66 69 65 64 20 62 79 20 74 68 65 20  pecified by the 
ca80: 69 6e 74 65 67 65 72 20 69 6e 20 72 65 67 69 73  integer in regis
ca90: 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65  ter P1..** Store
caa0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72   the result in r
cab0: 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49  egister P3..** I
cac0: 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69  f either input i
cad0: 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75  s NULL, the resu
cae0: 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63  lt is NULL..*/.c
caf0: 61 73 65 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20  ase OP_BitAnd:  
cb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
cb10: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54  * same as TK_BIT
cb20: 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  AND, in1, in2, o
cb30: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42  ut3 */.case OP_B
cb40: 69 74 4f 72 3a 20 20 20 20 20 20 20 20 20 20 20  itOr:           
cb50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
cb60: 73 20 54 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c  s TK_BITOR, in1,
cb70: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61   in2, out3 */.ca
cb80: 73 65 20 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a  se OP_ShiftLeft:
cb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cba0: 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49   same as TK_LSHI
cbb0: 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75  FT, in1, in2, ou
cbc0: 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68  t3 */.case OP_Sh
cbd0: 69 66 74 52 69 67 68 74 3a 20 7b 20 20 20 20 20  iftRight: {     
cbe0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
cbf0: 20 54 4b 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c   TK_RSHIFT, in1,
cc00: 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
cc10: 69 36 34 20 69 41 3b 0a 20 20 75 36 34 20 75 41  i64 iA;.  u64 uA
cc20: 3b 0a 20 20 69 36 34 20 69 42 3b 0a 20 20 75 38  ;.  i64 iB;.  u8
cc30: 20 6f 70 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26   op;..  pIn1 = &
cc40: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
cc50: 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn2 = &aMem[pO
cc60: 70 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d  p->p2];.  pOut =
cc70: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
cc80: 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
cc90: 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67  ags | pIn2->flag
cca0: 73 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  s) & MEM_Null ){
ccb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ccc0: 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29  MemSetNull(pOut)
ccd0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
cce0: 0a 20 20 69 41 20 3d 20 73 71 6c 69 74 65 33 56  .  iA = sqlite3V
ccf0: 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
cd00: 29 3b 0a 20 20 69 42 20 3d 20 73 71 6c 69 74 65  );.  iB = sqlite
cd10: 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49  3VdbeIntValue(pI
cd20: 6e 31 29 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d  n1);.  op = pOp-
cd30: 3e 6f 70 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f  >opcode;.  if( o
cd40: 70 3d 3d 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a  p==OP_BitAnd ){.
cd50: 20 20 20 20 69 41 20 26 3d 20 69 42 3b 0a 20 20      iA &= iB;.  
cd60: 7d 65 6c 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50  }else if( op==OP
cd70: 5f 42 69 74 4f 72 20 29 7b 0a 20 20 20 20 69 41  _BitOr ){.    iA
cd80: 20 7c 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20   |= iB;.  }else 
cd90: 69 66 28 20 69 42 21 3d 30 20 29 7b 0a 20 20 20  if( iB!=0 ){.   
cda0: 20 61 73 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f   assert( op==OP_
cdb0: 53 68 69 66 74 52 69 67 68 74 20 7c 7c 20 6f 70  ShiftRight || op
cdc0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 29  ==OP_ShiftLeft )
cdd0: 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 73 68 69  ;..    /* If shi
cde0: 66 74 69 6e 67 20 62 79 20 61 20 6e 65 67 61 74  fting by a negat
cdf0: 69 76 65 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66  ive amount, shif
ce00: 74 20 69 6e 20 74 68 65 20 6f 74 68 65 72 20 64  t in the other d
ce10: 69 72 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  irection */.    
ce20: 69 66 28 20 69 42 3c 30 20 29 7b 0a 20 20 20 20  if( iB<0 ){.    
ce30: 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 68 69    assert( OP_Shi
ce40: 66 74 52 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66  ftRight==OP_Shif
ce50: 74 4c 65 66 74 2b 31 20 29 3b 0a 20 20 20 20 20  tLeft+1 );.     
ce60: 20 6f 70 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74   op = 2*OP_Shift
ce70: 4c 65 66 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20  Left + 1 - op;. 
ce80: 20 20 20 20 20 69 42 20 3d 20 69 42 3e 28 2d 36       iB = iB>(-6
ce90: 34 29 20 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20  4) ? -iB : 64;. 
cea0: 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 69 42     }..    if( iB
ceb0: 3e 3d 36 34 20 29 7b 0a 20 20 20 20 20 20 69 41  >=64 ){.      iA
cec0: 20 3d 20 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d   = (iA>=0 || op=
ced0: 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 29 20 3f  =OP_ShiftLeft) ?
cee0: 20 30 20 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c   0 : -1;.    }el
cef0: 73 65 7b 0a 20 20 20 20 20 20 6d 65 6d 63 70 79  se{.      memcpy
cf00: 28 26 75 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f  (&uA, &iA, sizeo
cf10: 66 28 75 41 29 29 3b 0a 20 20 20 20 20 20 69 66  f(uA));.      if
cf20: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ( op==OP_ShiftLe
cf30: 66 74 20 29 7b 0a 20 20 20 20 20 20 20 20 75 41  ft ){.        uA
cf40: 20 3c 3c 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d   <<= iB;.      }
cf50: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 75 41  else{.        uA
cf60: 20 3e 3e 3d 20 69 42 3b 0a 20 20 20 20 20 20 20   >>= iB;.       
cf70: 20 2f 2a 20 53 69 67 6e 2d 65 78 74 65 6e 64 20   /* Sign-extend 
cf80: 6f 6e 20 61 20 72 69 67 68 74 20 73 68 69 66 74  on a right shift
cf90: 20 6f 66 20 61 20 6e 65 67 61 74 69 76 65 20 6e   of a negative n
cfa0: 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  umber */.       
cfb0: 20 69 66 28 20 69 41 3c 30 20 29 20 75 41 20 7c   if( iA<0 ) uA |
cfc0: 3d 20 28 28 28 28 75 36 34 29 30 78 66 66 66 66  = ((((u64)0xffff
cfd0: 66 66 66 66 29 3c 3c 33 32 29 7c 30 78 66 66 66  ffff)<<32)|0xfff
cfe0: 66 66 66 66 66 29 20 3c 3c 20 28 36 34 2d 69 42  fffff) << (64-iB
cff0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
d000: 20 6d 65 6d 63 70 79 28 26 69 41 2c 20 26 75 41   memcpy(&iA, &uA
d010: 2c 20 73 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20  , sizeof(iA));. 
d020: 20 20 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d     }.  }.  pOut-
d030: 3e 75 2e 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d  >u.i = iA;.  Mem
d040: 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
d050: 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72  , MEM_Int);.  br
d060: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
d070: 65 3a 20 41 64 64 49 6d 6d 20 20 50 31 20 50 32  e: AddImm  P1 P2
d080: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
d090: 69 73 3a 20 20 72 5b 50 31 5d 3d 72 5b 50 31 5d  is:  r[P1]=r[P1]
d0a0: 2b 50 32 0a 2a 2a 20 0a 2a 2a 20 41 64 64 20 74  +P2.** .** Add t
d0b0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 50 32 20 74  he constant P2 t
d0c0: 6f 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  o the value in r
d0d0: 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 54  egister P1..** T
d0e0: 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77  he result is alw
d0f0: 61 79 73 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  ays an integer..
d100: 2a 2a 0a 2a 2a 20 54 6f 20 66 6f 72 63 65 20 61  **.** To force a
d110: 6e 79 20 72 65 67 69 73 74 65 72 20 74 6f 20 62  ny register to b
d120: 65 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 6a 75  e an integer, ju
d130: 73 74 20 61 64 64 20 30 2e 0a 2a 2f 0a 63 61 73  st add 0..*/.cas
d140: 65 20 4f 50 5f 41 64 64 49 6d 6d 3a 20 7b 20 20  e OP_AddImm: {  
d150: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
d160: 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
d170: 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d  em[pOp->p1];.  m
d180: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
d190: 70 2c 20 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  p, pIn1);.  sqli
d1a0: 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65  te3VdbeMemIntege
d1b0: 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70 49  rify(pIn1);.  pI
d1c0: 6e 31 2d 3e 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e  n1->u.i += pOp->
d1d0: 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  p2;.  break;.}..
d1e0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 73 74 42  /* Opcode: MustB
d1f0: 65 49 6e 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  eInt P1 P2 * * *
d200: 0a 2a 2a 20 0a 2a 2a 20 46 6f 72 63 65 20 74 68  .** .** Force th
d210: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
d220: 74 65 72 20 50 31 20 74 6f 20 62 65 20 61 6e 20  ter P1 to be an 
d230: 69 6e 74 65 67 65 72 2e 20 20 49 66 20 74 68 65  integer.  If the
d240: 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
d250: 69 73 20 6e 6f 74 20 61 6e 20 69 6e 74 65 67 65  is not an intege
d260: 72 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65 20  r and cannot be 
d270: 63 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61  converted into a
d280: 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 77 69 74  n integer.** wit
d290: 68 6f 75 74 20 64 61 74 61 20 6c 6f 73 73 2c 20  hout data loss, 
d2a0: 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
d2b0: 61 74 65 6c 79 20 74 6f 20 50 32 2c 20 6f 72 20  ately to P2, or 
d2c0: 69 66 20 50 32 3d 3d 30 0a 2a 2a 20 72 61 69 73  if P2==0.** rais
d2d0: 65 20 61 6e 20 53 51 4c 49 54 45 5f 4d 49 53 4d  e an SQLITE_MISM
d2e0: 41 54 43 48 20 65 78 63 65 70 74 69 6f 6e 2e 0a  ATCH exception..
d2f0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 73 74 42  */.case OP_MustB
d300: 65 49 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  eInt: {         
d310: 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
d320: 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
d330: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66  m[pOp->p1];.  if
d340: 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26  ( (pIn1->flags &
d350: 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a   MEM_Int)==0 ){.
d360: 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74      applyAffinit
d370: 79 28 70 49 6e 31 2c 20 53 51 4c 49 54 45 5f 41  y(pIn1, SQLITE_A
d380: 46 46 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f  FF_NUMERIC, enco
d390: 64 69 6e 67 29 3b 0a 20 20 20 20 56 64 62 65 42  ding);.    VdbeB
d3a0: 72 61 6e 63 68 54 61 6b 65 6e 28 28 70 49 6e 31  ranchTaken((pIn1
d3b0: 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29  ->flags&MEM_Int)
d3c0: 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28  ==0, 2);.    if(
d3d0: 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
d3e0: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20  MEM_Int)==0 ){. 
d3f0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32       if( pOp->p2
d400: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
d410: 63 20 3d 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41  c = SQLITE_MISMA
d420: 54 43 48 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  TCH;.        got
d430: 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
d440: 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 65 6c 73  rror;.      }els
d450: 65 7b 0a 20 20 20 20 20 20 20 20 70 63 20 3d 20  e{.        pc = 
d460: 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20  pOp->p2 - 1;.   
d470: 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
d480: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d490: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
d4a0: 49 6e 31 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20  In1, MEM_Int);. 
d4b0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
d4c0: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
d4d0: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a  LOATING_POINT./*
d4e0: 20 4f 70 63 6f 64 65 3a 20 52 65 61 6c 41 66 66   Opcode: RealAff
d4f0: 69 6e 69 74 79 20 50 31 20 2a 20 2a 20 2a 20 2a  inity P1 * * * *
d500: 0a 2a 2a 0a 2a 2a 20 49 66 20 72 65 67 69 73 74  .**.** If regist
d510: 65 72 20 50 31 20 68 6f 6c 64 73 20 61 6e 20 69  er P1 holds an i
d520: 6e 74 65 67 65 72 20 63 6f 6e 76 65 72 74 20 69  nteger convert i
d530: 74 20 74 6f 20 61 20 72 65 61 6c 20 76 61 6c 75  t to a real valu
d540: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  e..**.** This op
d550: 63 6f 64 65 20 69 73 20 75 73 65 64 20 77 68 65  code is used whe
d560: 6e 20 65 78 74 72 61 63 74 69 6e 67 20 69 6e 66  n extracting inf
d570: 6f 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 61 20  ormation from a 
d580: 63 6f 6c 75 6d 6e 20 74 68 61 74 0a 2a 2a 20 68  column that.** h
d590: 61 73 20 52 45 41 4c 20 61 66 66 69 6e 69 74 79  as REAL affinity
d5a0: 2e 20 20 53 75 63 68 20 63 6f 6c 75 6d 6e 20 76  .  Such column v
d5b0: 61 6c 75 65 73 20 6d 61 79 20 73 74 69 6c 6c 20  alues may still 
d5c0: 62 65 20 73 74 6f 72 65 64 20 61 73 0a 2a 2a 20  be stored as.** 
d5d0: 69 6e 74 65 67 65 72 73 2c 20 66 6f 72 20 73 70  integers, for sp
d5e0: 61 63 65 20 65 66 66 69 63 69 65 6e 63 79 2c 20  ace efficiency, 
d5f0: 62 75 74 20 61 66 74 65 72 20 65 78 74 72 61 63  but after extrac
d600: 74 69 6f 6e 20 77 65 20 77 61 6e 74 20 74 68 65  tion we want the
d610: 6d 0a 2a 2a 20 74 6f 20 68 61 76 65 20 6f 6e 6c  m.** to have onl
d620: 79 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a  y a real value..
d630: 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 6c 41  */.case OP_RealA
d640: 66 66 69 6e 69 74 79 3a 20 7b 20 20 20 20 20 20  ffinity: {      
d650: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69              /* i
d660: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
d670: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
d680: 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
d690: 20 26 20 4d 45 4d 5f 49 6e 74 20 29 7b 0a 20 20   & MEM_Int ){.  
d6a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
d6b0: 52 65 61 6c 69 66 79 28 70 49 6e 31 29 3b 0a 20  Realify(pIn1);. 
d6c0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
d6d0: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
d6e0: 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f  LITE_OMIT_CAST./
d6f0: 2a 20 4f 70 63 6f 64 65 3a 20 54 6f 54 65 78 74  * Opcode: ToText
d700: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
d710: 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75  * Force the valu
d720: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
d730: 20 74 6f 20 62 65 20 74 65 78 74 2e 0a 2a 2a 20   to be text..** 
d740: 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 73 20  If the value is 
d750: 6e 75 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74  numeric, convert
d760: 20 69 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20   it to a string 
d770: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75  using the.** equ
d780: 69 76 61 6c 65 6e 74 20 6f 66 20 73 70 72 69 6e  ivalent of sprin
d790: 74 66 28 29 2e 20 20 42 6c 6f 62 20 76 61 6c 75  tf().  Blob valu
d7a0: 65 73 20 61 72 65 20 75 6e 63 68 61 6e 67 65 64  es are unchanged
d7b0: 20 61 6e 64 0a 2a 2a 20 61 72 65 20 61 66 74 65   and.** are afte
d7c0: 72 77 61 72 64 73 20 73 69 6d 70 6c 79 20 69 6e  rwards simply in
d7d0: 74 65 72 70 72 65 74 65 64 20 61 73 20 74 65 78  terpreted as tex
d7e0: 74 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c 20  t..**.** A NULL 
d7f0: 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68 61  value is not cha
d800: 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f 75  nged by this rou
d810: 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69 6e  tine.  It remain
d820: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20  s NULL..*/.case 
d830: 4f 50 5f 54 6f 54 65 78 74 3a 20 7b 20 20 20 20  OP_ToText: {    
d840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d850: 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f 54   same as TK_TO_T
d860: 45 58 54 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49  EXT, in1 */.  pI
d870: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
d880: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
d890: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
d8a0: 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c  ;.  if( pIn1->fl
d8b0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
d8c0: 20 62 72 65 61 6b 3b 0a 20 20 61 73 73 65 72 74   break;.  assert
d8d0: 28 20 4d 45 4d 5f 53 74 72 3d 3d 28 4d 45 4d 5f  ( MEM_Str==(MEM_
d8e0: 42 6c 6f 62 3e 3e 33 29 20 29 3b 0a 20 20 70 49  Blob>>3) );.  pI
d8f0: 6e 31 2d 3e 66 6c 61 67 73 20 7c 3d 20 28 70 49  n1->flags |= (pI
d900: 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 42 6c  n1->flags&MEM_Bl
d910: 6f 62 29 3e 3e 33 3b 0a 20 20 61 70 70 6c 79 41  ob)>>3;.  applyA
d920: 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 53 51  ffinity(pIn1, SQ
d930: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 65  LITE_AFF_TEXT, e
d940: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 72 63 20 3d  ncoding);.  rc =
d950: 20 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31   ExpandBlob(pIn1
d960: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  );.  assert( pIn
d970: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 53  1->flags & MEM_S
d980: 74 72 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63  tr || db->malloc
d990: 46 61 69 6c 65 64 20 29 3b 0a 20 20 70 49 6e 31  Failed );.  pIn1
d9a0: 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d 45 4d  ->flags &= ~(MEM
d9b0: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45  _Int|MEM_Real|ME
d9c0: 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 5a 65 72 6f 29  M_Blob|MEM_Zero)
d9d0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
d9e0: 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20  LOBSIZE(pIn1);. 
d9f0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
da00: 63 6f 64 65 3a 20 54 6f 42 6c 6f 62 20 50 31 20  code: ToBlob P1 
da10: 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f  * * * *.**.** Fo
da20: 72 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  rce the value in
da30: 20 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20   register P1 to 
da40: 62 65 20 61 20 42 4c 4f 42 2e 0a 2a 2a 20 49 66  be a BLOB..** If
da50: 20 74 68 65 20 76 61 6c 75 65 20 69 73 20 6e 75   the value is nu
da60: 6d 65 72 69 63 2c 20 63 6f 6e 76 65 72 74 20 69  meric, convert i
da70: 74 20 74 6f 20 61 20 73 74 72 69 6e 67 20 66 69  t to a string fi
da80: 72 73 74 2e 0a 2a 2a 20 53 74 72 69 6e 67 73 20  rst..** Strings 
da90: 61 72 65 20 73 69 6d 70 6c 79 20 72 65 69 6e 74  are simply reint
daa0: 65 72 70 72 65 74 65 64 20 61 73 20 62 6c 6f 62  erpreted as blob
dab0: 73 20 77 69 74 68 20 6e 6f 20 63 68 61 6e 67 65  s with no change
dac0: 0a 2a 2a 20 74 6f 20 74 68 65 20 75 6e 64 65 72  .** to the under
dad0: 6c 79 69 6e 67 20 64 61 74 61 2e 0a 2a 2a 0a 2a  lying data..**.*
dae0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
daf0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
db00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
db10: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
db20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 42 6c  .*/.case OP_ToBl
db30: 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ob: {           
db40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
db50: 73 20 54 4b 5f 54 4f 5f 42 4c 4f 42 2c 20 69 6e  s TK_TO_BLOB, in
db60: 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
db70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
db80: 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  if( pIn1->flags 
db90: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 20 62 72 65  & MEM_Null ) bre
dba0: 61 6b 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  ak;.  if( (pIn1-
dbb0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f  >flags & MEM_Blo
dbc0: 62 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70  b)==0 ){.    app
dbd0: 6c 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c  lyAffinity(pIn1,
dbe0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58 54   SQLITE_AFF_TEXT
dbf0: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
dc00: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
dc10: 6c 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 20 7c  lags & MEM_Str |
dc20: 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c  | db->mallocFail
dc30: 65 64 20 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  ed );.    MemSet
dc40: 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d  TypeFlag(pIn1, M
dc50: 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 7d 65 6c 73  EM_Blob);.  }els
dc60: 65 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 66 6c 61  e{.    pIn1->fla
dc70: 67 73 20 26 3d 20 7e 28 4d 45 4d 5f 54 79 70 65  gs &= ~(MEM_Type
dc80: 4d 61 73 6b 26 7e 4d 45 4d 5f 42 6c 6f 62 29 3b  Mask&~MEM_Blob);
dc90: 0a 20 20 7d 0a 20 20 55 50 44 41 54 45 5f 4d 41  .  }.  UPDATE_MA
dca0: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 49 6e 31 29  X_BLOBSIZE(pIn1)
dcb0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
dcc0: 20 4f 70 63 6f 64 65 3a 20 54 6f 4e 75 6d 65 72   Opcode: ToNumer
dcd0: 69 63 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  ic P1 * * * *.**
dce0: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
dcf0: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
dd00: 50 31 20 74 6f 20 62 65 20 6e 75 6d 65 72 69 63  P1 to be numeric
dd10: 20 28 65 69 74 68 65 72 20 61 6e 0a 2a 2a 20 69   (either an.** i
dd20: 6e 74 65 67 65 72 20 6f 72 20 61 20 66 6c 6f 61  nteger or a floa
dd30: 74 69 6e 67 2d 70 6f 69 6e 74 20 6e 75 6d 62 65  ting-point numbe
dd40: 72 2e 29 0a 2a 2a 20 49 66 20 74 68 65 20 76 61  r.).** If the va
dd50: 6c 75 65 20 69 73 20 74 65 78 74 20 6f 72 20 62  lue is text or b
dd60: 6c 6f 62 2c 20 74 72 79 20 74 6f 20 63 6f 6e 76  lob, try to conv
dd70: 65 72 74 20 69 74 20 74 6f 20 61 6e 20 75 73 69  ert it to an usi
dd80: 6e 67 20 74 68 65 0a 2a 2a 20 65 71 75 69 76 61  ng the.** equiva
dd90: 6c 65 6e 74 20 6f 66 20 61 74 6f 69 28 29 20 6f  lent of atoi() o
dda0: 72 20 61 74 6f 66 28 29 20 61 6e 64 20 73 74 6f  r atof() and sto
ddb0: 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63 68 20  re 0 if no such 
ddc0: 63 6f 6e 76 65 72 73 69 6f 6e 20 0a 2a 2a 20 69  conversion .** i
ddd0: 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a  s possible..**.*
dde0: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
ddf0: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
de00: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
de10: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
de20: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 4e 75  .*/.case OP_ToNu
de30: 6d 65 72 69 63 3a 20 7b 20 20 20 20 20 20 20 20  meric: {        
de40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
de50: 65 20 61 73 20 54 4b 5f 54 4f 5f 4e 55 4d 45 52  e as TK_TO_NUMER
de60: 49 43 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  IC, in1 */.  pIn
de70: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
de80: 31 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1];.  sqlite3Vdb
de90: 65 4d 65 6d 4e 75 6d 65 72 69 66 79 28 70 49 6e  eMemNumerify(pIn
dea0: 31 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  1);.  break;.}.#
deb0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
dec0: 4f 4d 49 54 5f 43 41 53 54 20 2a 2f 0a 0a 2f 2a  OMIT_CAST */../*
ded0: 20 4f 70 63 6f 64 65 3a 20 54 6f 49 6e 74 20 50   Opcode: ToInt P
dee0: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20  1 * * * *.**.** 
def0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
df00: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
df10: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
df20: 20 20 49 66 0a 2a 2a 20 54 68 65 20 76 61 6c 75    If.** The valu
df30: 65 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 61  e is currently a
df40: 20 72 65 61 6c 20 6e 75 6d 62 65 72 2c 20 64 72   real number, dr
df50: 6f 70 20 69 74 73 20 66 72 61 63 74 69 6f 6e 61  op its fractiona
df60: 6c 20 70 61 72 74 2e 0a 2a 2a 20 49 66 20 74 68  l part..** If th
df70: 65 20 76 61 6c 75 65 20 69 73 20 74 65 78 74 20  e value is text 
df80: 6f 72 20 62 6c 6f 62 2c 20 74 72 79 20 74 6f 20  or blob, try to 
df90: 63 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 6e  convert it to an
dfa0: 20 69 6e 74 65 67 65 72 20 75 73 69 6e 67 20 74   integer using t
dfb0: 68 65 0a 2a 2a 20 65 71 75 69 76 61 6c 65 6e 74  he.** equivalent
dfc0: 20 6f 66 20 61 74 6f 69 28 29 20 61 6e 64 20 73   of atoi() and s
dfd0: 74 6f 72 65 20 30 20 69 66 20 6e 6f 20 73 75 63  tore 0 if no suc
dfe0: 68 20 63 6f 6e 76 65 72 73 69 6f 6e 20 69 73 20  h conversion is 
dff0: 70 6f 73 73 69 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  possible..**.** 
e000: 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20  A NULL value is 
e010: 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79 20 74  not changed by t
e020: 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74  his routine.  It
e030: 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a   remains NULL..*
e040: 2f 0a 63 61 73 65 20 4f 50 5f 54 6f 49 6e 74 3a  /.case OP_ToInt:
e050: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e060: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
e070: 4b 5f 54 4f 5f 49 4e 54 2c 20 69 6e 31 20 2a 2f  K_TO_INT, in1 */
e080: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
e090: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20  pOp->p1];.  if( 
e0a0: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
e0b0: 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20  EM_Null)==0 ){. 
e0c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
e0d0: 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e 31  mIntegerify(pIn1
e0e0: 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
e0f0: 7d 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  }..#if !defined(
e100: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54  SQLITE_OMIT_CAST
e110: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
e120: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
e130: 4e 47 5f 50 4f 49 4e 54 29 0a 2f 2a 20 4f 70 63  NG_POINT)./* Opc
e140: 6f 64 65 3a 20 54 6f 52 65 61 6c 20 50 31 20 2a  ode: ToReal P1 *
e150: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 46 6f 72   * * *.**.** For
e160: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  ce the value in 
e170: 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 62  register P1 to b
e180: 65 20 61 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  e a floating poi
e190: 6e 74 20 6e 75 6d 62 65 72 2e 0a 2a 2a 20 49 66  nt number..** If
e1a0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 63 75   The value is cu
e1b0: 72 72 65 6e 74 6c 79 20 61 6e 20 69 6e 74 65 67  rrently an integ
e1c0: 65 72 2c 20 63 6f 6e 76 65 72 74 20 69 74 2e 0a  er, convert it..
e1d0: 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20  ** If the value 
e1e0: 69 73 20 74 65 78 74 20 6f 72 20 62 6c 6f 62 2c  is text or blob,
e1f0: 20 74 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   try to convert 
e200: 69 74 20 74 6f 20 61 6e 20 69 6e 74 65 67 65 72  it to an integer
e210: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 65 71   using the.** eq
e220: 75 69 76 61 6c 65 6e 74 20 6f 66 20 61 74 6f 69  uivalent of atoi
e230: 28 29 20 61 6e 64 20 73 74 6f 72 65 20 30 2e 30  () and store 0.0
e240: 20 69 66 20 6e 6f 20 73 75 63 68 20 63 6f 6e 76   if no such conv
e250: 65 72 73 69 6f 6e 20 69 73 20 70 6f 73 73 69 62  ersion is possib
e260: 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 4e 55 4c 4c  le..**.** A NULL
e270: 20 76 61 6c 75 65 20 69 73 20 6e 6f 74 20 63 68   value is not ch
e280: 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 72 6f  anged by this ro
e290: 75 74 69 6e 65 2e 20 20 49 74 20 72 65 6d 61 69  utine.  It remai
e2a0: 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  ns NULL..*/.case
e2b0: 20 4f 50 5f 54 6f 52 65 61 6c 3a 20 7b 20 20 20   OP_ToReal: {   
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
e2d0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 54 4f 5f  * same as TK_TO_
e2e0: 52 45 41 4c 2c 20 69 6e 31 20 2a 2f 0a 20 20 70  REAL, in1 */.  p
e2f0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
e300: 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p1];.  memAbout
e310: 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31  ToChange(p, pIn1
e320: 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
e330: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c  flags & MEM_Null
e340: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69  )==0 ){.    sqli
e350: 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66  te3VdbeMemRealif
e360: 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  y(pIn1);.  }.  b
e370: 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
e380: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
e390: 45 5f 4f 4d 49 54 5f 43 41 53 54 29 20 26 26 20  E_OMIT_CAST) && 
e3a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
e3b0: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
e3c0: 49 4e 54 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f  INT) */../* Opco
e3d0: 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33 20  de: Lt P1 P2 P3 
e3e0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
e3f0: 73 3a 20 69 66 20 72 5b 50 31 5d 3c 72 5b 50 33  s: if r[P1]<r[P3
e400: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
e410: 43 6f 6d 70 61 72 65 20 74 68 65 20 76 61 6c 75  Compare the valu
e420: 65 73 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  es in register P
e430: 31 20 61 6e 64 20 50 33 2e 20 20 49 66 20 72 65  1 and P3.  If re
e440: 67 28 50 33 29 3c 72 65 67 28 50 31 29 20 74 68  g(P3)<reg(P1) th
e450: 65 6e 0a 2a 2a 20 6a 75 6d 70 20 74 6f 20 61 64  en.** jump to ad
e460: 64 72 65 73 73 20 50 32 2e 20 20 0a 2a 2a 0a 2a  dress P2.  .**.*
e470: 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f  * If the SQLITE_
e480: 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20 6f  JUMPIFNULL bit o
e490: 66 20 50 35 20 69 73 20 73 65 74 20 61 6e 64 20  f P5 is set and 
e4a0: 65 69 74 68 65 72 20 72 65 67 28 50 31 29 20 6f  either reg(P1) o
e4b0: 72 0a 2a 2a 20 72 65 67 28 50 33 29 20 69 73 20  r.** reg(P3) is 
e4c0: 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b 65 20 74  NULL then take t
e4d0: 68 65 20 6a 75 6d 70 2e 20 20 49 66 20 74 68 65  he jump.  If the
e4e0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
e4f0: 4c 4c 20 0a 2a 2a 20 62 69 74 20 69 73 20 63 6c  LL .** bit is cl
e500: 65 61 72 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  ear then fall th
e510: 72 6f 75 67 68 20 69 66 20 65 69 74 68 65 72 20  rough if either 
e520: 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e  operand is NULL.
e530: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  .**.** The SQLIT
e540: 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72 74 69  E_AFF_MASK porti
e550: 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20 62 65  on of P5 must be
e560: 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63 68 61   an affinity cha
e570: 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51 4c 49  racter -.** SQLI
e580: 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53 51 4c  TE_AFF_TEXT, SQL
e590: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 2c  ITE_AFF_INTEGER,
e5a0: 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 41   and so forth. A
e5b0: 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d 61 64  n attempt is mad
e5c0: 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63 65 20  e .** to coerce 
e5d0: 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63 63 6f  both inputs acco
e5e0: 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20 61 66  rding to this af
e5f0: 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20 74 68  finity before th
e600: 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
e610: 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68 65 20  is made. If the 
e620: 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
e630: 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20 6e 75  is 0x00, then nu
e640: 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e 69 74  meric.** affinit
e650: 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74 65 20  y is used. Note 
e660: 74 68 61 74 20 74 68 65 20 61 66 66 69 6e 69 74  that the affinit
e670: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 61 72  y conversions ar
e680: 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61 63 6b  e stored.** back
e690: 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75 74 20   into the input 
e6a0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
e6b0: 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20 6f 70   P3.  So this op
e6c0: 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65 0a 2a  code can cause.*
e6d0: 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63 68 61  * persistent cha
e6e0: 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74 65 72  nges to register
e6f0: 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a  s P1 and P3..**.
e700: 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f 6e 76  ** Once any conv
e710: 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74 61 6b  ersions have tak
e720: 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20 6e 65  en place, and ne
e730: 69 74 68 65 72 20 76 61 6c 75 65 20 69 73 20 4e  ither value is N
e740: 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76 61 6c  ULL, .** the val
e750: 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ues are compared
e760: 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73  . If both values
e770: 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65 6e 20   are blobs then 
e780: 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a 20 75  memcmp() is.** u
e790: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
e7a0: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
e7b0: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
e7c0: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 0a   If both values.
e7d0: 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74 68 65  ** are text, the
e7e0: 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74  n the appropriat
e7f0: 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75 6e 63  e collating func
e800: 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64 20 69  tion specified i
e810: 6e 0a 2a 2a 20 50 34 20 69 73 20 20 75 73 65 64  n.** P4 is  used
e820: 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70 61   to do the compa
e830: 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69 73  rison.  If P4 is
e840: 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20 74   not specified t
e850: 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29 20  hen.** memcmp() 
e860: 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70 61  is used to compa
e870: 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e 20  re text string. 
e880: 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73 20   If both values 
e890: 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c 20  are.** numeric, 
e8a0: 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20 63  then a numeric c
e8b0: 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73 65  omparison is use
e8c0: 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76 61  d. If the two va
e8d0: 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20 64  lues.** are of d
e8e0: 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c 20  ifferent types, 
e8f0: 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72 65  then numbers are
e900: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
e910: 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67 73   than.** strings
e920: 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
e930: 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73 73   considered less
e940: 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a 0a   than blobs..**.
e950: 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49 54 45  ** If the SQLITE
e960: 5f 53 54 4f 52 45 50 32 20 62 69 74 20 6f 66 20  _STOREP2 bit of 
e970: 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20  P5 is set, then 
e980: 64 6f 20 6e 6f 74 20 6a 75 6d 70 2e 20 20 49 6e  do not jump.  In
e990: 73 74 65 61 64 2c 0a 2a 2a 20 73 74 6f 72 65 20  stead,.** store 
e9a0: 61 20 62 6f 6f 6c 65 61 6e 20 72 65 73 75 6c 74  a boolean result
e9b0: 20 28 65 69 74 68 65 72 20 30 2c 20 6f 72 20 31   (either 0, or 1
e9c0: 2c 20 6f 72 20 4e 55 4c 4c 29 20 69 6e 20 72 65  , or NULL) in re
e9d0: 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a  gister P2..**.**
e9e0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4e   If the SQLITE_N
e9f0: 55 4c 4c 45 51 20 62 69 74 20 69 73 20 73 65 74  ULLEQ bit is set
ea00: 20 69 6e 20 50 35 2c 20 74 68 65 6e 20 4e 55 4c   in P5, then NUL
ea10: 4c 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f 6e  L values are con
ea20: 73 69 64 65 72 65 64 0a 2a 2a 20 65 71 75 61 6c  sidered.** equal
ea30: 20 74 6f 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2c   to one another,
ea40: 20 70 72 6f 76 69 64 65 64 20 74 68 61 74 20 74   provided that t
ea50: 68 65 79 20 64 6f 20 6e 6f 74 20 68 61 76 65 20  hey do not have 
ea60: 74 68 65 69 72 20 4d 45 4d 5f 43 6c 65 61 72 65  their MEM_Cleare
ea70: 64 0a 2a 2a 20 62 69 74 20 73 65 74 2e 0a 2a 2f  d.** bit set..*/
ea80: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 20 50  ./* Opcode: Ne P
ea90: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
eaa0: 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b   Synopsis: if r[
eab0: 50 31 5d 21 3d 72 5b 50 33 5d 20 67 6f 74 6f 20  P1]!=r[P3] goto 
eac0: 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f  P2.**.** This wo
ead0: 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68  rks just like th
eae0: 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65  e Lt opcode exce
eaf0: 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70  pt that the jump
eb00: 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20   is taken if.** 
eb10: 74 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20  the operands in 
eb20: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
eb30: 20 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61   P3 are not equa
eb40: 6c 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  l.  See the Lt o
eb50: 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64  pcode for.** add
eb60: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
eb70: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51  ion..**.** If SQ
eb80: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
eb90: 65 74 20 69 6e 20 50 35 20 74 68 65 6e 20 74 68  et in P5 then th
eba0: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
ebb0: 61 72 69 73 6f 6e 20 69 73 20 61 6c 77 61 79 73  arison is always
ebc0: 20 65 69 74 68 65 72 0a 2a 2a 20 74 72 75 65 20   either.** true 
ebd0: 6f 72 20 66 61 6c 73 65 20 61 6e 64 20 69 73 20  or false and is 
ebe0: 6e 65 76 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20  never NULL.  If 
ebf0: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
ec00: 65 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20  e NULL then the 
ec10: 72 65 73 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d  result.** of com
ec20: 70 61 72 69 73 6f 6e 20 69 73 20 66 61 6c 73 65  parison is false
ec30: 2e 20 20 49 66 20 65 69 74 68 65 72 20 6f 70 65  .  If either ope
ec40: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
ec50: 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20  n the result is 
ec60: 74 72 75 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74  true..** If neit
ec70: 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e  her operand is N
ec80: 55 4c 4c 20 74 68 65 20 72 65 73 75 6c 74 20 69  ULL the result i
ec90: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 69 74  s the same as it
eca0: 20 77 6f 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20   would be if.** 
ecb0: 74 68 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  the SQLITE_NULLE
ecc0: 51 20 66 6c 61 67 20 77 65 72 65 20 6f 6d 69 74  Q flag were omit
ecd0: 74 65 64 20 66 72 6f 6d 20 50 35 2e 0a 2a 2f 0a  ted from P5..*/.
ece0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 71 20 50 31  /* Opcode: Eq P1
ecf0: 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
ed00: 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
ed10: 31 5d 3d 3d 72 5b 50 33 5d 20 67 6f 74 6f 20 50  1]==r[P3] goto P
ed20: 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  2.**.** This wor
ed30: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
ed40: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
ed50: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
ed60: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
ed70: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
ed80: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
ed90: 50 33 20 61 72 65 20 65 71 75 61 6c 2e 0a 2a 2a  P3 are equal..**
eda0: 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70 63 6f   See the Lt opco
edb0: 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  de for additiona
edc0: 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
edd0: 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e  *.** If SQLITE_N
ede0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20  ULLEQ is set in 
edf0: 50 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75  P5 then the resu
ee00: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
ee10: 20 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65   is always eithe
ee20: 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c  r.** true or fal
ee30: 73 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20  se and is never 
ee40: 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f  NULL.  If both o
ee50: 70 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c  perands are NULL
ee60: 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
ee70: 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f  .** of compariso
ee80: 6e 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65  n is true.  If e
ee90: 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73  ither operand is
eea0: 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72   NULL then the r
eeb0: 65 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a  esult is false..
eec0: 2a 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70  ** If neither op
eed0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68  erand is NULL th
eee0: 65 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20  e result is the 
eef0: 73 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64  same as it would
ef00: 20 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51   be if.** the SQ
ef10: 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67  LITE_NULLEQ flag
ef20: 20 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72   were omitted fr
ef30: 6f 6d 20 50 35 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  om P5..*/./* Opc
ef40: 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33  ode: Le P1 P2 P3
ef50: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
ef60: 69 73 3a 20 69 66 20 72 5b 50 31 5d 3c 3d 72 5b  is: if r[P1]<=r[
ef70: 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a  P3] goto P2.**.*
ef80: 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73  * This works jus
ef90: 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70  t like the Lt op
efa0: 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61 74  code except that
efb0: 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
efc0: 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e  en if.** the con
efd0: 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
efe0: 20 50 33 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P3 is less than
eff0: 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
f000: 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 72   content of.** r
f010: 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65 65  egister P1.  See
f020: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 66   the Lt opcode f
f030: 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
f040: 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
f050: 20 4f 70 63 6f 64 65 3a 20 47 74 20 50 31 20 50   Opcode: Gt P1 P
f060: 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
f070: 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
f080: 3e 72 5b 50 33 5d 20 67 6f 74 6f 20 50 32 0a 2a  >r[P3] goto P2.*
f090: 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20  *.** This works 
f0a0: 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74  just like the Lt
f0b0: 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20 74   opcode except t
f0c0: 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20  hat the jump is 
f0d0: 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20  taken if.** the 
f0e0: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
f0f0: 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74 65  ter P3 is greate
f100: 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65  r than the conte
f110: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
f120: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
f130: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
f140: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
f150: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
f160: 65 3a 20 47 65 20 50 31 20 50 32 20 50 33 20 50  e: Ge P1 P2 P3 P
f170: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f180: 3a 20 69 66 20 72 5b 50 31 5d 3e 3d 72 5b 50 33  : if r[P1]>=r[P3
f190: 5d 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  ] goto P2.**.** 
f1a0: 54 68 69 73 20 77 6f 72 6b 73 20 6a 75 73 74 20  This works just 
f1b0: 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f 70 63 6f  like the Lt opco
f1c0: 64 65 20 65 78 63 65 70 74 20 74 68 61 74 20 74  de except that t
f1d0: 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
f1e0: 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   if.** the conte
f1f0: 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
f200: 33 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61  3 is greater tha
f210: 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68  n or equal to th
f220: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20  e content of.** 
f230: 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 53 65  register P1.  Se
f240: 65 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20  e the Lt opcode 
f250: 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69  for additional i
f260: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63  nformation..*/.c
f270: 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 20 20  ase OP_Eq:      
f280: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
f290: 20 61 73 20 54 4b 5f 45 51 2c 20 6a 75 6d 70 2c   as TK_EQ, jump,
f2a0: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
f2b0: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 20 20 20 20  e OP_Ne:        
f2c0: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
f2d0: 73 20 54 4b 5f 4e 45 2c 20 6a 75 6d 70 2c 20 69  s TK_NE, jump, i
f2e0: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
f2f0: 4f 50 5f 4c 74 3a 20 20 20 20 20 20 20 20 20 20  OP_Lt:          
f300: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
f310: 54 4b 5f 4c 54 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_LT, jump, in1
f320: 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50  , in3 */.case OP
f330: 5f 4c 65 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Le:            
f340: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
f350: 5f 4c 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _LE, jump, in1, 
f360: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47  in3 */.case OP_G
f370: 74 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t:              
f380: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47   /* same as TK_G
f390: 54 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  T, jump, in1, in
f3a0: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 47 65 3a  3 */.case OP_Ge:
f3b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f   {             /
f3c0: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 47 45 2c  * same as TK_GE,
f3d0: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
f3e0: 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b 20 20 20  */.  int res;   
f3f0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75           /* Resu
f400: 6c 74 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  lt of the compar
f410: 69 73 6f 6e 20 6f 66 20 70 49 6e 31 20 61 67 61  ison of pIn1 aga
f420: 69 6e 73 74 20 70 49 6e 33 20 2a 2f 0a 20 20 63  inst pIn3 */.  c
f430: 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20 20  har affinity;   
f440: 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 74     /* Affinity t
f450: 6f 20 75 73 65 20 66 6f 72 20 63 6f 6d 70 61 72  o use for compar
f460: 69 73 6f 6e 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ison */.  u16 fl
f470: 61 67 73 31 3b 20 20 20 20 20 20 20 20 20 2f 2a  ags1;         /*
f480: 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61 6c   Copy of initial
f490: 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 31 2d 3e   value of pIn1->
f4a0: 66 6c 61 67 73 20 2a 2f 0a 20 20 75 31 36 20 66  flags */.  u16 f
f4b0: 6c 61 67 73 33 3b 20 20 20 20 20 20 20 20 20 2f  lags3;         /
f4c0: 2a 20 43 6f 70 79 20 6f 66 20 69 6e 69 74 69 61  * Copy of initia
f4d0: 6c 20 76 61 6c 75 65 20 6f 66 20 70 49 6e 33 2d  l value of pIn3-
f4e0: 3e 66 6c 61 67 73 20 2a 2f 0a 0a 20 20 70 49 6e  >flags */..  pIn
f4f0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
f500: 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
f510: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66  em[pOp->p3];.  f
f520: 6c 61 67 73 31 20 3d 20 70 49 6e 31 2d 3e 66 6c  lags1 = pIn1->fl
f530: 61 67 73 3b 0a 20 20 66 6c 61 67 73 33 20 3d 20  ags;.  flags3 = 
f540: 70 49 6e 33 2d 3e 66 6c 61 67 73 3b 0a 20 20 69  pIn3->flags;.  i
f550: 66 28 20 28 66 6c 61 67 73 31 20 7c 20 66 6c 61  f( (flags1 | fla
f560: 67 73 33 29 26 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs3)&MEM_Null ){
f570: 0a 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 62  .    /* One or b
f580: 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65  oth operands are
f590: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 69 66 28   NULL */.    if(
f5a0: 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
f5b0: 45 5f 4e 55 4c 4c 45 51 20 29 7b 0a 20 20 20 20  E_NULLEQ ){.    
f5c0: 20 20 2f 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e    /* If SQLITE_N
f5d0: 55 4c 4c 45 51 20 69 73 20 73 65 74 20 28 77 68  ULLEQ is set (wh
f5e0: 69 63 68 20 77 69 6c 6c 20 6f 6e 6c 79 20 68 61  ich will only ha
f5f0: 70 70 65 6e 20 69 66 20 74 68 65 20 6f 70 65 72  ppen if the oper
f600: 61 74 6f 72 20 69 73 0a 20 20 20 20 20 20 2a 2a  ator is.      **
f610: 20 4f 50 5f 45 71 20 6f 72 20 4f 50 5f 4e 65 29   OP_Eq or OP_Ne)
f620: 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a   then take the j
f630: 75 6d 70 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e  ump or not depen
f640: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
f650: 20 20 20 20 20 20 2a 2a 20 6f 72 20 6e 6f 74 20        ** or not 
f660: 62 6f 74 68 20 6f 70 65 72 61 6e 64 73 20 61 72  both operands ar
f670: 65 20 6e 75 6c 6c 2e 0a 20 20 20 20 20 20 2a 2f  e null..      */
f680: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
f690: 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45  Op->opcode==OP_E
f6a0: 71 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  q || pOp->opcode
f6b0: 3d 3d 4f 50 5f 4e 65 20 29 3b 0a 20 20 20 20 20  ==OP_Ne );.     
f6c0: 20 61 73 73 65 72 74 28 20 28 66 6c 61 67 73 31   assert( (flags1
f6d0: 20 26 20 4d 45 4d 5f 43 6c 65 61 72 65 64 29 3d   & MEM_Cleared)=
f6e0: 3d 30 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  =0 );.      asse
f6f0: 72 74 28 20 28 70 4f 70 2d 3e 70 35 20 26 20 53  rt( (pOp->p5 & S
f700: 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
f710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66  )==0 );.      if
f720: 28 20 28 66 6c 61 67 73 31 26 4d 45 4d 5f 4e 75  ( (flags1&MEM_Nu
f730: 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26  ll)!=0.       &&
f740: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c   (flags3&MEM_Nul
f750: 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20  l)!=0.       && 
f760: 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61  (flags3&MEM_Clea
f770: 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b  red)==0.      ){
f780: 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d 20 30  .        res = 0
f790: 3b 20 20 2f 2a 20 52 65 73 75 6c 74 73 20 61 72  ;  /* Results ar
f7a0: 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20  e equal */.     
f7b0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f7c0: 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20 52 65 73  res = 1;  /* Res
f7d0: 75 6c 74 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ults are not equ
f7e0: 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
f7f0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
f800: 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
f810: 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
f820: 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
f830: 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
f840: 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
f850: 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
f860: 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
f870: 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
f880: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
f890: 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
f8a0: 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
f8b0: 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
f8c0: 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
f8d0: 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
f8e0: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
f8f0: 3b 0a 20 20 20 20 20 20 20 20 4d 65 6d 53 65 74  ;.        MemSet
f900: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
f910: 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20  EM_Null);.      
f920: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
f930: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
f940: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
f950: 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63 68        VdbeBranch
f960: 54 61 6b 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20  Taken(2,3);.    
f970: 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20      if( pOp->p5 
f980: 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e  & SQLITE_JUMPIFN
f990: 55 4c 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ULL ){.         
f9a0: 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b   pc = pOp->p2-1;
f9b0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
f9c0: 20 7d 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a   }.      break;.
f9d0: 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
f9e0: 20 20 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70     /* Neither op
f9f0: 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20  erand is NULL.  
fa00: 44 6f 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  Do a comparison.
fa10: 20 2a 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79   */.    affinity
fa20: 20 3d 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c   = pOp->p5 & SQL
fa30: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20  ITE_AFF_MASK;.  
fa40: 20 20 69 66 28 20 61 66 66 69 6e 69 74 79 20 29    if( affinity )
fa50: 7b 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66  {.      applyAff
fa60: 69 6e 69 74 79 28 70 49 6e 31 2c 20 61 66 66 69  inity(pIn1, affi
fa70: 6e 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  nity, encoding);
fa80: 0a 20 20 20 20 20 20 61 70 70 6c 79 41 66 66 69  .      applyAffi
fa90: 6e 69 74 79 28 70 49 6e 33 2c 20 61 66 66 69 6e  nity(pIn3, affin
faa0: 69 74 79 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  ity, encoding);.
fab0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 6d 61        if( db->ma
fac0: 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f 74  llocFailed ) got
fad0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a  o no_mem;.    }.
fae0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
faf0: 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c  ->p4type==P4_COL
fb00: 4c 53 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  LSEQ || pOp->p4.
fb10: 70 43 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20  pColl==0 );.    
fb20: 45 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 31 29  ExpandBlob(pIn1)
fb30: 3b 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62  ;.    ExpandBlob
fb40: 28 70 49 6e 33 29 3b 0a 20 20 20 20 72 65 73 20  (pIn3);.    res 
fb50: 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70  = sqlite3MemComp
fb60: 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20  are(pIn3, pIn1, 
fb70: 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a  pOp->p4.pColl);.
fb80: 20 20 7d 0a 20 20 73 77 69 74 63 68 28 20 70 4f    }.  switch( pO
fb90: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
fba0: 20 63 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20   case OP_Eq:    
fbb0: 72 65 73 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20  res = res==0;   
fbc0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
fbd0: 65 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 20  e OP_Ne:    res 
fbe0: 3d 20 72 65 73 21 3d 30 3b 20 20 20 20 20 62 72  = res!=0;     br
fbf0: 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
fc00: 5f 4c 74 3a 20 20 20 20 72 65 73 20 3d 20 72 65  _Lt:    res = re
fc10: 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b 3b  s<0;      break;
fc20: 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a  .    case OP_Le:
fc30: 20 20 20 20 72 65 73 20 3d 20 72 65 73 3c 3d 30      res = res<=0
fc40: 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20  ;     break;.   
fc50: 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20   case OP_Gt:    
fc60: 72 65 73 20 3d 20 72 65 73 3e 30 3b 20 20 20 20  res = res>0;    
fc70: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66    break;.    def
fc80: 61 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 20  ault:       res 
fc90: 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
fca0: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20  eak;.  }..  if( 
fcb0: 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
fcc0: 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
fcd0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
fce0: 2d 3e 70 32 5d 3b 0a 20 20 20 20 6d 65 6d 41 62  ->p2];.    memAb
fcf0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
fd00: 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74  Out);.    MemSet
fd10: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
fd20: 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75  EM_Int);.    pOu
fd30: 74 2d 3e 75 2e 69 20 3d 20 72 65 73 3b 0a 20 20  t->u.i = res;.  
fd40: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
fd50: 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b  (pOp->p2, pOut);
fd60: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64  .  }else{.    Vd
fd70: 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
fd80: 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26  s!=0, (pOp->p5 &
fd90: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f   SQLITE_NULLEQ)?
fda0: 32 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65  2:3);.    if( re
fdb0: 73 20 29 7b 0a 20 20 20 20 20 20 70 63 20 3d 20  s ){.      pc = 
fdc0: 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 20 20 7d  pOp->p2-1;.    }
fdd0: 0a 20 20 7d 0a 20 20 2f 2a 20 55 6e 64 6f 20 61  .  }.  /* Undo a
fde0: 6e 79 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20  ny changes made 
fdf0: 62 79 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79  by applyAffinity
fe00: 28 29 20 74 6f 20 74 68 65 20 69 6e 70 75 74 20  () to the input 
fe10: 72 65 67 69 73 74 65 72 73 2e 20 2a 2f 0a 20 20  registers. */.  
fe20: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 28 70  pIn1->flags = (p
fe30: 49 6e 31 2d 3e 66 6c 61 67 73 26 7e 4d 45 4d 5f  In1->flags&~MEM_
fe40: 54 79 70 65 4d 61 73 6b 29 20 7c 20 28 66 6c 61  TypeMask) | (fla
fe50: 67 73 31 26 4d 45 4d 5f 54 79 70 65 4d 61 73 6b  gs1&MEM_TypeMask
fe60: 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73  );.  pIn3->flags
fe70: 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 26   = (pIn3->flags&
fe80: 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 20 7c  ~MEM_TypeMask) |
fe90: 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 54 79 70   (flags3&MEM_Typ
fea0: 65 4d 61 73 6b 29 3b 0a 20 20 62 72 65 61 6b 3b  eMask);.  break;
feb0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .}../* Opcode: P
fec0: 65 72 6d 75 74 61 74 69 6f 6e 20 2a 20 2a 20 2a  ermutation * * *
fed0: 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20   P4 *.**.** Set 
fee0: 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
fef0: 75 73 65 64 20 62 79 20 74 68 65 20 4f 50 5f 43  used by the OP_C
ff00: 6f 6d 70 61 72 65 20 6f 70 65 72 61 74 6f 72 20  ompare operator 
ff10: 74 6f 20 62 65 20 74 68 65 20 61 72 72 61 79 0a  to be the array.
ff20: 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 20 69  ** of integers i
ff30: 6e 20 50 34 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  n P4..**.** The 
ff40: 70 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f  permutation is o
ff50: 6e 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20  nly valid until 
ff60: 74 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70  the next OP_Comp
ff70: 61 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20  are that has.** 
ff80: 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  the OPFLAG_PERMU
ff90: 54 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35  TE bit set in P5
ffa0: 2e 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20  . Typically the 
ffb0: 4f 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73  OP_Permutation s
ffc0: 68 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20  hould .** occur 
ffd0: 69 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f  immediately prio
ffe0: 72 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70  r to the OP_Comp
fff0: 61 72 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  are..*/.case OP_
10000 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b 0a 20  Permutation: {. 
10010 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
10020 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41  type==P4_INTARRA
10030 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Y );.  assert( p
10040 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20 20 61  Op->p4.ai );.  a
10050 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d 3e 70  Permute = pOp->p
10060 34 2e 61 69 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.ai;.  break;.}
10070 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
10080 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
10090 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
100a0 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
100b0 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
100c0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
100d0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
100e0 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
100f0 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
10100 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
10110 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
10120 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
10130 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
10140 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
10150 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
10160 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
10170 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
10180 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
10190 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
101a0 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
101b0 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
101c0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
101d0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
101e0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
101f0 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
10200 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
10210 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
10220 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
10230 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
10240 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
10250 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
10260 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
10270 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
10280 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
10290 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
102a0 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
102b0 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
102c0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
102d0 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
102e0 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
102f0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
10300 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
10310 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
10320 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
10330 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
10340 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
10350 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
10360 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
10370 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
10380 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
10390 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
103a0 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
103b0 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
103c0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
103d0 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
103e0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
103f0 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
10400 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
10410 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
10420 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
10430 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
10440 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
10450 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
10460 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
10470 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
10480 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
10490 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
104a0 20 6f 72 64 65 72 20 2a 2f 0a 0a 20 20 69 66 28   order */..  if(
104b0 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
104c0 41 47 5f 50 45 52 4d 55 54 45 29 3d 3d 30 20 29  AG_PERMUTE)==0 )
104d0 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
104e0 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20   n = pOp->p3;.  
104f0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e  pKeyInfo = pOp->
10500 70 34 2e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 61  p4.pKeyInfo;.  a
10510 73 73 65 72 74 28 20 6e 3e 30 20 29 3b 0a 20 20  ssert( n>0 );.  
10520 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66 6f  assert( pKeyInfo
10530 21 3d 30 20 29 3b 0a 20 20 70 31 20 3d 20 70 4f  !=0 );.  p1 = pO
10540 70 2d 3e 70 31 3b 0a 20 20 70 32 20 3d 20 70 4f  p->p1;.  p2 = pO
10550 70 2d 3e 70 32 3b 0a 23 69 66 20 53 51 4c 49 54  p->p2;.#if SQLIT
10560 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 61 50  E_DEBUG.  if( aP
10570 65 72 6d 75 74 65 20 29 7b 0a 20 20 20 20 69 6e  ermute ){.    in
10580 74 20 6b 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20  t k, mx = 0;.   
10590 20 66 6f 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b   for(k=0; k<n; k
105a0 2b 2b 29 20 69 66 28 20 61 50 65 72 6d 75 74 65  ++) if( aPermute
105b0 5b 6b 5d 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50  [k]>mx ) mx = aP
105c0 65 72 6d 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61  ermute[k];.    a
105d0 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20 70  ssert( p1>0 && p
105e0 31 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  1+mx<=(p->nMem-p
105f0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
10600 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30      assert( p2>0
10610 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e 6e   && p2+mx<=(p->n
10620 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  Mem-p->nCursor)+
10630 31 20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  1 );.  }else{.  
10640 20 20 61 73 73 65 72 74 28 20 70 31 3e 30 20 26    assert( p1>0 &
10650 26 20 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d  & p1+n<=(p->nMem
10660 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29  -p->nCursor)+1 )
10670 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  ;.    assert( p2
10680 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70 2d 3e  >0 && p2+n<=(p->
10690 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72 29  nMem-p->nCursor)
106a0 2b 31 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  +1 );.  }.#endif
106b0 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42 55 47   /* SQLITE_DEBUG
106c0 20 2a 2f 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69   */.  for(i=0; i
106d0 3c 6e 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64  <n; i++){.    id
106e0 78 20 3d 20 61 50 65 72 6d 75 74 65 20 3f 20 61  x = aPermute ? a
106f0 50 65 72 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a  Permute[i] : i;.
10700 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
10710 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b  sValid(&aMem[p1+
10720 69 64 78 5d 29 20 29 3b 0a 20 20 20 20 61 73 73  idx]) );.    ass
10730 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28  ert( memIsValid(
10740 26 61 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29  &aMem[p2+idx]) )
10750 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  ;.    REGISTER_T
10760 52 41 43 45 28 70 31 2b 69 64 78 2c 20 26 61 4d  RACE(p1+idx, &aM
10770 65 6d 5b 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20  em[p1+idx]);.   
10780 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
10790 70 32 2b 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32  p2+idx, &aMem[p2
107a0 2b 69 64 78 5d 29 3b 0a 20 20 20 20 61 73 73 65  +idx]);.    asse
107b0 72 74 28 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e  rt( i<pKeyInfo->
107c0 6e 46 69 65 6c 64 20 29 3b 0a 20 20 20 20 70 43  nField );.    pC
107d0 6f 6c 6c 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  oll = pKeyInfo->
107e0 61 43 6f 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52  aColl[i];.    bR
107f0 65 76 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61  ev = pKeyInfo->a
10800 53 6f 72 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20  SortOrder[i];.  
10810 20 20 69 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c    iCompare = sql
10820 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26  ite3MemCompare(&
10830 61 4d 65 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61  aMem[p1+idx], &a
10840 4d 65 6d 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f  Mem[p2+idx], pCo
10850 6c 6c 29 3b 0a 20 20 20 20 69 66 28 20 69 43 6f  ll);.    if( iCo
10860 6d 70 61 72 65 20 29 7b 0a 20 20 20 20 20 20 69  mpare ){.      i
10870 66 28 20 62 52 65 76 20 29 20 69 43 6f 6d 70 61  f( bRev ) iCompa
10880 72 65 20 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a  re = -iCompare;.
10890 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
108a0 20 7d 0a 20 20 7d 0a 20 20 61 50 65 72 6d 75 74   }.  }.  aPermut
108b0 65 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  e = 0;.  break;.
108c0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75  }../* Opcode: Ju
108d0 6d 70 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  mp P1 P2 P3 * *.
108e0 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
108f0 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74  e instruction at
10900 20 61 64 64 72 65 73 73 20 50 31 2c 20 50 32 2c   address P1, P2,
10910 20 6f 72 20 50 33 20 64 65 70 65 6e 64 69 6e 67   or P3 depending
10920 20 6f 6e 20 77 68 65 74 68 65 72 0a 2a 2a 20 69   on whether.** i
10930 6e 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  n the most recen
10940 74 20 4f 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73  t OP_Compare ins
10950 74 72 75 63 74 69 6f 6e 20 74 68 65 20 50 31 20  truction the P1 
10960 76 65 63 74 6f 72 20 77 61 73 20 6c 65 73 73 20  vector was less 
10970 74 68 61 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f  than.** equal to
10980 2c 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61  , or greater tha
10990 6e 20 74 68 65 20 50 32 20 76 65 63 74 6f 72 2c  n the P2 vector,
109a0 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a   respectively..*
109b0 2f 0a 63 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20  /.case OP_Jump: 
109c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
109d0 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69   jump */.  if( i
109e0 43 6f 6d 70 61 72 65 3c 30 20 29 7b 0a 20 20 20  Compare<0 ){.   
109f0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 31 20 2d 20   pc = pOp->p1 - 
10a00 31 3b 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  1;  VdbeBranchTa
10a10 6b 65 6e 28 30 2c 33 29 3b 0a 20 20 7d 65 6c 73  ken(0,3);.  }els
10a20 65 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3d 3d  e if( iCompare==
10a30 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f  0 ){.    pc = pO
10a40 70 2d 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65  p->p2 - 1;  Vdbe
10a50 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
10a60 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
10a70 63 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31 3b  c = pOp->p3 - 1;
10a80 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
10a90 6e 28 32 2c 33 29 3b 0a 20 20 7d 0a 20 20 62 72  n(2,3);.  }.  br
10aa0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
10ab0 65 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20  e: And P1 P2 P3 
10ac0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10ad0 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26   r[P3]=(r[P1] &&
10ae0 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
10af0 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41  ke the logical A
10b00 4e 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  ND of the values
10b10 20 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31   in registers P1
10b20 20 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77   and P2 and.** w
10b30 72 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20  rite the result 
10b40 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33  into register P3
10b50 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
10b60 72 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20  r P1 or P2 is 0 
10b70 28 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65  (false) then the
10b80 20 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65   result is 0 eve
10b90 6e 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65  n if.** the othe
10ba0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
10bb0 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75    A NULL and tru
10bc0 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67  e or two NULLs g
10bd0 69 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75  ive.** a NULL ou
10be0 74 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tput..*/./* Opco
10bf0 64 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20  de: Or P1 P2 P3 
10c00 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
10c10 20 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c   r[P3]=(r[P1] ||
10c20 20 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61   r[P2]).**.** Ta
10c30 6b 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f  ke the logical O
10c40 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  R of the values 
10c50 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
10c60 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f  nd P2 and.** sto
10c70 72 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e  re the answer in
10c80 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a   register P3..**
10c90 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31  .** If either P1
10ca0 20 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72   or P2 is nonzer
10cb0 6f 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68  o (true) then th
10cc0 65 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74  e result is 1 (t
10cd0 72 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20  rue).** even if 
10ce0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
10cf0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
10d00 20 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77   and false or tw
10d10 6f 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20  o NULLs.** give 
10d20 61 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a  a NULL output..*
10d30 2f 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20  /.case OP_And:  
10d40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
10d50 61 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69  ame as TK_AND, i
10d60 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
10d70 0a 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20  .case OP_Or: {  
10d80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
10d90 6d 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31  me as TK_OR, in1
10da0 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
10db0 20 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c   int v1;    /* L
10dc0 65 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d  eft operand:  0=
10dd0 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
10de0 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
10df0 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b  ULL */.  int v2;
10e00 20 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65      /* Right ope
10e10 72 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20  rand: 0==FALSE, 
10e20 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
10e30 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a  OWN or NULL */..
10e40 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
10e50 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
10e60 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
10e70 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20  _Null ){.    v1 
10e80 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  = 2;.  }else{.  
10e90 20 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64    v1 = sqlite3Vd
10ea0 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
10eb0 21 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20  !=0;.  }.  pIn2 
10ec0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
10ed0 3b 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c  ;.  if( pIn2->fl
10ee0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
10ef0 7b 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20  {.    v2 = 2;.  
10f00 7d 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20  }else{.    v2 = 
10f10 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61  sqlite3VdbeIntVa
10f20 6c 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20  lue(pIn2)!=0;.  
10f30 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63  }.  if( pOp->opc
10f40 6f 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20  ode==OP_And ){. 
10f50 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
10f60 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e  unsigned char an
10f70 64 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  d_logic[] = { 0,
10f80 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20   0, 0, 0, 1, 2, 
10f90 30 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76  0, 2, 2 };.    v
10fa0 31 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31  1 = and_logic[v1
10fb0 2a 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b  *3+v2];.  }else{
10fc0 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
10fd0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
10fe0 6f 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30  or_logic[] = { 0
10ff0 2c 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c  , 1, 2, 1, 1, 1,
11000 20 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20   2, 1, 2 };.    
11010 76 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31  v1 = or_logic[v1
11020 2a 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f  *3+v2];.  }.  pO
11030 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
11040 70 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32  p3];.  if( v1==2
11050 20 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79   ){.    MemSetTy
11060 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
11070 5f 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b  _Null);.  }else{
11080 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
11090 20 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54   v1;.    MemSetT
110a0 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
110b0 4d 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72  M_Int);.  }.  br
110c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
110d0 65 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a  e: Not P1 P2 * *
110e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
110f0 72 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a  r[P2]= !r[P1].**
11100 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
11110 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
11120 74 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c  ter P1 as a bool
11130 65 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72  ean value.  Stor
11140 65 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e  e the.** boolean
11150 20 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72   complement in r
11160 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
11170 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
11180 69 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20  ister P1 is .** 
11190 4e 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c  NULL, then a NUL
111a0 4c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  L is stored in P
111b0 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  2..*/.case OP_No
111c0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
111d0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
111e0 4b 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32  K_NOT, in1, out2
111f0 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
11200 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70  em[pOp->p1];.  p
11210 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
11220 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e 31  >p2];.  if( pIn1
11230 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
11240 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ll ){.    sqlite
11250 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
11260 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  pOut);.  }else{.
11270 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
11280 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c  emSetInt64(pOut,
11290 20 21 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   !sqlite3VdbeInt
112a0 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20 20  Value(pIn1));.  
112b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
112c0 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f 74 20   Opcode: BitNot 
112d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
112e0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 20  ynopsis: r[P1]= 
112f0 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74  ~r[P1].**.** Int
11300 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e 74 65  erpret the conte
11310 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
11320 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65 72 2e  1 as an integer.
11330 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a 20 6f    Store the.** o
11340 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74 20 6f  nes-complement o
11350 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
11360 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
11370 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a 2a 2a    If P1 holds.**
11380 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73 74 6f   a NULL then sto
11390 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50 32 2e  re a NULL in P2.
113a0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4e  .*/.case OP_BitN
113b0 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ot: {           
113c0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
113d0 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74  BITNOT, in1, out
113e0 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  2 */.  pIn1 = &a
113f0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
11400 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
11410 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p2];.  if( pIn
11420 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11430 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  ull ){.    sqlit
11440 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
11450 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65 7b  (pOut);.  }else{
11460 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11470 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4f 75 74  MemSetInt64(pOut
11480 2c 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e  , ~sqlite3VdbeIn
11490 74 56 61 6c 75 65 28 70 49 6e 31 29 29 3b 0a 20  tValue(pIn1));. 
114a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
114b0 2a 20 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50  * Opcode: Once P
114c0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
114d0 20 43 68 65 63 6b 20 74 68 65 20 22 6f 6e 63 65   Check the "once
114e0 22 20 66 6c 61 67 20 6e 75 6d 62 65 72 20 50 31  " flag number P1
114f0 2e 20 49 66 20 69 74 20 69 73 20 73 65 74 2c 20  . If it is set, 
11500 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
11510 69 6f 6e 20 50 32 2e 20 0a 2a 2a 20 4f 74 68 65  ion P2. .** Othe
11520 72 77 69 73 65 2c 20 73 65 74 20 74 68 65 20 66  rwise, set the f
11530 6c 61 67 20 61 6e 64 20 66 61 6c 6c 20 74 68 72  lag and fall thr
11540 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
11550 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
11560 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
11570 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75   this opcode cau
11580 73 65 73 20 61 6c 6c 20 66 6f 6c 6c 6f 77 69 6e  ses all followin
11590 67 20 6f 70 63 6f 64 65 73 20 75 70 20 74 68 72  g opcodes up thr
115a0 6f 75 67 68 20 50 32 0a 2a 2a 20 28 62 75 74 20  ough P2.** (but 
115b0 6e 6f 74 20 69 6e 63 6c 75 64 69 6e 67 20 50 32  not including P2
115c0 29 20 74 6f 20 72 75 6e 20 6a 75 73 74 20 6f 6e  ) to run just on
115d0 63 65 20 61 6e 64 20 74 6f 20 62 65 20 73 6b 69  ce and to be ski
115e0 70 70 65 64 20 6f 6e 20 73 75 62 73 65 71 75 65  pped on subseque
115f0 6e 74 0a 2a 2a 20 74 69 6d 65 73 20 74 68 72 6f  nt.** times thro
11600 75 67 68 20 74 68 65 20 6c 6f 6f 70 2e 0a 2a 2a  ugh the loop..**
11610 0a 2a 2a 20 41 6c 6c 20 22 6f 6e 63 65 22 20 66  .** All "once" f
11620 6c 61 67 73 20 61 72 65 20 69 6e 69 74 69 61 6c  lags are initial
11630 6c 79 20 63 6c 65 61 72 65 64 20 77 68 65 6e 65  ly cleared whene
11640 76 65 72 20 61 20 70 72 65 70 61 72 65 64 20 73  ver a prepared s
11650 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 66 69 72 73  tatement.** firs
11660 74 20 62 65 67 69 6e 73 20 74 6f 20 72 75 6e 2e  t begins to run.
11670 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 6e 63 65  .*/.case OP_Once
11680 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
11690 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73  /* jump */.  ass
116a0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  ert( pOp->p1<p->
116b0 6e 4f 6e 63 65 46 6c 61 67 20 29 3b 0a 20 20 56  nOnceFlag );.  V
116c0 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
116d0 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d  ->aOnceFlag[pOp-
116e0 3e 70 31 5d 21 3d 30 2c 20 32 29 3b 0a 20 20 69  >p1]!=0, 2);.  i
116f0 66 28 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 5b  f( p->aOnceFlag[
11700 70 4f 70 2d 3e 70 31 5d 20 29 7b 0a 20 20 20 20  pOp->p1] ){.    
11710 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d 31 3b 0a  pc = pOp->p2-1;.
11720 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
11730 61 4f 6e 63 65 46 6c 61 67 5b 70 4f 70 2d 3e 70  aOnceFlag[pOp->p
11740 31 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  1] = 1;.  }.  br
11750 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11760 65 3a 20 49 66 20 50 31 20 50 32 20 50 33 20 2a  e: If P1 P2 P3 *
11770 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f   *.**.** Jump to
11780 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75 65   P2 if the value
11790 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
117a0 69 73 20 74 72 75 65 2e 20 20 54 68 65 20 76 61  is true.  The va
117b0 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64  lue.** is consid
117c0 65 72 65 64 20 74 72 75 65 20 69 66 20 69 74 20  ered true if it 
117d0 69 73 20 6e 75 6d 65 72 69 63 20 61 6e 64 20 6e  is numeric and n
117e0 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20 74 68 65  on-zero.  If the
117f0 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31 20   value.** in P1 
11800 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61 6b  is NULL then tak
11810 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 50 33  e the jump if P3
11820 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f   is non-zero..*/
11830 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
11840 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
11850 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
11860 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
11870 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46  register P1 is F
11880 61 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65  alse.  The value
11890 0a 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65  .** is considere
118a0 64 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61  d false if it ha
118b0 73 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75  s a numeric valu
118c0 65 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74  e of zero.  If t
118d0 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50  he value.** in P
118e0 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74  1 is NULL then t
118f0 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20  ake the jump if 
11900 50 33 20 69 73 20 7a 65 72 6f 2e 0a 2a 2f 0a 63  P3 is zero..*/.c
11910 61 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20  ase OP_If:      
11920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
11930 6d 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20  mp, in1 */.case 
11940 4f 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20  OP_IfNot: {     
11950 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
11960 69 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a  in1 */.  int c;.
11970 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11980 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
11990 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
119a0 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d  _Null ){.    c =
119b0 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73   pOp->p3;.  }els
119c0 65 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  e{.#ifdef SQLITE
119d0 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50  _OMIT_FLOATING_P
119e0 4f 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c  OINT.    c = sql
119f0 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
11a00 28 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65  (pIn1)!=0;.#else
11a10 0a 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33  .    c = sqlite3
11a20 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49  VdbeRealValue(pI
11a30 6e 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66  n1)!=0.0;.#endif
11a40 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  .    if( pOp->op
11a50 63 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29  code==OP_IfNot )
11a60 20 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56   c = !c;.  }.  V
11a70 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63  dbeBranchTaken(c
11a80 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63  !=0, 2);.  if( c
11a90 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70   ){.    pc = pOp
11aa0 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20 20 62 72  ->p2-1;.  }.  br
11ab0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11ac0 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
11ad0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
11ae0 73 3a 20 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55  s:  if r[P1]==NU
11af0 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  LL goto P2.**.**
11b00 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
11b10 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
11b20 73 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e  ster P1 is NULL.
11b30 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75  .*/.case OP_IsNu
11b40 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
11b50 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49   /* same as TK_I
11b60 53 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31  SNULL, jump, in1
11b70 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
11b80 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56  em[pOp->p1];.  V
11b90 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20  dbeBranchTaken( 
11ba0 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn1->flags & M
11bb0 45 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b  EM_Null)!=0, 2);
11bc0 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
11bd0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21  ags & MEM_Null)!
11be0 3d 30 20 29 7b 0a 20 20 20 20 70 63 20 3d 20 70  =0 ){.    pc = p
11bf0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
11c00 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
11c10 70 63 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50  pcode: NotNull P
11c20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
11c30 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
11c40 21 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a  !=NULL goto P2.*
11c50 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20  *.** Jump to P2 
11c60 69 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  if the value in 
11c70 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20 6e  register P1 is n
11c80 6f 74 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61  ot NULL.  .*/.ca
11c90 73 65 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b  se OP_NotNull: {
11ca0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
11cb0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c  ame as TK_NOTNUL
11cc0 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a  L, jump, in1 */.
11cd0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
11ce0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42  Op->p1];.  VdbeB
11cf0 72 61 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e  ranchTaken( (pIn
11d00 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  1->flags & MEM_N
11d10 75 6c 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  ull)==0, 2);.  i
11d20 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
11d30 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
11d40 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
11d50 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20 62 72  p2 - 1;.  }.  br
11d60 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11d70 65 3a 20 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20  e: Column P1 P2 
11d80 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
11d90 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 50 58 0a  psis:  r[P3]=PX.
11da0 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  **.** Interpret 
11db0 74 68 65 20 64 61 74 61 20 74 68 61 74 20 63 75  the data that cu
11dc0 72 73 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74  rsor P1 points t
11dd0 6f 20 61 73 20 61 20 73 74 72 75 63 74 75 72 65  o as a structure
11de0 20 62 75 69 6c 74 20 75 73 69 6e 67 0a 2a 2a 20   built using.** 
11df0 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 69  the MakeRecord i
11e00 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 28 53 65  nstruction.  (Se
11e10 65 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72 64  e the MakeRecord
11e20 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69   opcode for addi
11e30 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d  tional.** inform
11e40 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
11e50 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20 64 61  format of the da
11e60 74 61 2e 29 20 20 45 78 74 72 61 63 74 20 74 68  ta.)  Extract th
11e70 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a  e P2-th column.*
11e80 2a 20 66 72 6f 6d 20 74 68 69 73 20 72 65 63 6f  * from this reco
11e90 72 64 2e 20 20 49 66 20 74 68 65 72 65 20 61 72  rd.  If there ar
11ea0 65 20 6c 65 73 73 20 74 68 61 74 20 28 50 32 2b  e less that (P2+
11eb0 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73 20 69 6e  1) .** values in
11ec0 20 74 68 65 20 72 65 63 6f 72 64 2c 20 65 78 74   the record, ext
11ed0 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a  ract a NULL..**.
11ee0 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 65 78 74  ** The value ext
11ef0 72 61 63 74 65 64 20 69 73 20 73 74 6f 72 65 64  racted is stored
11f00 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
11f10 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 6f  .**.** If the co
11f20 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73 20 66 65  lumn contains fe
11f30 77 65 72 20 74 68 61 6e 20 50 32 20 66 69 65 6c  wer than P2 fiel
11f40 64 73 2c 20 74 68 65 6e 20 65 78 74 72 61 63 74  ds, then extract
11f50 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a   a NULL.  Or,.**
11f60 20 69 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   if the P4 argum
11f70 65 6e 74 20 69 73 20 61 20 50 34 5f 4d 45 4d 20  ent is a P4_MEM 
11f80 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  use the value of
11f90 20 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74   the P4 argument
11fa0 20 61 73 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c   as.** the resul
11fb0 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  t..**.** If the 
11fc0 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43 41 43 48  OPFLAG_CLEARCACH
11fd0 45 20 62 69 74 20 69 73 20 73 65 74 20 6f 6e 20  E bit is set on 
11fe0 50 35 20 61 6e 64 20 50 31 20 69 73 20 61 20 70  P5 and P1 is a p
11ff0 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73  seudo-table curs
12000 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  or,.** then the 
12010 63 61 63 68 65 20 6f 66 20 74 68 65 20 63 75 72  cache of the cur
12020 73 6f 72 20 69 73 20 72 65 73 65 74 20 70 72 69  sor is reset pri
12030 6f 72 20 74 6f 20 65 78 74 72 61 63 74 69 6e 67  or to extracting
12040 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20   the column..** 
12050 54 68 65 20 66 69 72 73 74 20 4f 50 5f 43 6f 6c  The first OP_Col
12060 75 6d 6e 20 61 67 61 69 6e 73 74 20 61 20 70 73  umn against a ps
12070 65 75 64 6f 2d 74 61 62 6c 65 20 61 66 74 65 72  eudo-table after
12080 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68   the value of th
12090 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 72 65 67  e content.** reg
120a0 69 73 74 65 72 20 68 61 73 20 63 68 61 6e 67 65  ister has change
120b0 64 20 73 68 6f 75 6c 64 20 68 61 76 65 20 74 68  d should have th
120c0 69 73 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a  is bit set..**.*
120d0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
120e0 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
120f0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20 62  FLAG_TYPEOFARG b
12100 69 74 73 20 61 72 65 20 73 65 74 20 6f 6e 20 50  its are set on P
12110 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 72 65  5 when.** the re
12120 73 75 6c 74 20 69 73 20 67 75 61 72 61 6e 74 65  sult is guarante
12130 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65 20 75 73  ed to only be us
12140 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
12150 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74 68 28 29  nt of a length()
12160 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66 28 29 20  .** or typeof() 
12170 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73 70 65 63  function, respec
12180 74 69 76 65 6c 79 2e 20 20 54 68 65 20 6c 6f 61  tively.  The loa
12190 64 69 6e 67 20 6f 66 20 6c 61 72 67 65 20 62 6c  ding of large bl
121a0 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a 20 73 6b  obs can be.** sk
121b0 69 70 70 65 64 20 66 6f 72 20 6c 65 6e 67 74 68  ipped for length
121c0 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f 6e 74 65  () and all conte
121d0 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61 6e 20 62  nt loading can b
121e0 65 20 73 6b 69 70 70 65 64 20 66 6f 72 20 74 79  e skipped for ty
121f0 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  peof()..*/.case 
12200 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69  OP_Column: {.  i
12210 36 34 20 70 61 79 6c 6f 61 64 53 69 7a 65 36 34  64 payloadSize64
12220 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62  ; /* Number of b
12230 79 74 65 73 20 69 6e 20 74 68 65 20 72 65 63 6f  ytes in the reco
12240 72 64 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20  rd */.  int p2; 
12250 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63 6f             /* co
12260 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74 6f 20 72  lumn number to r
12270 65 74 72 69 65 76 65 20 2a 2f 0a 20 20 56 64 62  etrieve */.  Vdb
12280 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
12290 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72 73  /* The VDBE curs
122a0 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72 73 6f 72  or */.  BtCursor
122b0 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a 20 54 68   *pCrsr;   /* Th
122c0 65 20 42 54 72 65 65 20 63 75 72 73 6f 72 20 2a  e BTree cursor *
122d0 2f 0a 20 20 75 33 32 20 2a 61 54 79 70 65 3b 20  /.  u32 *aType; 
122e0 20 20 20 20 20 20 20 2f 2a 20 61 54 79 70 65 5b         /* aType[
122f0 69 5d 20 68 6f 6c 64 73 20 74 68 65 20 6e 75 6d  i] holds the num
12300 65 72 69 63 20 74 79 70 65 20 6f 66 20 74 68 65  eric type of the
12310 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   i-th column */.
12320 20 20 75 33 32 20 2a 61 4f 66 66 73 65 74 3b 20    u32 *aOffset; 
12330 20 20 20 20 20 2f 2a 20 61 4f 66 66 73 65 74 5b       /* aOffset[
12340 69 5d 20 69 73 20 6f 66 66 73 65 74 20 74 6f 20  i] is offset to 
12350 73 74 61 72 74 20 6f 66 20 64 61 74 61 20 66 6f  start of data fo
12360 72 20 69 2d 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f  r i-th column */
12370 0a 20 20 69 6e 74 20 6c 65 6e 3b 20 20 20 20 20  .  int len;     
12380 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 65 6e        /* The len
12390 67 74 68 20 6f 66 20 74 68 65 20 73 65 72 69 61  gth of the seria
123a0 6c 69 7a 65 64 20 64 61 74 61 20 66 6f 72 20 74  lized data for t
123b0 68 65 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  he column */.  i
123c0 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
123d0 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
123e0 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 65 73  r */.  Mem *pDes
123f0 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  t;        /* Whe
12400 72 65 20 74 6f 20 77 72 69 74 65 20 74 68 65 20  re to write the 
12410 65 78 74 72 61 63 74 65 64 20 76 61 6c 75 65 20  extracted value 
12420 2a 2f 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20 20  */.  Mem sMem;  
12430 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 73          /* For s
12440 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f 72  toring the recor
12450 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64 20  d being decoded 
12460 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a  */.  const u8 *z
12470 44 61 74 61 3b 20 20 20 2f 2a 20 50 61 72 74 20  Data;   /* Part 
12480 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  of the record be
12490 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
124a0 20 63 6f 6e 73 74 20 75 38 20 2a 7a 48 64 72 3b   const u8 *zHdr;
124b0 20 20 20 20 2f 2a 20 4e 65 78 74 20 75 6e 70 61      /* Next unpa
124c0 72 73 65 64 20 62 79 74 65 20 6f 66 20 74 68 65  rsed byte of the
124d0 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 63 6f 6e   header */.  con
124e0 73 74 20 75 38 20 2a 7a 45 6e 64 48 64 72 3b 20  st u8 *zEndHdr; 
124f0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 66 69  /* Pointer to fi
12500 72 73 74 20 62 79 74 65 20 61 66 74 65 72 20 74  rst byte after t
12510 68 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 75  he header */.  u
12520 33 32 20 6f 66 66 73 65 74 3b 20 20 20 20 20 20  32 offset;      
12530 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 74 6f    /* Offset into
12540 20 74 68 65 20 64 61 74 61 20 2a 2f 0a 20 20 75   the data */.  u
12550 33 32 20 73 7a 46 69 65 6c 64 3b 20 20 20 20 20  32 szField;     
12560 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
12570 79 74 65 73 20 69 6e 20 74 68 65 20 63 6f 6e 74  ytes in the cont
12580 65 6e 74 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  ent of a field *
12590 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20  /.  u32 avail;  
125a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
125b0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
125c0 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
125d0 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
125e0 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
125f0 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
12600 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d  rd header */.  M
12610 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
12620 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
12630 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
12640 2a 2f 0a 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e  */..  p2 = pOp->
12650 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p2;.  assert( pO
12660 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p3>0 && pOp->
12670 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e  p3<=(p->nMem-p->
12680 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
12690 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
126a0 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
126b0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
126c0 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  t);.  assert( pO
126d0 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
126e0 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
126f0 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
12700 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
12710 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
12720 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e   assert( p2<pC->
12730 6e 46 69 65 6c 64 20 29 3b 0a 20 20 61 54 79 70  nField );.  aTyp
12740 65 20 3d 20 70 43 2d 3e 61 54 79 70 65 3b 0a 20  e = pC->aType;. 
12750 20 61 4f 66 66 73 65 74 20 3d 20 61 54 79 70 65   aOffset = aType
12760 20 2b 20 70 43 2d 3e 6e 46 69 65 6c 64 3b 0a 23   + pC->nField;.#
12770 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12780 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
12790 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 56    assert( pC->pV
127a0 74 61 62 43 75 72 73 6f 72 3d 3d 30 20 29 3b 20  tabCursor==0 ); 
127b0 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6e 65 76  /* OP_Column nev
127c0 65 72 20 63 61 6c 6c 65 64 20 6f 6e 20 76 69 72  er called on vir
127d0 74 75 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 65  tual table */.#e
127e0 6e 64 69 66 0a 20 20 70 43 72 73 72 20 3d 20 70  ndif.  pCrsr = p
127f0 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73  C->pCursor;.  as
12800 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c  sert( pCrsr!=0 |
12810 7c 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c  | pC->pseudoTabl
12820 65 52 65 67 3e 30 20 29 3b 20 2f 2a 20 70 43 72  eReg>0 ); /* pCr
12830 73 72 20 4e 55 4c 4c 20 6f 6e 20 50 73 65 75 64  sr NULL on Pseud
12840 6f 54 61 62 6c 65 73 20 2a 2f 0a 20 20 61 73 73  oTables */.  ass
12850 65 72 74 28 20 70 43 72 73 72 21 3d 30 20 7c 7c  ert( pCrsr!=0 ||
12860 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 20   pC->nullRow ); 
12870 20 20 20 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e           /* pC->
12880 6e 75 6c 6c 52 6f 77 20 6f 6e 20 50 73 65 75 64  nullRow on Pseud
12890 6f 54 61 62 6c 65 73 20 2a 2f 0a 0a 20 20 2f 2a  oTables */..  /*
128a0 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 63   If the cursor c
128b0 61 63 68 65 20 69 73 20 73 74 61 6c 65 2c 20 62  ache is stale, b
128c0 72 69 6e 67 20 69 74 20 75 70 2d 74 6f 2d 64 61  ring it up-to-da
128d0 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c  te */.  rc = sql
128e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
128f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
12900 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
12910 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
12920 69 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61  if( pC->cacheSta
12930 74 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72  tus!=p->cacheCtr
12940 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 26 4f 50 46   || (pOp->p5&OPF
12950 4c 41 47 5f 43 4c 45 41 52 43 41 43 48 45 29 21  LAG_CLEARCACHE)!
12960 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 70 43  =0 ){.    if( pC
12970 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
12980 20 20 20 69 66 28 20 70 43 72 73 72 3d 3d 30 20     if( pCrsr==0 
12990 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
129a0 74 28 20 70 43 2d 3e 70 73 65 75 64 6f 54 61 62  t( pC->pseudoTab
129b0 6c 65 52 65 67 3e 30 20 29 3b 0a 20 20 20 20 20  leReg>0 );.     
129c0 20 20 20 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b     pReg = &aMem[
129d0 70 43 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52  pC->pseudoTableR
129e0 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  eg];.        ass
129f0 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
12a00 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
12a10 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
12a20 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
12a30 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
12a40 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
12a50 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d  >szRow = avail =
12a60 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20   pReg->n;.      
12a70 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
12a80 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20  *)pReg->z;.     
12a90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
12aa0 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
12ab0 44 65 73 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b  Dest, MEM_Null);
12ac0 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70  .        goto op
12ad0 5f 63 6f 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20  _column_out;.   
12ae0 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
12af0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43        assert( pC
12b00 72 73 72 20 29 3b 0a 20 20 20 20 20 20 69 66 28  rsr );.      if(
12b10 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
12b20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
12b30 74 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  t( sqlite3BtreeC
12b40 75 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 72  ursorIsValid(pCr
12b50 73 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 56  sr) );.        V
12b60 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29 20 73 71  VA_ONLY(rc =) sq
12b70 6c 69 74 65 33 42 74 72 65 65 4b 65 79 53 69 7a  lite3BtreeKeySiz
12b80 65 28 70 43 72 73 72 2c 20 26 70 61 79 6c 6f 61  e(pCrsr, &payloa
12b90 64 53 69 7a 65 36 34 29 3b 0a 20 20 20 20 20 20  dSize64);.      
12ba0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
12bb0 4c 49 54 45 5f 4f 4b 20 29 3b 20 2f 2a 20 54 72  LITE_OK ); /* Tr
12bc0 75 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75  ue because of Cu
12bd0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c  rsorMoveto() cal
12be0 6c 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 20  l above */.     
12bf0 20 20 20 2f 2a 20 73 71 6c 69 74 65 33 42 74 72     /* sqlite3Btr
12c00 65 65 50 61 72 73 65 43 65 6c 6c 50 74 72 28 29  eeParseCellPtr()
12c10 20 75 73 65 73 20 67 65 74 56 61 72 69 6e 74 33   uses getVarint3
12c20 32 28 29 20 74 6f 20 65 78 74 72 61 63 74 20 74  2() to extract t
12c30 68 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 70 61  he.        ** pa
12c40 79 6c 6f 61 64 20 73 69 7a 65 2c 20 73 6f 20 69  yload size, so i
12c50 74 20 69 73 20 69 6d 70 6f 73 73 69 62 6c 65 20  t is impossible 
12c60 66 6f 72 20 70 61 79 6c 6f 61 64 53 69 7a 65 36  for payloadSize6
12c70 34 20 74 6f 20 62 65 0a 20 20 20 20 20 20 20 20  4 to be.        
12c80 2a 2a 20 6c 61 72 67 65 72 20 74 68 61 6e 20 33  ** larger than 3
12c90 32 20 62 69 74 73 2e 20 2a 2f 0a 20 20 20 20 20  2 bits. */.     
12ca0 20 20 20 61 73 73 65 72 74 28 20 28 70 61 79 6c     assert( (payl
12cb0 6f 61 64 53 69 7a 65 36 34 20 26 20 53 51 4c 49  oadSize64 & SQLI
12cc0 54 45 5f 4d 41 58 5f 55 33 32 29 3d 3d 28 75 36  TE_MAX_U32)==(u6
12cd0 34 29 70 61 79 6c 6f 61 64 53 69 7a 65 36 34 20  4)payloadSize64 
12ce0 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  );.        pC->a
12cf0 52 6f 77 20 3d 20 73 71 6c 69 74 65 33 42 74 72  Row = sqlite3Btr
12d00 65 65 4b 65 79 46 65 74 63 68 28 70 43 72 73 72  eeKeyFetch(pCrsr
12d10 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20  , &avail);.     
12d20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69     pC->payloadSi
12d30 7a 65 20 3d 20 28 75 33 32 29 70 61 79 6c 6f 61  ze = (u32)payloa
12d40 64 53 69 7a 65 36 34 3b 0a 20 20 20 20 20 20 7d  dSize64;.      }
12d50 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 61 73  else{.        as
12d60 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
12d70 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
12d80 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
12d90 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
12da0 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
12db0 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 70 43  aSize(pCrsr, &pC
12dc0 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29 3b 0a  ->payloadSize);.
12dd0 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
12de0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
12df0 20 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29     /* DataSize()
12e00 20 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a   cannot fail */.
12e10 20 20 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77          pC->aRow
12e20 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
12e30 61 74 61 46 65 74 63 68 28 70 43 72 73 72 2c 20  ataFetch(pCrsr, 
12e40 26 61 76 61 69 6c 29 3b 0a 20 20 20 20 20 20 7d  &avail);.      }
12e50 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 61  .      assert( a
12e60 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b 20 20  vail<=65536 );  
12e70 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67 65 20  /* Maximum page 
12e80 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20 2a 2f  size is 64KiB */
12e90 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
12ea0 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20 28 75  ayloadSize <= (u
12eb0 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20 20 20  32)avail ){.    
12ec0 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20      pC->szRow = 
12ed0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 3b  pC->payloadSize;
12ee0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
12ef0 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
12f00 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20 20 7d  = avail;.      }
12f10 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d 3e 70  .      if( pC->p
12f20 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75 33  ayloadSize > (u3
12f30 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  2)db->aLimit[SQL
12f40 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
12f50 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f 74  ] ){.        got
12f60 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20 20  o too_big;.     
12f70 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
12f80 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
12f90 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
12fa0 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
12fb0 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
12fc0 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a  >aRow, offset);.
12fd0 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
12fe0 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66  ed = 0;.    aOff
12ff0 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b  set[0] = offset;
13000 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c 3c 6f  .    if( avail<o
13010 66 66 73 65 74 20 29 7b 0a 20 20 20 20 20 20 2f  ffset ){.      /
13020 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73 20  * pC->aRow does 
13030 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c 64  not have to hold
13040 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77 2c   the entire row,
13050 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74 20   but it does at 
13060 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20 6e  least.      ** n
13070 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68 65  eed to cover the
13080 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20 72   header of the r
13090 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e 61  ecord.  If pC->a
130a0 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  Row does not con
130b0 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74 68  tain.      ** th
130c0 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64 65  e complete heade
130d0 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20 74  r, then set it t
130e0 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67 20  o zero, forcing 
130f0 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62 65  the header to be
13100 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d 69  .      ** dynami
13110 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64 2e  cally allocated.
13120 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61 52   */.      pC->aR
13130 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 43  ow = 0;.      pC
13140 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 20 20 20  ->szRow = 0;.   
13150 20 7d 0a 0a 20 20 20 20 2f 2a 20 4d 61 6b 65 20   }..    /* Make 
13160 73 75 72 65 20 61 20 63 6f 72 72 75 70 74 20 64  sure a corrupt d
13170 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
13180 67 69 76 65 6e 20 75 73 20 61 6e 20 6f 76 65 72  given us an over
13190 73 69 7a 65 20 68 65 61 64 65 72 2e 0a 20 20 20  size header..   
131a0 20 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20   ** Do this now 
131b0 74 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72  to avoid an over
131c0 73 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  size memory allo
131d0 63 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 0a 20  cation..    **. 
131e0 20 20 20 2a 2a 20 54 79 70 65 20 65 6e 74 72 69     ** Type entri
131f0 65 73 20 63 61 6e 20 62 65 20 62 65 74 77 65 65  es can be betwee
13200 6e 20 31 20 61 6e 64 20 35 20 62 79 74 65 73 20  n 1 and 5 bytes 
13210 65 61 63 68 2e 20 20 42 75 74 20 34 20 61 6e 64  each.  But 4 and
13220 20 35 20 62 79 74 65 0a 20 20 20 20 2a 2a 20 74   5 byte.    ** t
13230 79 70 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68  ypes use so much
13240 20 64 61 74 61 20 73 70 61 63 65 20 74 68 61 74   data space that
13250 20 74 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20   there can only 
13260 62 65 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f  be 4096 and 32 o
13270 66 0a 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72  f.    ** them, r
13280 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f  espectively.  So
13290 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61   the maximum hea
132a0 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c  der length resul
132b0 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 2a 2a  ts from a.    **
132c0 20 33 2d 62 79 74 65 20 74 79 70 65 20 66 6f 72   3-byte type for
132d0 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d 61 78   each of the max
132e0 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20 63 6f  imum of 32768 co
132f0 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72 65 65  lumns plus three
13300 0a 20 20 20 20 2a 2a 20 65 78 74 72 61 20 62 79  .    ** extra by
13310 74 65 73 20 66 6f 72 20 74 68 65 20 68 65 61 64  tes for the head
13320 65 72 20 6c 65 6e 67 74 68 20 69 74 73 65 6c 66  er length itself
13330 2e 20 20 33 32 37 36 38 2a 33 20 2b 20 33 20 3d  .  32768*3 + 3 =
13340 20 39 38 33 30 37 2e 0a 20 20 20 20 2a 2f 0a 20   98307..    */. 
13350 20 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20     if( offset > 
13360 39 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20  98307 || offset 
13370 3e 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  > pC->payloadSiz
13380 65 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20  e ){.      rc = 
13390 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
133a0 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20  KPT;.      goto 
133b0 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b  op_column_error;
133c0 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f 2a  .    }.  }..  /*
133d0 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c 65   Make sure at le
133e0 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70 32  ast the first p2
133f0 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74 68  +1 entries of th
13400 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62 65  e header have be
13410 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20 61  en.  ** parsed a
13420 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d 61  nd valid informa
13430 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66 73  tion is in aOffs
13440 65 74 5b 5d 20 61 6e 64 20 61 54 79 70 65 5b 5d  et[] and aType[]
13450 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d  ..  */.  if( pC-
13460 3e 6e 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20  >nHdrParsed<=p2 
13470 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
13480 72 65 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65  re is more heade
13490 72 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  r available for 
134a0 70 61 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72  parsing in the r
134b0 65 63 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a  ecord, try.    *
134c0 2a 20 74 6f 20 65 78 74 72 61 63 74 20 61 64 64  * to extract add
134d0 69 74 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75  itional fields u
134e0 70 20 74 68 72 6f 75 67 68 20 74 68 65 20 70 32  p through the p2
134f0 2b 31 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20  +1-th field .   
13500 20 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e   */.    if( pC->
13510 69 48 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73  iHdrOffset<aOffs
13520 65 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f  et[0] ){.      /
13530 2a 20 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74  * Make sure zDat
13540 61 20 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75  a points to enou
13550 67 68 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  gh of the record
13560 20 74 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65   to cover the he
13570 61 64 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69  ader. */.      i
13580 66 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29  f( pC->aRow==0 )
13590 7b 0a 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74  {.        memset
135a0 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f  (&sMem, 0, sizeo
135b0 66 28 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20  f(sMem));.      
135c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
135d0 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70  beMemFromBtree(p
135e0 43 72 73 72 2c 20 30 2c 20 61 4f 66 66 73 65 74  Crsr, 0, aOffset
135f0 5b 30 5d 2c 20 0a 20 20 20 20 20 20 20 20 20 20  [0], .          
13600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13610 20 20 20 20 20 20 20 20 20 20 20 21 70 43 2d 3e             !pC->
13620 69 73 54 61 62 6c 65 2c 20 26 73 4d 65 6d 29 3b  isTable, &sMem);
13630 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21  .        if( rc!
13640 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13650 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f          goto op_
13660 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20  column_error;.  
13670 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
13680 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d 65  zData = (u8*)sMe
13690 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  m.z;.      }else
136a0 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61 20  {.        zData 
136b0 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20  = pC->aRow;.    
136c0 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20    }.  .      /* 
136d0 46 69 6c 6c 20 69 6e 20 61 54 79 70 65 5b 69 5d  Fill in aType[i]
136e0 20 61 6e 64 20 61 4f 66 66 73 65 74 5b 69 5d 20   and aOffset[i] 
136f0 76 61 6c 75 65 73 20 74 68 72 6f 75 67 68 20 74  values through t
13700 68 65 20 70 32 2d 74 68 20 66 69 65 6c 64 2e 20  he p2-th field. 
13710 2a 2f 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  */.      i = pC-
13720 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
13730 20 20 20 6f 66 66 73 65 74 20 3d 20 61 4f 66 66     offset = aOff
13740 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20 7a 48  set[i];.      zH
13750 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70 43 2d  dr = zData + pC-
13760 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20 20 20  >iHdrOffset;.   
13770 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a 44 61     zEndHdr = zDa
13780 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30 5d 3b  ta + aOffset[0];
13790 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69  .      assert( i
137a0 3c 3d 70 32 20 26 26 20 7a 48 64 72 3c 7a 45 6e  <=p2 && zHdr<zEn
137b0 64 48 64 72 20 29 3b 0a 20 20 20 20 20 20 64 6f  dHdr );.      do
137c0 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 7a 48  {.        if( zH
137d0 64 72 5b 30 5d 3c 30 78 38 30 20 29 7b 0a 20 20  dr[0]<0x80 ){.  
137e0 20 20 20 20 20 20 20 20 74 20 3d 20 7a 48 64 72          t = zHdr
137f0 5b 30 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 7a  [0];.          z
13800 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  Hdr++;.        }
13810 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
13820 7a 48 64 72 20 2b 3d 20 73 71 6c 69 74 65 33 47  zHdr += sqlite3G
13830 65 74 56 61 72 69 6e 74 33 32 28 7a 48 64 72 2c  etVarint32(zHdr,
13840 20 26 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   &t);.        }.
13850 20 20 20 20 20 20 20 20 61 54 79 70 65 5b 69 5d          aType[i]
13860 20 3d 20 74 3b 0a 20 20 20 20 20 20 20 20 73 7a   = t;.        sz
13870 46 69 65 6c 64 20 3d 20 73 71 6c 69 74 65 33 56  Field = sqlite3V
13880 64 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e  dbeSerialTypeLen
13890 28 74 29 3b 0a 20 20 20 20 20 20 20 20 6f 66 66  (t);.        off
138a0 73 65 74 20 2b 3d 20 73 7a 46 69 65 6c 64 3b 0a  set += szField;.
138b0 20 20 20 20 20 20 20 20 69 66 28 20 6f 66 66 73          if( offs
138c0 65 74 3c 73 7a 46 69 65 6c 64 20 29 7b 20 20 2f  et<szField ){  /
138d0 2a 20 54 72 75 65 20 69 66 20 6f 66 66 73 65 74  * True if offset
138e0 20 6f 76 65 72 66 6c 6f 77 73 20 2a 2f 0a 20 20   overflows */.  
138f0 20 20 20 20 20 20 20 20 7a 48 64 72 20 3d 20 26          zHdr = &
13900 7a 45 6e 64 48 64 72 5b 31 5d 3b 20 20 2f 2a 20  zEndHdr[1];  /* 
13910 46 6f 72 63 65 73 20 53 51 4c 49 54 45 5f 43 4f  Forces SQLITE_CO
13920 52 52 55 50 54 20 72 65 74 75 72 6e 20 62 65 6c  RRUPT return bel
13930 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  ow */.          
13940 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
13950 0a 20 20 20 20 20 20 20 20 69 2b 2b 3b 0a 20 20  .        i++;.  
13960 20 20 20 20 20 20 61 4f 66 66 73 65 74 5b 69 5d        aOffset[i]
13970 20 3d 20 6f 66 66 73 65 74 3b 0a 20 20 20 20 20   = offset;.     
13980 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32 20 26   }while( i<=p2 &
13990 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72 20 29  & zHdr<zEndHdr )
139a0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 6e 48 64 72  ;.      pC->nHdr
139b0 50 61 72 73 65 64 20 3d 20 69 3b 0a 20 20 20 20  Parsed = i;.    
139c0 20 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74    pC->iHdrOffset
139d0 20 3d 20 28 75 33 32 29 28 7a 48 64 72 20 2d 20   = (u32)(zHdr - 
139e0 7a 44 61 74 61 29 3b 0a 20 20 20 20 20 20 69 66  zData);.      if
139f0 28 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b  ( pC->aRow==0 ){
13a00 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
13a10 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
13a20 73 4d 65 6d 29 3b 0a 20 20 20 20 20 20 20 20 73  sMem);.        s
13a30 4d 65 6d 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  Mem.flags = MEM_
13a40 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20  Null;.      }.  
13a50 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 77 65 20  .      /* If we 
13a60 68 61 76 65 20 72 65 61 64 20 6d 6f 72 65 20 68  have read more h
13a70 65 61 64 65 72 20 64 61 74 61 20 74 68 61 6e 20  eader data than 
13a80 77 61 73 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e  was contained in
13a90 20 74 68 65 20 68 65 61 64 65 72 2c 0a 20 20 20   the header,.   
13aa0 20 20 20 2a 2a 20 6f 72 20 69 66 20 74 68 65 20     ** or if the 
13ab0 65 6e 64 20 6f 66 20 74 68 65 20 6c 61 73 74 20  end of the last 
13ac0 66 69 65 6c 64 20 61 70 70 65 61 72 73 20 74 6f  field appears to
13ad0 20 62 65 20 70 61 73 74 20 74 68 65 20 65 6e 64   be past the end
13ae0 20 6f 66 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   of the.      **
13af0 20 72 65 63 6f 72 64 2c 20 6f 72 20 69 66 20 74   record, or if t
13b00 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 6c 61  he end of the la
13b10 73 74 20 66 69 65 6c 64 20 61 70 70 65 61 72 73  st field appears
13b20 20 74 6f 20 62 65 20 62 65 66 6f 72 65 20 74 68   to be before th
13b30 65 20 65 6e 64 0a 20 20 20 20 20 20 2a 2a 20 6f  e end.      ** o
13b40 66 20 74 68 65 20 72 65 63 6f 72 64 20 28 77 68  f the record (wh
13b50 65 6e 20 61 6c 6c 20 66 69 65 6c 64 73 20 70 72  en all fields pr
13b60 65 73 65 6e 74 29 2c 20 74 68 65 6e 20 77 65 20  esent), then we 
13b70 6d 75 73 74 20 62 65 20 64 65 61 6c 69 6e 67 20  must be dealing 
13b80 0a 20 20 20 20 20 20 2a 2a 20 77 69 74 68 20 61  .      ** with a
13b90 20 63 6f 72 72 75 70 74 20 64 61 74 61 62 61 73   corrupt databas
13ba0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
13bb0 20 20 69 66 28 20 28 7a 48 64 72 20 3e 20 7a 45    if( (zHdr > zE
13bc0 6e 64 48 64 72 29 0a 20 20 20 20 20 20 20 7c 7c  ndHdr).       ||
13bd0 20 28 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70   (offset > pC->p
13be0 61 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20  ayloadSize).    
13bf0 20 20 20 7c 7c 20 28 7a 48 64 72 3d 3d 7a 45 6e     || (zHdr==zEn
13c00 64 48 64 72 20 26 26 20 6f 66 66 73 65 74 21 3d  dHdr && offset!=
13c10 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 29  pC->payloadSize)
13c20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20  .      ){.      
13c30 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 43 4f    rc = SQLITE_CO
13c40 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20 20 20  RRUPT_BKPT;.    
13c50 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c 75      goto op_colu
13c60 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  mn_error;.      
13c70 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  }.    }..    /* 
13c80 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67 20  If after trying 
13c90 74 6f 20 65 78 74 72 61 20 6e 65 77 20 65 6e 74  to extra new ent
13ca0 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20 68 65  ries from the he
13cb0 61 64 65 72 2c 20 6e 48 64 72 50 61 72 73 65 64  ader, nHdrParsed
13cc0 20 69 73 0a 20 20 20 20 2a 2a 20 73 74 69 6c 6c   is.    ** still
13cd0 20 6e 6f 74 20 75 70 20 74 6f 20 70 32 2c 20 74   not up to p2, t
13ce0 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74  hat means that t
13cf0 68 65 20 72 65 63 6f 72 64 20 68 61 73 20 66 65  he record has fe
13d00 77 65 72 20 74 68 61 6e 20 70 32 0a 20 20 20 20  wer than p2.    
13d10 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20  ** columns.  So 
13d20 74 68 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20  the result will 
13d30 62 65 20 65 69 74 68 65 72 20 74 68 65 20 64 65  be either the de
13d40 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 72 20 61  fault value or a
13d50 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20   NULL..    */.  
13d60 20 20 69 66 28 20 70 43 2d 3e 6e 48 64 72 50 61    if( pC->nHdrPa
13d70 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20 20 20 20  rsed<=p2 ){.    
13d80 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
13d90 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a 20 20 20  e==P4_MEM ){.   
13da0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13db0 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
13dc0 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d  Dest, pOp->p4.pM
13dd0 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b  em, MEM_Static);
13de0 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
13df0 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65        MemSetType
13e00 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d 5f  Flag(pDest, MEM_
13e10 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Null);.      }. 
13e20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
13e30 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
13e40 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
13e50 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
13e60 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
13e70 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
13e80 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
13e90 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
13ea0 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
13eb0 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
13ec0 61 54 79 70 65 5b 70 32 5d 20 61 72 65 0a 20 20  aType[p2] are.  
13ed0 2a 2a 20 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20  ** all valid..  
13ee0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 32 3c  */.  assert( p2<
13ef0 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 29  pC->nHdrParsed )
13f00 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
13f10 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61  SQLITE_OK );.  a
13f20 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
13f30 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
13f40 61 6e 74 73 28 70 44 65 73 74 29 20 29 3b 0a 20  ants(pDest) );. 
13f50 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
13f60 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
13f70 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
13f80 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
13f90 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
13fa0 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
13fb0 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
13fc0 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
13fd0 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
13fe0 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
13ff0 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
14000 20 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28   VdbeMemRelease(
14010 70 44 65 73 74 29 3b 0a 20 20 20 20 73 71 6c 69  pDest);.    sqli
14020 74 65 33 56 64 62 65 53 65 72 69 61 6c 47 65 74  te3VdbeSerialGet
14030 28 70 43 2d 3e 61 52 6f 77 2b 61 4f 66 66 73 65  (pC->aRow+aOffse
14040 74 5b 70 32 5d 2c 20 61 54 79 70 65 5b 70 32 5d  t[p2], aType[p2]
14050 2c 20 70 44 65 73 74 29 3b 0a 20 20 7d 65 6c 73  , pDest);.  }els
14060 65 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 62  e{.    /* This b
14070 72 61 6e 63 68 20 68 61 70 70 65 6e 73 20 6f 6e  ranch happens on
14080 6c 79 20 77 68 65 6e 20 63 6f 6e 74 65 6e 74 20  ly when content 
14090 69 73 20 6f 6e 20 6f 76 65 72 66 6c 6f 77 20 70  is on overflow p
140a0 61 67 65 73 20 2a 2f 0a 20 20 20 20 74 20 3d 20  ages */.    t = 
140b0 61 54 79 70 65 5b 70 32 5d 3b 0a 20 20 20 20 69  aType[p2];.    i
140c0 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20 28  f( ((pOp->p5 & (
140d0 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47  OPFLAG_LENGTHARG
140e0 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52  |OPFLAG_TYPEOFAR
140f0 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20 20  G))!=0.         
14100 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20 28   && ((t>=12 && (
14110 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f 70  t&1)==0) || (pOp
14120 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54 59  ->p5 & OPFLAG_TY
14130 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20 20  PEOFARG)!=0)).  
14140 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71 6c     || (len = sql
14150 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
14160 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20 20  peLen(t))==0.   
14170 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
14180 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76 61  tent is irreleva
14190 6e 74 20 66 6f 72 20 74 68 65 20 74 79 70 65 6f  nt for the typeo
141a0 66 28 29 20 66 75 6e 63 74 69 6f 6e 20 61 6e 64  f() function and
141b0 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a 20 74 68   for.      ** th
141c0 65 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63  e length(X) func
141d0 74 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62  tion if X is a b
141e0 6c 6f 62 2e 20 20 53 6f 20 77 65 20 6d 69 67 68  lob.  So we migh
141f0 74 20 61 73 20 77 65 6c 6c 20 75 73 65 0a 20 20  t as well use.  
14200 20 20 20 20 2a 2a 20 62 6f 67 75 73 20 63 6f 6e      ** bogus con
14210 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
14220 20 72 65 61 64 69 6e 67 20 63 6f 6e 74 65 6e 74   reading content
14230 20 66 72 6f 6d 20 64 69 73 6b 2e 20 20 4e 55 4c   from disk.  NUL
14240 4c 20 77 6f 72 6b 73 0a 20 20 20 20 20 20 2a 2a  L works.      **
14250 20 66 6f 72 20 74 65 78 74 20 61 6e 64 20 62 6c   for text and bl
14260 6f 62 20 61 6e 64 20 77 68 61 74 65 76 65 72 20  ob and whatever 
14270 69 73 20 69 6e 20 74 68 65 20 70 61 79 6c 6f 61  is in the payloa
14280 64 53 69 7a 65 36 34 20 76 61 72 69 61 62 6c 65  dSize64 variable
14290 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 77  .      ** will w
142a0 6f 72 6b 20 66 6f 72 20 65 76 65 72 79 74 68 69  ork for everythi
142b0 6e 67 20 65 6c 73 65 2e 20 20 43 6f 6e 74 65 6e  ng else.  Conten
142c0 74 20 69 73 20 61 6c 73 6f 20 69 72 72 65 6c 65  t is also irrele
142d0 76 61 6e 74 20 69 66 0a 20 20 20 20 20 20 2a 2a  vant if.      **
142e0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
142f0 67 74 68 20 69 73 20 30 2e 20 2a 2f 0a 20 20 20  gth is 0. */.   
14300 20 20 20 7a 44 61 74 61 20 3d 20 74 3c 3d 31 33     zData = t<=13
14310 20 3f 20 28 75 38 2a 29 26 70 61 79 6c 6f 61 64   ? (u8*)&payload
14320 53 69 7a 65 36 34 20 3a 20 30 3b 0a 20 20 20 20  Size64 : 0;.    
14330 20 20 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 3d    sMem.zMalloc =
14340 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
14350 20 20 20 20 20 6d 65 6d 73 65 74 28 26 73 4d 65       memset(&sMe
14360 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73 4d 65  m, 0, sizeof(sMe
14370 6d 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  m));.      sqlit
14380 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26 73  e3VdbeMemMove(&s
14390 4d 65 6d 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  Mem, pDest);.   
143a0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
143b0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
143c0 70 43 72 73 72 2c 20 61 4f 66 66 73 65 74 5b 70  pCrsr, aOffset[p
143d0 32 5d 2c 20 6c 65 6e 2c 20 21 70 43 2d 3e 69 73  2], len, !pC->is
143e0 54 61 62 6c 65 2c 0a 20 20 20 20 20 20 20 20 20  Table,.         
143f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14400 20 20 20 20 20 20 20 20 20 20 26 73 4d 65 6d 29            &sMem)
14410 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d  ;.      if( rc!=
14420 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
14430 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
14440 75 6d 6e 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  umn_error;.     
14450 20 7d 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d   }.      zData =
14460 20 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20   (u8*)sMem.z;.  
14470 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
14480 64 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61  dbeSerialGet(zDa
14490 74 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20  ta, t, pDest);. 
144a0 20 20 20 2f 2a 20 49 66 20 77 65 20 64 79 6e 61     /* If we dyna
144b0 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65  mically allocate
144c0 64 20 73 70 61 63 65 20 74 6f 20 68 6f 6c 64 20  d space to hold 
144d0 74 68 65 20 64 61 74 61 20 28 69 6e 20 74 68 65  the data (in the
144e0 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 56  .    ** sqlite3V
144f0 64 62 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28  dbeMemFromBtree(
14500 29 20 63 61 6c 6c 20 61 62 6f 76 65 29 20 74 68  ) call above) th
14510 65 6e 20 74 72 61 6e 73 66 65 72 20 63 6f 6e 74  en transfer cont
14520 72 6f 6c 20 6f 66 20 74 68 61 74 0a 20 20 20 20  rol of that.    
14530 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  ** dynamically a
14540 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 6f  llocated space o
14550 76 65 72 20 74 6f 20 74 68 65 20 70 44 65 73 74  ver to the pDest
14560 20 73 74 72 75 63 74 75 72 65 2e 0a 20 20 20 20   structure..    
14570 2a 2a 20 54 68 69 73 20 70 72 65 76 65 6e 74 73  ** This prevents
14580 20 61 20 6d 65 6d 6f 72 79 20 63 6f 70 79 2e 20   a memory copy. 
14590 2a 2f 0a 20 20 20 20 69 66 28 20 73 4d 65 6d 2e  */.    if( sMem.
145a0 7a 4d 61 6c 6c 6f 63 20 29 7b 0a 20 20 20 20 20  zMalloc ){.     
145b0 20 61 73 73 65 72 74 28 20 73 4d 65 6d 2e 7a 3d   assert( sMem.z=
145c0 3d 73 4d 65 6d 2e 7a 4d 61 6c 6c 6f 63 20 29 3b  =sMem.zMalloc );
145d0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 56  .      assert( V
145e0 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 44  dbeMemDynamic(pD
145f0 65 73 74 29 3d 3d 30 20 29 3b 0a 20 20 20 20 20  est)==0 );.     
14600 20 61 73 73 65 72 74 28 20 28 70 44 65 73 74 2d   assert( (pDest-
14610 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c  >flags & (MEM_Bl
14620 6f 62 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 30 20  ob|MEM_Str))==0 
14630 7c 7c 20 70 44 65 73 74 2d 3e 7a 3d 3d 73 4d 65  || pDest->z==sMe
14640 6d 2e 7a 20 29 3b 0a 20 20 20 20 20 20 70 44 65  m.z );.      pDe
14650 73 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 28 4d  st->flags &= ~(M
14660 45 4d 5f 45 70 68 65 6d 7c 4d 45 4d 5f 53 74 61  EM_Ephem|MEM_Sta
14670 74 69 63 29 3b 0a 20 20 20 20 20 20 70 44 65 73  tic);.      pDes
14680 74 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f  t->flags |= MEM_
14690 54 65 72 6d 3b 0a 20 20 20 20 20 20 70 44 65 73  Term;.      pDes
146a0 74 2d 3e 7a 20 3d 20 73 4d 65 6d 2e 7a 3b 0a 20  t->z = sMem.z;. 
146b0 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 4d 61 6c       pDest->zMal
146c0 6c 6f 63 20 3d 20 73 4d 65 6d 2e 7a 4d 61 6c 6c  loc = sMem.zMall
146d0 6f 63 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  oc;.    }.  }.  
146e0 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
146f0 6f 64 69 6e 67 3b 0a 0a 6f 70 5f 63 6f 6c 75 6d  oding;..op_colum
14700 6e 5f 6f 75 74 3a 0a 20 20 44 65 65 70 68 65 6d  n_out:.  Deephem
14710 65 72 61 6c 69 7a 65 28 70 44 65 73 74 29 3b 0a  eralize(pDest);.
14720 6f 70 5f 63 6f 6c 75 6d 6e 5f 65 72 72 6f 72 3a  op_column_error:
14730 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c  .  UPDATE_MAX_BL
14740 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a 20  OBSIZE(pDest);. 
14750 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
14760 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29 3b  pOp->p3, pDest);
14770 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
14780 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74 79  Opcode: Affinity
14790 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
147a0 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69 6e   Synopsis: affin
147b0 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a  ity(r[P1@P2]).**
147c0 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e 69  .** Apply affini
147d0 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65 20  ties to a range 
147e0 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73 20  of P2 registers 
147f0 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50 31  starting with P1
14800 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
14810 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14820 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14830 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72 61  g. The nth chara
14840 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73  cter of the.** s
14850 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73 20  tring indicates 
14860 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e  the column affin
14870 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64 20  ity that should 
14880 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65 20  be used for the 
14890 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63 65  nth.** memory ce
148a0 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65 2e  ll in the range.
148b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66 69  .*/.case OP_Affi
148c0 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74 20  nity: {.  const 
148d0 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b  char *zAffinity;
148e0 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e 69     /* The affini
148f0 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65 64  ty to be applied
14900 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66 3b   */.  char cAff;
14910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
14920 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72 61  * A single chara
14930 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74 79  cter of affinity
14940 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74 79   */..  zAffinity
14950 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20   = pOp->p4.z;.  
14960 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69 74  assert( zAffinit
14970 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  y!=0 );.  assert
14980 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70 2d  ( zAffinity[pOp-
14990 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49 6e  >p2]==0 );.  pIn
149a0 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
149b0 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63 41  1];.  while( (cA
149c0 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74 79  ff = *(zAffinity
149d0 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 61  ++))!=0 ){.    a
149e0 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20 26  ssert( pIn1 <= &
149f0 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d  p->aMem[(p->nMem
14a00 2d 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20 29 3b  -p->nCursor)] );
14a10 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
14a20 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29 3b  IsValid(pIn1) );
14a30 0a 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69  .    applyAffini
14a40 74 79 28 70 49 6e 31 2c 20 63 41 66 66 2c 20 65  ty(pIn1, cAff, e
14a50 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 70 49  ncoding);.    pI
14a60 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
14a70 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
14a80 20 4d 61 6b 65 52 65 63 6f 72 64 20 50 31 20 50   MakeRecord P1 P
14a90 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
14aa0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72  opsis: r[P3]=mkr
14ab0 65 63 28 72 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a  ec(r[P1@P2]).**.
14ac0 2a 2a 20 43 6f 6e 76 65 72 74 20 50 32 20 72 65  ** Convert P2 re
14ad0 67 69 73 74 65 72 73 20 62 65 67 69 6e 6e 69 6e  gisters beginnin
14ae0 67 20 77 69 74 68 20 50 31 20 69 6e 74 6f 20 74  g with P1 into t
14af0 68 65 20 5b 72 65 63 6f 72 64 20 66 6f 72 6d 61  he [record forma
14b00 74 5d 0a 2a 2a 20 75 73 65 20 61 73 20 61 20 64  t].** use as a d
14b10 61 74 61 20 72 65 63 6f 72 64 20 69 6e 20 61 20  ata record in a 
14b20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
14b30 72 20 61 73 20 61 20 6b 65 79 0a 2a 2a 20 69 6e  r as a key.** in
14b40 20 61 6e 20 69 6e 64 65 78 2e 20 20 54 68 65 20   an index.  The 
14b50 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65  OP_Column opcode
14b60 20 63 61 6e 20 64 65 63 6f 64 65 20 74 68 65 20   can decode the 
14b70 72 65 63 6f 72 64 20 6c 61 74 65 72 2e 0a 2a 2a  record later..**
14b80 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65 20 61 20  .** P4 may be a 
14b90 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20 50  string that is P
14ba0 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f 6e  2 characters lon
14bb0 67 2e 20 20 54 68 65 20 6e 74 68 20 63 68 61 72  g.  The nth char
14bc0 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
14bd0 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
14be0 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
14bf0 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
14c00 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
14c10 20 6e 74 68 0a 2a 2a 20 66 69 65 6c 64 20 6f 66   nth.** field of
14c20 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 2e 0a   the index key..
14c30 2a 2a 0a 2a 2a 20 54 68 65 20 6d 61 70 70 69 6e  **.** The mappin
14c40 67 20 66 72 6f 6d 20 63 68 61 72 61 63 74 65 72  g from character
14c50 20 74 6f 20 61 66 66 69 6e 69 74 79 20 69 73 20   to affinity is 
14c60 67 69 76 65 6e 20 62 79 20 74 68 65 20 53 51 4c  given by the SQL
14c70 49 54 45 5f 41 46 46 5f 0a 2a 2a 20 6d 61 63 72  ITE_AFF_.** macr
14c80 6f 73 20 64 65 66 69 6e 65 64 20 69 6e 20 73 71  os defined in sq
14c90 6c 69 74 65 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a  liteInt.h..**.**
14ca0 20 49 66 20 50 34 20 69 73 20 4e 55 4c 4c 20 74   If P4 is NULL t
14cb0 68 65 6e 20 61 6c 6c 20 69 6e 64 65 78 20 66 69  hen all index fi
14cc0 65 6c 64 73 20 68 61 76 65 20 74 68 65 20 61 66  elds have the af
14cd0 66 69 6e 69 74 79 20 4e 4f 4e 45 2e 0a 2a 2f 0a  finity NONE..*/.
14ce0 63 61 73 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f  case OP_MakeReco
14cf0 72 64 3a 20 7b 0a 20 20 75 38 20 2a 7a 4e 65 77  rd: {.  u8 *zNew
14d00 52 65 63 6f 72 64 3b 20 20 20 20 20 20 20 20 2f  Record;        /
14d10 2a 20 41 20 62 75 66 66 65 72 20 74 6f 20 68 6f  * A buffer to ho
14d20 6c 64 20 74 68 65 20 64 61 74 61 20 66 6f 72 20  ld the data for 
14d30 74 68 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a  the new record *
14d40 2f 0a 20 20 4d 65 6d 20 2a 70 52 65 63 3b 20 20  /.  Mem *pRec;  
14d50 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
14d60 65 20 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a  e new record */.
14d70 20 20 75 36 34 20 6e 44 61 74 61 3b 20 20 20 20    u64 nData;    
14d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14d90 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20 64  er of bytes of d
14da0 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  ata space */.  i
14db0 6e 74 20 6e 48 64 72 3b 20 20 20 20 20 20 20 20  nt nHdr;        
14dc0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14dd0 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61 64  of bytes of head
14de0 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 69 36  er space */.  i6
14df0 34 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20 20  4 nByte;        
14e00 20 20 20 20 20 2f 2a 20 44 61 74 61 20 73 70 61       /* Data spa
14e10 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72 20  ce required for 
14e20 74 68 69 73 20 72 65 63 6f 72 64 20 2a 2f 0a 20  this record */. 
14e30 20 69 6e 74 20 6e 5a 65 72 6f 3b 20 20 20 20 20   int nZero;     
14e40 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14e50 72 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20  r of zero bytes 
14e60 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
14e70 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e  e record */.  in
14e80 74 20 6e 56 61 72 69 6e 74 3b 20 20 20 20 20 20  t nVarint;      
14e90 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
14ea0 66 20 62 79 74 65 73 20 69 6e 20 61 20 76 61 72  f bytes in a var
14eb0 69 6e 74 20 2a 2f 0a 20 20 75 33 32 20 73 65 72  int */.  u32 ser
14ec0 69 61 6c 5f 74 79 70 65 3b 20 20 20 20 20 20 20  ial_type;       
14ed0 2f 2a 20 54 79 70 65 20 66 69 65 6c 64 20 2a 2f  /* Type field */
14ee0 0a 20 20 4d 65 6d 20 2a 70 44 61 74 61 30 3b 20  .  Mem *pData0; 
14ef0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
14f00 73 74 20 66 69 65 6c 64 20 74 6f 20 62 65 20 63  st field to be c
14f10 6f 6d 62 69 6e 65 64 20 69 6e 74 6f 20 74 68 65  ombined into the
14f20 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d   record */.  Mem
14f30 20 2a 70 4c 61 73 74 3b 20 20 20 20 20 20 20 20   *pLast;        
14f40 20 20 20 20 2f 2a 20 4c 61 73 74 20 66 69 65 6c      /* Last fiel
14f50 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20  d of the record 
14f60 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
14f70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
14f80 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
14f90 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  in the record */
14fa0 0a 20 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69  .  char *zAffini
14fb0 74 79 3b 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ty;       /* The
14fc0 20 61 66 66 69 6e 69 74 79 20 73 74 72 69 6e 67   affinity string
14fd0 20 66 6f 72 20 74 68 65 20 72 65 63 6f 72 64 20   for the record 
14fe0 2a 2f 0a 20 20 69 6e 74 20 66 69 6c 65 5f 66 6f  */.  int file_fo
14ff0 72 6d 61 74 3b 20 20 20 20 20 20 20 2f 2a 20 46  rmat;       /* F
15000 69 6c 65 20 66 6f 72 6d 61 74 20 74 6f 20 75 73  ile format to us
15010 65 20 66 6f 72 20 65 6e 63 6f 64 69 6e 67 20 2a  e for encoding *
15020 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
15030 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70             /* Sp
15040 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65 77  ace used in zNew
15050 52 65 63 6f 72 64 5b 5d 20 68 65 61 64 65 72 20  Record[] header 
15060 2a 2f 0a 20 20 69 6e 74 20 6a 3b 20 20 20 20 20  */.  int j;     
15070 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
15080 70 61 63 65 20 75 73 65 64 20 69 6e 20 7a 4e 65  pace used in zNe
15090 77 52 65 63 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e  wRecord[] conten
150a0 74 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b 20  t */.  int len; 
150b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
150c0 20 4c 65 6e 67 74 68 20 6f 66 20 61 20 66 69 65   Length of a fie
150d0 6c 64 20 2a 2f 0a 0a 20 20 2f 2a 20 41 73 73 75  ld */..  /* Assu
150e0 6d 69 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20  ming the record 
150f0 63 6f 6e 74 61 69 6e 73 20 4e 20 66 69 65 6c 64  contains N field
15100 73 2c 20 74 68 65 20 72 65 63 6f 72 64 20 66 6f  s, the record fo
15110 72 6d 61 74 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20  rmat looks.  ** 
15120 6c 69 6b 65 20 74 68 69 73 3a 0a 20 20 2a 2a 0a  like this:.  **.
15130 20 20 2a 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d    ** -----------
15140 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15150 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15160 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15170 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20  -------------.  
15180 2a 2a 20 7c 20 68 64 72 2d 73 69 7a 65 20 7c 20  ** | hdr-size | 
15190 74 79 70 65 20 30 20 7c 20 74 79 70 65 20 31 20  type 0 | type 1 
151a0 7c 20 2e 2e 2e 20 7c 20 74 79 70 65 20 4e 2d 31  | ... | type N-1
151b0 20 7c 20 64 61 74 61 30 20 7c 20 2e 2e 2e 20 7c   | data0 | ... |
151c0 20 64 61 74 61 20 4e 2d 31 20 7c 20 0a 20 20 2a   data N-1 | .  *
151d0 2a 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  * --------------
151e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
151f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15200 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
15210 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a  ----------.  **.
15220 20 20 2a 2a 20 44 61 74 61 28 30 29 20 69 73 20    ** Data(0) is 
15230 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69 73  taken from regis
15240 74 65 72 20 50 31 2e 20 20 44 61 74 61 28 31 29  ter P1.  Data(1)
15250 20 63 6f 6d 65 73 20 66 72 6f 6d 20 72 65 67 69   comes from regi
15260 73 74 65 72 20 50 31 2b 31 0a 20 20 2a 2a 20 61  ster P1+1.  ** a
15270 6e 64 20 73 6f 20 66 72 6f 74 68 2e 0a 20 20 2a  nd so froth..  *
15280 2a 0a 20 20 2a 2a 20 45 61 63 68 20 74 79 70 65  *.  ** Each type
15290 20 66 69 65 6c 64 20 69 73 20 61 20 76 61 72 69   field is a vari
152a0 6e 74 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  nt representing 
152b0 74 68 65 20 73 65 72 69 61 6c 20 74 79 70 65 20  the serial type 
152c0 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 63 6f 72  of the .  ** cor
152d0 72 65 73 70 6f 6e 64 69 6e 67 20 64 61 74 61 20  responding data 
152e0 65 6c 65 6d 65 6e 74 20 28 73 65 65 20 73 71 6c  element (see sql
152f0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
15300 70 65 28 29 29 2e 20 54 68 65 0a 20 20 2a 2a 20  pe()). The.  ** 
15310 68 64 72 2d 73 69 7a 65 20 66 69 65 6c 64 20 69  hdr-size field i
15320 73 20 61 6c 73 6f 20 61 20 76 61 72 69 6e 74 20  s also a varint 
15330 77 68 69 63 68 20 69 73 20 74 68 65 20 6f 66 66  which is the off
15340 73 65 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67  set from the beg
15350 69 6e 6e 69 6e 67 0a 20 20 2a 2a 20 6f 66 20 74  inning.  ** of t
15360 68 65 20 72 65 63 6f 72 64 20 74 6f 20 64 61 74  he record to dat
15370 61 30 2e 0a 20 20 2a 2f 0a 20 20 6e 44 61 74 61  a0..  */.  nData
15380 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
15390 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
153a0 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
153b0 2f 0a 20 20 6e 48 64 72 20 3d 20 30 3b 20 20 20  /.  nHdr = 0;   
153c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
153d0 20 6f 66 20 62 79 74 65 73 20 6f 66 20 68 65 61   of bytes of hea
153e0 64 65 72 20 73 70 61 63 65 20 2a 2f 0a 20 20 6e  der space */.  n
153f0 5a 65 72 6f 20 3d 20 30 3b 20 20 20 20 20 20 20  Zero = 0;       
15400 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 7a    /* Number of z
15410 65 72 6f 20 62 79 74 65 73 20 61 74 20 74 68 65  ero bytes at the
15420 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f   end of the reco
15430 72 64 20 2a 2f 0a 20 20 6e 46 69 65 6c 64 20 3d  rd */.  nField =
15440 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 41 66 66   pOp->p1;.  zAff
15450 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e 70 34 2e  inity = pOp->p4.
15460 7a 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  z;.  assert( nFi
15470 65 6c 64 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32  eld>0 && pOp->p2
15480 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e 46  >0 && pOp->p2+nF
15490 69 65 6c 64 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ield<=(p->nMem-p
154a0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
154b0 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
154c0 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
154d0 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
154e0 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
154f0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
15500 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
15510 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
15520 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
15530 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
15540 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
15550 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
15560 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
15570 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
15580 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
15590 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
155a0 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
155b0 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
155c0 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
155d0 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
155e0 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
155f0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
15600 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
15610 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
15620 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15630 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
15640 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
15650 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
15660 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
15670 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
15680 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
15690 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
156a0 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
156b0 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 20 20  ty[0] );.  }..  
156c0 2f 2a 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20  /* Loop through 
156d0 74 68 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61  the elements tha
156e0 74 20 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74  t will make up t
156f0 68 65 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67  he record to fig
15700 75 72 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77  ure.  ** out how
15710 20 6d 75 63 68 20 73 70 61 63 65 20 69 73 20 72   much space is r
15720 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 65 20  equired for the 
15730 6e 65 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f  new record..  */
15740 0a 20 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b  .  pRec = pLast;
15750 0a 20 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72  .  do{.    asser
15760 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52  t( memIsValid(pR
15770 65 63 29 20 29 3b 0a 20 20 20 20 73 65 72 69 61  ec) );.    seria
15780 6c 5f 74 79 70 65 20 3d 20 73 71 6c 69 74 65 33  l_type = sqlite3
15790 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 70  VdbeSerialType(p
157a0 52 65 63 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74  Rec, file_format
157b0 29 3b 0a 20 20 20 20 6c 65 6e 20 3d 20 73 71 6c  );.    len = sql
157c0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54 79  ite3VdbeSerialTy
157d0 70 65 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70  peLen(serial_typ
157e0 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65 63  e);.    if( pRec
157f0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65  ->flags & MEM_Ze
15800 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ro ){.      if( 
15810 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20 20  nData ){.       
15820 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
15830 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 3b  xpandBlob(pRec);
15840 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
15850 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70        nZero += p
15860 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20  Rec->u.nZero;.  
15870 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65        len -= pRe
15880 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
15890 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44    }.    }.    nD
158a0 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20  ata += len;.    
158b0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
158c0 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20  _type==127 );.  
158d0 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72 69    testcase( seri
158e0 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a  al_type==128 );.
158f0 20 20 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69      nHdr += seri
15900 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31  al_type<=127 ? 1
15910 20 3a 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   : sqlite3Varint
15920 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29  Len(serial_type)
15930 3b 0a 20 20 7d 77 68 69 6c 65 28 20 28 2d 2d 70  ;.  }while( (--p
15940 52 65 63 29 3e 3d 70 44 61 74 61 30 20 29 3b 0a  Rec)>=pData0 );.
15950 0a 20 20 2f 2a 20 41 64 64 20 74 68 65 20 69 6e  .  /* Add the in
15960 69 74 69 61 6c 20 68 65 61 64 65 72 20 76 61 72  itial header var
15970 69 6e 74 20 61 6e 64 20 74 6f 74 61 6c 20 74 68  int and total th
15980 65 20 73 69 7a 65 20 2a 2f 0a 20 20 74 65 73 74  e size */.  test
15990 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 36 20  case( nHdr==126 
159a0 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e  );.  testcase( n
159b0 48 64 72 3d 3d 31 32 37 20 29 3b 0a 20 20 69 66  Hdr==127 );.  if
159c0 28 20 6e 48 64 72 3c 3d 31 32 36 20 29 7b 0a 20  ( nHdr<=126 ){. 
159d0 20 20 20 2f 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e     /* The common
159e0 20 63 61 73 65 20 2a 2f 0a 20 20 20 20 6e 48 64   case */.    nHd
159f0 72 20 2b 3d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b  r += 1;.  }else{
15a00 0a 20 20 20 20 2f 2a 20 52 61 72 65 20 63 61 73  .    /* Rare cas
15a10 65 20 6f 66 20 61 20 72 65 61 6c 6c 79 20 6c 61  e of a really la
15a20 72 67 65 20 68 65 61 64 65 72 20 2a 2f 0a 20 20  rge header */.  
15a30 20 20 6e 56 61 72 69 6e 74 20 3d 20 73 71 6c 69    nVarint = sqli
15a40 74 65 33 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64  te3VarintLen(nHd
15a50 72 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20  r);.    nHdr += 
15a60 6e 56 61 72 69 6e 74 3b 0a 20 20 20 20 69 66 28  nVarint;.    if(
15a70 20 6e 56 61 72 69 6e 74 3c 73 71 6c 69 74 65 33   nVarint<sqlite3
15a80 56 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 20  VarintLen(nHdr) 
15a90 29 20 6e 48 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20  ) nHdr++;.  }.  
15aa0 6e 42 79 74 65 20 3d 20 6e 48 64 72 2b 6e 44 61  nByte = nHdr+nDa
15ab0 74 61 3b 0a 20 20 69 66 28 20 6e 42 79 74 65 3e  ta;.  if( nByte>
15ac0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
15ad0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
15ae0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
15af0 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d  big;.  }..  /* M
15b00 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f 75 74  ake sure the out
15b10 70 75 74 20 72 65 67 69 73 74 65 72 20 68 61 73  put register has
15b20 20 61 20 62 75 66 66 65 72 20 6c 61 72 67 65 20   a buffer large 
15b30 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72 65 20  enough to store 
15b40 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20 72 65  .  ** the new re
15b50 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70 75 74  cord. The output
15b60 20 72 65 67 69 73 74 65 72 20 28 70 4f 70 2d 3e   register (pOp->
15b70 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77  p3) is not allow
15b80 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e  ed to.  ** be on
15b90 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74 20 72  e of the input r
15ba0 65 67 69 73 74 65 72 73 20 28 62 65 63 61 75 73  egisters (becaus
15bb0 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  e the following 
15bc0 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c  call to.  ** sql
15bd0 69 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28  ite3VdbeMemGrow(
15be0 29 20 63 6f 75 6c 64 20 63 6c 6f 62 62 65 72 20  ) could clobber 
15bf0 74 68 65 20 76 61 6c 75 65 20 62 65 66 6f 72 65  the value before
15c00 20 69 74 20 69 73 20 75 73 65 64 29 2e 0a 20 20   it is used)..  
15c10 2a 2f 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  */.  if( sqlite3
15c20 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 4f 75 74  VdbeMemGrow(pOut
15c30 2c 20 28 69 6e 74 29 6e 42 79 74 65 2c 20 30 29  , (int)nByte, 0)
15c40 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
15c50 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52  mem;.  }.  zNewR
15c60 65 63 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f  ecord = (u8 *)pO
15c70 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69  ut->z;..  /* Wri
15c80 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  te the record */
15c90 0a 20 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74  .  i = putVarint
15ca0 33 32 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e  32(zNewRecord, n
15cb0 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72  Hdr);.  j = nHdr
15cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 44 61 74  ;.  assert( pDat
15cd0 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70  a0<=pLast );.  p
15ce0 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
15cf0 64 6f 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74  do{.    serial_t
15d00 79 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ype = sqlite3Vdb
15d10 65 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63  eSerialType(pRec
15d20 2c 20 66 69 6c 65 5f 66 6f 72 6d 61 74 29 3b 0a  , file_format);.
15d30 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
15d40 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
15d50 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
15d60 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
15d70 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
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 70 4f 75 74 2d 3e 78 44 65 6c 20  b;.  pOut->xDel 
15e90 3d 20 30 3b 0a 20 20 69 66 28 20 6e 5a 65 72 6f  = 0;.  if( nZero
15ea0 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e   ){.    pOut->u.
15eb0 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a 20  nZero = nZero;. 
15ec0 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
15ed0 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d 0a  = MEM_Zero;.  }.
15ee0 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
15ef0 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
15f00 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
15f10 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74 65  is ever converte
15f20 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 52  d to text */.  R
15f30 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
15f40 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p3, pOut);.  
15f50 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
15f60 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  IZE(pOut);.  bre
15f70 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
15f80 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a 20  : Count P1 P2 * 
15f90 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
15fa0 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a 2a   r[P2]=count().*
15fb0 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6e  *.** Store the n
15fc0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
15fd0 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c   (an integer val
15fe0 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ue) in the table
15ff0 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f 70   or index .** op
16000 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20 50  ened by cursor P
16010 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  1 in register P2
16020 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
16030 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
16040 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e 74  NT.case OP_Count
16050 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6f  : {         /* o
16060 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
16070 2f 0a 20 20 69 36 34 20 6e 45 6e 74 72 79 3b 0a  /.  i64 nEntry;.
16080 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
16090 72 3b 0a 0a 20 20 70 43 72 73 72 20 3d 20 70 2d  r;..  pCrsr = p-
160a0 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d  >apCsr[pOp->p1]-
160b0 3e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65  >pCursor;.  asse
160c0 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20 6e  rt( pCrsr );.  n
160d0 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20 4e  Entry = 0;  /* N
160e0 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
160f0 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63 65   used to silence
16100 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20   a warning. */. 
16110 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
16120 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20 26  eeCount(pCrsr, &
16130 6e 45 6e 74 72 79 29 3b 0a 20 20 70 4f 75 74 2d  nEntry);.  pOut-
16140 3e 75 2e 69 20 3d 20 6e 45 6e 74 72 79 3b 0a 20  >u.i = nEntry;. 
16150 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
16160 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 61 76  ../* Opcode: Sav
16170 65 70 6f 69 6e 74 20 50 31 20 2a 20 2a 20 50 34  epoint P1 * * P4
16180 20 2a 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 2c 20 72   *.**.** Open, r
16190 65 6c 65 61 73 65 20 6f 72 20 72 6f 6c 6c 62 61  elease or rollba
161a0 63 6b 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74  ck the savepoint
161b0 20 6e 61 6d 65 64 20 62 79 20 70 61 72 61 6d 65   named by parame
161c0 74 65 72 20 50 34 2c 20 64 65 70 65 6e 64 69 6e  ter P4, dependin
161d0 67 0a 2a 2a 20 6f 6e 20 74 68 65 20 76 61 6c 75  g.** on the valu
161e0 65 20 6f 66 20 50 31 2e 20 54 6f 20 6f 70 65 6e  e of P1. To open
161f0 20 61 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   a new savepoint
16200 2c 20 50 31 3d 3d 30 2e 20 54 6f 20 72 65 6c 65  , P1==0. To rele
16210 61 73 65 20 28 63 6f 6d 6d 69 74 29 20 61 6e 0a  ase (commit) an.
16220 2a 2a 20 65 78 69 73 74 69 6e 67 20 73 61 76 65  ** existing save
16230 70 6f 69 6e 74 2c 20 50 31 3d 3d 31 2c 20 6f 72  point, P1==1, or
16240 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 61 6e 20   to rollback an 
16250 65 78 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69  existing savepoi
16260 6e 74 20 50 31 3d 3d 32 2e 0a 2a 2f 0a 63 61 73  nt P1==2..*/.cas
16270 65 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 3a 20  e OP_Savepoint: 
16280 7b 0a 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20  {.  int p1;     
16290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162a0 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 6f 66 20      /* Value of 
162b0 50 31 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  P1 operand */.  
162c0 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
162d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
162e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 73 61 76 65 70  /* Name of savep
162f0 6f 69 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 4e  oint */.  int nN
16300 61 6d 65 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74  ame;.  Savepoint
16310 20 2a 70 4e 65 77 3b 0a 20 20 53 61 76 65 70 6f   *pNew;.  Savepo
16320 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b  int *pSavepoint;
16330 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 54  .  Savepoint *pT
16340 6d 70 3b 0a 20 20 69 6e 74 20 69 53 61 76 65 70  mp;.  int iSavep
16350 6f 69 6e 74 3b 0a 20 20 69 6e 74 20 69 69 3b 0a  oint;.  int ii;.
16360 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
16370 0a 20 20 7a 4e 61 6d 65 20 3d 20 70 4f 70 2d 3e  .  zName = pOp->
16380 70 34 2e 7a 3b 0a 0a 20 20 2f 2a 20 41 73 73 65  p4.z;..  /* Asse
16390 72 74 20 74 68 61 74 20 74 68 65 20 70 31 20 70  rt that the p1 p
163a0 61 72 61 6d 65 74 65 72 20 69 73 20 76 61 6c 69  arameter is vali
163b0 64 2e 20 41 6c 73 6f 20 74 68 61 74 20 69 66 20  d. Also that if 
163c0 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
163d0 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
163e0 6e 2c 20 74 68 65 6e 20 74 68 65 72 65 20 63 61  n, then there ca
163f0 6e 6e 6f 74 20 62 65 20 61 6e 79 20 73 61 76 65  nnot be any save
16400 70 6f 69 6e 74 73 2e 20 0a 20 20 2a 2f 0a 20 20  points. .  */.  
16410 61 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76  assert( db->pSav
16420 65 70 6f 69 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d  epoint==0 || db-
16430 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29  >autoCommit==0 )
16440 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 3d 3d  ;.  assert( p1==
16450 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 7c  SAVEPOINT_BEGIN|
16460 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52  |p1==SAVEPOINT_R
16470 45 4c 45 41 53 45 7c 7c 70 31 3d 3d 53 41 56 45  ELEASE||p1==SAVE
16480 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29  POINT_ROLLBACK )
16490 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e  ;.  assert( db->
164a0 70 53 61 76 65 70 6f 69 6e 74 20 7c 7c 20 64 62  pSavepoint || db
164b0 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
164c0 61 76 65 70 6f 69 6e 74 3d 3d 30 20 29 3b 0a 20  avepoint==0 );. 
164d0 20 61 73 73 65 72 74 28 20 63 68 65 63 6b 53 61   assert( checkSa
164e0 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64 62 29  vepointCount(db)
164f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
16500 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a 20  >bIsReader );.. 
16510 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f 49   if( p1==SAVEPOI
16520 4e 54 5f 42 45 47 49 4e 20 29 7b 0a 20 20 20 20  NT_BEGIN ){.    
16530 69 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69  if( db->nVdbeWri
16540 74 65 3e 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  te>0 ){.      /*
16550 20 41 20 6e 65 77 20 73 61 76 65 70 6f 69 6e 74   A new savepoint
16560 20 63 61 6e 6e 6f 74 20 62 65 20 63 72 65 61 74   cannot be creat
16570 65 64 20 69 66 20 74 68 65 72 65 20 61 72 65 20  ed if there are 
16580 61 63 74 69 76 65 20 77 72 69 74 65 20 0a 20 20  active write .  
16590 20 20 20 20 2a 2a 20 73 74 61 74 65 6d 65 6e 74      ** statement
165a0 73 20 28 69 2e 65 2e 20 6f 70 65 6e 20 72 65 61  s (i.e. open rea
165b0 64 2f 77 72 69 74 65 20 69 6e 63 72 65 6d 65 6e  d/write incremen
165c0 74 61 6c 20 62 6c 6f 62 20 68 61 6e 64 6c 65 73  tal blob handles
165d0 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  )..      */.    
165e0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
165f0 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
16600 64 62 2c 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e  db, "cannot open
16610 20 73 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20   savepoint - ". 
16620 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
16630 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
16640 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
16650 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
16660 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e    }else{.      n
16670 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33 53 74  Name = sqlite3St
16680 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a  rlen30(zName);..
16690 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
166a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
166b0 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 63  .      /* This c
166c0 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e 20 69  all is Ok even i
166d0 66 20 74 68 69 73 20 73 61 76 65 70 6f 69 6e 74  f this savepoint
166e0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61 20 74   is actually a t
166f0 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20 20 20  ransaction.     
16700 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20 28 61   ** savepoint (a
16710 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73 68 6f  nd therefore sho
16720 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78  uld not prompt x
16730 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63 61 6c  Savepoint()) cal
16740 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a  lbacks..      **
16750 20 49 66 20 74 68 69 73 20 69 73 20 61 20 74 72   If this is a tr
16760 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
16770 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e 65 64  int being opened
16780 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e 74 65  , it is guarante
16790 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68 61 74  ed.      ** that
167a0 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61 6e 73   the db->aVTrans
167b0 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d 70 74  [] array is empt
167c0 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  y.  */.      ass
167d0 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d  ert( db->autoCom
167e0 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56  mit==0 || db->nV
167f0 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20  Trans==0 );.    
16800 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74    rc = sqlite3Vt
16810 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20  abSavepoint(db, 
16820 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c  SAVEPOINT_BEGIN,
16830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16850 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b   db->nStatement+
16860 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b  db->nSavepoint);
16870 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
16880 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
16890 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
168a0 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20  or;.#endif..    
168b0 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20 6e 65    /* Create a ne
168c0 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74 72 75  w savepoint stru
168d0 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20  cture. */.      
168e0 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 44 62  pNew = sqlite3Db
168f0 4d 61 6c 6c 6f 63 52 61 77 28 64 62 2c 20 73 69  MallocRaw(db, si
16900 7a 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b  zeof(Savepoint)+
16910 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20  nName+1);.      
16920 69 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20  if( pNew ){.    
16930 20 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20      pNew->zName 
16940 3d 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b  = (char *)&pNew[
16950 31 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63  1];.        memc
16960 70 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20  py(pNew->zName, 
16970 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b  zName, nName+1);
16980 0a 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a  .    .        /*
16990 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
169a0 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
169b0 2c 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73  , then mark this
169c0 20 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20   as a special.  
169d0 20 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61        ** "transa
169e0 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22  ction savepoint"
169f0 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28  . */.        if(
16a00 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
16a10 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
16a20 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b  >autoCommit = 0;
16a30 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69  .          db->i
16a40 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65  sTransactionSave
16a50 70 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20  point = 1;.     
16a60 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
16a70 20 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69      db->nSavepoi
16a80 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
16a90 0a 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b  .        /* Link
16aa0 20 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69   the new savepoi
16ab0 6e 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61  nt into the data
16ac0 62 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69  base handle's li
16ad0 73 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70  st. */.        p
16ae0 4e 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d  New->pNext = db-
16af0 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
16b00 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
16b10 69 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20  int = pNew;.    
16b20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
16b30 72 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44  redCons = db->nD
16b40 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
16b50 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65       pNew->nDefe
16b60 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62  rredImmCons = db
16b70 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
16b80 6e 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ns;.      }.    
16b90 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69  }.  }else{.    i
16ba0 53 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a  Savepoint = 0;..
16bb0 20 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20      /* Find the 
16bc0 6e 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e  named savepoint.
16bd0 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20   If there is no 
16be0 73 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20  such savepoint, 
16bf0 74 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61  then an.    ** a
16c00 6e 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72  n error is retur
16c10 6e 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e  ned to the user.
16c20 20 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20    */.    for(.  
16c30 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d      pSavepoint =
16c40 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
16c50 20 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69   .      pSavepoi
16c60 6e 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  nt && sqlite3Str
16c70 49 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d  ICmp(pSavepoint-
16c80 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a  >zName, zName);.
16c90 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74        pSavepoint
16ca0 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70   = pSavepoint->p
16cb0 4e 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20  Next.    ){.    
16cc0 20 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a    iSavepoint++;.
16cd0 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70      }.    if( !p
16ce0 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20  Savepoint ){.   
16cf0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
16d00 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
16d10 20 64 62 2c 20 22 6e 6f 20 73 75 63 68 20 73 61   db, "no such sa
16d20 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a 4e  vepoint: %s", zN
16d30 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ame);.      rc =
16d40 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
16d50 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62 2d     }else if( db-
16d60 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26 26  >nVdbeWrite>0 &&
16d70 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52   p1==SAVEPOINT_R
16d80 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20  ELEASE ){.      
16d90 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f 73  /* It is not pos
16da0 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73 65  sible to release
16db0 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76 65   (commit) a save
16dc0 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20 61  point if there a
16dd0 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63 74  re .      ** act
16de0 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65 6d  ive write statem
16df0 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ents..      */. 
16e00 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
16e10 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
16e20 67 2c 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20  g, db, .        
16e30 22 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20  "cannot release 
16e40 73 61 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20  savepoint - SQL 
16e50 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72  statements in pr
16e60 6f 67 72 65 73 73 22 0a 20 20 20 20 20 20 29 3b  ogress".      );
16e70 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
16e80 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
16e90 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
16ea0 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
16eb0 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
16ec0 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
16ed0 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
16ee0 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
16ef0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
16f00 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
16f10 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
16f20 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
16f30 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
16f40 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
16f50 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
16f60 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
16f70 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
16f80 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
16f90 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
16fa0 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
16fb0 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
16fc0 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
16fd0 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
16fe0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
16ff0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
17000 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
17010 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
17020 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
17030 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17040 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
17050 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
17060 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
17070 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
17080 70 63 20 3d 20 70 63 3b 0a 20 20 20 20 20 20 20  pc = pc;.       
17090 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69     db->autoCommi
170a0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  t = 0;.         
170b0 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
170c0 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
170d0 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72       goto vdbe_r
170e0 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d  eturn;.        }
170f0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54  .        db->isT
17100 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17110 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  int = 0;.       
17120 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20   rc = p->rc;.   
17130 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
17140 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64    iSavepoint = d
17150 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20  b->nSavepoint - 
17160 69 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a  iSavepoint - 1;.
17170 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
17180 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17190 43 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  CK ){.          
171a0 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d  for(ii=0; ii<db-
171b0 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20  >nDb; ii++){.   
171c0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
171d0 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72 73  BtreeTripAllCurs
171e0 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  ors(db->aDb[ii].
171f0 70 42 74 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52  pBt, SQLITE_ABOR
17200 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  T);.          }.
17210 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
17220 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64    for(ii=0; ii<d
17230 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20  b->nDb; ii++){. 
17240 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71           rc = sq
17250 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70 6f  lite3BtreeSavepo
17260 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  int(db->aDb[ii].
17270 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70 6f  pBt, p1, iSavepo
17280 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  int);.          
17290 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
172a0 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  K ){.           
172b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
172c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
172d0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a      }.        }.
172e0 20 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d          if( p1==
172f0 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41  SAVEPOINT_ROLLBA
17300 43 4b 20 26 26 20 28 64 62 2d 3e 66 6c 61 67 73  CK && (db->flags
17310 26 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68  &SQLITE_InternCh
17320 61 6e 67 65 73 29 21 3d 30 20 29 7b 0a 20 20 20  anges)!=0 ){.   
17330 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
17340 70 69 72 65 50 72 65 70 61 72 65 64 53 74 61 74  pirePreparedStat
17350 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20 20 20  ements(db);.    
17360 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73        sqlite3Res
17370 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
17380 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20  nnection(db);.  
17390 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
173a0 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73 20 7c  s = (db->flags |
173b0 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
173c0 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20 20 20  anges);.        
173d0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20 20  }.      }.  .   
173e0 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65 73 73     /* Regardless
173f0 20 6f 66 20 77 68 65 74 68 65 72 20 74 68 69 73   of whether this
17400 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 6f 72   is a RELEASE or
17410 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73 74 72   ROLLBACK, destr
17420 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20 2a 2a  oy all .      **
17430 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65 73 74   savepoints nest
17440 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74 68 65  ed inside of the
17450 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69 6e 67   savepoint being
17460 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20 2a 2f   operated on. */
17470 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20 64 62  .      while( db
17480 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d 70 53  ->pSavepoint!=pS
17490 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
174a0 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d 3e 70      pTmp = db->p
174b0 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20  Savepoint;.     
174c0 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e     db->pSavepoin
174d0 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78 74 3b  t = pTmp->pNext;
174e0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
174f0 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d 70 29  DbFree(db, pTmp)
17500 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53  ;.        db->nS
17510 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20 20  avepoint--;.    
17520 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66    }..      /* If
17530 20 69 74 20 69 73 20 61 20 52 45 4c 45 41 53 45   it is a RELEASE
17540 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79 20 74  , then destroy t
17550 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
17560 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 20 0a  ng operated on .
17570 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20 49 66        ** too. If
17580 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42 41 43   it is a ROLLBAC
17590 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74 20 74  K TO, then set t
175a0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64 65 66  he number of def
175b0 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a 2a 20  erred .      ** 
175c0 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c 61  constraint viola
175d0 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20 69 6e  tions present in
175e0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 6f   the database to
175f0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
17600 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65 6e 20  d.      ** when 
17610 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 77 61  the savepoint wa
17620 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f 0a 20  s created.  */. 
17630 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53 41 56       if( p1==SAV
17640 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29  EPOINT_RELEASE )
17650 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
17660 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d 64 62  ( pSavepoint==db
17670 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29 3b 0a  ->pSavepoint );.
17680 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61 76          db->pSav
17690 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f  epoint = pSavepo
176a0 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20 20 20  int->pNext;.    
176b0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
176c0 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69 6e 74  e(db, pSavepoint
176d0 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 21  );.        if( !
176e0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 29 7b  isTransaction ){
176f0 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 6e  .          db->n
17700 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20 20  Savepoint--;.   
17710 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c       }.      }el
17720 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  se{.        db->
17730 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20  nDeferredCons = 
17740 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65 66  pSavepoint->nDef
17750 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20  erredCons;.     
17760 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
17770 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76 65 70  ImmCons = pSavep
17780 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65 64 49  oint->nDeferredI
17790 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
177a0 0a 20 20 20 20 20 20 69 66 28 20 21 69 73 54 72  .      if( !isTr
177b0 61 6e 73 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20  ansaction ){.   
177c0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
177d0 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64  3VtabSavepoint(d
177e0 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69 6e  b, p1, iSavepoin
177f0 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  t);.        if( 
17800 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
17810 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
17820 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
17830 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62 72  .    }.  }..  br
17840 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
17850 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
17860 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
17870 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
17880 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
17890 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
178a0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
178b0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
178c0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
178d0 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
178e0 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
178f0 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
17900 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
17910 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
17920 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
17930 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
17940 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
17950 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
17960 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
17970 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
17980 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
17990 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
179a0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
179b0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
179c0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
179d0 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
179e0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
179f0 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 20 20 69  t iRollback;.  i
17a00 6e 74 20 74 75 72 6e 4f 6e 41 43 3b 0a 0a 20 20  nt turnOnAC;..  
17a10 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
17a20 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
17a30 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
17a40 70 32 3b 0a 20 20 74 75 72 6e 4f 6e 41 43 20 3d  p2;.  turnOnAC =
17a50 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17a60 69 74 20 26 26 20 21 64 62 2d 3e 61 75 74 6f 43  it && !db->autoC
17a70 6f 6d 6d 69 74 3b 0a 20 20 61 73 73 65 72 74 28  ommit;.  assert(
17a80 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d   desiredAutoComm
17a90 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72 65 64  it==1 || desired
17aa0 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b  AutoCommit==0 );
17ab0 0a 20 20 61 73 73 65 72 74 28 20 64 65 73 69 72  .  assert( desir
17ac0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20  edAutoCommit==1 
17ad0 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20  || iRollback==0 
17ae0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 62 2d  );.  assert( db-
17af0 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30 20 29  >nVdbeActive>0 )
17b00 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74 20 74  ;  /* At least t
17b10 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20 61 63  his one VM is ac
17b20 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65 72 74  tive */.  assert
17b30 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
17b40 3b 0a 0a 23 69 66 20 30 0a 20 20 69 66 28 20 74  ;..#if 0.  if( t
17b50 75 72 6e 4f 6e 41 43 20 26 26 20 69 52 6f 6c 6c  urnOnAC && iRoll
17b60 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
17b70 65 41 63 74 69 76 65 3e 31 20 29 7b 0a 20 20 20  eActive>1 ){.   
17b80 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74   /* If this inst
17b90 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  ruction implemen
17ba0 74 73 20 61 20 52 4f 4c 4c 42 41 43 4b 20 61 6e  ts a ROLLBACK an
17bb0 64 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 0a  d other VMs are.
17bc0 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 72 75 6e      ** still run
17bd0 6e 69 6e 67 2c 20 61 6e 64 20 61 20 74 72 61 6e  ning, and a tran
17be0 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76  saction is activ
17bf0 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72  e, return an err
17c00 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 0a 20 20  or indicating.  
17c10 20 20 2a 2a 20 74 68 61 74 20 74 68 65 20 6f 74    ** that the ot
17c20 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63 6f 6d  her VMs must com
17c30 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a 20 20  plete first. .  
17c40 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33    */.    sqlite3
17c50 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45  SetString(&p->zE
17c60 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61 6e 6e  rrMsg, db, "cann
17c70 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  ot rollback tran
17c80 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17c90 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17ca0 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17cb0 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17cc0 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17cd0 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 74 75  .#endif.  if( tu
17ce0 72 6e 4f 6e 41 43 20 26 26 20 21 69 52 6f 6c 6c  rnOnAC && !iRoll
17cf0 62 61 63 6b 20 26 26 20 64 62 2d 3e 6e 56 64 62  back && db->nVdb
17d00 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
17d10 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73 74 72  /* If this instr
17d20 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74  uction implement
17d30 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64 20 6f  s a COMMIT and o
17d40 74 68 65 72 20 56 4d 73 20 61 72 65 20 77 72 69  ther VMs are wri
17d50 74 69 6e 67 0a 20 20 20 20 2a 2a 20 72 65 74 75  ting.    ** retu
17d60 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 6e 64 69  rn an error indi
17d70 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 65 20  cating that the 
17d80 6f 74 68 65 72 20 56 4d 73 20 6d 75 73 74 20 63  other VMs must c
17d90 6f 6d 70 6c 65 74 65 20 66 69 72 73 74 2e 20 0a  omplete first. .
17da0 20 20 20 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74      */.    sqlit
17db0 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
17dc0 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 63 61  zErrMsg, db, "ca
17dd0 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e  nnot commit tran
17de0 73 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20  saction - ".    
17df0 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65      "SQL stateme
17e00 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17e10 29 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  );.    rc = SQLI
17e20 54 45 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65  TE_BUSY;.  }else
17e30 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74 6f   if( desiredAuto
17e40 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74 6f  Commit!=db->auto
17e50 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69 66  Commit ){.    if
17e60 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a 20  ( iRollback ){. 
17e70 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65 73       assert( des
17e80 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
17e90 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  1 );.      sqlit
17ea0 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64 62  e3RollbackAll(db
17eb0 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52  , SQLITE_ABORT_R
17ec0 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20 20  OLLBACK);.      
17ed0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
17ee0 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66   1;.    }else if
17ef0 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65 33 56  ( (rc = sqlite3V
17f00 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20 31 29  dbeCheckFk(p, 1)
17f10 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  )!=SQLITE_OK ){.
17f20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
17f30 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65 6c 73  return;.    }els
17f40 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75 74  e{.      db->aut
17f50 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 64 65  oCommit = (u8)de
17f60 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
17f70 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
17f80 65 33 56 64 62 65 48 61 6c 74 28 70 29 3d 3d 53  e3VdbeHalt(p)==S
17f90 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
17fa0 20 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63        p->pc = pc
17fb0 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 61 75  ;.        db->au
17fc0 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
17fd0 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
17fe0 6d 69 74 29 3b 0a 20 20 20 20 20 20 20 20 70 2d  mit);.        p-
17ff0 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54  >rc = rc = SQLIT
18000 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20 20  E_BUSY;.        
18010 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
18020 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
18030 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
18040 6e 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20 29 3b  nStatement==0 );
18050 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6c 6f 73  .    sqlite3Clos
18060 65 53 61 76 65 70 6f 69 6e 74 73 28 64 62 29 3b  eSavepoints(db);
18070 0a 20 20 20 20 69 66 28 20 70 2d 3e 72 63 3d 3d  .    if( p->rc==
18080 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
18090 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 44     rc = SQLITE_D
180a0 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ONE;.    }else{.
180b0 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54        rc = SQLIT
180c0 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20  E_ERROR;.    }. 
180d0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
180e0 75 72 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  urn;.  }else{.  
180f0 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69    sqlite3SetStri
18100 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20  ng(&p->zErrMsg, 
18110 64 62 2c 0a 20 20 20 20 20 20 20 20 28 21 64 65  db,.        (!de
18120 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 29  siredAutoCommit)
18130 3f 22 63 61 6e 6e 6f 74 20 73 74 61 72 74 20 61  ?"cannot start a
18140 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 69 74   transaction wit
18150 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f  hin a transactio
18160 6e 22 3a 28 0a 20 20 20 20 20 20 20 20 28 69 52  n":(.        (iR
18170 6f 6c 6c 62 61 63 6b 29 3f 22 63 61 6e 6e 6f 74  ollback)?"cannot
18180 20 72 6f 6c 6c 62 61 63 6b 20 2d 20 6e 6f 20 74   rollback - no t
18190 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63  ransaction is ac
181a0 74 69 76 65 22 3a 0a 20 20 20 20 20 20 20 20 20  tive":.         
181b0 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e 6f            "canno
181c0 74 20 63 6f 6d 6d 69 74 20 2d 20 6e 6f 20 74 72  t commit - no tr
181d0 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 63 74  ansaction is act
181e0 69 76 65 22 29 29 3b 0a 20 20 20 20 20 20 20 20  ive"));.        
181f0 20 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54   .    rc = SQLIT
18200 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 62  E_ERROR;.  }.  b
18210 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
18220 64 65 3a 20 54 72 61 6e 73 61 63 74 69 6f 6e 20  de: Transaction 
18230 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
18240 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20 74 72 61  *.** Begin a tra
18250 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64 61 74 61  nsaction on data
18260 62 61 73 65 20 50 31 20 69 66 20 61 20 74 72 61  base P1 if a tra
18270 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20  nsaction is not 
18280 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63 74 69 76  already.** activ
18290 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e  e..** If P2 is n
182a0 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20  on-zero, then a 
182b0 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f  write-transactio
182c0 6e 20 69 73 20 73 74 61 72 74 65 64 2c 20 6f 72  n is started, or
182d0 20 69 66 20 61 20 0a 2a 2a 20 72 65 61 64 2d 74   if a .** read-t
182e0 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 61 6c  ransaction is al
182f0 72 65 61 64 79 20 61 63 74 69 76 65 2c 20 69 74  ready active, it
18300 20 69 73 20 75 70 67 72 61 64 65 64 20 74 6f 20   is upgraded to 
18310 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63 74  a write-transact
18320 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32 20 69 73  ion..** If P2 is
18330 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61 20 72 65   zero, then a re
18340 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  ad-transaction i
18350 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a 0a 2a 2a  s started..**.**
18360 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
18370 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18380 20 66 69 6c 65 20 6f 6e 20 77 68 69 63 68 20 74   file on which t
18390 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  he transaction i
183a0 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e 20 20 49  s.** started.  I
183b0 6e 64 65 78 20 30 20 69 73 20 74 68 65 20 6d 61  ndex 0 is the ma
183c0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
183d0 20 61 6e 64 20 69 6e 64 65 78 20 31 20 69 73 20   and index 1 is 
183e0 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75 73 65 64  the.** file used
183f0 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 74   for temporary t
18400 61 62 6c 65 73 2e 20 20 49 6e 64 69 63 65 73 20  ables.  Indices 
18410 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20 61 72 65  of 2 or more are
18420 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20 61 74 74   used for.** att
18430 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2e  ached databases.
18440 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77 72 69 74  .**.** If a writ
18450 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e-transaction is
18460 20 73 74 61 72 74 65 64 20 61 6e 64 20 74 68 65   started and the
18470 20 56 64 62 65 2e 75 73 65 73 53 74 6d 74 4a 6f   Vdbe.usesStmtJo
18480 75 72 6e 61 6c 20 66 6c 61 67 20 69 73 0a 2a 2a  urnal flag is.**
18490 20 74 72 75 65 20 28 74 68 69 73 20 66 6c 61 67   true (this flag
184a0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 56   is set if the V
184b0 64 62 65 20 6d 61 79 20 6d 6f 64 69 66 79 20 6d  dbe may modify m
184c0 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 72 6f 77  ore than one row
184d0 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74 68 72 6f   and may.** thro
184e0 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70  w an ABORT excep
184f0 74 69 6f 6e 29 2c 20 61 20 73 74 61 74 65 6d 65  tion), a stateme
18500 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d  nt transaction m
18510 61 79 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65  ay also be opene
18520 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70 65 63 69  d..** More speci
18530 66 69 63 61 6c 6c 79 2c 20 61 20 73 74 61 74 65  fically, a state
18540 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
18550 20 69 73 20 6f 70 65 6e 65 64 20 69 66 66 20 74   is opened iff t
18560 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63  he database.** c
18570 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 75 72  onnection is cur
18580 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e 20 61 75  rently not in au
18590 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2c 20 6f  tocommit mode, o
185a0 72 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6f  r if there are o
185b0 74 68 65 72 0a 2a 2a 20 61 63 74 69 76 65 20 73  ther.** active s
185c0 74 61 74 65 6d 65 6e 74 73 2e 20 41 20 73 74 61  tatements. A sta
185d0 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69  tement transacti
185e0 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65 20 63 68  on allows the ch
185f0 61 6e 67 65 73 20 6d 61 64 65 20 62 79 20 74 68  anges made by th
18600 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f 20 62 65  is.** VDBE to be
18610 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 61 66 74   rolled back aft
18620 65 72 20 61 6e 20 65 72 72 6f 72 20 77 69 74 68  er an error with
18630 6f 75 74 20 68 61 76 69 6e 67 20 74 6f 20 72 6f  out having to ro
18640 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a 2a 20 65  ll back the.** e
18650 6e 74 69 72 65 20 74 72 61 6e 73 61 63 74 69 6f  ntire transactio
18660 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f 72 20 69  n. If no error i
18670 73 20 65 6e 63 6f 75 6e 74 65 72 65 64 2c 20 74  s encountered, t
18680 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
18690 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77 69 6c 6c  nsaction.** will
186a0 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63   automatically c
186b0 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68 65 20 56  ommit when the V
186c0 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a 0a 2a 2a  DBE halts..**.**
186d0 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 74   If P5!=0 then t
186e0 68 69 73 20 6f 70 63 6f 64 65 20 61 6c 73 6f 20  his opcode also 
186f0 63 68 65 63 6b 73 20 74 68 65 20 73 63 68 65 6d  checks the schem
18700 61 20 63 6f 6f 6b 69 65 20 61 67 61 69 6e 73 74  a cookie against
18710 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68 65 20 73   P3.** and the s
18720 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e  chema generation
18730 20 63 6f 75 6e 74 65 72 20 61 67 61 69 6e 73 74   counter against
18740 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63 6f 6f 6b   P4..** The cook
18750 69 65 20 63 68 61 6e 67 65 73 20 69 74 73 20 76  ie changes its v
18760 61 6c 75 65 20 77 68 65 6e 65 76 65 72 20 74 68  alue whenever th
18770 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
18780 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a 20 54 68  a changes..** Th
18790 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  is operation is 
187a0 75 73 65 64 20 74 6f 20 64 65 74 65 63 74 20 77  used to detect w
187b0 68 65 6e 20 74 68 61 74 20 74 68 65 20 63 6f 6f  hen that the coo
187c0 6b 69 65 20 68 61 73 20 63 68 61 6e 67 65 64 0a  kie has changed.
187d0 2a 2a 20 61 6e 64 20 74 68 61 74 20 74 68 65 20  ** and that the 
187e0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20  current process 
187f0 6e 65 65 64 73 20 74 6f 20 72 65 72 65 61 64 20  needs to reread 
18800 74 68 65 20 73 63 68 65 6d 61 2e 20 20 49 66 20  the schema.  If 
18810 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a 20 63 6f  the schema.** co
18820 6f 6b 69 65 20 69 6e 20 50 33 20 64 69 66 66 65  okie in P3 diffe
18830 72 73 20 66 72 6f 6d 20 74 68 65 20 73 63 68 65  rs from the sche
18840 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20 74 68 65  ma cookie in the
18850 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65 72   database header
18860 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65 20 73 63   or.** if the sc
18870 68 65 6d 61 20 67 65 6e 65 72 61 74 69 6f 6e 20  hema generation 
18880 63 6f 75 6e 74 65 72 20 69 6e 20 50 34 20 64 69  counter in P4 di
18890 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 63  ffers from the c
188a0 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e 65 72 61  urrent.** genera
188b0 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c 20 74 68  tion counter, th
188c0 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f 53 43 48  en an SQLITE_SCH
188d0 45 4d 41 20 65 72 72 6f 72 20 69 73 20 72 61 69  EMA error is rai
188e0 73 65 64 20 61 6e 64 20 65 78 65 63 75 74 69 6f  sed and executio
188f0 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20 54 68 65  n.** halts.  The
18900 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20   sqlite3_step() 
18910 77 72 61 70 70 65 72 20 66 75 6e 63 74 69 6f 6e  wrapper function
18920 20 6d 69 67 68 74 20 74 68 65 6e 20 72 65 70 72   might then repr
18930 65 70 61 72 65 20 74 68 65 0a 2a 2a 20 73 74 61  epare the.** sta
18940 74 65 6d 65 6e 74 20 61 6e 64 20 72 65 72 75 6e  tement and rerun
18950 20 69 74 20 66 72 6f 6d 20 74 68 65 20 62 65 67   it from the beg
18960 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61 73 65 20  inning..*/.case 
18970 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 3a 20  OP_Transaction: 
18980 7b 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a  {.  Btree *pBt;.
18990 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20 69    int iMeta;.  i
189a0 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61 73 73 65  nt iGen;..  asse
189b0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
189c0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   );.  assert( p-
189d0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 7c 7c 20  >readOnly==0 || 
189e0 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20  pOp->p2==0 );.  
189f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
18a00 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62  =0 && pOp->p1<db
18a10 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
18a20 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
18a30 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
18a40 3e 70 31 29 20 29 3b 0a 20 20 69 66 28 20 70 4f  >p1) );.  if( pO
18a50 70 2d 3e 70 32 20 26 26 20 28 64 62 2d 3e 66 6c  p->p2 && (db->fl
18a60 61 67 73 20 26 20 53 51 4c 49 54 45 5f 51 75 65  ags & SQLITE_Que
18a70 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b 0a 20 20  ryOnly)!=0 ){.  
18a80 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 45    rc = SQLITE_RE
18a90 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67 6f 74 6f  ADONLY;.    goto
18aa0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
18ab0 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42 74 20 3d  ror;.  }.  pBt =
18ac0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
18ad0 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28 20 70 42  ].pBt;..  if( pB
18ae0 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  t ){.    rc = sq
18af0 6c 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54  lite3BtreeBeginT
18b00 72 61 6e 73 28 70 42 74 2c 20 70 4f 70 2d 3e 70  rans(pBt, pOp->p
18b10 32 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  2);.    if( rc==
18b20 53 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20  SQLITE_BUSY ){. 
18b30 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 70 63 3b       p->pc = pc;
18b40 0a 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72  .      p->rc = r
18b50 63 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b  c = SQLITE_BUSY;
18b60 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65  .      goto vdbe
18b70 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 0a 20  _return;.    }. 
18b80 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
18b90 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f  E_OK ){.      go
18ba0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
18bb0 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20  error;.    }..  
18bc0 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
18bd0 20 70 2d 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72   p->usesStmtJour
18be0 6e 61 6c 20 0a 20 20 20 20 20 26 26 20 28 64 62  nal .     && (db
18bf0 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
18c00 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64  || db->nVdbeRead
18c10 3e 31 29 20 0a 20 20 20 20 29 7b 0a 20 20 20 20  >1) .    ){.    
18c20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
18c30 33 42 74 72 65 65 49 73 49 6e 54 72 61 6e 73 28  3BtreeIsInTrans(
18c40 70 42 74 29 20 29 3b 0a 20 20 20 20 20 20 69 66  pBt) );.      if
18c50 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d  ( p->iStatement=
18c60 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  =0 ){.        as
18c70 73 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65  sert( db->nState
18c80 6d 65 6e 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e  ment>=0 && db->n
18c90 53 61 76 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a  Savepoint>=0 );.
18ca0 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 74 61          db->nSta
18cb0 74 65 6d 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20  tement++; .     
18cc0 20 20 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74     p->iStatement
18cd0 20 3d 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e   = db->nSavepoin
18ce0 74 20 2b 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65  t + db->nStateme
18cf0 6e 74 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  nt;.      }..   
18d00 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
18d10 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c  tabSavepoint(db,
18d20 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
18d30 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d  , p->iStatement-
18d40 31 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  1);.      if( rc
18d50 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
18d60 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
18d70 74 65 33 42 74 72 65 65 42 65 67 69 6e 53 74 6d  te3BtreeBeginStm
18d80 74 28 70 42 74 2c 20 70 2d 3e 69 53 74 61 74 65  t(pBt, p->iState
18d90 6d 65 6e 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a  ment);.      }..
18da0 20 20 20 20 20 20 2f 2a 20 53 74 6f 72 65 20 74        /* Store t
18db0 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65  he current value
18dc0 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
18dd0 20 68 61 6e 64 6c 65 73 20 64 65 66 65 72 72 65   handles deferre
18de0 64 20 63 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20  d constraint.   
18df0 20 20 20 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49     ** counter. I
18e00 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
18e10 74 72 61 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64  transaction need
18e20 73 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62  s to be rolled b
18e30 61 63 6b 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68  ack,.      ** th
18e40 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  e value of this 
18e50 63 6f 75 6e 74 65 72 20 6e 65 65 64 73 20 74 6f  counter needs to
18e60 20 62 65 20 72 65 73 74 6f 72 65 64 20 74 6f 6f   be restored too
18e70 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e  .  */.      p->n
18e80 53 74 6d 74 44 65 66 43 6f 6e 73 20 3d 20 64 62  StmtDefCons = db
18e90 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
18ea0 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44  .      p->nStmtD
18eb0 65 66 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e  efImmCons = db->
18ec0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
18ed0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20  ;.    }..    /* 
18ee0 47 61 74 68 65 72 20 74 68 65 20 73 63 68 65 6d  Gather the schem
18ef0 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72  a version number
18f00 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20 2a 2f   for checking */
18f10 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
18f20 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20 42 54  eGetMeta(pBt, BT
18f30 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
18f40 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74  ON, (u32 *)&iMet
18f50 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d 20 64  a);.    iGen = d
18f60 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
18f70 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61  pSchema->iGenera
18f80 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  tion;.  }else{. 
18f90 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74 61 20     iGen = iMeta 
18fa0 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  = 0;.  }.  asser
18fb0 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c  t( pOp->p5==0 ||
18fc0 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
18fd0 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66 28 20  _INT32 );.  if( 
18fe0 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d 65 74  pOp->p5 && (iMet
18ff0 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47  a!=pOp->p3 || iG
19000 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29  en!=pOp->p4.i) )
19010 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46  {.    sqlite3DbF
19020 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d  ree(db, p->zErrM
19030 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72  sg);.    p->zErr
19040 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44 62 53  Msg = sqlite3DbS
19050 74 72 44 75 70 28 64 62 2c 20 22 64 61 74 61 62  trDup(db, "datab
19060 61 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63  ase schema has c
19070 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a  hanged");.    /*
19080 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 2d 63   If the schema-c
19090 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65 20 64  ookie from the d
190a0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d 61 74  atabase file mat
190b0 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69 65 20  ches the cookie 
190c0 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64 20 77  .    ** stored w
190d0 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72  ith the in-memor
190e0 79 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  y representation
190f0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2c 20   of the schema, 
19100 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65  do.    ** not re
19110 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d 61 20  load the schema 
19120 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61 73  from the databas
19130 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20  e file..    **. 
19140 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75 61 6c     ** If virtual
19150 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e 20 75  -tables are in u
19160 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f 74 20  se, this is not 
19170 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61  just an optimiza
19180 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74  tion..    ** Oft
19190 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73 74 6f  en, v-tables sto
191a0 72 65 20 74 68 65 69 72 20 64 61 74 61 20 69 6e  re their data in
191b0 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20 74 61   other SQLite ta
191c0 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20 20 20  bles, which.    
191d0 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64 20 66  ** are queried f
191e0 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65 78 74  rom within xNext
191f0 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76 2d 74  () and other v-t
19200 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75 73 69  able methods usi
19210 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70 61 72  ng.    ** prepar
19220 65 64 20 71 75 65 72 69 65 73 2e 20 49 66 20 73  ed queries. If s
19230 75 63 68 20 61 20 71 75 65 72 79 20 69 73 20 6f  uch a query is o
19240 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65 20 64  ut-of-date, we d
19250 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20  o not want to.  
19260 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74 68 65    ** discard the
19270 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
19280 2c 20 61 73 20 74 68 65 20 75 73 65 72 20 63 6f  , as the user co
19290 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20  de implementing 
192a0 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62  the.    ** v-tab
192b0 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20 74 6f  le would have to
192c0 20 62 65 20 72 65 61 64 79 20 66 6f 72 20 74 68   be ready for th
192d0 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73  e sqlite3_vtab s
192e0 74 72 75 63 74 75 72 65 20 69 74 73 65 6c 66 0a  tructure itself.
192f0 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76      ** to be inv
19300 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65 76 65  alidated wheneve
19310 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  r sqlite3_step()
19320 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20   is called from 
19330 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61  within .    ** a
19340 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e   v-table method.
19350 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28 20  .    */.    if( 
19360 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
19370 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
19380 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29  _cookie!=iMeta )
19390 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52  {.      sqlite3R
193a0 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 64 62  esetOneSchema(db
193b0 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
193c0 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  }.    p->expired
193d0 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 1;.    rc = S
193e0 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20  QLITE_SCHEMA;.  
193f0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
19400 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f 6f   Opcode: ReadCoo
19410 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a  kie P1 P2 P3 * *
19420 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f 6b  .**.** Read cook
19430 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72 6f  ie number P3 fro
19440 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61 6e  m database P1 an
19450 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f 20  d write it into 
19460 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20  register P2..** 
19470 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63 68  P3==1 is the sch
19480 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50 33  ema version.  P3
19490 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61 62  ==2 is the datab
194a0 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20 50  ase format..** P
194b0 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f  3==3 is the reco
194c0 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63 61  mmended pager ca
194d0 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73 6f  che size, and so
194e0 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20 69   forth.  P1==0 i
194f0 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61  s.** the main da
19500 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20  tabase file and 
19510 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61 74  P1==1 is the dat
19520 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
19530 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d 70  to store.** temp
19540 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19550 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20 62  .** There must b
19560 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f 6e  e a read-lock on
19570 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28 65   the database (e
19580 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63 74  ither a transact
19590 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20 73  ion.** must be s
195a0 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65 20  tarted or there 
195b0 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e 20  must be an open 
195c0 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a 2a  cursor) before.*
195d0 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73  * executing this
195e0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f   instruction..*/
195f0 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f 6f  .case OP_ReadCoo
19600 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  kie: {          
19610 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
19620 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74  release */.  int
19630 20 69 4d 65 74 61 3b 0a 20 20 69 6e 74 20 69 44   iMeta;.  int iD
19640 62 3b 0a 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65  b;.  int iCookie
19650 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
19660 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 69  bIsReader );.  i
19670 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  Db = pOp->p1;.  
19680 69 43 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70  iCookie = pOp->p
19690 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  3;.  assert( pOp
196a0 2d 3e 70 33 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p3<SQLITE_N_BT
196b0 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
196c0 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
196d0 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
196e0 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
196f0 5b 69 44 62 5d 2e 70 42 74 21 3d 30 20 29 3b 0a  [iDb].pBt!=0 );.
19700 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
19710 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
19720 6b 2c 20 69 44 62 29 20 29 3b 0a 0a 20 20 73 71  k, iDb) );..  sq
19730 6c 69 74 65 33 42 74 72 65 65 47 65 74 4d 65 74  lite3BtreeGetMet
19740 61 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70  a(db->aDb[iDb].p
19750 42 74 2c 20 69 43 6f 6f 6b 69 65 2c 20 28 75 33  Bt, iCookie, (u3
19760 32 20 2a 29 26 69 4d 65 74 61 29 3b 0a 20 20 70  2 *)&iMeta);.  p
19770 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 65 74 61  Out->u.i = iMeta
19780 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
19790 20 4f 70 63 6f 64 65 3a 20 53 65 74 43 6f 6f 6b   Opcode: SetCook
197a0 69 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ie P1 P2 P3 * *.
197b0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74 68 65 20  **.** Write the 
197c0 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
197d0 74 65 72 20 50 33 20 28 69 6e 74 65 72 70 72 65  ter P3 (interpre
197e0 74 65 64 20 61 73 20 61 6e 20 69 6e 74 65 67 65  ted as an intege
197f0 72 29 0a 2a 2a 20 69 6e 74 6f 20 63 6f 6f 6b 69  r).** into cooki
19800 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66 20 64  e number P2 of d
19810 61 74 61 62 61 73 65 20 50 31 2e 20 20 50 32 3d  atabase P1.  P2=
19820 3d 31 20 69 73 20 74 68 65 20 73 63 68 65 6d 61  =1 is the schema
19830 20 76 65 72 73 69 6f 6e 2e 20 20 0a 2a 2a 20 50   version.  .** P
19840 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
19850 62 61 73 65 20 66 6f 72 6d 61 74 2e 20 50 32 3d  base format. P2=
19860 3d 33 20 69 73 20 74 68 65 20 72 65 63 6f 6d 6d  =3 is the recomm
19870 65 6e 64 65 64 20 70 61 67 65 72 20 63 61 63 68  ended pager cach
19880 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61 6e 64 20  e .** size, and 
19890 73 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30  so forth.  P1==0
198a0 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   is the main dat
198b0 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64 20 50  abase file and P
198c0 31 3d 3d 31 20 69 73 20 74 68 65 20 0a 2a 2a 20  1==1 is the .** 
198d0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 75 73  database file us
198e0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 65 6d 70  ed to store temp
198f0 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a 2a  orary tables..**
19900 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63 74 69 6f  .** A transactio
19910 6e 20 6d 75 73 74 20 62 65 20 73 74 61 72 74 65  n must be starte
19920 64 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  d before executi
19930 6e 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a  ng this opcode..
19940 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 74 43 6f  */.case OP_SetCo
19950 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 2f 2a  okie: {       /*
19960 20 69 6e 33 20 2a 2f 0a 20 20 44 62 20 2a 70 44   in3 */.  Db *pD
19970 62 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  b;.  assert( pOp
19980 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e 5f 42 54  ->p2<SQLITE_N_BT
19990 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20 20 61 73  REE_META );.  as
199a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
199b0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
199c0 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
199d0 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
199e0 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
199f0 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
19a00 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
19a10 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
19a20 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  Db[pOp->p1];.  a
19a30 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74 21  ssert( pDb->pBt!
19a40 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
19a50 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
19a60 65 78 48 65 6c 64 28 64 62 2c 20 70 4f 70 2d 3e  exHeld(db, pOp->
19a70 70 31 2c 20 30 29 20 29 3b 0a 20 20 70 49 6e 33  p1, 0) );.  pIn3
19a80 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
19a90 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  ];.  sqlite3Vdbe
19aa0 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49  MemIntegerify(pI
19ab0 6e 33 29 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f  n3);.  /* See no
19ac0 74 65 20 61 62 6f 75 74 20 69 6e 64 65 78 20 73  te about index s
19ad0 68 69 66 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65  hifting on OP_Re
19ae0 61 64 43 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63  adCookie */.  rc
19af0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 55   = sqlite3BtreeU
19b00 70 64 61 74 65 4d 65 74 61 28 70 44 62 2d 3e 70  pdateMeta(pDb->p
19b10 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 28 69 6e  Bt, pOp->p2, (in
19b20 74 29 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20  t)pIn3->u.i);.  
19b30 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
19b40 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  EE_SCHEMA_VERSIO
19b50 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65 6e  N ){.    /* When
19b60 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b   the schema cook
19b70 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63 6f  ie changes, reco
19b80 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b 69  rd the new cooki
19b90 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f 0a  e internally */.
19ba0 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
19bb0 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 20  ->schema_cookie 
19bc0 3d 20 28 69 6e 74 29 70 49 6e 33 2d 3e 75 2e 69  = (int)pIn3->u.i
19bd0 3b 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20  ;.    db->flags 
19be0 7c 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e  |= SQLITE_Intern
19bf0 43 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65  Changes;.  }else
19c00 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
19c10 52 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20  REE_FILE_FORMAT 
19c20 29 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64  ){.    /* Record
19c30 20 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20   changes in the 
19c40 66 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20  file format */. 
19c50 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
19c60 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 28  >file_format = (
19c70 75 38 29 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20  u8)pIn3->u.i;.  
19c80 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 31 3d  }.  if( pOp->p1=
19c90 3d 31 20 29 7b 0a 20 20 20 20 2f 2a 20 49 6e 76  =1 ){.    /* Inv
19ca0 61 6c 69 64 61 74 65 20 61 6c 6c 20 70 72 65 70  alidate all prep
19cb0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
19cc0 77 68 65 6e 65 76 65 72 20 74 68 65 20 54 45 4d  whenever the TEM
19cd0 50 20 64 61 74 61 62 61 73 65 0a 20 20 20 20 2a  P database.    *
19ce0 2a 20 73 63 68 65 6d 61 20 69 73 20 63 68 61 6e  * schema is chan
19cf0 67 65 64 2e 20 20 54 69 63 6b 65 74 20 23 31 36  ged.  Ticket #16
19d00 34 34 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  44 */.    sqlite
19d10 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
19d20 74 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20  tatements(db);. 
19d30 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
19d40 30 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  0;.  }.  break;.
19d50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70  }../* Opcode: Op
19d60 65 6e 52 65 61 64 20 50 31 20 50 32 20 50 33 20  enRead P1 P2 P3 
19d70 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
19d80 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50  s: root=P2 iDb=P
19d90 33 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72  3.**.** Open a r
19da0 65 61 64 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20  ead-only cursor 
19db0 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65  for the database
19dc0 20 74 61 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f   table whose roo
19dd0 74 20 70 61 67 65 20 69 73 0a 2a 2a 20 50 32 20  t page is.** P2 
19de0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69  in a database fi
19df0 6c 65 2e 20 20 54 68 65 20 64 61 74 61 62 61 73  le.  The databas
19e00 65 20 66 69 6c 65 20 69 73 20 64 65 74 65 72 6d  e file is determ
19e10 69 6e 65 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20  ined by P3. .** 
19e20 50 33 3d 3d 30 20 6d 65 61 6e 73 20 74 68 65 20  P3==0 means the 
19e30 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 50  main database, P
19e40 33 3d 3d 31 20 6d 65 61 6e 73 20 74 68 65 20 64  3==1 means the d
19e50 61 74 61 62 61 73 65 20 75 73 65 64 20 66 6f 72  atabase used for
19e60 20 0a 2a 2a 20 74 65 6d 70 6f 72 61 72 79 20 74   .** temporary t
19e70 61 62 6c 65 73 2c 20 61 6e 64 20 50 33 3e 31 20  ables, and P3>1 
19e80 6d 65 61 6e 73 20 75 73 65 64 20 74 68 65 20 63  means used the c
19e90 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 61 74 74  orresponding att
19ea0 61 63 68 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  ached.** databas
19eb0 65 2e 20 20 47 69 76 65 20 74 68 65 20 6e 65 77  e.  Give the new
19ec0 20 63 75 72 73 6f 72 20 61 6e 20 69 64 65 6e 74   cursor an ident
19ed0 69 66 69 65 72 20 6f 66 20 50 31 2e 20 20 54 68  ifier of P1.  Th
19ee0 65 20 50 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e  e P1.** values n
19ef0 65 65 64 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69  eed not be conti
19f00 67 75 6f 75 73 20 62 75 74 20 61 6c 6c 20 50 31  guous but all P1
19f10 20 76 61 6c 75 65 73 20 73 68 6f 75 6c 64 20 62   values should b
19f20 65 20 73 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73  e small integers
19f30 2e 0a 2a 2a 20 49 74 20 69 73 20 61 6e 20 65 72  ..** It is an er
19f40 72 6f 72 20 66 6f 72 20 50 31 20 74 6f 20 62 65  ror for P1 to be
19f50 20 6e 65 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a   negative..**.**
19f60 20 49 66 20 50 35 21 3d 30 20 74 68 65 6e 20 75   If P5!=0 then u
19f70 73 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  se the content o
19f80 66 20 72 65 67 69 73 74 65 72 20 50 32 20 61 73  f register P2 as
19f90 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 2c 20   the root page, 
19fa0 6e 6f 74 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65  not.** the value
19fb0 20 6f 66 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a   of P2 itself..*
19fc0 2a 0a 2a 2a 20 54 68 65 72 65 20 77 69 6c 6c 20  *.** There will 
19fd0 62 65 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f  be a read lock o
19fe0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  n the database w
19ff0 68 65 6e 65 76 65 72 20 74 68 65 72 65 20 69 73  henever there is
1a000 20 61 6e 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73   an.** open curs
1a010 6f 72 2e 20 20 49 66 20 74 68 65 20 64 61 74 61  or.  If the data
1a020 62 61 73 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65  base was unlocke
1a030 64 20 70 72 69 6f 72 20 74 6f 20 74 68 69 73 20  d prior to this 
1a040 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74  instruction.** t
1a050 68 65 6e 20 61 20 72 65 61 64 20 6c 6f 63 6b 20  hen a read lock 
1a060 69 73 20 61 63 71 75 69 72 65 64 20 61 73 20 70  is acquired as p
1a070 61 72 74 20 6f 66 20 74 68 69 73 20 69 6e 73 74  art of this inst
1a080 72 75 63 74 69 6f 6e 2e 20 20 41 20 72 65 61 64  ruction.  A read
1a090 0a 2a 2a 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20  .** lock allows 
1a0a0 6f 74 68 65 72 20 70 72 6f 63 65 73 73 65 73 20  other processes 
1a0b0 74 6f 20 72 65 61 64 20 74 68 65 20 64 61 74 61  to read the data
1a0c0 62 61 73 65 20 62 75 74 20 70 72 6f 68 69 62 69  base but prohibi
1a0d0 74 73 0a 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20  ts.** any other 
1a0e0 70 72 6f 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64  process from mod
1a0f0 69 66 79 69 6e 67 20 74 68 65 20 64 61 74 61 62  ifying the datab
1a100 61 73 65 2e 20 20 54 68 65 20 72 65 61 64 20 6c  ase.  The read l
1a110 6f 63 6b 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73  ock is.** releas
1a120 65 64 20 77 68 65 6e 20 61 6c 6c 20 63 75 72 73  ed when all curs
1a130 6f 72 73 20 61 72 65 20 63 6c 6f 73 65 64 2e 20  ors are closed. 
1a140 20 49 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   If this instruc
1a150 74 69 6f 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a  tion attempts.**
1a160 20 74 6f 20 67 65 74 20 61 20 72 65 61 64 20 6c   to get a read l
1a170 6f 63 6b 20 62 75 74 20 66 61 69 6c 73 2c 20 74  ock but fails, t
1a180 68 65 20 73 63 72 69 70 74 20 74 65 72 6d 69 6e  he script termin
1a190 61 74 65 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20  ates with an.** 
1a1a0 53 51 4c 49 54 45 5f 42 55 53 59 20 65 72 72 6f  SQLITE_BUSY erro
1a1b0 72 20 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68  r code..**.** Th
1a1c0 65 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62  e P4 value may b
1a1d0 65 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65  e either an inte
1a1e0 67 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f  ger (P4_INT32) o
1a1f0 72 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a  r a pointer to.*
1a200 2a 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75  * a KeyInfo stru
1a210 63 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46  cture (P4_KEYINF
1a220 4f 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70  O). If it is a p
1a230 6f 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49  ointer to a KeyI
1a240 6e 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72  nfo .** structur
1a250 65 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72  e, then said str
1a260 75 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74  ucture defines t
1a270 68 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63  he content and c
1a280 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71  ollating .** seq
1a290 75 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64  uence of the ind
1a2a0 65 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e  ex being opened.
1a2b0 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50   Otherwise, if P
1a2c0 34 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20  4 is an integer 
1a2d0 0a 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73  .** value, it is
1a2e0 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62   set to the numb
1a2f0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1a300 20 74 68 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a   the table..**.*
1a310 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e  * See also: Open
1a320 57 72 69 74 65 2c 20 52 65 6f 70 65 6e 49 64 78  Write, ReopenIdx
1a330 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .*/./* Opcode: R
1a340 65 6f 70 65 6e 49 64 78 20 50 31 20 50 32 20 50  eopenIdx P1 P2 P
1a350 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
1a360 73 69 73 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62  sis: root=P2 iDb
1a370 3d 50 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65  =P3.**.** The Re
1a380 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 77  openIdx opcode w
1a390 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
1a3a0 65 20 52 65 61 64 4f 70 65 6e 20 65 78 63 65 70  e ReadOpen excep
1a3b0 74 20 74 68 61 74 20 69 74 20 66 69 72 73 74 0a  t that it first.
1a3c0 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ** checks to see
1a3d0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 6f   if the cursor o
1a3e0 6e 20 50 31 20 69 73 20 61 6c 72 65 61 64 79 20  n P1 is already 
1a3f0 6f 70 65 6e 20 77 69 74 68 20 61 20 72 6f 6f 74  open with a root
1a400 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
1a410 6f 66 20 50 32 20 61 6e 64 20 69 66 20 69 74 20  of P2 and if it 
1a420 69 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20 62  is this opcode b
1a430 65 63 6f 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20  ecomes a no-op. 
1a440 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1a450 0a 2a 2a 20 69 66 20 74 68 65 20 63 75 72 73 6f  .** if the curso
1a460 72 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  r is already ope
1a470 6e 2c 20 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e  n, do not reopen
1a480 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52   it..**.** The R
1a490 65 6f 70 65 6e 49 64 78 20 6f 70 63 6f 64 65 20  eopenIdx opcode 
1a4a0 6d 61 79 20 6f 6e 6c 79 20 62 65 20 75 73 65 64  may only be used
1a4b0 20 77 69 74 68 20 50 35 3d 3d 30 20 61 6e 64 20   with P5==0 and 
1a4c0 77 69 74 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a  with P4 being.**
1a4d0 20 61 20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62   a P4_KEYINFO ob
1a4e0 6a 65 63 74 2e 20 20 46 75 72 74 68 65 72 6d 6f  ject.  Furthermo
1a4f0 72 65 2c 20 74 68 65 20 50 33 20 76 61 6c 75 65  re, the P3 value
1a500 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d   must be the sam
1a510 65 20 61 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74  e as.** every ot
1a520 68 65 72 20 52 65 6f 70 65 6e 49 64 78 20 6f 72  her ReopenIdx or
1a530 20 4f 70 65 6e 52 65 61 64 20 66 6f 72 20 74 68   OpenRead for th
1a540 65 20 73 61 6d 65 20 63 75 72 73 6f 72 20 6e 75  e same cursor nu
1a550 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  mber..**.** See 
1a560 74 68 65 20 4f 70 65 6e 52 65 61 64 20 6f 70 63  the OpenRead opc
1a570 6f 64 65 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ode documentatio
1a580 6e 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c  n for additional
1a590 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
1a5a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1a5b0 57 72 69 74 65 20 50 31 20 50 32 20 50 33 20 50  Write P1 P2 P3 P
1a5c0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1a5d0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1a5e0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65  .**.** Open a re
1a5f0 61 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20  ad/write cursor 
1a600 6e 61 6d 65 64 20 50 31 20 6f 6e 20 74 68 65 20  named P1 on the 
1a610 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 77  table or index w
1a620 68 6f 73 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67  hose root.** pag
1a630 65 20 69 73 20 50 32 2e 20 20 4f 72 20 69 66 20  e is P2.  Or if 
1a640 50 35 21 3d 30 20 75 73 65 20 74 68 65 20 63 6f  P5!=0 use the co
1a650 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
1a660 72 20 50 32 20 74 6f 20 66 69 6e 64 20 74 68 65  r P2 to find the
1a670 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a  .** root page..*
1a680 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  *.** The P4 valu
1a690 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72 20  e may be either 
1a6a0 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f 49  an integer (P4_I
1a6b0 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e 74  NT32) or a point
1a6c0 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e  er to.** a KeyIn
1a6d0 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50 34  fo structure (P4
1a6e0 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69 74  _KEYINFO). If it
1a6f0 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
1a700 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73   a KeyInfo .** s
1a710 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20 73  tructure, then s
1a720 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64 65  aid structure de
1a730 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65 6e  fines the conten
1a740 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20  t and collating 
1a750 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66 20  .** sequence of 
1a760 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67 20  the index being 
1a770 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69 73  opened. Otherwis
1a780 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20 69  e, if P4 is an i
1a790 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65  nteger .** value
1a7a0 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74  , it is set to t
1a7b0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1a7c0 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c  umns in the tabl
1a7d0 65 2c 20 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20  e, or to the.** 
1a7e0 6c 61 72 67 65 73 74 20 69 6e 64 65 78 20 6f 66  largest index of
1a7f0 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74   any column of t
1a800 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73  he table that is
1a810 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a   actually used..
1a820 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
1a830 75 63 74 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73  uction works jus
1a840 74 20 6c 69 6b 65 20 4f 70 65 6e 52 65 61 64 20  t like OpenRead 
1a850 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1a860 70 65 6e 73 20 74 68 65 20 63 75 72 73 6f 72 0a  pens the cursor.
1a870 2a 2a 20 69 6e 20 72 65 61 64 2f 77 72 69 74 65  ** in read/write
1a880 20 6d 6f 64 65 2e 20 20 46 6f 72 20 61 20 67 69   mode.  For a gi
1a890 76 65 6e 20 74 61 62 6c 65 2c 20 74 68 65 72 65  ven table, there
1a8a0 20 63 61 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d   can be one or m
1a8b0 6f 72 65 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a  ore read-only.**
1a8c0 20 63 75 72 73 6f 72 73 20 6f 72 20 61 20 73 69   cursors or a si
1a8d0 6e 67 6c 65 20 72 65 61 64 2f 77 72 69 74 65 20  ngle read/write 
1a8e0 63 75 72 73 6f 72 20 62 75 74 20 6e 6f 74 20 62  cursor but not b
1a8f0 6f 74 68 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  oth..**.** See a
1a900 6c 73 6f 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f  lso OpenRead..*/
1a910 0a 63 61 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49  .case OP_ReopenI
1a920 64 78 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  dx: {.  VdbeCurs
1a930 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 61 73 73  or *pCur;..  ass
1a940 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a950 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1a960 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1a970 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1a980 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1a990 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1a9a0 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1a9b0 3d 3d 70 4f 70 2d 3e 70 32 20 29 7b 0a 20 20 20  ==pOp->p2 ){.   
1a9c0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 69   assert( pCur->i
1a9d0 44 62 3d 3d 70 4f 70 2d 3e 70 33 20 29 3b 20 20  Db==pOp->p3 );  
1a9e0 20 20 20 20 2f 2a 20 47 75 61 72 61 6e 74 65 65      /* Guarantee
1a9f0 64 20 62 79 20 74 68 65 20 63 6f 64 65 20 67 65  d by the code ge
1aa00 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 20 20 62  nerator */.    b
1aa10 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49  reak;.  }.  /* I
1aa20 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
1aa30 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70  not currently op
1aa40 65 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e  en or is open on
1aa50 20 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a   a different.  *
1aa60 2a 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61  * index, then fa
1aa70 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20  ll through into 
1aa80 4f 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66  OP_OpenRead to f
1aa90 6f 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f  orce a reopen */
1aaa0 0a 7d 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52  .}.case OP_OpenR
1aab0 65 61 64 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ead:.case OP_Ope
1aac0 6e 57 72 69 74 65 3a 20 7b 0a 20 20 69 6e 74 20  nWrite: {.  int 
1aad0 6e 46 69 65 6c 64 3b 0a 20 20 4b 65 79 49 6e 66  nField;.  KeyInf
1aae0 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 69  o *pKeyInfo;.  i
1aaf0 6e 74 20 70 32 3b 0a 20 20 69 6e 74 20 69 44 62  nt p2;.  int iDb
1ab00 3b 0a 20 20 69 6e 74 20 77 72 46 6c 61 67 3b 0a  ;.  int wrFlag;.
1ab10 20 20 42 74 72 65 65 20 2a 70 58 3b 0a 20 20 56    Btree *pX;.  V
1ab20 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
1ab30 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a 20 20 61  .  Db *pDb;..  a
1ab40 73 73 65 72 74 28 20 28 70 4f 70 2d 3e 70 35 26  ssert( (pOp->p5&
1ab50 28 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 7c  (OPFLAG_P2ISREG|
1ab60 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1ab70 3d 3d 70 4f 70 2d 3e 70 35 20 29 3b 0a 20 20 61  ==pOp->p5 );.  a
1ab80 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f  ssert( pOp->opco
1ab90 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65  de==OP_OpenWrite
1aba0 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29   || pOp->p5==0 )
1abb0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ;.  assert( p->b
1abc0 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1abd0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
1abe0 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c  e==OP_OpenRead |
1abf0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
1ac00 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20  P_ReopenIdx.    
1ac10 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64        || p->read
1ac20 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66  Only==0 );..  if
1ac30 28 20 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a  ( p->expired ){.
1ac40 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
1ac50 41 42 4f 52 54 3b 0a 20 20 20 20 62 72 65 61 6b  ABORT;.    break
1ac60 3b 0a 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20  ;.  }..  nField 
1ac70 3d 20 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20  = 0;.  pKeyInfo 
1ac80 3d 20 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d  = 0;.  p2 = pOp-
1ac90 3e 70 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70  >p2;.  iDb = pOp
1aca0 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p3;.  assert( 
1acb0 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62  iDb>=0 && iDb<db
1acc0 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72  ->nDb );.  asser
1acd0 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
1ace0 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29  >btreeMask, iDb)
1acf0 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d   );.  pDb = &db-
1ad00 3e 61 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20  >aDb[iDb];.  pX 
1ad10 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73  = pDb->pBt;.  as
1ad20 73 65 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20  sert( pX!=0 );. 
1ad30 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
1ad40 3d 3d 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29  ==OP_OpenWrite )
1ad50 7b 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 31  {.    wrFlag = 1
1ad60 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  ;.    assert( sq
1ad70 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
1ad80 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
1ad90 20 29 3b 0a 20 20 20 20 69 66 28 20 70 44 62 2d   );.    if( pDb-
1ada0 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f 66  >pSchema->file_f
1adb0 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69 6e 57 72  ormat < p->minWr
1adc0 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 29 7b  iteFileFormat ){
1add0 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e 57 72 69  .      p->minWri
1ade0 74 65 46 69 6c 65 46 6f 72 6d 61 74 20 3d 20 70  teFileFormat = p
1adf0 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1ae00 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20 20 7d 0a  e_format;.    }.
1ae10 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 77 72 46    }else{.    wrF
1ae20 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69  lag = 0;.  }.  i
1ae30 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  f( pOp->p5 & OPF
1ae40 4c 41 47 5f 50 32 49 53 52 45 47 20 29 7b 0a 20  LAG_P2ISREG ){. 
1ae50 20 20 20 61 73 73 65 72 74 28 20 70 32 3e 30 20     assert( p2>0 
1ae60 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
1ae70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  2<=(p->nMem-p->n
1ae80 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 70  Cursor) );.    p
1ae90 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b  In2 = &aMem[p2];
1aea0 0a 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d  .    assert( mem
1aeb0 49 73 56 61 6c 69 64 28 70 49 6e 32 29 20 29 3b  IsValid(pIn2) );
1aec0 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 49  .    assert( (pI
1aed0 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n2->flags & MEM_
1aee0 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 20 20 73  Int)!=0 );.    s
1aef0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
1af00 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
1af10 20 20 20 70 32 20 3d 20 28 69 6e 74 29 70 49 6e     p2 = (int)pIn
1af20 32 2d 3e 75 2e 69 3b 0a 20 20 20 20 2f 2a 20 54  2->u.i;.    /* T
1af30 68 65 20 70 32 20 76 61 6c 75 65 20 61 6c 77 61  he p2 value alwa
1af40 79 73 20 63 6f 6d 65 73 20 66 72 6f 6d 20 61 20  ys comes from a 
1af50 70 72 69 6f 72 20 4f 50 5f 43 72 65 61 74 65 54  prior OP_CreateT
1af60 61 62 6c 65 20 6f 70 63 6f 64 65 20 61 6e 64 0a  able opcode and.
1af70 20 20 20 20 2a 2a 20 74 68 61 74 20 6f 70 63 6f      ** that opco
1af80 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 73  de will always s
1af90 65 74 20 74 68 65 20 70 32 20 76 61 6c 75 65 20  et the p2 value 
1afa0 74 6f 20 32 20 6f 72 20 6d 6f 72 65 20 6f 72 20  to 2 or more or 
1afb0 65 6c 73 65 20 66 61 69 6c 2e 0a 20 20 20 20 2a  else fail..    *
1afc0 2a 20 49 66 20 74 68 65 72 65 20 77 65 72 65 20  * If there were 
1afd0 61 20 66 61 69 6c 75 72 65 2c 20 74 68 65 20 70  a failure, the p
1afe0 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
1aff0 74 20 77 6f 75 6c 64 20 68 61 76 65 20 68 61 6c  t would have hal
1b000 74 65 64 0a 20 20 20 20 2a 2a 20 62 65 66 6f 72  ted.    ** befor
1b010 65 20 72 65 61 63 68 69 6e 67 20 74 68 69 73 20  e reaching this 
1b020 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a  instruction. */.
1b030 20 20 20 20 69 66 28 20 4e 45 56 45 52 28 70 32      if( NEVER(p2
1b040 3c 32 29 20 29 20 7b 0a 20 20 20 20 20 20 72 63  <2) ) {.      rc
1b050 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
1b060 54 5f 42 4b 50 54 3b 0a 20 20 20 20 20 20 67 6f  T_BKPT;.      go
1b070 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
1b080 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 7d  error;.    }.  }
1b090 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
1b0a0 70 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29  pe==P4_KEYINFO )
1b0b0 7b 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d  {.    pKeyInfo =
1b0c0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
1b0d0 6f 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o;.    assert( p
1b0e0 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e  KeyInfo->enc==EN
1b0f0 43 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73  C(db) );.    ass
1b100 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64  ert( pKeyInfo->d
1b110 62 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69  b==db );.    nFi
1b120 65 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e  eld = pKeyInfo->
1b130 6e 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d  nField+pKeyInfo-
1b140 3e 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73  >nXField;.  }els
1b150 65 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70  e if( pOp->p4typ
1b160 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20  e==P4_INT32 ){. 
1b170 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d     nField = pOp-
1b180 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73  >p4.i;.  }.  ass
1b190 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1b1a0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69  );.  assert( nFi
1b1b0 65 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74  eld>=0 );.  test
1b1c0 63 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20  case( nField==0 
1b1d0 29 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74  );  /* Table wit
1b1e0 68 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  h INTEGER PRIMAR
1b1f0 59 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e  Y KEY and nothin
1b200 67 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72  g else */.  pCur
1b210 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
1b220 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46  r(p, pOp->p1, nF
1b230 69 65 6c 64 2c 20 69 44 62 2c 20 31 29 3b 0a 20  ield, iDb, 1);. 
1b240 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
1b250 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1b260 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
1b270 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72  .  pCur->isOrder
1b280 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ed = 1;.  pCur->
1b290 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 20  pgnoRoot = p2;. 
1b2a0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1b2b0 65 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c  eeCursor(pX, p2,
1b2c0 20 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66   wrFlag, pKeyInf
1b2d0 6f 2c 20 70 43 75 72 2d 3e 70 43 75 72 73 6f 72  o, pCur->pCursor
1b2e0 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65 79 49  );.  pCur->pKeyI
1b2f0 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b 0a  nfo = pKeyInfo;.
1b300 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47    assert( OPFLAG
1b310 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52 45 45 5f  _BULKCSR==BTREE_
1b320 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20 20 73 71  BULKLOAD );.  sq
1b330 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1b340 48 69 6e 74 73 28 70 43 75 72 2d 3e 70 43 75 72  Hints(pCur->pCur
1b350 73 6f 72 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  sor, (pOp->p5 & 
1b360 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 29 29  OPFLAG_BULKCSR))
1b370 3b 0a 0a 20 20 2f 2a 20 53 69 6e 63 65 20 69 74  ;..  /* Since it
1b380 20 70 65 72 66 6f 72 6d 73 20 6e 6f 20 6d 65 6d   performs no mem
1b390 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 6f  ory allocation o
1b3a0 72 20 49 4f 2c 20 74 68 65 20 6f 6e 6c 79 20 76  r IO, the only v
1b3b0 61 6c 75 65 20 74 68 61 74 0a 20 20 2a 2a 20 73  alue that.  ** s
1b3c0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1b3d0 72 28 29 20 6d 61 79 20 72 65 74 75 72 6e 20 69  r() may return i
1b3e0 73 20 53 51 4c 49 54 45 5f 4f 4b 2e 20 2a 2f 0a  s SQLITE_OK. */.
1b3f0 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51    assert( rc==SQ
1b400 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a  LITE_OK );..  /*
1b410 20 53 65 74 20 74 68 65 20 56 64 62 65 43 75 72   Set the VdbeCur
1b420 73 6f 72 2e 69 73 54 61 62 6c 65 20 76 61 72 69  sor.isTable vari
1b430 61 62 6c 65 2e 20 50 72 65 76 69 6f 75 73 20 76  able. Previous v
1b440 65 72 73 69 6f 6e 73 20 6f 66 0a 20 20 2a 2a 20  ersions of.  ** 
1b450 53 51 4c 69 74 65 20 75 73 65 64 20 74 6f 20 63  SQLite used to c
1b460 68 65 63 6b 20 69 66 20 74 68 65 20 72 6f 6f 74  heck if the root
1b470 2d 70 61 67 65 20 66 6c 61 67 73 20 77 65 72 65  -page flags were
1b480 20 73 61 6e 65 20 61 74 20 74 68 69 73 20 70 6f   sane at this po
1b490 69 6e 74 0a 20 20 2a 2a 20 61 6e 64 20 72 65 70  int.  ** and rep
1b4a0 6f 72 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ort database cor
1b4b0 72 75 70 74 69 6f 6e 20 69 66 20 74 68 65 79 20  ruption if they 
1b4c0 77 65 72 65 20 6e 6f 74 2c 20 62 75 74 20 74 68  were not, but th
1b4d0 69 73 20 63 68 65 63 6b 20 68 61 73 0a 20 20 2a  is check has.  *
1b4e0 2a 20 73 69 6e 63 65 20 6d 6f 76 65 64 20 69 6e  * since moved in
1b4f0 74 6f 20 74 68 65 20 62 74 72 65 65 20 6c 61 79  to the btree lay
1b500 65 72 2e 20 20 2a 2f 20 20 0a 20 20 70 43 75 72  er.  */  .  pCur
1b510 2d 3e 69 73 54 61 62 6c 65 20 3d 20 70 4f 70 2d  ->isTable = pOp-
1b520 3e 70 34 74 79 70 65 21 3d 50 34 5f 4b 45 59 49  >p4type!=P4_KEYI
1b530 4e 46 4f 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  NFO;.  break;.}.
1b540 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e  ./* Opcode: Open
1b550 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32 20  Ephemeral P1 P2 
1b560 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  * P4 P5.** Synop
1b570 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a  sis: nColumn=P2.
1b580 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77  **.** Open a new
1b590 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
1b5a0 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 2e  transient table.
1b5b0 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20 69  .** The cursor i
1b5c0 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64 20  s always opened 
1b5d0 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e 20  read/write even 
1b5e0 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20  if .** the main 
1b5f0 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61 64  database is read
1b600 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68 65  -only.  The ephe
1b610 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20 69  meral.** table i
1b620 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d 61  s deleted automa
1b630 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68 65  tically when the
1b640 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73 65   cursor is close
1b650 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20 74  d..**.** P2 is t
1b660 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1b670 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68 65  umns in the ephe
1b680 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20  meral table..** 
1b690 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  The cursor point
1b6a0 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61 62  s to a BTree tab
1b6b0 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64 20  le if P4==0 and 
1b6c0 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65 78  to a BTree index
1b6d0 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f 74  .** if P4 is not
1b6e0 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f   0.  If P4 is no
1b6f0 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e 74  t NULL, it point
1b700 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20 73  s to a KeyInfo s
1b710 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61 74  tructure.** that
1b720 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f 72   defines the for
1b730 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20 74  mat of keys in t
1b740 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20  he index..**.** 
1b750 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65 72  The P5 parameter
1b760 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20 6f   can be a mask o
1b770 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66 6c  f the BTREE_* fl
1b780 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20 69  ags defined.** i
1b790 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65 73  n btree.h.  Thes
1b7a0 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c 20  e flags control 
1b7b0 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20 6f  aspects of the o
1b7c0 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74  peration of.** t
1b7d0 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20 42  he btree.  The B
1b7e0 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41  TREE_OMIT_JOURNA
1b7f0 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e 47  L and BTREE_SING
1b800 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a 20  LE flags are.** 
1b810 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61  added automatica
1b820 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  lly..*/./* Opcod
1b830 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65 78  e: OpenAutoindex
1b840 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
1b850 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c 75   Synopsis: nColu
1b860 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73  mn=P2.**.** This
1b870 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74 68   opcode works th
1b880 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70 65  e same as OP_Ope
1b890 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74 20  nEphemeral.  It 
1b8a0 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72 65  has a.** differe
1b8b0 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74 69  nt name to disti
1b8c0 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e 20  nguish its use. 
1b8d0 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64 20   Tables created 
1b8e0 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69 73  using.** by this
1b8f0 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65 20   opcode will be 
1b900 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61 74  used for automat
1b910 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1b920 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64 69  ransient.** indi
1b930 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f  ces in joins..*/
1b940 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75 74  .case OP_OpenAut
1b950 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f 50  oindex: .case OP
1b960 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a 20  _OpenEphemeral: 
1b970 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
1b980 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20 2a  pCx;.  KeyInfo *
1b990 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74 61  pKeyInfo;..  sta
1b9a0 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76 66  tic const int vf
1b9b0 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20 20  sFlags = .      
1b9c0 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41 44  SQLITE_OPEN_READ
1b9d0 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53 51  WRITE |.      SQ
1b9e0 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54 45  LITE_OPEN_CREATE
1b9f0 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ba00 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20 7c  OPEN_EXCLUSIVE |
1ba10 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50  .      SQLITE_OP
1ba20 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53 45  EN_DELETEONCLOSE
1ba30 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f   |.      SQLITE_
1ba40 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f 44  OPEN_TRANSIENT_D
1ba50 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  B;.  assert( pOp
1ba60 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73  ->p1>=0 );.  ass
1ba70 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20  ert( pOp->p2>=0 
1ba80 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63  );.  pCx = alloc
1ba90 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f 70  ateCursor(p, pOp
1baa0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d  ->p1, pOp->p2, -
1bab0 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70 43 78  1, 1);.  if( pCx
1bac0 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1bad0 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f  m;.  pCx->nullRo
1bae0 77 20 3d 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73  w = 1;.  pCx->is
1baf0 45 70 68 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20  Ephemeral = 1;. 
1bb00 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1bb10 65 65 4f 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c  eeOpen(db->pVfs,
1bb20 20 30 2c 20 64 62 2c 20 26 70 43 78 2d 3e 70 42   0, db, &pCx->pB
1bb30 74 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  t, .            
1bb40 20 20 20 20 20 20 20 20 20 20 20 20 42 54 52 45              BTRE
1bb50 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c  E_OMIT_JOURNAL |
1bb60 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20   BTREE_SINGLE | 
1bb70 70 4f 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67  pOp->p5, vfsFlag
1bb80 73 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51  s);.  if( rc==SQ
1bb90 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
1bba0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1bbb0 42 65 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e  BeginTrans(pCx->
1bbc0 70 42 74 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69  pBt, 1);.  }.  i
1bbd0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1bbe0 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20   ){.    /* If a 
1bbf0 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20  transient index 
1bc00 69 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65  is required, cre
1bc10 61 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e  ate it by callin
1bc20 67 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33  g.    ** sqlite3
1bc30 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65  BtreeCreateTable
1bc40 28 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45  () with the BTRE
1bc50 45 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62  E_BLOBKEY flag b
1bc60 65 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65  efore.    ** ope
1bc70 6e 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72  ning it. If a tr
1bc80 61 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73  ansient table is
1bc90 20 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20   required, just 
1bca0 75 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61  use the.    ** a
1bcb0 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65  utomatically cre
1bcc0 61 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20  ated table with 
1bcd0 72 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20  root-page 1 (an 
1bce0 42 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c  BLOB_INTKEY tabl
1bcf0 65 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69  e)..    */.    i
1bd00 66 28 20 28 70 4b 65 79 49 6e 66 6f 20 3d 20 70  f( (pKeyInfo = p
1bd10 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29  Op->p4.pKeyInfo)
1bd20 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  !=0 ){.      int
1bd30 20 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73   pgno;.      ass
1bd40 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
1bd50 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a  ==P4_KEYINFO );.
1bd60 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
1bd70 65 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62  e3BtreeCreateTab
1bd80 6c 65 28 70 43 78 2d 3e 70 42 74 2c 20 26 70 67  le(pCx->pBt, &pg
1bd90 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1bda0 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1bdb0 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1bdc0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1bdd0 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1bde0 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1bdf0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1be00 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1be10 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1be20 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1be30 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1be40 20 20 20 20 20 20 20 70 43 78 2d 3e 70 4b 65 79         pCx->pKey
1be50 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f 3b  Info = pKeyInfo;
1be60 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
1be70 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
1be80 28 70 43 78 2d 3e 70 42 74 2c 20 70 67 6e 6f 2c  (pCx->pBt, pgno,
1be90 20 31 2c 20 70 4b 65 79 49 6e 66 6f 2c 20 70 43   1, pKeyInfo, pC
1bea0 78 2d 3e 70 43 75 72 73 6f 72 29 3b 0a 20 20 20  x->pCursor);.   
1beb0 20 20 20 7d 0a 20 20 20 20 20 20 70 43 78 2d 3e     }.      pCx->
1bec0 69 73 54 61 62 6c 65 20 3d 20 30 3b 0a 20 20 20  isTable = 0;.   
1bed0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72 63   }else{.      rc
1bee0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 43   = sqlite3BtreeC
1bef0 75 72 73 6f 72 28 70 43 78 2d 3e 70 42 74 2c 20  ursor(pCx->pBt, 
1bf00 4d 41 53 54 45 52 5f 52 4f 4f 54 2c 20 31 2c 20  MASTER_ROOT, 1, 
1bf10 30 2c 20 70 43 78 2d 3e 70 43 75 72 73 6f 72 29  0, pCx->pCursor)
1bf20 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54  ;.      pCx->isT
1bf30 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20 20 7d 0a  able = 1;.    }.
1bf40 20 20 7d 0a 20 20 70 43 78 2d 3e 69 73 4f 72 64    }.  pCx->isOrd
1bf50 65 72 65 64 20 3d 20 28 70 4f 70 2d 3e 70 35 21  ered = (pOp->p5!
1bf60 3d 42 54 52 45 45 5f 55 4e 4f 52 44 45 52 45 44  =BTREE_UNORDERED
1bf70 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  );.  break;.}../
1bf80 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
1bf90 4f 70 65 6e 20 50 31 20 50 32 20 2a 20 50 34 20  Open P1 P2 * P4 
1bfa0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
1bfb0 6f 64 65 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f  ode works like O
1bfc0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1bfd0 65 78 63 65 70 74 20 74 68 61 74 20 69 74 20 6f  except that it o
1bfe0 70 65 6e 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69  pens.** a transi
1bff0 65 6e 74 20 69 6e 64 65 78 20 74 68 61 74 20 69  ent index that i
1c000 73 20 73 70 65 63 69 66 69 63 61 6c 6c 79 20 64  s specifically d
1c010 65 73 69 67 6e 65 64 20 74 6f 20 73 6f 72 74 20  esigned to sort 
1c020 6c 61 72 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20  large.** tables 
1c030 75 73 69 6e 67 20 61 6e 20 65 78 74 65 72 6e 61  using an externa
1c040 6c 20 6d 65 72 67 65 2d 73 6f 72 74 20 61 6c 67  l merge-sort alg
1c050 6f 72 69 74 68 6d 2e 0a 2a 2f 0a 63 61 73 65 20  orithm..*/.case 
1c060 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1c070 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c080 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1c090 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1c0a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1c0b0 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1c0c0 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1c0d0 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1c0e0 20 2d 31 2c 20 31 29 3b 0a 20 20 69 66 28 20 70   -1, 1);.  if( p
1c0f0 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  Cx==0 ) goto no_
1c100 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79  mem;.  pCx->pKey
1c110 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Info = pOp->p4.p
1c120 4b 65 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72  KeyInfo;.  asser
1c130 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1c140 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73  ->db==db );.  as
1c150 73 65 72 74 28 20 70 43 78 2d 3e 70 4b 65 79 49  sert( pCx->pKeyI
1c160 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62  nfo->enc==ENC(db
1c170 29 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  ) );.  rc = sqli
1c180 74 65 33 56 64 62 65 53 6f 72 74 65 72 49 6e 69  te3VdbeSorterIni
1c190 74 28 64 62 2c 20 70 43 78 29 3b 0a 20 20 62 72  t(db, pCx);.  br
1c1a0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
1c1b0 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20 50 31  e: OpenPseudo P1
1c1c0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
1c1d0 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c 75 6d  nopsis: P3 colum
1c1e0 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a 0a 2a  ns in r[P2].**.*
1c1f0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1c200 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74 73 20  sor that points 
1c210 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c 65 20  to a fake table 
1c220 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20  that contains a 
1c230 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 66  single.** row of
1c240 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f 6e 74   data.  The cont
1c250 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e 65 20  ent of that one 
1c260 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e 74 65  row is the conte
1c270 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20  nt of memory.** 
1c280 72 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 6e  register P2.  In
1c290 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 63 75   other words, cu
1c2a0 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65 73 20  rsor P1 becomes 
1c2b0 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74 68 65  an alias for the
1c2c0 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20 63 6f   .** MEM_Blob co
1c2d0 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65 64 20  ntent contained 
1c2e0 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
1c2f0 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f 2d 74  **.** A pseudo-t
1c300 61 62 6c 65 20 63 72 65 61 74 65 64 20 62 79 20  able created by 
1c310 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  this opcode is u
1c320 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 73 69  sed to hold a si
1c330 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75 74 70  ngle.** row outp
1c340 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f 72 74  ut from the sort
1c350 65 72 20 73 6f 20 74 68 61 74 20 74 68 65 20 72  er so that the r
1c360 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f 6d 70  ow can be decomp
1c370 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69 6e 64  osed into.** ind
1c380 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e 73 20  ividual columns 
1c390 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43 6f 6c  using the OP_Col
1c3a0 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54 68 65  umn opcode.  The
1c3b0 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1c3c0 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e 6c 79  e.** is the only
1c3d0 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65 20 74   cursor opcode t
1c3e0 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68 20 61  hat works with a
1c3f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a   pseudo-table..*
1c400 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65 20 6e  *.** P3 is the n
1c410 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
1c420 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73 20 74  in the records t
1c430 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74 6f 72  hat will be stor
1c440 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70 73 65  ed by.** the pse
1c450 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61  udo-table..*/.ca
1c460 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75 64 6f  se OP_OpenPseudo
1c470 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1c480 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65 72 74   *pCx;..  assert
1c490 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a  ( pOp->p1>=0 );.
1c4a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1c4b0 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20 3d 20  3>=0 );.  pCx = 
1c4c0 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72 28 70  allocateCursor(p
1c4d0 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
1c4e0 70 33 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 69 66  p3, -1, 0);.  if
1c4f0 28 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20  ( pCx==0 ) goto 
1c500 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e  no_mem;.  pCx->n
1c510 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1c520 78 2d 3e 70 73 65 75 64 6f 54 61 62 6c 65 52 65  x->pseudoTableRe
1c530 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 70  g = pOp->p2;.  p
1c540 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31 3b  Cx->isTable = 1;
1c550 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c560 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65 61 6b  p5==0 );.  break
1c570 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1c580 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a 20 2a  Close P1 * * * *
1c590 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61 20 63  .**.** Close a c
1c5a0 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73 6c 79  ursor previously
1c5b0 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e 20 20   opened as P1.  
1c5c0 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20  If P1 is not.** 
1c5d0 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 2c 20  currently open, 
1c5e0 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
1c5f0 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a   is a no-op..*/.
1c600 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a 20 7b  case OP_Close: {
1c610 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c620 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1c630 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
1c640 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1c650 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
1c660 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20  sr[pOp->p1]);.  
1c670 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1c680 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a  ] = 0;.  break;.
1c690 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  }../* Opcode: Se
1c6a0 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50 34  ekGE P1 P2 P3 P4
1c6b0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
1c6c0 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
1c6d0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
1c6e0 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51 4c  refers to an SQL
1c6f0 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20 74   table (B-Tree t
1c700 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65 72  hat uses integer
1c710 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65 20   keys), .** use 
1c720 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
1c730 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65 20  ister P3 as the 
1c740 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72 20  key.  If cursor 
1c750 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f  P1 refers .** to
1c760 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74   an SQL index, t
1c770 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66 69  hen P3 is the fi
1c780 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20  rst in an array 
1c790 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20  of P4 registers 
1c7a0 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73 65  .** that are use
1c7b0 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64  d as an unpacked
1c7c0 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a   index key. .**.
1c7d0 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75  ** Reposition cu
1c7e0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
1c7f0 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68   it points to th
1c800 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79  e smallest entry
1c810 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65   that .** is gre
1c820 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
1c830 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1c840 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1c850 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1c860 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72   greater than or
1c870 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1c880 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20  y and P2 is not 
1c890 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20  zero, then jump 
1c8a0 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  to P2..**.** Thi
1c8b0 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20  s opcode leaves 
1c8c0 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69  the cursor confi
1c8d0 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e  gured to move in
1c8e0 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a   forward order,.
1c8f0 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69  ** from the begi
1c900 6e 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20  ning toward the 
1c910 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  end.  In other w
1c920 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1c930 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1c940 64 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e  d to use Next, n
1c950 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53  ot Prev..**.** S
1c960 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1c970 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74  NotFound, SeekLt
1c980 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 4c 65  , SeekGt, SeekLe
1c990 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1c9a0 65 65 6b 47 54 20 50 31 20 50 32 20 50 33 20 50  eekGT P1 P2 P3 P
1c9b0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1c9c0 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1c9d0 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1c9e0 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1c9f0 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1ca00 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1ca10 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1ca20 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1ca30 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1ca40 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1ca50 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1ca60 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1ca70 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1ca80 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1ca90 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1caa0 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1cab0 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1cac0 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1cad0 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1cae0 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1caf0 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1cb00 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72 79 20 74  smallest entry t
1cb10 68 61 74 20 0a 2a 2a 20 69 73 20 67 72 65 61 74  hat .** is great
1cb20 65 72 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20  er than the key 
1cb30 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20  value. If there 
1cb40 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 67  are no records g
1cb50 72 65 61 74 65 72 20 74 68 61 6e 20 0a 2a 2a 20  reater than .** 
1cb60 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1cb70 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1cb80 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1cb90 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1cba0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1cbb0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1cbc0 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
1cbd0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1cbe0 65 20 62 65 67 69 6e 69 6e 67 20 74 6f 77 61 72  e begining towar
1cbf0 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f  d the end.  In o
1cc00 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
1cc10 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e  cursor is.** con
1cc20 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e  figured to use N
1cc30 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a  ext, not Prev..*
1cc40 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
1cc50 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
1cc60 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 65 2c 20  SeekLt, SeekGe, 
1cc70 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekLe.*/./* Opc
1cc80 6f 64 65 3a 20 53 65 65 6b 4c 54 20 50 31 20 50  ode: SeekLT P1 P
1cc90 32 20 50 33 20 50 34 20 2a 20 0a 2a 2a 20 53 79  2 P3 P4 * .** Sy
1cca0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1ccb0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1ccc0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1ccd0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1cce0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1ccf0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1cd00 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1cd10 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1cd20 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1cd30 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1cd40 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1cd50 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1cd60 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1cd70 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1cd80 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1cd90 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1cda0 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1cdb0 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1cdc0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1cdd0 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73 20  that  it points 
1cde0 74 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65  to the largest e
1cdf0 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73  ntry that .** is
1ce00 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65 20 6b   less than the k
1ce10 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1ce20 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1ce30 73 20 6c 65 73 73 20 74 68 61 6e 20 0a 2a 2a 20  s less than .** 
1ce40 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1ce50 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1ce60 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1ce70 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1ce80 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1ce90 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1cea0 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1ceb0 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1cec0 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1ced0 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1cee0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1cef0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1cf00 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1cf10 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1cf20 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20  **.** See also: 
1cf30 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c  Found, NotFound,
1cf40 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65 2c   SeekGt, SeekGe,
1cf50 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70   SeekLe.*/./* Op
1cf60 63 6f 64 65 3a 20 53 65 65 6b 4c 45 20 50 31 20  code: SeekLE P1 
1cf70 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
1cf80 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
1cf90 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75  @P4].**.** If cu
1cfa0 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 74  rsor P1 refers t
1cfb0 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28  o an SQL table (
1cfc0 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65 73  B-Tree that uses
1cfd0 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20   integer keys), 
1cfe0 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75  .** use the valu
1cff0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  e in register P3
1d000 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63 75   as a key. If cu
1d010 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20 0a  rsor P1 refers .
1d020 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e 64  ** to an SQL ind
1d030 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20 74  ex, then P3 is t
1d040 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20 61  he first in an a
1d050 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69 73  rray of P4 regis
1d060 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61 72  ters .** that ar
1d070 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e 70  e used as an unp
1d080 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79 2e  acked index key.
1d090 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74 69   .**.** Repositi
1d0a0 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20  on cursor P1 so 
1d0b0 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74  that it points t
1d0c0 6f 20 74 68 65 20 6c 61 72 67 65 73 74 20 65 6e  o the largest en
1d0d0 74 72 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20  try that .** is 
1d0e0 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71 75  less than or equ
1d0f0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
1d100 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61 72  lue. If there ar
1d110 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a 2a  e no records .**
1d120 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
1d130 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 61  ual to the key a
1d140 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65 72  nd P2 is not zer
1d150 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  o, then jump to 
1d160 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  P2..**.** This o
1d170 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
1d180 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
1d190 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
1d1a0 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
1d1b0 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
1d1c0 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
1d1d0 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
1d1e0 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
1d1f0 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
1d200 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
1d210 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65   Next..**.** See
1d220 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f   also: Found, No
1d230 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20  tFound, SeekGt, 
1d240 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 74 0a 2a  SeekGe, SeekLt.*
1d250 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 4c 54  /.case OP_SeekLT
1d260 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1d270 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1d280 50 5f 53 65 65 6b 4c 45 3a 20 20 20 20 20 20 20  P_SeekLE:       
1d290 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d2a0 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 47 45  /.case OP_SeekGE
1d2b0 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  :         /* jum
1d2c0 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1d2d0 50 5f 53 65 65 6b 47 54 3a 20 7b 20 20 20 20 20  P_SeekGT: {     
1d2e0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1d2f0 2f 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  /.  int res;.  i
1d300 6e 74 20 6f 63 3b 0a 20 20 56 64 62 65 43 75 72  nt oc;.  VdbeCur
1d310 73 6f 72 20 2a 70 43 3b 0a 20 20 55 6e 70 61 63  sor *pC;.  Unpac
1d320 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 69  kedRecord r;.  i
1d330 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 69 36 34  nt nField;.  i64
1d340 20 69 4b 65 79 3b 20 20 20 20 20 20 2f 2a 20 54   iKey;      /* T
1d350 68 65 20 72 6f 77 69 64 20 77 65 20 61 72 65 20  he rowid we are 
1d360 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 0a 20  to seek to */.. 
1d370 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d380 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
1d390 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 61  ->nCursor );.  a
1d3a0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 21 3d  ssert( pOp->p2!=
1d3b0 30 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  0 );.  pC = p->a
1d3c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
1d3d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
1d3e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d3f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
1d400 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f  0 );.  assert( O
1d410 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53  P_SeekLE == OP_S
1d420 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73  eekLT+1 );.  ass
1d430 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d  ert( OP_SeekGE =
1d440 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b  = OP_SeekLT+2 );
1d450 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65  .  assert( OP_Se
1d460 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c  ekGT == OP_SeekL
1d470 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  T+3 );.  assert(
1d480 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
1d490 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1d4a0 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1d4b0 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1d4c0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
1d4d0 3d 20 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  = 0;.#ifdef SQLI
1d4e0 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1d4f0 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63  eekOp = pOp->opc
1d500 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ode;.#endif.  if
1d510 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b  ( pC->isTable ){
1d520 0a 20 20 20 20 2f 2a 20 54 68 65 20 69 6e 70 75  .    /* The inpu
1d530 74 20 76 61 6c 75 65 20 69 6e 20 50 33 20 6d 69  t value in P3 mi
1d540 67 68 74 20 62 65 20 6f 66 20 61 6e 79 20 74 79  ght be of any ty
1d550 70 65 3a 20 69 6e 74 65 67 65 72 2c 20 72 65 61  pe: integer, rea
1d560 6c 2c 20 73 74 72 69 6e 67 2c 0a 20 20 20 20 2a  l, string,.    *
1d570 2a 20 62 6c 6f 62 2c 20 6f 72 20 4e 55 4c 4c 2e  * blob, or NULL.
1d580 20 20 42 75 74 20 69 74 20 6e 65 65 64 73 20 74    But it needs t
1d590 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 20  o be an integer 
1d5a0 62 65 66 6f 72 65 20 77 65 20 63 61 6e 20 64 6f  before we can do
1d5b0 0a 20 20 20 20 2a 2a 20 74 68 65 20 73 65 65 6b  .    ** the seek
1d5c0 2c 20 73 6f 20 63 6f 76 65 72 74 20 69 74 2e 20  , so covert it. 
1d5d0 2a 2f 0a 20 20 20 20 70 49 6e 33 20 3d 20 26 61  */.    pIn3 = &a
1d5e0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
1d5f0 20 20 41 70 70 6c 79 4e 75 6d 65 72 69 63 41 66    ApplyNumericAf
1d600 66 69 6e 69 74 79 28 70 49 6e 33 29 3b 0a 20 20  finity(pIn3);.  
1d610 20 20 69 4b 65 79 20 3d 20 73 71 6c 69 74 65 33    iKey = sqlite3
1d620 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
1d630 33 29 3b 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69  3);.    pC->rowi
1d640 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 0a 20  dIsValid = 0;.. 
1d650 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20     /* If the P3 
1d660 76 61 6c 75 65 20 63 6f 75 6c 64 20 6e 6f 74 20  value could not 
1d670 62 65 20 63 6f 6e 76 65 72 74 65 64 20 69 6e 74  be converted int
1d680 6f 20 61 6e 20 69 6e 74 65 67 65 72 20 77 69 74  o an integer wit
1d690 68 6f 75 74 0a 20 20 20 20 2a 2a 20 6c 6f 73 73  hout.    ** loss
1d6a0 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c   of information,
1d6b0 20 74 68 65 6e 20 73 70 65 63 69 61 6c 20 70 72   then special pr
1d6c0 6f 63 65 73 73 69 6e 67 20 69 73 20 72 65 71 75  ocessing is requ
1d6d0 69 72 65 64 2e 2e 2e 20 2a 2f 0a 20 20 20 20 69  ired... */.    i
1d6e0 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
1d6f0 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b  & MEM_Int)==0 ){
1d700 0a 20 20 20 20 20 20 69 66 28 20 28 70 49 6e 33  .      if( (pIn3
1d710 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65  ->flags & MEM_Re
1d720 61 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  al)==0 ){.      
1d730 20 20 2f 2a 20 49 66 20 74 68 65 20 50 33 20 76    /* If the P3 v
1d740 61 6c 75 65 20 63 61 6e 6e 6f 74 20 62 65 20 63  alue cannot be c
1d750 6f 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e  onverted into an
1d760 79 20 6b 69 6e 64 20 6f 66 20 61 20 6e 75 6d 62  y kind of a numb
1d770 65 72 2c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74  er,.        ** t
1d780 68 65 6e 20 74 68 65 20 73 65 65 6b 20 69 73 20  hen the seek is 
1d790 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2c 20 73 6f  not possible, so
1d7a0 20 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20   jump to P2 */. 
1d7b0 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1d7c0 3e 70 32 20 2d 20 31 3b 20 20 56 64 62 65 42 72  >p2 - 1;  VdbeBr
1d7d0 61 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a  anchTaken(1,2);.
1d7e0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
1d7f0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1d800 20 49 66 20 74 68 65 20 61 70 70 72 6f 78 69 6d   If the approxim
1d810 61 74 69 6f 6e 20 69 4b 65 79 20 69 73 20 6c 61  ation iKey is la
1d820 72 67 65 72 20 74 68 61 6e 20 74 68 65 20 61 63  rger than the ac
1d830 74 75 61 6c 20 72 65 61 6c 20 73 65 61 72 63 68  tual real search
1d840 0a 20 20 20 20 20 20 2a 2a 20 74 65 72 6d 2c 20  .      ** term, 
1d850 73 75 62 73 74 69 74 75 74 65 20 3e 3d 20 66 6f  substitute >= fo
1d860 72 20 3e 20 61 6e 64 20 3c 20 66 6f 72 20 3c 3d  r > and < for <=
1d870 2e 20 65 2e 67 2e 20 69 66 20 74 68 65 20 73 65  . e.g. if the se
1d880 61 72 63 68 20 74 65 72 6d 0a 20 20 20 20 20 20  arch term.      
1d890 2a 2a 20 69 73 20 34 2e 39 20 61 6e 64 20 74 68  ** is 4.9 and th
1d8a0 65 20 69 6e 74 65 67 65 72 20 61 70 70 72 6f 78  e integer approx
1d8b0 69 6d 61 74 69 6f 6e 20 35 3a 0a 20 20 20 20 20  imation 5:.     
1d8c0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 20 20 20   **.      **    
1d8d0 20 20 20 20 28 78 20 3e 20 20 34 2e 39 29 20 20      (x >  4.9)  
1d8e0 20 20 2d 3e 20 20 20 20 20 28 78 20 3e 3d 20 35    ->     (x >= 5
1d8f0 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 20 20 20  ).      **      
1d900 20 20 28 78 20 3c 3d 20 34 2e 39 29 20 20 20 20    (x <= 4.9)    
1d910 2d 3e 20 20 20 20 20 28 78 20 3c 20 20 35 29 0a  ->     (x <  5).
1d920 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69        */.      i
1d930 66 28 20 70 49 6e 33 2d 3e 72 3c 28 64 6f 75 62  f( pIn3->r<(doub
1d940 6c 65 29 69 4b 65 79 20 29 7b 0a 20 20 20 20 20  le)iKey ){.     
1d950 20 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53 65     assert( OP_Se
1d960 65 6b 47 45 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  ekGE==(OP_SeekGT
1d970 2d 31 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  -1) );.        a
1d980 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 54  ssert( OP_SeekLT
1d990 3d 3d 28 4f 50 5f 53 65 65 6b 4c 45 2d 31 29 20  ==(OP_SeekLE-1) 
1d9a0 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  );.        asser
1d9b0 74 28 20 28 4f 50 5f 53 65 65 6b 4c 45 20 26 20  t( (OP_SeekLE & 
1d9c0 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1d9d0 6b 47 54 20 26 20 30 78 30 30 30 31 29 20 29 3b  kGT & 0x0001) );
1d9e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 6f 63  .        if( (oc
1d9f0 20 26 20 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f   & 0x0001)==(OP_
1da00 53 65 65 6b 47 54 20 26 20 30 78 30 30 30 31 29  SeekGT & 0x0001)
1da10 20 29 20 6f 63 2d 2d 3b 0a 20 20 20 20 20 20 7d   ) oc--;.      }
1da20 0a 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ..      /* If th
1da30 65 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  e approximation 
1da40 69 4b 65 79 20 69 73 20 73 6d 61 6c 6c 65 72 20  iKey is smaller 
1da50 74 68 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20  than the actual 
1da60 72 65 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20  real search.    
1da70 20 20 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74    ** term, subst
1da80 69 74 75 74 65 20 3c 3d 20 66 6f 72 20 3c 20 61  itute <= for < a
1da90 6e 64 20 3e 20 66 6f 72 20 3e 3d 2e 20 20 2a 2f  nd > for >=.  */
1daa0 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 28 20  .      else if( 
1dab0 70 49 6e 33 2d 3e 72 3e 28 64 6f 75 62 6c 65 29  pIn3->r>(double)
1dac0 69 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20  iKey ){.        
1dad0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c  assert( OP_SeekL
1dae0 45 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29  E==(OP_SeekLT+1)
1daf0 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
1db00 72 74 28 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28  rt( OP_SeekGT==(
1db10 4f 50 5f 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a  OP_SeekGE+1) );.
1db20 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1db30 28 4f 50 5f 53 65 65 6b 4c 54 20 26 20 30 78 30  (OP_SeekLT & 0x0
1db40 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45  001)==(OP_SeekGE
1db50 20 26 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20   & 0x0001) );.  
1db60 20 20 20 20 20 20 69 66 28 20 28 6f 63 20 26 20        if( (oc & 
1db70 30 78 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65  0x0001)==(OP_See
1db80 6b 4c 54 20 26 20 30 78 30 30 30 31 29 20 29 20  kLT & 0x0001) ) 
1db90 6f 63 2b 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20  oc++;.      }.  
1dba0 20 20 7d 20 0a 20 20 20 20 72 63 20 3d 20 73 71    } .    rc = sq
1dbb0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
1dbc0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70 43 75  Unpacked(pC->pCu
1dbd0 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
1dbe0 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
1dbf0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1dc00 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
1dc10 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1dc20 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20  rror;.    }.    
1dc30 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20  if( res==0 ){.  
1dc40 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73 56      pC->rowidIsV
1dc50 61 6c 69 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  alid = 1;.      
1dc60 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  pC->lastRowid = 
1dc70 69 4b 65 79 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  iKey;.    }.  }e
1dc80 6c 73 65 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20  lse{.    nField 
1dc90 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20  = pOp->p4.i;.   
1dca0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
1dcb0 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29  type==P4_INT32 )
1dcc0 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 6e 46  ;.    assert( nF
1dcd0 69 65 6c 64 3e 30 20 29 3b 0a 20 20 20 20 72 2e  ield>0 );.    r.
1dce0 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70  pKeyInfo = pC->p
1dcf0 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e  KeyInfo;.    r.n
1dd00 46 69 65 6c 64 20 3d 20 28 75 31 36 29 6e 46 69  Field = (u16)nFi
1dd10 65 6c 64 3b 0a 0a 20 20 20 20 2f 2a 20 54 68 65  eld;..    /* The
1dd20 20 6e 65 78 74 20 6c 69 6e 65 20 6f 66 20 63 6f   next line of co
1dd30 64 65 20 63 6f 6d 70 75 74 65 73 20 61 73 20 66  de computes as f
1dd40 6f 6c 6c 6f 77 73 2c 20 6f 6e 6c 79 20 66 61 73  ollows, only fas
1dd50 74 65 72 3a 0a 20 20 20 20 2a 2a 20 20 20 69 66  ter:.    **   if
1dd60 28 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20  ( oc==OP_SeekGT 
1dd70 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45  || oc==OP_SeekLE
1dd80 20 29 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72   ){.    **     r
1dd90 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 2d 31  .default_rc = -1
1dda0 3b 0a 20 20 20 20 2a 2a 20 20 20 7d 65 6c 73 65  ;.    **   }else
1ddb0 7b 0a 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64  {.    **     r.d
1ddc0 65 66 61 75 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a  efault_rc = +1;.
1ddd0 20 20 20 20 2a 2a 20 20 20 7d 0a 20 20 20 20 2a      **   }.    *
1dde0 2f 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  /.    r.default_
1ddf0 72 63 20 3d 20 28 28 31 20 26 20 28 6f 63 20 2d  rc = ((1 & (oc -
1de00 20 4f 50 5f 53 65 65 6b 4c 54 29 29 20 3f 20 2d   OP_SeekLT)) ? -
1de10 31 20 3a 20 2b 31 29 3b 0a 20 20 20 20 61 73 73  1 : +1);.    ass
1de20 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b  ert( oc!=OP_Seek
1de30 47 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f  GT || r.default_
1de40 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73  rc==-1 );.    as
1de50 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65  sert( oc!=OP_See
1de60 6b 4c 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74  kLE || r.default
1de70 5f 72 63 3d 3d 2d 31 20 29 3b 0a 20 20 20 20 61  _rc==-1 );.    a
1de80 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65  ssert( oc!=OP_Se
1de90 65 6b 47 45 20 7c 7c 20 72 2e 64 65 66 61 75 6c  ekGE || r.defaul
1dea0 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 20 20 20 20  t_rc==+1 );.    
1deb0 61 73 73 65 72 74 28 20 6f 63 21 3d 4f 50 5f 53  assert( oc!=OP_S
1dec0 65 65 6b 4c 54 20 7c 7c 20 72 2e 64 65 66 61 75  eekLT || r.defau
1ded0 6c 74 5f 72 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20  lt_rc==+1 );..  
1dee0 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d 65 6d    r.aMem = &aMem
1def0 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 23 69 66 64 65  [pOp->p3];.#ifde
1df00 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
1df10 20 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72 28     { int i; for(
1df20 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64 3b  i=0; i<r.nField;
1df30 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d 65   i++) assert( me
1df40 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65 6d  mIsValid(&r.aMem
1df50 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69 66  [i]) ); }.#endif
1df60 0a 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28  .    ExpandBlob(
1df70 72 2e 61 4d 65 6d 29 3b 0a 20 20 20 20 72 63 20  r.aMem);.    rc 
1df80 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f  = sqlite3BtreeMo
1df90 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d  vetoUnpacked(pC-
1dfa0 3e 70 43 75 72 73 6f 72 2c 20 26 72 2c 20 30 2c  >pCursor, &r, 0,
1dfb0 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 69   0, &res);.    i
1dfc0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1dfd0 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61   ){.      goto a
1dfe0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1dff0 72 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  r;.    }.    pC-
1e000 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
1e010 30 3b 0a 20 20 7d 0a 20 20 70 43 2d 3e 64 65 66  0;.  }.  pC->def
1e020 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
1e030 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
1e040 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
1e050 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
1e060 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f 73  TEST.  sqlite3_s
1e070 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  earch_count++;.#
1e080 65 6e 64 69 66 0a 20 20 69 66 28 20 6f 63 3e 3d  endif.  if( oc>=
1e090 4f 50 5f 53 65 65 6b 47 45 20 29 7b 20 20 61 73  OP_SeekGE ){  as
1e0a0 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53 65 65  sert( oc==OP_See
1e0b0 6b 47 45 20 7c 7c 20 6f 63 3d 3d 4f 50 5f 53 65  kGE || oc==OP_Se
1e0c0 65 6b 47 54 20 29 3b 0a 20 20 20 20 69 66 28 20  ekGT );.    if( 
1e0d0 72 65 73 3c 30 20 7c 7c 20 28 72 65 73 3d 3d 30  res<0 || (res==0
1e0e0 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47   && oc==OP_SeekG
1e0f0 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65 73 20  T) ){.      res 
1e100 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  = 0;.      rc = 
1e110 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
1e120 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 26 72  (pC->pCursor, &r
1e130 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  es);.      if( r
1e140 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
1e150 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1e160 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 70 43  _error;.      pC
1e170 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d  ->rowidIsValid =
1e180 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1e190 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
1e1a0 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
1e1b0 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
1e1c0 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
1e1d0 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
1e1e0 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
1e1f0 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
1e200 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
1e210 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
1e220 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
1e230 72 65 76 69 6f 75 73 28 70 43 2d 3e 70 43 75 72  revious(pC->pCur
1e240 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
1e250 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
1e260 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  _OK ) goto abort
1e270 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1e280 20 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73       pC->rowidIs
1e290 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 20 20 7d  Valid = 0;.    }
1e2a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 72  else{.      /* r
1e2b0 65 73 20 6d 69 67 68 74 20 62 65 20 6e 65 67 61  es might be nega
1e2c0 74 69 76 65 20 62 65 63 61 75 73 65 20 74 68 65  tive because the
1e2d0 20 74 61 62 6c 65 20 69 73 20 65 6d 70 74 79 2e   table is empty.
1e2e0 20 20 43 68 65 63 6b 20 74 6f 0a 20 20 20 20 20    Check to.     
1e2f0 20 2a 2a 20 73 65 65 20 69 66 20 74 68 69 73 20   ** see if this 
1e300 69 73 20 74 68 65 20 63 61 73 65 2e 0a 20 20 20  is the case..   
1e310 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 65 73 20     */.      res 
1e320 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 45 6f  = sqlite3BtreeEo
1e330 66 28 70 43 2d 3e 70 43 75 72 73 6f 72 29 3b 0a  f(pC->pCursor);.
1e340 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61 73 73 65      }.  }.  asse
1e350 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b  rt( pOp->p2>0 );
1e360 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
1e370 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
1e380 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
1e390 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
1e3a0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
1e3b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b  ./* Opcode: Seek
1e3c0 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
1e3d0 53 79 6e 6f 70 73 69 73 3a 20 20 69 6e 74 6b 65  Synopsis:  intke
1e3e0 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 31  y=r[P2].**.** P1
1e3f0 20 69 73 20 61 6e 20 6f 70 65 6e 20 74 61 62 6c   is an open tabl
1e400 65 20 63 75 72 73 6f 72 20 61 6e 64 20 50 32 20  e cursor and P2 
1e410 69 73 20 61 20 72 6f 77 69 64 20 69 6e 74 65 67  is a rowid integ
1e420 65 72 2e 20 20 41 72 72 61 6e 67 65 0a 2a 2a 20  er.  Arrange.** 
1e430 66 6f 72 20 50 31 20 74 6f 20 6d 6f 76 65 20 73  for P1 to move s
1e440 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
1e450 20 74 6f 20 74 68 65 20 72 6f 77 69 64 20 67 69   to the rowid gi
1e460 76 65 6e 20 62 79 20 50 32 2e 0a 2a 2a 0a 2a 2a  ven by P2..**.**
1e470 20 54 68 69 73 20 69 73 20 61 63 74 75 61 6c 6c   This is actuall
1e480 79 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65  y a deferred see
1e490 6b 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75  k.  Nothing actu
1e4a0 61 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74  ally happens unt
1e4b0 69 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72  il.** the cursor
1e4c0 20 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64   is used to read
1e4d0 20 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74   a record.  That
1e4e0 20 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64   way, if no read
1e4f0 73 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75  s.** occur, no u
1e500 6e 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68  nnecessary I/O h
1e510 61 70 70 65 6e 73 2e 0a 2a 2f 0a 63 61 73 65 20  appens..*/.case 
1e520 4f 50 5f 53 65 65 6b 3a 20 7b 20 20 20 20 2f 2a  OP_Seek: {    /*
1e530 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
1e540 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73 73  rsor *pC;..  ass
1e550 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1e560 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1e570 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1e580 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1e590 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
1e5a0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1e5b0 70 43 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29  pC->pCursor!=0 )
1e5c0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e5d0 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 70 43 2d  isTable );.  pC-
1e5e0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20  >nullRow = 0;.  
1e5f0 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn2 = &aMem[pOp
1e600 2d 3e 70 32 5d 3b 0a 20 20 70 43 2d 3e 6d 6f 76  ->p2];.  pC->mov
1e610 65 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69  etoTarget = sqli
1e620 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
1e630 70 49 6e 32 29 3b 0a 20 20 70 43 2d 3e 72 6f 77  pIn2);.  pC->row
1e640 69 64 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20  idIsValid = 0;. 
1e650 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
1e660 65 74 6f 20 3d 20 31 3b 0a 20 20 62 72 65 61 6b  eto = 1;.  break
1e670 3b 0a 7d 0a 20 20 0a 0a 2f 2a 20 4f 70 63 6f 64  ;.}.  ../* Opcod
1e680 65 3a 20 46 6f 75 6e 64 20 50 31 20 50 32 20 50  e: Found P1 P2 P
1e690 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e6a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e6b0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d 30 20  .**.** If P4==0 
1e6c0 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e6d0 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20 63 6f   holds a blob co
1e6e0 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d 61 6b  nstructed by Mak
1e6f0 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a 2a 20  eRecord.  If.** 
1e700 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69 73 74  P4>0 then regist
1e710 65 72 20 50 33 20 69 73 20 74 68 65 20 66 69 72  er P3 is the fir
1e720 73 74 20 6f 66 20 50 34 20 72 65 67 69 73 74 65  st of P4 registe
1e730 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61 6e 20  rs that form an 
1e740 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65 63 6f  unpacked.** reco
1e750 72 64 2e 0a 2a 2a 0a 2a 2a 20 43 75 72 73 6f 72  rd..**.** Cursor
1e760 20 50 31 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64   P1 is on an ind
1e770 65 78 20 62 74 72 65 65 2e 20 20 49 66 20 74 68  ex btree.  If th
1e780 65 20 72 65 63 6f 72 64 20 69 64 65 6e 74 69 66  e record identif
1e790 69 65 64 20 62 79 20 50 33 20 61 6e 64 20 50 34  ied by P3 and P4
1e7a0 0a 2a 2a 20 69 73 20 61 20 70 72 65 66 69 78 20  .** is a prefix 
1e7b0 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69 6e 20  of any entry in 
1e7c0 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70 20 69  P1 then a jump i
1e7d0 73 20 6d 61 64 65 20 74 6f 20 50 32 20 61 6e 64  s made to P2 and
1e7e0 0a 2a 2a 20 50 31 20 69 73 20 6c 65 66 74 20 70  .** P1 is left p
1e7f0 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20 6d  ointing at the m
1e800 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1e810 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
1e820 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
1e830 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1e840 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1e850 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
1e860 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1e870 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1e880 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1e890 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
1e8a0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
1e8b0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
1e8c0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1e8d0 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  lso: NotFound, N
1e8e0 6f 43 6f 6e 66 6c 69 63 74 2c 20 4e 6f 74 45 78  oConflict, NotEx
1e8f0 69 73 74 73 2e 20 53 65 65 6b 47 65 0a 2a 2f 0a  ists. SeekGe.*/.
1e900 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 46 6f  /* Opcode: NotFo
1e910 75 6e 64 20 50 31 20 50 32 20 50 33 20 50 34 20  und P1 P2 P3 P4 
1e920 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
1e930 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
1e940 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
1e950 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
1e960 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
1e970 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
1e980 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
1e990 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
1e9a0 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
1e9b0 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
1e9c0 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
1e9d0 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
1e9e0 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
1e9f0 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
1ea00 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
1ea10 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
1ea20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
1ea30 69 73 20 6e 6f 74 20 74 68 65 20 70 72 65 66 69  is not the prefi
1ea40 78 20 6f 66 20 61 6e 79 20 65 6e 74 72 79 20 69  x of any entry i
1ea50 6e 20 50 31 20 74 68 65 6e 20 61 20 6a 75 6d 70  n P1 then a jump
1ea60 20 69 73 20 6d 61 64 65 20 74 6f 20 50 32 2e 20   is made to P2. 
1ea70 20 49 66 20 50 31 20 0a 2a 2a 20 64 6f 65 73 20   If P1 .** does 
1ea80 63 6f 6e 74 61 69 6e 20 61 6e 20 65 6e 74 72 79  contain an entry
1ea90 20 77 68 6f 73 65 20 70 72 65 66 69 78 20 6d 61   whose prefix ma
1eaa0 74 63 68 65 73 20 74 68 65 20 50 33 2f 50 34 20  tches the P3/P4 
1eab0 72 65 63 6f 72 64 20 74 68 65 6e 20 63 6f 6e 74  record then cont
1eac0 72 6f 6c 0a 2a 2a 20 66 61 6c 6c 73 20 74 68 72  rol.** falls thr
1ead0 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74  ough to the next
1eae0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 6e 64   instruction and
1eaf0 20 50 31 20 69 73 20 6c 65 66 74 20 70 6f 69 6e   P1 is left poin
1eb00 74 69 6e 67 20 61 74 20 74 68 65 0a 2a 2a 20 6d  ting at the.** m
1eb10 61 74 63 68 69 6e 67 20 65 6e 74 72 79 2e 0a 2a  atching entry..*
1eb20 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
1eb30 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
1eb40 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
1eb50 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
1eb60 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
1eb70 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
1eb80 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
1eb90 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
1eba0 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
1ebb0 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
1ebc0 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
1ebd0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
1ebe0 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 45  lso: Found, NotE
1ebf0 78 69 73 74 73 2c 20 4e 6f 43 6f 6e 66 6c 69 63  xists, NoConflic
1ec00 74 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  t.*/./* Opcode: 
1ec10 4e 6f 43 6f 6e 66 6c 69 63 74 20 50 31 20 50 32  NoConflict P1 P2
1ec20 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1ec30 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1ec40 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 3d 3d  4].**.** If P4==
1ec50 30 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20  0 then register 
1ec60 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f 62 20  P3 holds a blob 
1ec70 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79 20 4d  constructed by M
1ec80 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66 0a 2a  akeRecord.  If.*
1ec90 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65 67 69  * P4>0 then regi
1eca0 73 74 65 72 20 50 33 20 69 73 20 74 68 65 20 66  ster P3 is the f
1ecb0 69 72 73 74 20 6f 66 20 50 34 20 72 65 67 69 73  irst of P4 regis
1ecc0 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d 20 61  ters that form a
1ecd0 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 72 65  n unpacked.** re
1ece0 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43 75 72  cord..** .** Cur
1ecf0 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61 6e 20  sor P1 is on an 
1ed00 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20 49 66  index btree.  If
1ed10 20 74 68 65 20 72 65 63 6f 72 64 20 69 64 65 6e   the record iden
1ed20 74 69 66 69 65 64 20 62 79 20 50 33 20 61 6e 64  tified by P3 and
1ed30 20 50 34 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P4.** contains 
1ed40 61 6e 79 20 4e 55 4c 4c 20 76 61 6c 75 65 2c 20  any NULL value, 
1ed50 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79  jump immediately
1ed60 20 74 6f 20 50 32 2e 20 20 49 66 20 61 6c 6c 20   to P2.  If all 
1ed70 74 65 72 6d 73 20 6f 66 20 74 68 65 0a 2a 2a 20  terms of the.** 
1ed80 72 65 63 6f 72 64 20 61 72 65 20 6e 6f 74 2d 4e  record are not-N
1ed90 55 4c 4c 20 74 68 65 6e 20 61 20 63 68 65 63 6b  ULL then a check
1eda0 20 69 73 20 64 6f 6e 65 20 74 6f 20 64 65 74 65   is done to dete
1edb0 72 6d 69 6e 65 20 69 66 20 61 6e 79 20 72 6f 77  rmine if any row
1edc0 20 69 6e 20 74 68 65 0a 2a 2a 20 50 31 20 69 6e   in the.** P1 in
1edd0 64 65 78 20 62 74 72 65 65 20 68 61 73 20 61 20  dex btree has a 
1ede0 6d 61 74 63 68 69 6e 67 20 6b 65 79 20 70 72 65  matching key pre
1edf0 66 69 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  fix.  If there a
1ee00 72 65 20 6e 6f 20 6d 61 74 63 68 65 73 2c 20 6a  re no matches, j
1ee10 75 6d 70 0a 2a 2a 20 69 6d 6d 65 64 69 61 74 65  ump.** immediate
1ee20 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 74 68  ly to P2.  If th
1ee30 65 72 65 20 69 73 20 61 20 6d 61 74 63 68 2c 20  ere is a match, 
1ee40 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 61 6e 64  fall through and
1ee50 20 6c 65 61 76 65 20 74 68 65 20 50 31 0a 2a 2a   leave the P1.**
1ee60 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e 67   cursor pointing
1ee70 20 74 6f 20 74 68 65 20 6d 61 74 63 68 69 6e 67   to the matching
1ee80 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73   row..**.** This
1ee90 20 6f 70 63 6f 64 65 20 69 73 20 73 69 6d 69 6c   opcode is simil
1eea0 61 72 20 74 6f 20 4f 50 5f 4e 6f 74 46 6f 75 6e  ar to OP_NotFoun
1eeb0 64 20 77 69 74 68 20 74 68 65 20 65 78 63 65 70  d with the excep
1eec0 74 69 6f 6e 73 20 74 68 61 74 20 74 68 65 0a 2a  tions that the.*
1eed0 2a 20 62 72 61 6e 63 68 20 69 73 20 61 6c 77 61  * branch is alwa
1eee0 79 73 20 74 61 6b 65 6e 20 69 66 20 61 6e 79 20  ys taken if any 
1eef0 70 61 72 74 20 6f 66 20 74 68 65 20 73 65 61 72  part of the sear
1ef00 63 68 20 6b 65 79 20 69 6e 70 75 74 20 69 73 20  ch key input is 
1ef10 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  NULL..**.** This
1ef20 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65   operation leave
1ef30 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
1ef40 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
1ef50 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20 61 64   cannot be.** ad
1ef60 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68 65 72  vanced in either
1ef70 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
1ef80 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1ef90 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 0a 2a   Next and Prev.*
1efa0 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e 6f 74  * opcodes do not
1efb0 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68 69 73   work after this
1efc0 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a   operation..**.*
1efd0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f 74 46  * See also: NotF
1efe0 6f 75 6e 64 2c 20 46 6f 75 6e 64 2c 20 4e 6f 74  ound, Found, Not
1eff0 45 78 69 73 74 73 0a 2a 2f 0a 63 61 73 65 20 4f  Exists.*/.case O
1f000 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 3a 20 20 20  P_NoConflict:   
1f010 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f020 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 46 6f 75  /.case OP_NotFou
1f030 6e 64 3a 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  nd:       /* jum
1f040 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f  p, in3 */.case O
1f050 50 5f 46 6f 75 6e 64 3a 20 7b 20 20 20 20 20 20  P_Found: {      
1f060 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
1f070 2f 0a 20 20 69 6e 74 20 61 6c 72 65 61 64 79 45  /.  int alreadyE
1f080 78 69 73 74 73 3b 0a 20 20 69 6e 74 20 69 69 3b  xists;.  int ii;
1f090 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1f0a0 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20  C;.  int res;.  
1f0b0 63 68 61 72 20 2a 70 46 72 65 65 3b 0a 20 20 55  char *pFree;.  U
1f0c0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 2a 70  npackedRecord *p
1f0d0 49 64 78 4b 65 79 3b 0a 20 20 55 6e 70 61 63 6b  IdxKey;.  Unpack
1f0e0 65 64 52 65 63 6f 72 64 20 72 3b 0a 20 20 63 68  edRecord r;.  ch
1f0f0 61 72 20 61 54 65 6d 70 52 65 63 5b 52 4f 55 4e  ar aTempRec[ROUN
1f100 44 38 28 73 69 7a 65 6f 66 28 55 6e 70 61 63 6b  D8(sizeof(Unpack
1f110 65 64 52 65 63 6f 72 64 29 29 20 2b 20 73 69 7a  edRecord)) + siz
1f120 65 6f 66 28 4d 65 6d 29 2a 34 20 2b 20 37 5d 3b  eof(Mem)*4 + 7];
1f130 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
1f140 54 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e  TEST.  if( pOp->
1f150 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e  opcode!=OP_NoCon
1f160 66 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f  flict ) sqlite3_
1f170 66 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23  found_count++;.#
1f180 65 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28  endif..  assert(
1f190 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
1f1a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
1f1b0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
1f1c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49  Op->p4type==P4_I
1f1d0 4e 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70  NT32 );.  pC = p
1f1e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1f1f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
1f200 30 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  0 );.#ifdef SQLI
1f210 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73  TE_DEBUG.  pC->s
1f220 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65 6e 64 69  eekOp = 0;.#endi
1f230 66 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  f.  pIn3 = &aMem
1f240 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
1f250 65 72 74 28 20 70 43 2d 3e 70 43 75 72 73 6f 72  ert( pC->pCursor
1f260 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
1f270 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
1f280 29 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 20  );.  pFree = 0; 
1f290 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
1f2a0 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 75   Only used to su
1f2b0 70 70 72 65 73 73 20 61 20 63 6f 6d 70 69 6c 65  ppress a compile
1f2c0 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
1f2d0 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30 20  if( pOp->p4.i>0 
1f2e0 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e 66  ){.    r.pKeyInf
1f2f0 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66 6f  o = pC->pKeyInfo
1f300 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20 3d  ;.    r.nField =
1f310 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
1f320 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70 49  .    r.aMem = pI
1f330 6e 33 3b 0a 20 20 20 20 66 6f 72 28 69 69 3d 30  n3;.    for(ii=0
1f340 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
1f350 69 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65  i++){.      asse
1f360 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26  rt( memIsValid(&
1f370 72 2e 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20  r.aMem[ii]) );. 
1f380 20 20 20 20 20 45 78 70 61 6e 64 42 6c 6f 62 28       ExpandBlob(
1f390 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b 0a 23 69  &r.aMem[ii]);.#i
1f3a0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
1f3b0 47 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  G.      if( ii )
1f3c0 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
1f3d0 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
1f3e0 4d 65 6d 5b 69 69 5d 29 3b 0a 23 65 6e 64 69 66  Mem[ii]);.#endif
1f3f0 0a 20 20 20 20 7d 0a 20 20 20 20 70 49 64 78 4b  .    }.    pIdxK
1f400 65 79 20 3d 20 26 72 3b 0a 20 20 7d 65 6c 73 65  ey = &r;.  }else
1f410 7b 0a 20 20 20 20 70 49 64 78 4b 65 79 20 3d 20  {.    pIdxKey = 
1f420 73 71 6c 69 74 65 33 56 64 62 65 41 6c 6c 6f 63  sqlite3VdbeAlloc
1f430 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 28 0a  UnpackedRecord(.
1f440 20 20 20 20 20 20 20 20 70 43 2d 3e 70 4b 65 79          pC->pKey
1f450 49 6e 66 6f 2c 20 61 54 65 6d 70 52 65 63 2c 20  Info, aTempRec, 
1f460 73 69 7a 65 6f 66 28 61 54 65 6d 70 52 65 63 29  sizeof(aTempRec)
1f470 2c 20 26 70 46 72 65 65 0a 20 20 20 20 29 3b 20  , &pFree.    ); 
1f480 0a 20 20 20 20 69 66 28 20 70 49 64 78 4b 65 79  .    if( pIdxKey
1f490 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65  ==0 ) goto no_me
1f4a0 6d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  m;.    assert( p
1f4b0 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1f4c0 5f 42 6c 6f 62 20 29 3b 0a 20 20 20 20 61 73 73  _Blob );.    ass
1f4d0 65 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67  ert( (pIn3->flag
1f4e0 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d 3d 30  s & MEM_Zero)==0
1f4f0 20 29 3b 20 20 2f 2a 20 7a 65 72 6f 62 6c 6f 62   );  /* zeroblob
1f500 73 20 61 6c 72 65 61 64 79 20 65 78 70 61 6e 64  s already expand
1f510 65 64 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  ed */.    sqlite
1f520 33 56 64 62 65 52 65 63 6f 72 64 55 6e 70 61 63  3VdbeRecordUnpac
1f530 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20  k(pC->pKeyInfo, 
1f540 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33 2d 3e 7a  pIn3->n, pIn3->z
1f550 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20 20 7d 0a  , pIdxKey);.  }.
1f560 20 20 70 49 64 78 4b 65 79 2d 3e 64 65 66 61 75    pIdxKey->defau
1f570 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 69 66 28  lt_rc = 0;.  if(
1f580 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
1f590 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29 7b 0a 20  _NoConflict ){. 
1f5a0 20 20 20 2f 2a 20 46 6f 72 20 74 68 65 20 4f 50     /* For the OP
1f5b0 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f 70 63 6f  _NoConflict opco
1f5c0 64 65 2c 20 74 61 6b 65 20 74 68 65 20 6a 75 6d  de, take the jum
1f5d0 70 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 0a  p if any of the.
1f5e0 20 20 20 20 2a 2a 20 69 6e 70 75 74 20 66 69 65      ** input fie
1f5f0 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c 20 73 69  lds are NULL, si
1f600 6e 63 65 20 61 6e 79 20 6b 65 79 20 77 69 74 68  nce any key with
1f610 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20 6e 6f 74   a NULL will not
1f620 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c 69 63 74  .    ** conflict
1f630 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69 69 3d 30   */.    for(ii=0
1f640 3b 20 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69  ; ii<r.nField; i
1f650 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
1f660 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67 73  r.aMem[ii].flags
1f670 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
1f680 20 20 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d         pc = pOp-
1f690 3e 70 32 20 2d 20 31 3b 20 56 64 62 65 42 72 61  >p2 - 1; VdbeBra
1f6a0 6e 63 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20  nchTaken(1,2);. 
1f6b0 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
1f6c0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
1f6d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1f6e0 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
1f6f0 64 28 70 43 2d 3e 70 43 75 72 73 6f 72 2c 20 70  d(pC->pCursor, p
1f700 49 64 78 4b 65 79 2c 20 30 2c 20 30 2c 20 26 72  IdxKey, 0, 0, &r
1f710 65 73 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  es);.  if( pOp->
1f720 70 34 2e 69 3d 3d 30 20 29 7b 0a 20 20 20 20 73  p4.i==0 ){.    s
1f730 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
1f740 20 70 46 72 65 65 29 3b 0a 20 20 7d 0a 20 20 69   pFree);.  }.  i
1f750 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1f760 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20   ){.    break;. 
1f770 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73   }.  pC->seekRes
1f780 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61 6c 72  ult = res;.  alr
1f790 65 61 64 79 45 78 69 73 74 73 20 3d 20 28 72 65  eadyExists = (re
1f7a0 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  s==0);.  pC->nul
1f7b0 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61 64 79  lRow = 1-already
1f7c0 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e 64 65  Exists;.  pC->de
1f7d0 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30  ferredMoveto = 0
1f7e0 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
1f7f0 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
1f800 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  E;.  if( pOp->op
1f810 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29  code==OP_Found )
1f820 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
1f830 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45 78 69  Taken(alreadyExi
1f840 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69  sts!=0,2);.    i
1f850 66 28 20 61 6c 72 65 61 64 79 45 78 69 73 74 73  f( alreadyExists
1f860 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20   ) pc = pOp->p2 
1f870 2d 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  - 1;.  }else{.  
1f880 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1f890 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 3d  n(alreadyExists=
1f8a0 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 21  =0,2);.    if( !
1f8b0 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20  alreadyExists ) 
1f8c0 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31  pc = pOp->p2 - 1
1f8d0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
1f8e0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74  ../* Opcode: Not
1f8f0 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33 20  Exists P1 P2 P3 
1f900 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1f910 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
1f920 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
1f930 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
1f940 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
1f950 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
1f960 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
1f970 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e 74  ).  P3 is an int
1f980 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66 20  eger rowid.  If 
1f990 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P1 does not cont
1f9a0 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74  ain a record wit
1f9b0 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74 68  h.** rowid P3 th
1f9c0 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74  en jump immediat
1f9d0 65 6c 79 20 74 6f 20 50 32 2e 20 20 49 66 20 50  ely to P2.  If P
1f9e0 31 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e 20 61  1 does contain a
1f9f0 20 72 65 63 6f 72 64 0a 2a 2a 20 77 69 74 68 20   record.** with 
1fa00 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6c 65  rowid P3 then le
1fa10 61 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 70  ave the cursor p
1fa20 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61 74 20  ointing at that 
1fa30 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c 6c 0a  record and fall.
1fa40 2a 2a 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ** through to th
1fa50 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
1fa60 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  on..**.** The OP
1fa70 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
1fa80 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
1fa90 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
1faa0 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
1fab0 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
1fac0 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
1fad0 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  )..**.** This op
1fae0 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
1faf0 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
1fb00 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
1fb10 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a  t be advanced.**
1fb20 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
1fb30 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
1fb40 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
1fb50 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73  and Prev opcodes
1fb60 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72   will.** not wor
1fb70 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73  k following this
1fb80 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
1fb90 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1fba0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
1fbb0 6c 69 63 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lict.*/.case OP_
1fbc0 4e 6f 74 45 78 69 73 74 73 3a 20 7b 20 20 20 20  NotExists: {    
1fbd0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1fbe0 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
1fbf0 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
1fc00 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
1fc10 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
1fc20 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
1fc30 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65  pOp->p3];.  asse
1fc40 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20  rt( pIn3->flags 
1fc50 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 61  & MEM_Int );.  a
1fc60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
1fc70 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
1fc80 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
1fc90 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
1fca0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1fcb0 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20 53  C!=0 );.#ifdef S
1fcc0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1fcd0 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23 65  ->seekOp = 0;.#e
1fce0 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20 70  ndif.  assert( p
1fcf0 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20  C->isTable );.  
1fd00 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
1fd10 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
1fd20 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 70  .  pCrsr = pC->p
1fd30 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
1fd40 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
1fd50 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
1fd60 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
1fd70 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1fd80 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
1fd90 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
1fda0 2c 20 26 72 65 73 29 3b 0a 20 20 70 43 2d 3e 6c  , &res);.  pC->l
1fdb0 61 73 74 52 6f 77 69 64 20 3d 20 70 49 6e 33 2d  astRowid = pIn3-
1fdc0 3e 75 2e 69 3b 0a 20 20 70 43 2d 3e 72 6f 77 69  >u.i;.  pC->rowi
1fdd0 64 49 73 56 61 6c 69 64 20 3d 20 72 65 73 3d 3d  dIsValid = res==
1fde0 30 20 3f 31 3a 30 3b 0a 20 20 70 43 2d 3e 6e 75  0 ?1:0;.  pC->nu
1fdf0 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 70 43 2d  llRow = 0;.  pC-
1fe00 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
1fe10 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 70 43  ACHE_STALE;.  pC
1fe20 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
1fe30 20 3d 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e   = 0;.  VdbeBran
1fe40 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
1fe50 29 3b 0a 20 20 69 66 28 20 72 65 73 21 3d 30 20  );.  if( res!=0 
1fe60 29 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d  ){.    pc = pOp-
1fe70 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 61 73 73  >p2 - 1;.    ass
1fe80 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49 73  ert( pC->rowidIs
1fe90 56 61 6c 69 64 3d 3d 30 20 29 3b 0a 20 20 7d 0a  Valid==0 );.  }.
1fea0 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74    pC->seekResult
1feb0 20 3d 20 72 65 73 3b 0a 20 20 62 72 65 61 6b 3b   = res;.  break;
1fec0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
1fed0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
1fee0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
1fef0 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
1ff00 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
1ff10 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
1ff20 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
1ff30 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
1ff40 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
1ff50 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
1ff60 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
1ff70 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
1ff80 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
1ff90 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
1ffa0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
1ffb0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
1ffc0 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
1ffd0 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
1ffe0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
1fff0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 61 73  erelease */.  as
20000 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
20010 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
20020 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
20030 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
20040 2d 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 70 4f  ->p1]!=0 );.  pO
20050 75 74 2d 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43  ut->u.i = p->apC
20060 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71  sr[pOp->p1]->seq
20070 43 6f 75 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b  Count++;.  break
20080 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ;.}.../* Opcode:
20090 20 4e 65 77 52 6f 77 69 64 20 50 31 20 50 32 20   NewRowid P1 P2 
200a0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
200b0 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a  is: r[P2]=rowid.
200c0 2a 2a 0a 2a 2a 20 47 65 74 20 61 20 6e 65 77 20  **.** Get a new 
200d0 69 6e 74 65 67 65 72 20 72 65 63 6f 72 64 20 6e  integer record n
200e0 75 6d 62 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f  umber (a.k.a "ro
200f0 77 69 64 22 29 20 75 73 65 64 20 61 73 20 74 68  wid") used as th
20100 65 20 6b 65 79 20 74 6f 20 61 20 74 61 62 6c 65  e key to a table
20110 2e 0a 2a 2a 20 54 68 65 20 72 65 63 6f 72 64 20  ..** The record 
20120 6e 75 6d 62 65 72 20 69 73 20 6e 6f 74 20 70 72  number is not pr
20130 65 76 69 6f 75 73 6c 79 20 75 73 65 64 20 61 73  eviously used as
20140 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 64 61   a key in the da
20150 74 61 62 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20  tabase.** table 
20160 74 68 61 74 20 63 75 72 73 6f 72 20 50 31 20 70  that cursor P1 p
20170 6f 69 6e 74 73 20 74 6f 2e 20 20 54 68 65 20 6e  oints to.  The n
20180 65 77 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72  ew record number
20190 20 69 73 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77   is written.** w
201a0 72 69 74 74 65 6e 20 74 6f 20 72 65 67 69 73 74  ritten to regist
201b0 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  er P2..**.** If 
201c0 50 33 3e 30 20 74 68 65 6e 20 50 33 20 69 73 20  P3>0 then P3 is 
201d0 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
201e0 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
201f0 74 68 69 73 20 56 44 42 45 20 74 68 61 74 20 68  this VDBE that h
20200 6f 6c 64 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72  olds .** the lar
20210 67 65 73 74 20 70 72 65 76 69 6f 75 73 6c 79 20  gest previously 
20220 67 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64  generated record
20230 20 6e 75 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20   number. No new 
20240 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 73 20 61  record numbers a
20250 72 65 0a 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f  re.** allowed to
20260 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 74 68   be less than th
20270 69 73 20 76 61 6c 75 65 2e 20 57 68 65 6e 20 74  is value. When t
20280 68 69 73 20 76 61 6c 75 65 20 72 65 61 63 68 65  his value reache
20290 73 20 69 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a  s its maximum, .
202a0 2a 2a 20 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c  ** an SQLITE_FUL
202b0 4c 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  L error is gener
202c0 61 74 65 64 2e 20 54 68 65 20 50 33 20 72 65 67  ated. The P3 reg
202d0 69 73 74 65 72 20 69 73 20 75 70 64 61 74 65 64  ister is updated
202e0 20 77 69 74 68 20 74 68 65 20 27 0a 2a 2a 20 67   with the '.** g
202f0 65 6e 65 72 61 74 65 64 20 72 65 63 6f 72 64 20  enerated record 
20300 6e 75 6d 62 65 72 2e 20 54 68 69 73 20 50 33 20  number. This P3 
20310 6d 65 63 68 61 6e 69 73 6d 20 69 73 20 75 73 65  mechanism is use
20320 64 20 74 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d  d to help implem
20330 65 6e 74 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49  ent the.** AUTOI
20340 4e 43 52 45 4d 45 4e 54 20 66 65 61 74 75 72 65  NCREMENT feature
20350 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77  ..*/.case OP_New
20360 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20  Rowid: {        
20370 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65     /* out2-prere
20380 6c 65 61 73 65 20 2a 2f 0a 20 20 69 36 34 20 76  lease */.  i64 v
20390 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
203a0 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72 6f 77    /* The new row
203b0 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  id */.  VdbeCurs
203c0 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20 20 2f  or *pC;        /
203d0 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61 62 6c  * Cursor of tabl
203e0 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e 65 77  e to get the new
203f0 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e 74 20   rowid */.  int 
20400 72 65 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  res;            
20410 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
20420 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c  an sqlite3BtreeL
20430 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74 20 63  ast() */.  int c
20440 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nt;             
20450 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74 6f 20    /* Counter to 
20460 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62 65 72  limit the number
20470 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a 2f 0a   of searches */.
20480 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
20490 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
204a0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c 61 72  ster holding lar
204b0 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72 20 41  gest rowid for A
204c0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a  UTOINCREMENT */.
204d0 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46 72    VdbeFrame *pFr
204e0 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f 6f 74  ame;     /* Root
204f0 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45 20 2a   frame of VDBE *
20500 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20 72 65  /..  v = 0;.  re
20510 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
20520 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
20530 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
20540 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
20550 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
20560 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
20570 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28 70 43  ;.  if( NEVER(pC
20580 2d 3e 70 43 75 72 73 6f 72 3d 3d 30 29 20 29 7b  ->pCursor==0) ){
20590 0a 20 20 20 20 2f 2a 20 54 68 65 20 7a 65 72 6f  .    /* The zero
205a0 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
205b0 61 62 6f 76 65 20 69 73 20 61 6c 6c 20 74 68 61  above is all tha
205c0 74 20 69 73 20 6e 65 65 64 65 64 20 2a 2f 0a 20  t is needed */. 
205d0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 54   }else{.    /* T
205e0 68 65 20 6e 65 78 74 20 72 6f 77 69 64 20 6f 72  he next rowid or
205f0 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28   record number (
20600 64 69 66 66 65 72 65 6e 74 20 74 65 72 6d 73 20  different terms 
20610 66 6f 72 20 74 68 65 20 73 61 6d 65 0a 20 20 20  for the same.   
20620 20 2a 2a 20 74 68 69 6e 67 29 20 69 73 20 6f 62   ** thing) is ob
20630 74 61 69 6e 65 64 20 69 6e 20 61 20 74 77 6f 2d  tained in a two-
20640 73 74 65 70 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  step algorithm..
20650 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 46 69      **.    ** Fi
20660 72 73 74 20 77 65 20 61 74 74 65 6d 70 74 20 74  rst we attempt t
20670 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 72 67 65  o find the large
20680 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69  st existing rowi
20690 64 20 61 6e 64 20 61 64 64 20 6f 6e 65 0a 20 20  d and add one.  
206a0 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e 20 20 42    ** to that.  B
206b0 75 74 20 69 66 20 74 68 65 20 6c 61 72 67 65 73  ut if the larges
206c0 74 20 65 78 69 73 74 69 6e 67 20 72 6f 77 69 64  t existing rowid
206d0 20 69 73 20 61 6c 72 65 61 64 79 20 74 68 65 20   is already the 
206e0 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a 2a 20 70  maximum.    ** p
206f0 6f 73 69 74 69 76 65 20 69 6e 74 65 67 65 72 2c  ositive integer,
20700 20 77 65 20 68 61 76 65 20 74 6f 20 66 61 6c 6c   we have to fall
20710 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
20720 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a 20 70 72  second.    ** pr
20730 6f 62 61 62 69 6c 69 73 74 69 63 20 61 6c 67 6f  obabilistic algo
20740 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a 20 20 20  rithm.    **.   
20750 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64 20 61   ** The second a
20760 6c 67 6f 72 69 74 68 6d 20 69 73 20 74 6f 20 73  lgorithm is to s
20770 65 6c 65 63 74 20 61 20 72 6f 77 69 64 20 61 74  elect a rowid at
20780 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73 65 65 20   random and see 
20790 69 66 0a 20 20 20 20 2a 2a 20 69 74 20 61 6c 72  if.    ** it alr
207a0 65 61 64 79 20 65 78 69 73 74 73 20 69 6e 20 74  eady exists in t
207b0 68 65 20 74 61 62 6c 65 2e 20 20 49 66 20 69 74  he table.  If it
207c0 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2c   does not exist,
207d0 20 77 65 20 68 61 76 65 0a 20 20 20 20 2a 2a 20   we have.    ** 
207e0 73 75 63 63 65 65 64 65 64 2e 20 20 49 66 20 74  succeeded.  If t
207f0 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20  he random rowid 
20800 64 6f 65 73 20 65 78 69 73 74 2c 20 77 65 20 73  does exist, we s
20810 65 6c 65 63 74 20 61 20 6e 65 77 20 6f 6e 65 0a  elect a new one.
20820 20 20 20 20 2a 2a 20 61 6e 64 20 74 72 79 20 61      ** and try a
20830 67 61 69 6e 2c 20 75 70 20 74 6f 20 31 30 30 20  gain, up to 100 
20840 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f 0a 20 20  times..    */.  
20850 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
20860 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66 64 65 66  Table );..#ifdef
20870 20 53 51 4c 49 54 45 5f 33 32 42 49 54 5f 52 4f   SQLITE_32BIT_RO
20880 57 49 44 0a 23 20 20 20 64 65 66 69 6e 65 20 4d  WID.#   define M
20890 41 58 5f 52 4f 57 49 44 20 30 78 37 66 66 66 66  AX_ROWID 0x7ffff
208a0 66 66 66 0a 23 65 6c 73 65 0a 20 20 20 20 2f 2a  fff.#else.    /*
208b0 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73 20   Some compilers 
208c0 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 63  complain about c
208d0 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74 68 65 20  onstants of the 
208e0 66 6f 72 6d 20 30 78 37 66 66 66 66 66 66 66 66  form 0x7ffffffff
208f0 66 66 66 66 66 66 66 2e 0a 20 20 20 20 2a 2a 20  fffffff..    ** 
20900 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61 69 6e 20  Others complain 
20910 61 62 6f 75 74 20 30 78 37 66 66 66 66 66 66 66  about 0x7fffffff
20920 66 66 66 66 66 66 66 66 66 4c 4c 2e 20 20 54 68  fffffffffLL.  Th
20930 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
20940 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a 2a 20 74  o seems.    ** t
20950 6f 20 70 72 6f 76 69 64 65 20 74 68 65 20 63 6f  o provide the co
20960 6e 73 74 61 6e 74 20 77 68 69 6c 65 20 6d 61 6b  nstant while mak
20970 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72  ing all compiler
20980 73 20 68 61 70 70 79 2e 0a 20 20 20 20 2a 2f 0a  s happy..    */.
20990 23 20 20 20 64 65 66 69 6e 65 20 4d 41 58 5f 52  #   define MAX_R
209a0 4f 57 49 44 20 20 28 69 36 34 29 28 20 28 28 28  OWID  (i64)( (((
209b0 75 36 34 29 30 78 37 66 66 66 66 66 66 66 29 3c  u64)0x7fffffff)<
209c0 3c 33 32 29 20 7c 20 28 75 36 34 29 30 78 66 66  <32) | (u64)0xff
209d0 66 66 66 66 66 66 20 29 0a 23 65 6e 64 69 66 0a  ffffff ).#endif.
209e0 0a 20 20 20 20 69 66 28 20 21 70 43 2d 3e 75 73  .    if( !pC->us
209f0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a  eRandomRowid ){.
20a00 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
20a10 65 33 42 74 72 65 65 4c 61 73 74 28 70 43 2d 3e  e3BtreeLast(pC->
20a20 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20a30 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20a40 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
20a50 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20a60 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20a70 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72 65    }.      if( re
20a80 73 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d  s ){.        v =
20a90 20 31 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d   1;   /* IMP: R-
20aa0 36 31 39 31 34 2d 34 38 30 37 34 20 2a 2f 0a 20  61914-48074 */. 
20ab0 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
20ac0 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
20ad0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
20ae0 56 61 6c 69 64 28 70 43 2d 3e 70 43 75 72 73 6f  Valid(pC->pCurso
20af0 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 72 63  r) );.        rc
20b00 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4b   = sqlite3BtreeK
20b10 65 79 53 69 7a 65 28 70 43 2d 3e 70 43 75 72 73  eySize(pC->pCurs
20b20 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20 20 20 20  or, &v);.       
20b30 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
20b40 49 54 45 5f 4f 4b 20 29 3b 20 20 20 2f 2a 20 43  ITE_OK );   /* C
20b50 61 6e 6e 6f 74 20 66 61 69 6c 20 66 6f 6c 6c 6f  annot fail follo
20b60 77 69 6e 67 20 42 74 72 65 65 4c 61 73 74 28 29  wing BtreeLast()
20b70 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
20b80 76 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a  v>=MAX_ROWID ){.
20b90 20 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73            pC->us
20ba0 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31  eRandomRowid = 1
20bb0 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
20bc0 0a 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20  .          v++; 
20bd0 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33    /* IMP: R-2953
20be0 38 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20  8-34987 */.     
20bf0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
20c00 20 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   }..#ifndef SQLI
20c10 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
20c20 45 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f  EMENT.    if( pO
20c30 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f  p->p3 ){.      /
20c40 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
20c50 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
20c60 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
20c70 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
20c80 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  3>0 );.      if(
20c90 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
20ca0 20 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65        for(pFrame
20cb0 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61  =p->pFrame; pFra
20cc0 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72  me->pParent; pFr
20cd0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
20ce0 65 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a  ent);.        /*
20cf0 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
20d00 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
20d10 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
20d20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
20d30 70 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d  p3<=pFrame->nMem
20d40 20 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d   );.        pMem
20d50 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d   = &pFrame->aMem
20d60 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20  [pOp->p3];.     
20d70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
20d80 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50  /* Assert that P
20d90 33 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d  3 is a valid mem
20da0 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20  ory cell. */.   
20db0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
20dc0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p3<=(p->nMem-p
20dd0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
20de0 20 20 20 20 20 20 70 4d 65 6d 20 3d 20 26 61 4d        pMem = &aM
20df0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  em[pOp->p3];.   
20e00 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43       memAboutToC
20e10 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d 29 3b 0a  hange(p, pMem);.
20e20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
20e30 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
20e40 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20 20 20 20  (pMem) );..     
20e50 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
20e60 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d 29 3b 0a  pOp->p3, pMem);.
20e70 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
20e80 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
20e90 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61 73 73 65  Mem);.      asse
20ea0 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73  rt( (pMem->flags
20eb0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
20ec0 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29 20 68 6f  ;  /* mem(P3) ho
20ed0 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 2a  lds an integer *
20ee0 2f 0a 20 20 20 20 20 20 69 66 28 20 70 4d 65 6d  /.      if( pMem
20ef0 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f 57 49 44  ->u.i==MAX_ROWID
20f00 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f   || pC->useRando
20f10 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20  mRowid ){.      
20f20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 46 55    rc = SQLITE_FU
20f30 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d  LL;   /* IMP: R-
20f40 31 32 32 37 35 2d 36 31 33 33 38 20 2a 2f 0a 20  12275-61338 */. 
20f50 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
20f60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
20f70 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
20f80 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69 2b 31 20  ( v<pMem->u.i+1 
20f90 29 7b 0a 20 20 20 20 20 20 20 20 76 20 3d 20 70  ){.        v = p
20fa0 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b 0a 20 20  Mem->u.i + 1;.  
20fb0 20 20 20 20 7d 0a 20 20 20 20 20 20 70 4d 65 6d      }.      pMem
20fc0 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 20 20 7d  ->u.i = v;.    }
20fd0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20  .#endif.    if( 
20fe0 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77  pC->useRandomRow
20ff0 69 64 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  id ){.      /* I
21000 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46  MPLEMENTATION-OF
21010 3a 20 52 2d 30 37 36 37 37 2d 34 31 38 38 31 20  : R-07677-41881 
21020 49 66 20 74 68 65 20 6c 61 72 67 65 73 74 20 52  If the largest R
21030 4f 57 49 44 20 69 73 20 65 71 75 61 6c 20 74 6f  OWID is equal to
21040 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20 6c 61   the.      ** la
21050 72 67 65 73 74 20 70 6f 73 73 69 62 6c 65 20 69  rgest possible i
21060 6e 74 65 67 65 72 20 28 39 32 32 33 33 37 32 30  nteger (92233720
21070 33 36 38 35 34 37 37 35 38 30 37 29 20 74 68 65  36854775807) the
21080 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 20  n the database. 
21090 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e 65 20 73       ** engine s
210a0 74 61 72 74 73 20 70 69 63 6b 69 6e 67 20 70 6f  tarts picking po
210b0 73 69 74 69 76 65 20 63 61 6e 64 69 64 61 74 65  sitive candidate
210c0 20 52 4f 57 49 44 73 20 61 74 20 72 61 6e 64 6f   ROWIDs at rando
210d0 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20 20 2a 2a  m until.      **
210e0 20 69 74 20 66 69 6e 64 73 20 6f 6e 65 20 74 68   it finds one th
210f0 61 74 20 69 73 20 6e 6f 74 20 70 72 65 76 69 6f  at is not previo
21100 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f 0a 20 20  usly used. */.  
21110 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
21120 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a 20 57 65  >p3==0 );  /* We
21130 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e 20 72 61   cannot be in ra
21140 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f 64 65 20  ndom rowid mode 
21150 69 66 20 74 68 69 73 20 69 73 0a 20 20 20 20 20  if this is.     
21160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21170 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 20 41 55          ** an AU
21180 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74 61 62 6c  TOINCREMENT tabl
21190 65 2e 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 6f  e. */.      /* o
211a0 6e 20 74 68 65 20 66 69 72 73 74 20 61 74 74 65  n the first atte
211b0 6d 70 74 2c 20 73 69 6d 70 6c 79 20 64 6f 20 6f  mpt, simply do o
211c0 6e 65 20 6d 6f 72 65 20 74 68 61 6e 20 70 72 65  ne more than pre
211d0 76 69 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 76  vious */.      v
211e0 20 3d 20 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20   = lastRowid;.  
211f0 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52 4f      v &= (MAX_RO
21200 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65 6e 73 75  WID>>1); /* ensu
21210 72 65 20 64 6f 65 73 6e 27 74 20 67 6f 20 6e 65  re doesn't go ne
21220 67 61 74 69 76 65 20 2a 2f 0a 20 20 20 20 20 20  gative */.      
21230 76 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e  v++; /* ensure n
21240 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20  on-zero */.     
21250 20 63 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20   cnt = 0;.      
21260 77 68 69 6c 65 28 20 20 20 28 28 72 63 20 3d 20  while(   ((rc = 
21270 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
21280 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 70  toUnpacked(pC->p
21290 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29  Cursor, 0, (u64)
212a0 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  v,.             
212b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
212d0 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d 3d 53      0, &res))==S
212e0 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20 20 20  QLITE_OK).      
212f0 20 20 20 20 20 20 26 26 20 28 72 65 73 3d 3d 30        && (res==0
21300 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
21310 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 7b 0a 20   (++cnt<100)){. 
21320 20 20 20 20 20 20 20 2f 2a 20 63 6f 6c 6c 69 73         /* collis
21330 69 6f 6e 20 2d 20 74 72 79 20 61 6e 6f 74 68 65  ion - try anothe
21340 72 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 2a  r random rowid *
21350 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  /.        sqlite
21360 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
21370 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
21380 20 20 20 20 20 69 66 28 20 63 6e 74 3c 35 20 29       if( cnt<5 )
21390 7b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74  {.          /* t
213a0 72 79 20 22 73 6d 61 6c 6c 22 20 72 61 6e 64 6f  ry "small" rando
213b0 6d 20 72 6f 77 69 64 73 20 66 6f 72 20 74 68 65  m rowids for the
213c0 20 69 6e 69 74 69 61 6c 20 61 74 74 65 6d 70 74   initial attempt
213d0 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 76  s */.          v
213e0 20 26 3d 20 30 78 66 66 66 66 66 66 3b 0a 20 20   &= 0xffffff;.  
213f0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
21400 20 20 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58         v &= (MAX
21410 5f 52 4f 57 49 44 3e 3e 31 29 3b 20 2f 2a 20 65  _ROWID>>1); /* e
21420 6e 73 75 72 65 20 64 6f 65 73 6e 27 74 20 67 6f  nsure doesn't go
21430 20 6e 65 67 61 74 69 76 65 20 2a 2f 0a 20 20 20   negative */.   
21440 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 76       }.        v
21450 2b 2b 3b 20 2f 2a 20 65 6e 73 75 72 65 20 6e 6f  ++; /* ensure no
21460 6e 2d 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20  n-zero */.      
21470 7d 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  }.      if( rc==
21480 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 72 65 73  SQLITE_OK && res
21490 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 72  ==0 ){.        r
214a0 63 20 3d 20 53 51 4c 49 54 45 5f 46 55 4c 4c 3b  c = SQLITE_FULL;
214b0 20 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 33 38 32     /* IMP: R-382
214c0 31 39 2d 35 33 30 30 32 20 2a 2f 0a 20 20 20 20  19-53002 */.    
214d0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
214e0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
214f0 20 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72     }.      asser
21500 74 28 20 76 3e 30 20 29 3b 20 20 2f 2a 20 45 56  t( v>0 );  /* EV
21510 3a 20 52 2d 34 30 38 31 32 2d 30 33 35 37 30 20  : R-40812-03570 
21520 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d  */.    }.    pC-
21530 3e 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20  >rowidIsValid = 
21540 30 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72  0;.    pC->defer
21550 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20  redMoveto = 0;. 
21560 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74     pC->cacheStat
21570 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
21580 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  ;.  }.  pOut->u.
21590 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b 0a  i = v;.  break;.
215a0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
215b0 73 65 72 74 20 50 31 20 50 32 20 50 33 20 50 34  sert P1 P2 P3 P4
215c0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
215d0 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20 64 61   intkey=r[P3] da
215e0 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57  ta=r[P2].**.** W
215f0 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20 69 6e  rite an entry in
21600 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f 66 20  to the table of 
21610 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20 6e 65  cursor P1.  A ne
21620 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20 63 72  w entry is.** cr
21630 65 61 74 65 64 20 69 66 20 69 74 20 64 6f 65 73  eated if it does
21640 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78 69 73  n't already exis
21650 74 20 6f 72 20 74 68 65 20 64 61 74 61 20 66 6f  t or the data fo
21660 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a 2a 2a  r an existing.**
21670 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72 77 72   entry is overwr
21680 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61 74 61  itten.  The data
21690 20 69 73 20 74 68 65 20 76 61 6c 75 65 20 4d 45   is the value ME
216a0 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20 69 6e  M_Blob stored in
216b0 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e 75 6d   register.** num
216c0 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65 79 20  ber P2. The key 
216d0 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  is stored in reg
216e0 69 73 74 65 72 20 50 33 2e 20 54 68 65 20 6b 65  ister P3. The ke
216f0 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61 20 4d  y must.** be a M
21700 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  EM_Int..**.** If
21710 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
21720 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35 20 69  NGE flag of P5 i
21730 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68 65 20  s set, then the 
21740 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  row change count
21750 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65 6e 74   is.** increment
21760 65 64 20 28 6f 74 68 65 72 77 69 73 65 20 6e 6f  ed (otherwise no
21770 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50 46 4c  t).  If the OPFL
21780 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66 6c 61  AG_LASTROWID fla
21790 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 0a  g of P5 is set,.
217a0 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20 69 73  ** then rowid is
217b0 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75 62 73   stored for subs
217c0 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20 62 79  equent return by
217d0 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f   the.** sqlite3_
217e0 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69  last_insert_rowi
217f0 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28 6f 74  d() function (ot
21800 68 65 72 77 69 73 65 20 69 74 20 69 73 20 75 6e  herwise it is un
21810 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a  modified)..**.**
21820 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
21830 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
21840 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 20 61  g of P5 is set a
21850 6e 64 20 69 66 20 74 68 65 20 72 65 73 75 6c 74  nd if the result
21860 20 6f 66 0a 2a 2a 20 74 68 65 20 6c 61 73 74 20   of.** the last 
21870 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e 20 28  seek operation (
21880 4f 50 5f 4e 6f 74 45 78 69 73 74 73 29 20 77 61  OP_NotExists) wa
21890 73 20 61 20 73 75 63 63 65 73 73 2c 20 74 68 65  s a success, the
218a0 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 65 72 61 74  n this.** operat
218b0 69 6f 6e 20 77 69 6c 6c 20 6e 6f 74 20 61 74 74  ion will not att
218c0 65 6d 70 74 20 74 6f 20 66 69 6e 64 20 74 68 65  empt to find the
218d0 20 61 70 70 72 6f 70 72 69 61 74 65 20 72 6f 77   appropriate row
218e0 20 62 65 66 6f 72 65 20 64 6f 69 6e 67 0a 2a 2a   before doing.**
218f0 20 74 68 65 20 69 6e 73 65 72 74 20 62 75 74 20   the insert but 
21900 77 69 6c 6c 20 69 6e 73 74 65 61 64 20 6f 76 65  will instead ove
21910 72 77 72 69 74 65 20 74 68 65 20 72 6f 77 20 74  rwrite the row t
21920 68 61 74 20 74 68 65 20 63 75 72 73 6f 72 20 69  hat the cursor i
21930 73 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 70  s.** currently p
21940 6f 69 6e 74 69 6e 67 20 74 6f 2e 20 20 50 72 65  ointing to.  Pre
21950 73 75 6d 61 62 6c 79 2c 20 74 68 65 20 70 72 69  sumably, the pri
21960 6f 72 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20  or OP_NotExists 
21970 6f 70 63 6f 64 65 0a 2a 2a 20 68 61 73 20 61 6c  opcode.** has al
21980 72 65 61 64 79 20 70 6f 73 69 74 69 6f 6e 65 64  ready positioned
21990 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 72 72   the cursor corr
219a0 65 63 74 6c 79 2e 20 20 54 68 69 73 20 69 73 20  ectly.  This is 
219b0 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 0a  an optimization.
219c0 2a 2a 20 74 68 61 74 20 62 6f 6f 73 74 73 20 70  ** that boosts p
219d0 65 72 66 6f 72 6d 61 6e 63 65 20 62 79 20 61 76  erformance by av
219e0 6f 69 64 69 6e 67 20 72 65 64 75 6e 64 61 6e 74  oiding redundant
219f0 20 73 65 65 6b 73 2e 0a 2a 2a 0a 2a 2a 20 49 66   seeks..**.** If
21a00 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50   the OPFLAG_ISUP
21a10 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65 74  DATE flag is set
21a20 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  , then this opco
21a30 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61 6e  de is part of an
21a40 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72 61  .** UPDATE opera
21a50 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65  tion.  Otherwise
21a60 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69 73   (if the flag is
21a70 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68 69   clear) then thi
21a80 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 70  s opcode.** is p
21a90 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52 54  art of an INSERT
21aa0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68 65   operation.  The
21ab0 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20 6f   difference is o
21ac0 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f  nly important to
21ad0 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 68  .** the update h
21ae0 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61 6d  ook..**.** Param
21af0 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69 6e  eter P4 may poin
21b00 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74 72  t to a Table str
21b10 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20 62  ucture, or may b
21b20 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69 73  e NULL. If it is
21b30 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20 74   .** not NULL, t
21b40 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d 68  hen the update-h
21b50 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55 70  ook (sqlite3.xUp
21b60 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69 73  dateCallback) is
21b70 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f 6c   invoked .** fol
21b80 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73 73  lowing a success
21b90 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a 2a  ful insert..**.*
21ba0 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f 3a  * (WARNING/TODO:
21bb0 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65 75   If P1 is a pseu
21bc0 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50 32  do-cursor and P2
21bd0 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79 0a   is dynamically.
21be0 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74 68  ** allocated, th
21bf0 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66 20  en ownership of 
21c00 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72 65  P2 is transferre
21c10 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f 2d  d to the pseudo-
21c20 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72 65  cursor.** and re
21c30 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d 65  gister P2 become
21c40 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49 66  s ephemeral.  If
21c50 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 63   the cursor is c
21c60 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20 76  hanged, the.** v
21c70 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
21c80 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63 68   P2 will then ch
21c90 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72 65  ange.  Make sure
21ca0 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a 2a   this does not.*
21cb0 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f 62  * cause any prob
21cc0 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68 69  lems.).**.** Thi
21cd0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e  s instruction on
21ce0 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62 6c  ly works on tabl
21cf0 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c  es.  The equival
21d00 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a  ent instruction.
21d10 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20 69  ** for indices i
21d20 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e 0a  s OP_IdxInsert..
21d30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  */./* Opcode: In
21d40 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50 33  sertInt P1 P2 P3
21d50 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
21d60 69 73 3a 20 20 69 6e 74 6b 65 79 3d 50 33 20 64  is:  intkey=P3 d
21d70 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
21d80 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
21d90 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
21da0 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
21db0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
21dc0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
21dd0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
21de0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
21df0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
21e00 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
21e10 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
21e20 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
21e30 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
21e40 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
21e50 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
21e60 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21e70 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
21e80 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
21e90 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
21ea0 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
21eb0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36  e record */.  i6
21ec0 34 20 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20  4 iKey;         
21ed0 2f 2a 20 54 68 65 20 69 6e 74 65 67 65 72 20 52  /* The integer R
21ee0 4f 57 49 44 20 6f 72 20 6b 65 79 20 66 6f 72 20  OWID or key for 
21ef0 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
21f00 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 56   inserted */.  V
21f10 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20  dbeCursor *pC;  
21f20 20 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61   /* Cursor to ta
21f30 62 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69  ble into which i
21f40 6e 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e  nsert is written
21f50 20 2a 2f 0a 20 20 69 6e 74 20 6e 5a 65 72 6f 3b   */.  int nZero;
21f60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
21f70 72 20 6f 66 20 7a 65 72 6f 2d 62 79 74 65 73 20  r of zero-bytes 
21f80 74 6f 20 61 70 70 65 6e 64 20 2a 2f 0a 20 20 69  to append */.  i
21f90 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
21fa0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
21fb0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
21fc0 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
21fd0 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
21fe0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
21ff0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
22000 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
22010 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61  ate hook */.  Ta
22020 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
22030 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  /* Table structu
22040 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64  re - used by upd
22050 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61  ate and pre-upda
22060 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e  te hooks */.  in
22070 74 20 6f 70 20 3d 20 30 3b 20 20 20 20 20 20 20  t op = 0;       
22080 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70  /* Opcode for up
22090 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54  date hook: SQLIT
220a0 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49  E_UPDATE or SQLI
220b0 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 0a 20 20  TE_INSERT */..  
220c0 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70 4f  pData = &aMem[pO
220d0 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74  p->p2];.  assert
220e0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
220f0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
22100 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  or );.  assert( 
22110 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74 61  memIsValid(pData
22120 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  ) );.  pC = p->a
22130 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
22140 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
22150 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
22160 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
22170 61 73 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75  assert( pC->pseu
22180 64 6f 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b  doTableReg==0 );
22190 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69  .  assert( pC->i
221a0 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73 65  sTable );.  asse
221b0 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
221c0 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f 70  =P4_TABLE || pOp
221d0 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54 41  ->p4type>=P4_STA
221e0 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54 45  TIC );.  REGISTE
221f0 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c  R_TRACE(pOp->p2,
22200 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28 20   pData);..  if( 
22210 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
22220 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70 4b  Insert ){.    pK
22230 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ey = &aMem[pOp->
22240 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28  p3];.    assert(
22250 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20 4d   pKey->flags & M
22260 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61 73  EM_Int );.    as
22270 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
22280 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52 45  (pKey) );.    RE
22290 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70  GISTER_TRACE(pOp
222a0 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20 20  ->p3, pKey);.   
222b0 20 69 4b 65 79 20 3d 20 70 4b 65 79 2d 3e 75 2e   iKey = pKey->u.
222c0 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  i;.  }else{.    
222d0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
222e0 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74 49 6e  ode==OP_InsertIn
222f0 74 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  t );.    iKey = 
22300 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20  pOp->p3;.  }..  
22310 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  if( pOp->p4type=
22320 3d 50 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53  =P4_TABLE && HAS
22330 5f 55 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29  _UPDATE_HOOK(db)
22340 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
22350 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
22360 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69     assert( pC->i
22370 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62  Db>=0 );.    zDb
22380 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69   = db->aDb[pC->i
22390 44 62 5d 2e 7a 4e 61 6d 65 3b 0a 20 20 20 20 70  Db].zName;.    p
223a0 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54  Tab = pOp->p4.pT
223b0 61 62 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70  ab;.    op = ((p
223c0 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
223d0 49 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49  ISUPDATE) ? SQLI
223e0 54 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49  TE_UPDATE : SQLI
223f0 54 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 0a  TE_INSERT);.  }.
22400 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
22410 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
22420 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65  HOOK.  /* Invoke
22430 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
22440 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f 0a  hook, if any */.
22450 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55 70    if( db->xPreUp
22460 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20 20  dateCallback .  
22470 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d   && pOp->p4type=
22480 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26 20  =P4_TABLE.   && 
22490 28 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46  (!(pOp->p5 & OPF
224a0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20 7c 7c  LAG_ISUPDATE) ||
224b0 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
224c0 64 3d 3d 30 29 0a 20 20 20 26 26 20 48 61 73 52  d==0).   && HasR
224d0 6f 77 69 64 28 70 54 61 62 29 0a 20 20 29 7b 0a  owid(pTab).  ){.
224e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
224f0 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
22500 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  pC, SQLITE_INSER
22510 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b  T, zDb, pTab, iK
22520 65 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  ey, pOp->p2);.  
22530 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28 20  }.#endif..  if( 
22540 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
22550 5f 4e 43 48 41 4e 47 45 20 29 20 70 2d 3e 6e 43  _NCHANGE ) p->nC
22560 68 61 6e 67 65 2b 2b 3b 0a 20 20 69 66 28 20 70  hange++;.  if( p
22570 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
22580 4c 41 53 54 52 4f 57 49 44 20 29 20 64 62 2d 3e  LASTROWID ) db->
22590 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74  lastRowid = last
225a0 52 6f 77 69 64 20 3d 20 69 4b 65 79 3b 0a 20 20  Rowid = iKey;.  
225b0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
225c0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
225d0 20 20 20 70 44 61 74 61 2d 3e 7a 20 3d 20 30 3b     pData->z = 0;
225e0 0a 20 20 20 20 70 44 61 74 61 2d 3e 6e 20 3d 20  .    pData->n = 
225f0 30 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  0;.  }else{.    
22600 61 73 73 65 72 74 28 20 70 44 61 74 61 2d 3e 66  assert( pData->f
22610 6c 61 67 73 20 26 20 28 4d 45 4d 5f 42 6c 6f 62  lags & (MEM_Blob
22620 7c 4d 45 4d 5f 53 74 72 29 20 29 3b 0a 20 20 7d  |MEM_Str) );.  }
22630 0a 20 20 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  .  seekResult = 
22640 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
22650 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
22660 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
22670 6c 74 20 3a 20 30 29 3b 0a 20 20 69 66 28 20 70  lt : 0);.  if( p
22680 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d 45  Data->flags & ME
22690 4d 5f 5a 65 72 6f 20 29 7b 0a 20 20 20 20 6e 5a  M_Zero ){.    nZ
226a0 65 72 6f 20 3d 20 70 44 61 74 61 2d 3e 75 2e 6e  ero = pData->u.n
226b0 5a 65 72 6f 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  Zero;.  }else{. 
226c0 20 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20     nZero = 0;.  
226d0 7d 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  }.  rc = sqlite3
226e0 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
226f0 70 43 75 72 73 6f 72 2c 20 30 2c 20 69 4b 65 79  pCursor, 0, iKey
22700 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
22710 20 20 20 20 20 20 20 20 20 20 20 20 70 44 61 74              pDat
22720 61 2d 3e 7a 2c 20 70 44 61 74 61 2d 3e 6e 2c 20  a->z, pData->n, 
22730 6e 5a 65 72 6f 2c 0a 20 20 20 20 20 20 20 20 20  nZero,.         
22740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22750 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
22760 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
22770 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
22780 20 70 43 2d 3e 72 6f 77 69 64 49 73 56 61 6c 69   pC->rowidIsVali
22790 64 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 64 65 66  d = 0;.  pC->def
227a0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
227b0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
227c0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
227d0 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  ;..  /* Invoke t
227e0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 69  he update-hook i
227f0 66 20 72 65 71 75 69 72 65 64 2e 20 2a 2f 0a 20  f required. */. 
22800 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
22810 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64 61 74  OK && db->xUpdat
22820 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20  eCallback && op 
22830 26 26 20 48 61 73 52 6f 77 69 64 28 70 54 61 62  && HasRowid(pTab
22840 29 20 29 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70  ) ){.    db->xUp
22850 64 61 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d  dateCallback(db-
22860 3e 70 55 70 64 61 74 65 41 72 67 2c 20 6f 70 2c  >pUpdateArg, op,
22870 20 7a 44 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d   zDb, pTab->zNam
22880 65 2c 20 69 4b 65 79 29 3b 0a 20 20 7d 0a 20 20  e, iKey);.  }.  
22890 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
228a0 6f 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50  ode: Delete P1 P
228b0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
228c0 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
228d0 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
228e0 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
228f0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
22900 2a 2a 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72  **.** The cursor
22910 20 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f   will be left po
22920 69 6e 74 69 6e 67 20 61 74 20 65 69 74 68 65 72  inting at either
22930 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
22940 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
22950 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
22960 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
22970 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
22980 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
22990 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
229a0 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
229b0 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
229c0 20 48 65 6e 63 65 20 69 74 20 69 73 20 4f 4b 20   Hence it is OK 
229d0 74 6f 20 64 65 6c 65 74 65 0a 2a 2a 20 61 20 72  to delete.** a r
229e0 65 63 6f 72 64 20 66 72 6f 6d 20 77 69 74 68 69  ecord from withi
229f0 6e 20 61 6e 20 4e 65 78 74 20 6c 6f 6f 70 2e 0a  n an Next loop..
22a00 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
22a10 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61 67  LAG_NCHANGE flag
22a20 20 6f 66 20 50 32 20 69 73 20 73 65 74 2c 20 74   of P2 is set, t
22a30 68 65 6e 20 74 68 65 20 72 6f 77 20 63 68 61 6e  hen the row chan
22a40 67 65 20 63 6f 75 6e 74 20 69 73 0a 2a 2a 20 69  ge count is.** i
22a50 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68 65  ncremented (othe
22a60 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a 2a  rwise not)..**.*
22a70 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62 65  * P1 must not be
22a80 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20   pseudo-table.  
22a90 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20 72  It has to be a r
22aa0 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a 2a  eal table with.*
22ab0 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 2e  * multiple rows.
22ac0 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20  .**.** If P4 is 
22ad0 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69 74  not NULL then it
22ae0 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61 62   points to a Tab
22af0 6c 65 20 73 74 72 75 74 75 72 65 2e 20 49 6e 20  le struture. In 
22b00 74 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72  this case either
22b10 20 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20   .** the update 
22b20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f  or pre-update ho
22b30 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79  ok, or both, may
22b40 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65   be invoked. The
22b50 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a   P1 cursor must.
22b60 2a 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73  ** have been pos
22b70 69 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50  itioned using OP
22b80 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20  _NotFound prior 
22b90 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73  to invoking this
22ba0 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74   opcode in .** t
22bb0 68 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66  his case. Specif
22bc0 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69  ically, if one i
22bd0 73 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68  s configured, th
22be0 65 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  e pre-update hoo
22bf0 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64  k is .** invoked
22c00 20 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   if P4 is not NU
22c10 4c 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68  LL. The update-h
22c20 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69  ook is invoked i
22c30 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75  f one is configu
22c40 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e  red, .** P4 is n
22c50 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65  ot NULL, and the
22c60 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
22c70 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
22c80 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
22c90 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
22ca0 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50  flag is set in P
22cb0 32 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61  2, then P3 conta
22cc0 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a  ins the address.
22cd0 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  ** of the memory
22ce0 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61   cell that conta
22cf0 69 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68  ins the value th
22d00 61 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  at the rowid of 
22d10 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20  the row will.** 
22d20 62 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65  be set to by the
22d30 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65   update..*/.case
22d40 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20   OP_Delete: {.  
22d50 69 36 34 20 69 4b 65 79 3b 0a 20 20 56 64 62 65  i64 iKey;.  Vdbe
22d60 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 63 6f  Cursor *pC;.  co
22d70 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 3b 0a 20  nst char *zDb;. 
22d80 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
22d90 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a 0a 20 20  int opflags;..  
22da0 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70 2d 3e 70  opflags = pOp->p
22db0 32 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  2;.  assert( pOp
22dc0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
22dd0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
22de0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
22df0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
22e00 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
22e10 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75 72  assert( pC->pCur
22e20 73 6f 72 21 3d 30 20 29 3b 20 20 2f 2a 20 4f 6e  sor!=0 );  /* On
22e30 6c 79 20 76 61 6c 69 64 20 66 6f 72 20 72 65 61  ly valid for rea
22e40 6c 20 74 61 62 6c 65 73 2c 20 6e 6f 20 70 73 65  l tables, no pse
22e50 75 64 6f 74 61 62 6c 65 73 20 2a 2f 0a 20 20 69  udotables */.  i
22e60 4b 65 79 20 3d 20 70 43 2d 3e 6c 61 73 74 52 6f  Key = pC->lastRo
22e70 77 69 64 3b 20 20 20 20 20 20 2f 2a 20 4f 6e 6c  wid;      /* Onl
22e80 79 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 75  y used for the u
22e90 70 64 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 0a 20  pdate hook */.. 
22ea0 20 2f 2a 20 54 68 65 20 4f 50 5f 44 65 6c 65 74   /* The OP_Delet
22eb0 65 20 6f 70 63 6f 64 65 20 61 6c 77 61 79 73 20  e opcode always 
22ec0 66 6f 6c 6c 6f 77 73 20 61 6e 20 4f 50 5f 4e 6f  follows an OP_No
22ed0 74 45 78 69 73 74 73 20 6f 72 20 4f 50 5f 4c 61  tExists or OP_La
22ee0 73 74 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 43 6f  st or.  ** OP_Co
22ef0 6c 75 6d 6e 20 6f 6e 20 74 68 65 20 73 61 6d 65  lumn on the same
22f00 20 74 61 62 6c 65 20 77 69 74 68 6f 75 74 20 61   table without a
22f10 6e 79 20 69 6e 74 65 72 76 65 6e 69 6e 67 20 6f  ny intervening o
22f20 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 0a 20  perations that. 
22f30 20 2a 2a 20 6d 69 67 68 74 20 6d 6f 76 65 20 6f   ** might move o
22f40 72 20 69 6e 76 61 6c 69 64 61 74 65 20 74 68 65  r invalidate the
22f50 20 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20   cursor.  Hence 
22f60 63 75 72 73 6f 72 20 70 43 20 69 73 20 61 6c 77  cursor pC is alw
22f70 61 79 73 20 70 6f 69 6e 74 69 6e 67 0a 20 20 2a  ays pointing.  *
22f80 2a 20 74 6f 20 74 68 65 20 72 6f 77 20 74 6f 20  * to the row to 
22f90 62 65 20 64 65 6c 65 74 65 64 20 61 6e 64 20 74  be deleted and t
22fa0 68 65 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  he sqlite3VdbeCu
22fb0 72 73 6f 72 4d 6f 76 65 74 6f 28 29 20 6f 70 65  rsorMoveto() ope
22fc0 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 62 65 6c 6f  ration.  ** belo
22fd0 77 20 69 73 20 61 6c 77 61 79 73 20 61 20 6e 6f  w is always a no
22fe0 2d 6f 70 20 61 6e 64 20 63 61 6e 6e 6f 74 20 66  -op and cannot f
22ff0 61 69 6c 2e 20 20 57 65 20 77 69 6c 6c 20 72 75  ail.  We will ru
23000 6e 20 69 74 20 61 6e 79 68 6f 77 2c 20 74 68 6f  n it anyhow, tho
23010 75 67 68 2c 0a 20 20 2a 2a 20 74 6f 20 67 75 61  ugh,.  ** to gua
23020 72 64 20 61 67 61 69 6e 73 74 20 66 75 74 75 72  rd against futur
23030 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
23040 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e   code generator.
23050 0a 20 20 2a 2a 2f 0a 20 20 61 73 73 65 72 74 28  .  **/.  assert(
23060 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
23070 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 72 63 20 3d  eto==0 );.  rc =
23080 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73   sqlite3VdbeCurs
23090 6f 72 4d 6f 76 65 74 6f 28 70 43 29 3b 0a 20 20  orMoveto(pC);.  
230a0 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d 53 51  if( NEVER(rc!=SQ
230b0 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74 6f 20  LITE_OK) ) goto 
230c0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
230d0 6f 72 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  or;..  /* If the
230e0 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
230f0 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
23100 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
23110 20 73 65 74 20 69 4b 65 79 20 74 6f 20 0a 20 20   set iKey to .  
23120 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
23130 74 68 65 20 72 6f 77 20 62 65 69 6e 67 20 64 65  the row being de
23140 6c 65 74 65 64 2e 20 53 65 74 20 7a 44 62 20 61  leted. Set zDb a
23150 6e 64 20 7a 54 61 62 20 61 73 20 77 65 6c 6c 2e  nd zTab as well.
23160 0a 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d  .  */.  if( pOp-
23170 3e 70 34 2e 7a 20 26 26 20 48 41 53 5f 55 50 44  >p4.z && HAS_UPD
23180 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a  ATE_HOOK(db) ){.
23190 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
231a0 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73  iDb>=0 );.    as
231b0 73 65 72 74 28 20 70 43 2d 3e 72 6f 77 69 64 49  sert( pC->rowidI
231c0 73 56 61 6c 69 64 20 7c 7c 20 21 48 61 73 52 6f  sValid || !HasRo
231d0 77 69 64 28 70 4f 70 2d 3e 70 34 2e 70 54 61 62  wid(pOp->p4.pTab
231e0 29 20 29 3b 0a 20 20 20 20 69 4b 65 79 20 3d 20  ) );.    iKey = 
231f0 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20  pC->lastRowid;. 
23200 20 20 20 7a 44 62 20 3d 20 64 62 2d 3e 61 44 62     zDb = db->aDb
23210 5b 70 43 2d 3e 69 44 62 5d 2e 7a 4e 61 6d 65 3b  [pC->iDb].zName;
23220 0a 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d  .    pTab = pOp-
23230 3e 70 34 2e 70 54 61 62 3b 0a 20 7d 0a 0a 23 69  >p4.pTab;. }..#i
23240 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
23250 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f  LE_PREUPDATE_HOO
23260 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68  K.  /* Invoke th
23270 65 20 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f  e pre-update-hoo
23280 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
23290 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65  /.  if( db->xPre
232a0 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 26  UpdateCallback &
232b0 26 20 70 4f 70 2d 3e 70 34 2e 7a 20 26 26 20 48  & pOp->p4.z && H
232c0 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
232d0 0a 20 20 20 20 61 73 73 65 72 74 28 20 21 28 6f  .    assert( !(o
232e0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
232f0 49 53 55 50 44 41 54 45 29 20 7c 7c 20 28 61 4d  ISUPDATE) || (aM
23300 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66 6c 61 67  em[pOp->p3].flag
23310 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20 29 3b 0a  s & MEM_Int) );.
23320 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 50      sqlite3VdbeP
23330 72 65 55 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20  reUpdateHook(p, 
23340 70 43 2c 0a 20 20 20 20 20 20 20 20 28 6f 70 66  pC,.        (opf
23350 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53  lags & OPFLAG_IS
23360 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54 45  UPDATE) ? SQLITE
23370 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54 45  _UPDATE : SQLITE
23380 5f 44 45 4c 45 54 45 2c 20 0a 20 20 20 20 20 20  _DELETE, .      
23390 20 20 7a 44 62 2c 20 70 54 61 62 2c 20 69 4b 65    zDb, pTab, iKe
233a0 79 2c 0a 20 20 20 20 20 20 20 20 70 4f 70 2d 3e  y,.        pOp->
233b0 70 33 0a 20 20 20 20 29 3b 0a 20 20 7d 0a 23 65  p3.    );.  }.#e
233c0 6e 64 69 66 0a 0a 20 20 69 66 28 20 6f 70 66 6c  ndif..  if( opfl
233d0 61 67 73 20 26 20 4f 50 46 4c 41 47 5f 49 53 4e  ags & OPFLAG_ISN
233e0 4f 4f 50 20 29 20 62 72 65 61 6b 3b 0a 0a 20 20  OOP ) break;..  
233f0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23400 65 44 65 6c 65 74 65 28 70 43 2d 3e 70 43 75 72  eDelete(pC->pCur
23410 73 6f 72 29 3b 0a 20 20 70 43 2d 3e 63 61 63 68  sor);.  pC->cach
23420 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f  eStatus = CACHE_
23430 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20 55 70 64  STALE;..  /* Upd
23440 61 74 65 20 74 68 65 20 63 68 61 6e 67 65 2d 63  ate the change-c
23450 6f 75 6e 74 65 72 20 61 6e 64 20 69 6e 76 6f 6b  ounter and invok
23460 65 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f  e the update-hoo
23470 6b 20 69 66 20 72 65 71 75 69 72 65 64 2e 20 2a  k if required. *
23480 2f 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  /.  if( opflags 
23490 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
234a0 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
234b0 67 65 2b 2b 3b 0a 20 20 20 20 61 73 73 65 72 74  ge++;.    assert
234c0 28 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 3b 0a 20  ( pOp->p4.z );. 
234d0 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
234e0 45 5f 4f 4b 20 26 26 20 64 62 2d 3e 78 55 70 64  E_OK && db->xUpd
234f0 61 74 65 43 61 6c 6c 62 61 63 6b 20 26 26 20 48  ateCallback && H
23500 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 29 7b  asRowid(pTab) ){
23510 0a 20 20 20 20 20 20 64 62 2d 3e 78 55 70 64 61  .      db->xUpda
23520 74 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70  teCallback(db->p
23530 55 70 64 61 74 65 41 72 67 2c 20 53 51 4c 49 54  UpdateArg, SQLIT
23540 45 5f 44 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70  E_DELETE, zDb, p
23550 54 61 62 2d 3e 7a 4e 61 6d 65 2c 69 4b 65 79 29  Tab->zName,iKey)
23560 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
23570 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  eak;.}./* Opcode
23580 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20 2a  : ResetCount * *
23590 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65   * * *.**.** The
235a0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 68   value of the ch
235b0 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
235c0 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64 61  copied to the da
235d0 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a 2a  tabase handle.**
235e0 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
235f0 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75 62  (returned by sub
23600 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74 6f  sequent calls to
23610 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73   sqlite3_changes
23620 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68 65  ())..** Then the
23630 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63 68   VMs internal ch
23640 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65 73  ange counter res
23650 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68 69  ets to 0..** Thi
23660 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72 69  s is used by tri
23670 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a 2a  gger programs..*
23680 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74 43  /.case OP_ResetC
23690 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74 65  ount: {.  sqlite
236a0 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73 28  3VdbeSetChanges(
236b0 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b  db, p->nChange);
236c0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
236d0 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  0;.  break;.}../
236e0 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
236f0 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50 33  Compare P1 P2 P3
23700 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P4.** Synopsis:
23710 20 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72    if key(P1)!=tr
23720 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
23730 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
23740 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
23750 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
23760 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
23770 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 74  efix of the.** t
23780 68 65 20 72 65 63 6f 72 64 20 62 6c 6f 62 20 69  he record blob i
23790 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61 67  n register P3 ag
237a0 61 69 6e 73 74 20 61 20 70 72 65 66 69 78 20 6f  ainst a prefix o
237b0 66 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  f the entry that
237c0 20 0a 2a 2a 20 74 68 65 20 73 6f 72 74 65 72 20   .** the sorter 
237d0 63 75 72 73 6f 72 20 63 75 72 72 65 6e 74 6c 79  cursor currently
237e0 20 70 6f 69 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c   points to.  Onl
237f0 79 20 74 68 65 20 66 69 72 73 74 20 50 34 20 66  y the first P4 f
23800 69 65 6c 64 73 0a 2a 2a 20 6f 66 20 72 5b 50 33  ields.** of r[P3
23810 5d 20 61 6e 64 20 74 68 65 20 73 6f 72 74 65 72  ] and the sorter
23820 20 72 65 63 6f 72 64 20 61 72 65 20 63 6f 6d 70   record are comp
23830 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  ared..**.** If e
23840 69 74 68 65 72 20 50 33 20 6f 72 20 74 68 65 20  ither P3 or the 
23850 73 6f 72 74 65 72 20 63 6f 6e 74 61 69 6e 73 20  sorter contains 
23860 61 20 4e 55 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66  a NULL in one of
23870 20 74 68 65 69 72 20 73 69 67 6e 69 66 69 63 61   their significa
23880 6e 74 0a 2a 2a 20 66 69 65 6c 64 73 20 28 6e 6f  nt.** fields (no
23890 74 20 63 6f 75 6e 74 69 6e 67 20 74 68 65 20 50  t counting the P
238a0 34 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  4 fields at the 
238b0 65 6e 64 20 77 68 69 63 68 20 61 72 65 20 69 67  end which are ig
238c0 6e 6f 72 65 64 29 20 74 68 65 6e 0a 2a 2a 20 74  nored) then.** t
238d0 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73  he comparison is
238e0 20 61 73 73 75 6d 65 64 20 74 6f 20 62 65 20 65   assumed to be e
238f0 71 75 61 6c 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c  qual..**.** Fall
23900 20 74 68 72 6f 75 67 68 20 74 6f 20 6e 65 78 74   through to next
23910 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 66 20   instruction if 
23920 74 68 65 20 74 77 6f 20 72 65 63 6f 72 64 73 20  the two records 
23930 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 74 6f  compare equal to
23940 0a 2a 2a 20 65 61 63 68 20 6f 74 68 65 72 2e 20  .** each other. 
23950 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74   Jump to P2 if t
23960 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
23970 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  t..*/.case OP_So
23980 72 74 65 72 43 6f 6d 70 61 72 65 3a 20 7b 0a 20  rterCompare: {. 
23990 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
239a0 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e  .  int res;.  in
239b0 74 20 6e 4b 65 79 43 6f 6c 3b 0a 0a 20 20 70 43  t nKeyCol;..  pC
239c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
239d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
239e0 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a  isSorter(pC) );.
239f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
23a00 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
23a10 29 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65  );.  pIn3 = &aMe
23a20 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b  m[pOp->p3];.  nK
23a30 65 79 43 6f 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e  eyCol = pOp->p4.
23a40 69 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  i;.  rc = sqlite
23a50 33 56 64 62 65 53 6f 72 74 65 72 43 6f 6d 70 61  3VdbeSorterCompa
23a60 72 65 28 70 43 2c 20 70 49 6e 33 2c 20 6e 4b 65  re(pC, pIn3, nKe
23a70 79 43 6f 6c 2c 20 26 72 65 73 29 3b 0a 20 20 56  yCol, &res);.  V
23a80 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72  dbeBranchTaken(r
23a90 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20  es!=0,2);.  if( 
23aa0 72 65 73 20 29 7b 0a 20 20 20 20 70 63 20 3d 20  res ){.    pc = 
23ab0 70 4f 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 0a 20  pOp->p2-1;.  }. 
23ac0 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f 2a 20 4f   break;.};../* O
23ad0 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 44 61 74  pcode: SorterDat
23ae0 61 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  a P1 P2 * * *.**
23af0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
23b00 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74  =data.**.** Writ
23b10 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
23b20 50 32 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  P2 the current s
23b30 6f 72 74 65 72 20 64 61 74 61 20 66 6f 72 20 73  orter data for s
23b40 6f 72 74 65 72 20 63 75 72 73 6f 72 20 50 31 2e  orter cursor P1.
23b50 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74  .*/.case OP_Sort
23b60 65 72 44 61 74 61 3a 20 7b 0a 20 20 56 64 62 65  erData: {.  Vdbe
23b70 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 70  Cursor *pC;..  p
23b80 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
23b90 3e 70 32 5d 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  >p2];.  pC = p->
23ba0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
23bb0 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
23bc0 65 72 28 70 43 29 20 29 3b 0a 20 20 72 63 20 3d  er(pC) );.  rc =
23bd0 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
23be0 65 72 52 6f 77 6b 65 79 28 70 43 2c 20 70 4f 75  erRowkey(pC, pOu
23bf0 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63  t);.  assert( rc
23c00 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28  !=SQLITE_OK || (
23c10 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pOut->flags & ME
23c20 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20 20 62 72 65  M_Blob) );.  bre
23c30 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
23c40 3a 20 52 6f 77 44 61 74 61 20 50 31 20 50 32 20  : RowData P1 P2 
23c50 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
23c60 73 3a 20 72 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a  s: r[P2]=data.**
23c70 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
23c80 65 67 69 73 74 65 72 20 50 32 20 74 68 65 20 63  egister P2 the c
23c90 6f 6d 70 6c 65 74 65 20 72 6f 77 20 64 61 74 61  omplete row data
23ca0 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a   for cursor P1..
23cb0 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20 69  ** There is no i
23cc0 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66  nterpretation of
23cd0 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a 20   the data.  .** 
23ce0 49 74 20 69 73 20 6a 75 73 74 20 63 6f 70 69 65  It is just copie
23cf0 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72 65  d onto the P2 re
23d00 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20 61  gister exactly a
23d10 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75 6e  s .** it is foun
23d20 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  d in the databas
23d30 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  e file..**.** If
23d40 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
23d50 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
23d60 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
23d70 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
23d80 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
23d90 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
23da0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 2f 2a 20 4f 70  -table..*/./* Op
23db0 63 6f 64 65 3a 20 52 6f 77 4b 65 79 20 50 31 20  code: RowKey P1 
23dc0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
23dd0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 6b 65 79 0a  psis: r[P2]=key.
23de0 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f  **.** Write into
23df0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 68 65   register P2 the
23e00 20 63 6f 6d 70 6c 65 74 65 20 72 6f 77 20 6b 65   complete row ke
23e10 79 20 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e  y for cursor P1.
23e20 0a 2a 2a 20 54 68 65 72 65 20 69 73 20 6e 6f 20  .** There is no 
23e30 69 6e 74 65 72 70 72 65 74 61 74 69 6f 6e 20 6f  interpretation o
23e40 66 20 74 68 65 20 64 61 74 61 2e 20 20 0a 2a 2a  f the data.  .**
23e50 20 54 68 65 20 6b 65 79 20 69 73 20 63 6f 70 69   The key is copi
23e60 65 64 20 6f 6e 74 6f 20 74 68 65 20 50 32 20 72  ed onto the P2 r
23e70 65 67 69 73 74 65 72 20 65 78 61 63 74 6c 79 20  egister exactly 
23e80 61 73 20 0a 2a 2a 20 69 74 20 69 73 20 66 6f 75  as .** it is fou
23e90 6e 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  nd in the databa
23ea0 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  se file..**.** I
23eb0 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
23ec0 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
23ed0 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
23ee0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
23ef0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
23f00 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
23f10 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  o-table..*/.case
23f20 20 4f 50 5f 52 6f 77 4b 65 79 3a 0a 63 61 73 65   OP_RowKey:.case
23f30 20 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20   OP_RowData: {. 
23f40 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
23f50 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
23f60 73 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 20 20 69  sr;.  u32 n;.  i
23f70 36 34 20 6e 36 34 3b 0a 0a 20 20 70 4f 75 74 20  64 n64;..  pOut 
23f80 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
23f90 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68  ;.  memAboutToCh
23fa0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 0a  ange(p, pOut);..
23fb0 20 20 2f 2a 20 4e 6f 74 65 20 74 68 61 74 20 52    /* Note that R
23fc0 6f 77 4b 65 79 20 61 6e 64 20 52 6f 77 44 61 74  owKey and RowDat
23fd0 61 20 61 72 65 20 72 65 61 6c 6c 79 20 65 78 61  a are really exa
23fe0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 69 6e  ctly the same in
23ff0 73 74 72 75 63 74 69 6f 6e 20 2a 2f 0a 20 20 61  struction */.  a
24000 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
24010 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
24020 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
24030 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
24040 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69  p1];.  assert( i
24050 73 53 6f 72 74 65 72 28 70 43 29 3d 3d 30 20 29  sSorter(pC)==0 )
24060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
24070 69 73 54 61 62 6c 65 20 7c 7c 20 70 4f 70 2d 3e  isTable || pOp->
24080 6f 70 63 6f 64 65 21 3d 4f 50 5f 52 6f 77 44 61  opcode!=OP_RowDa
24090 74 61 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ta );.  assert( 
240a0 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 7c  pC->isTable==0 |
240b0 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
240c0 50 5f 52 6f 77 44 61 74 61 20 29 3b 0a 20 20 61  P_RowData );.  a
240d0 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
240e0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 75    assert( pC->nu
240f0 6c 6c 52 6f 77 3d 3d 30 20 29 3b 0a 20 20 61 73  llRow==0 );.  as
24100 73 65 72 74 28 20 70 43 2d 3e 70 73 65 75 64 6f  sert( pC->pseudo
24110 54 61 62 6c 65 52 65 67 3d 3d 30 20 29 3b 0a 20  TableReg==0 );. 
24120 20 61 73 73 65 72 74 28 20 70 43 2d 3e 70 43 75   assert( pC->pCu
24130 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 70 43 72  rsor!=0 );.  pCr
24140 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72  sr = pC->pCursor
24150 3b 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69  ;.  assert( sqli
24160 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49 73  te3BtreeCursorIs
24170 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b 0a  Valid(pCrsr) );.
24180 0a 20 20 2f 2a 20 54 68 65 20 4f 50 5f 52 6f 77  .  /* The OP_Row
24190 4b 65 79 20 61 6e 64 20 4f 50 5f 52 6f 77 44 61  Key and OP_RowDa
241a0 74 61 20 6f 70 63 6f 64 65 73 20 61 6c 77 61 79  ta opcodes alway
241b0 73 20 66 6f 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45  s follow OP_NotE
241c0 78 69 73 74 73 20 6f 72 0a 20 20 2a 2a 20 4f 50  xists or.  ** OP
241d0 5f 52 65 77 69 6e 64 2f 4f 70 5f 4e 65 78 74 20  _Rewind/Op_Next 
241e0 77 69 74 68 20 6e 6f 20 69 6e 74 65 72 76 65 6e  with no interven
241f0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 73  ing instructions
24200 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76 61   that might inva
24210 6c 69 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20  lidate.  ** the 
24220 63 75 72 73 6f 72 2e 20 20 48 65 6e 63 65 20 74  cursor.  Hence t
24230 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 71 6c  he following sql
24240 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
24250 76 65 74 6f 28 29 20 63 61 6c 6c 20 69 73 20 61  veto() call is a
24260 6c 77 61 79 73 0a 20 20 2a 2a 20 61 20 6e 6f 2d  lways.  ** a no-
24270 6f 70 20 61 6e 64 20 63 61 6e 20 6e 65 76 65 72  op and can never
24280 20 66 61 69 6c 2e 20 20 42 75 74 20 77 65 20 6c   fail.  But we l
24290 65 61 76 65 20 69 74 20 69 6e 20 70 6c 61 63 65  eave it in place
242a0 20 61 73 20 61 20 73 61 66 65 74 79 2e 0a 20 20   as a safety..  
242b0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  */.  assert( pC-
242c0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d  >deferredMoveto=
242d0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c  =0 );.  rc = sql
242e0 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f  ite3VdbeCursorMo
242f0 76 65 74 6f 28 70 43 29 3b 0a 20 20 69 66 28 20  veto(pC);.  if( 
24300 4e 45 56 45 52 28 72 63 21 3d 53 51 4c 49 54 45  NEVER(rc!=SQLITE
24310 5f 4f 4b 29 20 29 20 67 6f 74 6f 20 61 62 6f 72  _OK) ) goto abor
24320 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
24330 0a 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62  .  if( pC->isTab
24340 6c 65 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73  le==0 ){.    ass
24350 65 72 74 28 20 21 70 43 2d 3e 69 73 54 61 62 6c  ert( !pC->isTabl
24360 65 20 29 3b 0a 20 20 20 20 56 56 41 5f 4f 4e 4c  e );.    VVA_ONL
24370 59 28 72 63 20 3d 29 20 73 71 6c 69 74 65 33 42  Y(rc =) sqlite3B
24380 74 72 65 65 4b 65 79 53 69 7a 65 28 70 43 72 73  treeKeySize(pCrs
24390 72 2c 20 26 6e 36 34 29 3b 0a 20 20 20 20 61 73  r, &n64);.    as
243a0 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
243b0 5f 4f 4b 20 29 3b 20 20 20 20 2f 2a 20 54 72 75  _OK );    /* Tru
243c0 65 20 62 65 63 61 75 73 65 20 6f 66 20 43 75 72  e because of Cur
243d0 73 6f 72 4d 6f 76 65 74 6f 28 29 20 63 61 6c 6c  sorMoveto() call
243e0 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20 20 69 66   above */.    if
243f0 28 20 6e 36 34 3e 64 62 2d 3e 61 4c 69 6d 69 74  ( n64>db->aLimit
24400 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45  [SQLITE_LIMIT_LE
24410 4e 47 54 48 5d 20 29 7b 0a 20 20 20 20 20 20 67  NGTH] ){.      g
24420 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20  oto too_big;.   
24430 20 7d 0a 20 20 20 20 6e 20 3d 20 28 75 33 32 29   }.    n = (u32)
24440 6e 36 34 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  n64;.  }else{.  
24450 20 20 56 56 41 5f 4f 4e 4c 59 28 72 63 20 3d 29    VVA_ONLY(rc =)
24460 20 73 71 6c 69 74 65 33 42 74 72 65 65 44 61 74   sqlite3BtreeDat
24470 61 53 69 7a 65 28 70 43 72 73 72 2c 20 26 6e 29  aSize(pCrsr, &n)
24480 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 72 63  ;.    assert( rc
24490 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20  ==SQLITE_OK );  
244a0 20 20 2f 2a 20 44 61 74 61 53 69 7a 65 28 29 20    /* DataSize() 
244b0 63 61 6e 6e 6f 74 20 66 61 69 6c 20 2a 2f 0a 20  cannot fail */. 
244c0 20 20 20 69 66 28 20 6e 3e 28 75 33 32 29 64 62     if( n>(u32)db
244d0 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f  ->aLimit[SQLITE_
244e0 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b  LIMIT_LENGTH] ){
244f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  .      goto too_
24500 62 69 67 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  big;.    }.  }. 
24510 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
24520 4d 65 6d 47 72 6f 77 28 70 4f 75 74 2c 20 6e 2c  MemGrow(pOut, n,
24530 20 30 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20   0) ){.    goto 
24540 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f  no_mem;.  }.  pO
24550 75 74 2d 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d  ut->n = n;.  Mem
24560 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74  SetTypeFlag(pOut
24570 2c 20 4d 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 69  , MEM_Blob);.  i
24580 66 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  f( pC->isTable==
24590 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
245a0 6c 69 74 65 33 42 74 72 65 65 4b 65 79 28 70 43  lite3BtreeKey(pC
245b0 72 73 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 2d  rsr, 0, n, pOut-
245c0 3e 7a 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  >z);.  }else{.  
245d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
245e0 72 65 65 44 61 74 61 28 70 43 72 73 72 2c 20 30  reeData(pCrsr, 0
245f0 2c 20 6e 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20  , n, pOut->z);. 
24600 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d   }.  pOut->enc =
24610 20 53 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f   SQLITE_UTF8;  /
24620 2a 20 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c  * In case the bl
24630 6f 62 20 69 73 20 65 76 65 72 20 63 61 73 74 20  ob is ever cast 
24640 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20 55 50 44  to text */.  UPD
24650 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
24660 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
24670 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
24680 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
24690 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
246a0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
246b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
246c0 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
246d0 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
246e0 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
246f0 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
24700 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
24710 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
24720 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
24730 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
24740 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
24750 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
24760 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
24770 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
24780 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
24790 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
247a0 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
247b0 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
247c0 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
247d0 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
247e0 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
247f0 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
24800 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
24810 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24820 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20  out2-prerelease 
24830 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
24840 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a 20 20  *pC;.  i64 v;.  
24850 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
24860 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
24870 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
24880 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74 28  dule;..  assert(
24890 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
248a0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
248b0 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
248c0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
248d0 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
248e0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
248f0 70 73 65 75 64 6f 54 61 62 6c 65 52 65 67 3d 3d  pseudoTableReg==
24900 30 20 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  0 || pC->nullRow
24910 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75   );.  if( pC->nu
24920 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75  llRow ){.    pOu
24930 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e  t->flags = MEM_N
24940 75 6c 6c 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ull;.    break;.
24950 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
24960 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 29  deferredMoveto )
24970 7b 0a 20 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f  {.    v = pC->mo
24980 76 65 74 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e  vetoTarget;.#ifn
24990 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
249a0 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d  VIRTUALTABLE.  }
249b0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 70 56 74  else if( pC->pVt
249c0 61 62 43 75 72 73 6f 72 20 29 7b 0a 20 20 20 20  abCursor ){.    
249d0 70 56 74 61 62 20 3d 20 70 43 2d 3e 70 56 74 61  pVtab = pC->pVta
249e0 62 43 75 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a  bCursor->pVtab;.
249f0 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56      pModule = pV
24a00 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
24a10 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75 6c    assert( pModul
24a20 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20 20  e->xRowid );.   
24a30 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
24a40 52 6f 77 69 64 28 70 43 2d 3e 70 56 74 61 62 43  Rowid(pC->pVtabC
24a50 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20 20  ursor, &v);.    
24a60 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
24a70 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
24a80 29 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  );.#endif /* SQL
24a90 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
24aa0 54 41 42 4c 45 20 2a 2f 0a 20 20 7d 65 6c 73 65  TABLE */.  }else
24ab0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24ac0 2d 3e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  ->pCursor!=0 );.
24ad0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
24ae0 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
24af0 28 70 43 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (pC);.    if( rc
24b00 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
24b10 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
24b20 69 66 28 20 70 43 2d 3e 72 6f 77 69 64 49 73 56  if( pC->rowidIsV
24b30 61 6c 69 64 20 29 7b 0a 20 20 20 20 20 20 76 20  alid ){.      v 
24b40 3d 20 70 43 2d 3e 6c 61 73 74 52 6f 77 69 64 3b  = pC->lastRowid;
24b50 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
24b60 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
24b70 72 65 65 4b 65 79 53 69 7a 65 28 70 43 2d 3e 70  reeKeySize(pC->p
24b80 43 75 72 73 6f 72 2c 20 26 76 29 3b 0a 20 20 20  Cursor, &v);.   
24b90 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
24ba0 51 4c 49 54 45 5f 4f 4b 20 29 3b 20 20 2f 2a 20  QLITE_OK );  /* 
24bb0 41 6c 77 61 79 73 20 73 6f 20 62 65 63 61 75 73  Always so becaus
24bc0 65 20 6f 66 20 43 75 72 73 6f 72 4d 6f 76 65 74  e of CursorMovet
24bd0 6f 28 29 20 61 62 6f 76 65 20 2a 2f 0a 20 20 20  o() above */.   
24be0 20 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75   }.  }.  pOut->u
24bf0 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b 3b  .i = v;.  break;
24c00 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e  .}../* Opcode: N
24c10 75 6c 6c 52 6f 77 20 50 31 20 2a 20 2a 20 2a 20  ullRow P1 * * * 
24c20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65  *.**.** Move the
24c30 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61 20   cursor P1 to a 
24c40 6e 75 6c 6c 20 72 6f 77 2e 20 20 41 6e 79 20 4f  null row.  Any O
24c50 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65 72 61 74 69  P_Column operati
24c60 6f 6e 73 0a 2a 2a 20 74 68 61 74 20 6f 63 63 75  ons.** that occu
24c70 72 20 77 68 69 6c 65 20 74 68 65 20 63 75 72 73  r while the curs
24c80 6f 72 20 69 73 20 6f 6e 20 74 68 65 20 6e 75 6c  or is on the nul
24c90 6c 20 72 6f 77 20 77 69 6c 6c 20 61 6c 77 61 79  l row will alway
24ca0 73 0a 2a 2a 20 77 72 69 74 65 20 61 20 4e 55 4c  s.** write a NUL
24cb0 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75  L..*/.case OP_Nu
24cc0 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56 64 62 65 43  llRow: {.  VdbeC
24cd0 75 72 73 6f 72 20 2a 70 43 3b 0a 0a 20 20 61 73  ursor *pC;..  as
24ce0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
24cf0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
24d00 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
24d10 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
24d20 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
24d30 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c  !=0 );.  pC->nul
24d40 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 2d 3e  lRow = 1;.  pC->
24d50 72 6f 77 69 64 49 73 56 61 6c 69 64 20 3d 20 30  rowidIsValid = 0
24d60 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61  ;.  pC->cacheSta
24d70 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c  tus = CACHE_STAL
24d80 45 3b 0a 20 20 69 66 28 20 70 43 2d 3e 70 43 75  E;.  if( pC->pCu
24d90 72 73 6f 72 20 29 7b 0a 20 20 20 20 73 71 6c 69  rsor ){.    sqli
24da0 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
24db0 73 6f 72 28 70 43 2d 3e 70 43 75 72 73 6f 72 29  sor(pC->pCursor)
24dc0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
24dd0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
24de0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
24df0 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65  .** The next use
24e00 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72   of the Rowid or
24e10 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76 20   Column or Prev 
24e20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20  instruction for 
24e30 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65  P1 .** will refe
24e40 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65 6e  r to the last en
24e50 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  try in the datab
24e60 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  ase table or ind
24e70 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61  ex..** If the ta
24e80 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20  ble or index is 
24e90 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20  empty and P2>0, 
24ea0 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69  then jump immedi
24eb0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20  ately to P2..** 
24ec0 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66  If P2 is 0 or if
24ed0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
24ee0 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79  dex is not empty
24ef0 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  , fall through.*
24f00 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
24f10 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ng instruction..
24f20 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
24f30 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
24f40 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
24f50 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72 73  o move in revers
24f60 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  e order,.** from
24f70 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64 20   the end toward 
24f80 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20  the beginning.  
24f90 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
24fa0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
24fb0 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
24fc0 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78  se Prev, not Nex
24fd0 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 61  t..*/.case OP_La
24fe0 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  st: {        /* 
24ff0 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25000 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25010 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25020 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
25030 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25040 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25050 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25060 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25070 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25080 20 29 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43   );.  pCrsr = pC
25090 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73  ->pCursor;.  res
250a0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
250b0 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 72 63  pCrsr!=0 );.  rc
250c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
250d0 61 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  ast(pCrsr, &res)
250e0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
250f0 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 70 43 2d  = (u8)res;.  pC-
25100 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
25110 3d 20 30 3b 0a 20 20 70 43 2d 3e 72 6f 77 69 64  = 0;.  pC->rowid
25120 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 70  IsValid = 0;.  p
25130 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
25140 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69   CACHE_STALE;.#i
25150 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25160 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
25170 20 4f 50 5f 4c 61 73 74 3b 0a 23 65 6e 64 69 66   OP_Last;.#endif
25180 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30  .  if( pOp->p2>0
25190 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
251a0 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32  chTaken(res!=0,2
251b0 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73 20 29  );.    if( res )
251c0 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
251d0 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
251e0 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  }.../* Opcode: S
251f0 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ort P1 P2 * * *.
25200 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
25210 65 20 64 6f 65 73 20 65 78 61 63 74 6c 79 20 74  e does exactly t
25220 68 65 20 73 61 6d 65 20 74 68 69 6e 67 20 61 73  he same thing as
25230 20 4f 50 5f 52 65 77 69 6e 64 20 65 78 63 65 70   OP_Rewind excep
25240 74 20 74 68 61 74 0a 2a 2a 20 69 74 20 69 6e 63  t that.** it inc
25250 72 65 6d 65 6e 74 73 20 61 6e 20 75 6e 64 6f 63  rements an undoc
25260 75 6d 65 6e 74 65 64 20 67 6c 6f 62 61 6c 20 76  umented global v
25270 61 72 69 61 62 6c 65 20 75 73 65 64 20 66 6f 72  ariable used for
25280 20 74 65 73 74 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20   testing..**.** 
25290 53 6f 72 74 69 6e 67 20 69 73 20 61 63 63 6f 6d  Sorting is accom
252a0 70 6c 69 73 68 65 64 20 62 79 20 77 72 69 74 69  plished by writi
252b0 6e 67 20 72 65 63 6f 72 64 73 20 69 6e 74 6f 20  ng records into 
252c0 61 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 2c  a sorting index,
252d0 0a 2a 2a 20 74 68 65 6e 20 72 65 77 69 6e 64 69  .** then rewindi
252e0 6e 67 20 74 68 61 74 20 69 6e 64 65 78 20 61 6e  ng that index an
252f0 64 20 70 6c 61 79 69 6e 67 20 69 74 20 62 61 63  d playing it bac
25300 6b 20 66 72 6f 6d 20 62 65 67 69 6e 6e 69 6e 67  k from beginning
25310 20 74 6f 0a 2a 2a 20 65 6e 64 2e 20 20 57 65 20   to.** end.  We 
25320 75 73 65 20 74 68 65 20 4f 50 5f 53 6f 72 74 20  use the OP_Sort 
25330 6f 70 63 6f 64 65 20 69 6e 73 74 65 61 64 20 6f  opcode instead o
25340 66 20 4f 50 5f 52 65 77 69 6e 64 20 74 6f 20 64  f OP_Rewind to d
25350 6f 20 74 68 65 0a 2a 2a 20 72 65 77 69 6e 64 69  o the.** rewindi
25360 6e 67 20 73 6f 20 74 68 61 74 20 74 68 65 20 67  ng so that the g
25370 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 77  lobal variable w
25380 69 6c 6c 20 62 65 20 69 6e 63 72 65 6d 65 6e 74  ill be increment
25390 65 64 20 61 6e 64 0a 2a 2a 20 72 65 67 72 65 73  ed and.** regres
253a0 73 69 6f 6e 20 74 65 73 74 73 20 63 61 6e 20 64  sion tests can d
253b0 65 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72  etermine whether
253c0 20 6f 72 20 6e 6f 74 20 74 68 65 20 6f 70 74 69   or not the opti
253d0 6d 69 7a 65 72 20 69 73 0a 2a 2a 20 63 6f 72 72  mizer is.** corr
253e0 65 63 74 6c 79 20 6f 70 74 69 6d 69 7a 69 6e 67  ectly optimizing
253f0 20 6f 75 74 20 73 6f 72 74 73 2e 0a 2a 2f 0a 63   out sorts..*/.c
25400 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f 72  ase OP_SorterSor
25410 74 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  t:    /* jump */
25420 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 3a 20 7b  .case OP_Sort: {
25430 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
25440 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
25450 5f 54 45 53 54 0a 20 20 73 71 6c 69 74 65 33 5f  _TEST.  sqlite3_
25460 73 6f 72 74 5f 63 6f 75 6e 74 2b 2b 3b 0a 20 20  sort_count++;.  
25470 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
25480 6f 75 6e 74 2d 2d 3b 0a 23 65 6e 64 69 66 0a 20  ount--;.#endif. 
25490 20 70 2d 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c   p->aCounter[SQL
254a0 49 54 45 5f 53 54 4d 54 53 54 41 54 55 53 5f 53  ITE_STMTSTATUS_S
254b0 4f 52 54 5d 2b 2b 3b 0a 20 20 2f 2a 20 46 61 6c  ORT]++;.  /* Fal
254c0 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
254d0 50 5f 52 65 77 69 6e 64 20 2a 2f 0a 7d 0a 2f 2a  P_Rewind */.}./*
254e0 20 4f 70 63 6f 64 65 3a 20 52 65 77 69 6e 64 20   Opcode: Rewind 
254f0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
25500 2a 20 54 68 65 20 6e 65 78 74 20 75 73 65 20 6f  * The next use o
25510 66 20 74 68 65 20 52 6f 77 69 64 20 6f 72 20 43  f the Rowid or C
25520 6f 6c 75 6d 6e 20 6f 72 20 4e 65 78 74 20 69 6e  olumn or Next in
25530 73 74 72 75 63 74 69 6f 6e 20 66 6f 72 20 50 31  struction for P1
25540 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66 65 72 20   .** will refer 
25550 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6e 74  to the first ent
25560 72 79 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ry in the databa
25570 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
25580 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74 61 62  x..** If the tab
25590 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73 20 65  le or index is e
255a0 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c 20 74  mpty and P2>0, t
255b0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
255c0 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 20 49  tely to P2..** I
255d0 66 20 50 32 20 69 73 20 30 20 6f 72 20 69 66 20  f P2 is 0 or if 
255e0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
255f0 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c  ex is not empty,
25600 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a   fall through.**
25610 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   to the followin
25620 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  g instruction..*
25630 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
25640 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73   leaves the curs
25650 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f  or configured to
25660 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64   move in forward
25670 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20   order,.** from 
25680 74 68 65 20 62 65 67 69 6e 69 6e 67 20 74 6f 77  the begining tow
25690 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
256a0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
256b0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
256c0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
256d0 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
256e0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69  .*/.case OP_Rewi
256f0 6e 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  nd: {        /* 
25700 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75  jump */.  VdbeCu
25710 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
25720 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
25730 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72  nt res;..  asser
25740 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
25750 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
25760 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
25770 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
25780 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
25790 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73   );.  assert( is
257a0 53 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70  Sorter(pC)==(pOp
257b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72  ->opcode==OP_Sor
257c0 74 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65  terSort) );.  re
257d0 73 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51  s = 1;.#ifdef SQ
257e0 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d  LITE_DEBUG.  pC-
257f0 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77  >seekOp = OP_Rew
25800 69 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ind;.#endif.  if
25810 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29  ( isSorter(pC) )
25820 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  {.    rc = sqlit
25830 65 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69  e3VdbeSorterRewi
25840 6e 64 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29  nd(db, pC, &res)
25850 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
25860 43 72 73 72 20 3d 20 70 43 2d 3e 70 43 75 72 73  Crsr = pC->pCurs
25870 6f 72 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  or;.    assert( 
25880 70 43 72 73 72 20 29 3b 0a 20 20 20 20 72 63 20  pCrsr );.    rc 
25890 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 46 69  = sqlite3BtreeFi
258a0 72 73 74 28 70 43 72 73 72 2c 20 26 72 65 73 29  rst(pCrsr, &res)
258b0 3b 0a 20 20 20 20 70 43 2d 3e 64 65 66 65 72 72  ;.    pC->deferr
258c0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
258d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
258e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
258f0 0a 20 20 20 20 70 43 2d 3e 72 6f 77 69 64 49 73  .    pC->rowidIs
25900 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 7d 0a 20  Valid = 0;.  }. 
25910 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28   pC->nullRow = (
25920 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72 74  u8)res;.  assert
25930 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70  ( pOp->p2>0 && p
25940 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
25950 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
25960 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20  en(res!=0,2);.  
25970 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 70  if( res ){.    p
25980 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
25990 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
259a0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74  ./* Opcode: Next
259b0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
259c0 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 63 75  **.** Advance cu
259d0 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20  rsor P1 so that 
259e0 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  it points to the
259f0 20 6e 65 78 74 20 6b 65 79 2f 64 61 74 61 20 70   next key/data p
25a00 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
25a10 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
25a20 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
25a30 6f 72 65 20 6b 65 79 2f 76 61 6c 75 65 20 70 61  ore key/value pa
25a40 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74 68  irs then fall th
25a50 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20  rough.** to the 
25a60 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75  following instru
25a70 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20 74  ction.  But if t
25a80 68 65 20 63 75 72 73 6f 72 20 61 64 76 61 6e 63  he cursor advanc
25a90 65 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  e was successful
25aa0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
25ab0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
25ac0 2a 2a 20 54 68 65 20 4e 65 78 74 20 6f 70 63 6f  ** The Next opco
25ad0 64 65 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  de is only valid
25ae0 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e 20 53 65   following an Se
25af0 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
25b00 0a 2a 2a 20 4f 50 5f 52 65 77 69 6e 64 20 6f 70  .** OP_Rewind op
25b10 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f 73  code used to pos
25b20 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f 72  ition the cursor
25b30 2e 20 20 4e 65 78 74 20 69 73 20 6e 6f 74 20 61  .  Next is not a
25b40 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f 6c  llowed.** to fol
25b50 6c 6f 77 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b  low SeekLT, Seek
25b60 4c 45 2c 20 6f 72 20 4f 50 5f 4c 61 73 74 2e 0a  LE, or OP_Last..
25b70 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20 63 75 72  **.** The P1 cur
25b80 73 6f 72 20 6d 75 73 74 20 62 65 20 66 6f 72 20  sor must be for 
25b90 61 20 72 65 61 6c 20 74 61 62 6c 65 2c 20 6e 6f  a real table, no
25ba0 74 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  t a pseudo-table
25bb0 2e 20 20 50 31 20 6d 75 73 74 20 68 61 76 65 0a  .  P1 must have.
25bc0 2a 2a 20 62 65 65 6e 20 6f 70 65 6e 65 64 20 70  ** been opened p
25bd0 72 69 6f 72 20 74 6f 20 74 68 69 73 20 6f 70 63  rior to this opc
25be0 6f 64 65 20 6f 72 20 74 68 65 20 70 72 6f 67 72  ode or the progr
25bf0 61 6d 20 77 69 6c 6c 20 73 65 67 66 61 75 6c 74  am will segfault
25c00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33 20 76  ..**.** The P3 v
25c10 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74 20 74  alue is a hint t
25c20 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d 70 6c  o the btree impl
25c30 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66 20 50  ementation. If P
25c40 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20 6d 65  3==1, that.** me
25c50 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53 51 4c  ans P1 is an SQL
25c60 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61 74 20   index and that 
25c70 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e  this instruction
25c80 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65 65 6e   could have been
25c90 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66 20 74  .** omitted if t
25ca0 68 61 74 20 69 6e 64 65 78 20 68 61 64 20 62 65  hat index had be
25cb0 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33 20 69  en unique.  P3 i
25cc0 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20 50 33  s usually 0.  P3
25cd0 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 65 69   is.** always ei
25ce0 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a 2a 0a  ther 0 or 1..**.
25cf0 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79 73 20  ** P4 is always 
25d00 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56 41 4e  of type P4_ADVAN
25d10 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69 6f 6e  CE. The function
25d20 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74 73 20   pointer points 
25d30 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42 74 72  to.** sqlite3Btr
25d40 65 65 4e 65 78 74 28 29 2e 0a 2a 2a 0a 2a 2a 20  eeNext()..**.** 
25d50 49 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76  If P5 is positiv
25d60 65 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69  e and the jump i
25d70 73 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76  s taken, then ev
25d80 65 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e  ent counter.** n
25d90 75 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68  umber P5-1 in th
25da0 65 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65  e prepared state
25db0 6d 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e  ment is incremen
25dc0 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ted..**.** See a
25dd0 6c 73 6f 3a 20 50 72 65 76 2c 20 4e 65 78 74 49  lso: Prev, NextI
25de0 66 4f 70 65 6e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  fOpen.*/./* Opco
25df0 64 65 3a 20 4e 65 78 74 49 66 4f 70 65 6e 20 50  de: NextIfOpen P
25e00 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
25e10 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
25e20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20  works just like 
25e30 4e 65 78 74 20 65 78 63 65 70 74 20 74 68 61 74  Next except that
25e40 20 69 66 20 63 75 72 73 6f 72 20 50 31 20 69 73   if cursor P1 is
25e50 20 6e 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20   not.** open it 
25e60 62 65 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e  behaves a no-op.
25e70 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50  .*/./* Opcode: P
25e80 72 65 76 20 50 31 20 50 32 20 50 33 20 50 34 20  rev P1 P2 P3 P4 
25e90 50 35 0a 2a 2a 0a 2a 2a 20 42 61 63 6b 20 75 70  P5.**.** Back up
25ea0 20 63 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68   cursor P1 so th
25eb0 61 74 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  at it points to 
25ec0 74 68 65 20 70 72 65 76 69 6f 75 73 20 6b 65 79  the previous key
25ed0 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
25ee0 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
25ef0 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 69  dex.  If there i
25f00 73 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 6b 65  s no previous ke
25f10 79 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68  y/value pairs th
25f20 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  en fall through.
25f30 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
25f40 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
25f50 20 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72    But if the cur
25f60 73 6f 72 20 62 61 63 6b 75 70 20 77 61 73 20 73  sor backup was s
25f70 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
25f80 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
25f90 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 0a 2a 2a 20 54  o P2..**.**.** T
25fa0 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20 69  he Prev opcode i
25fb0 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c  s only valid fol
25fc0 6c 6f 77 69 6e 67 20 61 6e 20 53 65 65 6b 4c 54  lowing an SeekLT
25fd0 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 0a 2a 2a 20  , SeekLE, or.** 
25fe0 4f 50 5f 4c 61 73 74 20 6f 70 63 6f 64 65 20 75  OP_Last opcode u
25ff0 73 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20  sed to position 
26000 74 68 65 20 63 75 72 73 6f 72 2e 20 20 50 72 65  the cursor.  Pre
26010 76 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64  v is not allowed
26020 0a 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65  .** to follow Se
26030 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 6f 72  ekGT, SeekGE, or
26040 20 4f 50 5f 52 65 77 69 6e 64 2e 0a 2a 2a 0a 2a   OP_Rewind..**.*
26050 2a 20 54 68 65 20 50 31 20 63 75 72 73 6f 72 20  * The P1 cursor 
26060 6d 75 73 74 20 62 65 20 66 6f 72 20 61 20 72 65  must be for a re
26070 61 6c 20 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20  al table, not a 
26080 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20 20 49  pseudo-table.  I
26090 66 20 50 31 20 69 73 0a 2a 2a 20 6e 6f 74 20 6f  f P1 is.** not o
260a0 70 65 6e 20 74 68 65 6e 20 74 68 65 20 62 65 68  pen then the beh
260b0 61 76 69 6f 72 20 69 73 20 75 6e 64 65 66 69 6e  avior is undefin
260c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 33  ed..**.** The P3
260d0 20 76 61 6c 75 65 20 69 73 20 61 20 68 69 6e 74   value is a hint
260e0 20 74 6f 20 74 68 65 20 62 74 72 65 65 20 69 6d   to the btree im
260f0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 20 49 66  plementation. If
26100 20 50 33 3d 3d 31 2c 20 74 68 61 74 0a 2a 2a 20   P3==1, that.** 
26110 6d 65 61 6e 73 20 50 31 20 69 73 20 61 6e 20 53  means P1 is an S
26120 51 4c 20 69 6e 64 65 78 20 61 6e 64 20 74 68 61  QL index and tha
26130 74 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  t this instructi
26140 6f 6e 20 63 6f 75 6c 64 20 68 61 76 65 20 62 65  on could have be
26150 65 6e 0a 2a 2a 20 6f 6d 69 74 74 65 64 20 69 66  en.** omitted if
26160 20 74 68 61 74 20 69 6e 64 65 78 20 68 61 64 20   that index had 
26170 62 65 65 6e 20 75 6e 69 71 75 65 2e 20 20 50 33  been unique.  P3
26180 20 69 73 20 75 73 75 61 6c 6c 79 20 30 2e 20 20   is usually 0.  
26190 50 33 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20  P3 is.** always 
261a0 65 69 74 68 65 72 20 30 20 6f 72 20 31 2e 0a 2a  either 0 or 1..*
261b0 2a 0a 2a 2a 20 50 34 20 69 73 20 61 6c 77 61 79  *.** P4 is alway
261c0 73 20 6f 66 20 74 79 70 65 20 50 34 5f 41 44 56  s of type P4_ADV
261d0 41 4e 43 45 2e 20 54 68 65 20 66 75 6e 63 74 69  ANCE. The functi
261e0 6f 6e 20 70 6f 69 6e 74 65 72 20 70 6f 69 6e 74  on pointer point
261f0 73 20 74 6f 0a 2a 2a 20 73 71 6c 69 74 65 33 42  s to.** sqlite3B
26200 74 72 65 65 50 72 65 76 69 6f 75 73 28 29 2e 0a  treePrevious()..
26210 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 70  **.** If P5 is p
26220 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65 20  ositive and the 
26230 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20 74  jump is taken, t
26240 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74 65  hen event counte
26250 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d 31  r.** number P5-1
26260 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65 64   in the prepared
26270 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69 6e   statement is in
26280 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2f 0a 2f 2a  cremented..*/./*
26290 20 4f 70 63 6f 64 65 3a 20 50 72 65 76 49 66 4f   Opcode: PrevIfO
262a0 70 65 6e 20 50 31 20 50 32 20 50 33 20 50 34 20  pen P1 P2 P3 P4 
262b0 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
262c0 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
262d0 6c 69 6b 65 20 50 72 65 76 20 65 78 63 65 70 74  like Prev except
262e0 20 74 68 61 74 20 69 66 20 63 75 72 73 6f 72 20   that if cursor 
262f0 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 70 65  P1 is not.** ope
26300 6e 20 69 74 20 62 65 68 61 76 65 73 20 61 20 6e  n it behaves a n
26310 6f 2d 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  o-op..*/.case OP
26320 5f 53 6f 72 74 65 72 4e 65 78 74 3a 20 7b 20 20  _SorterNext: {  
26330 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62  /* jump */.  Vdb
26340 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
26350 6e 74 20 72 65 73 3b 0a 0a 20 20 70 43 20 3d 20  nt res;..  pC = 
26360 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26370 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
26380 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 72  orter(pC) );.  r
26390 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73  es = 0;.  rc = s
263a0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
263b0 4e 65 78 74 28 64 62 2c 20 70 43 2c 20 26 72 65  Next(db, pC, &re
263c0 73 29 3b 0a 20 20 67 6f 74 6f 20 6e 65 78 74 5f  s);.  goto next_
263d0 74 61 69 6c 3b 0a 63 61 73 65 20 4f 50 5f 50 72  tail;.case OP_Pr
263e0 65 76 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20  evIfOpen:    /* 
263f0 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
26400 4e 65 78 74 49 66 4f 70 65 6e 3a 20 20 20 20 2f  NextIfOpen:    /
26410 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20  * jump */.  if( 
26420 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
26430 5d 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ]==0 ) break;.  
26440 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20  /* Fall through 
26450 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 3a  */.case OP_Prev:
26460 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
26470 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78  p */.case OP_Nex
26480 74 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  t:          /* j
26490 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
264a0 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
264b0 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
264c0 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  r );.  assert( p
264d0 4f 70 2d 3e 70 35 3c 41 72 72 61 79 53 69 7a 65  Op->p5<ArraySize
264e0 28 70 2d 3e 61 43 6f 75 6e 74 65 72 29 20 29 3b  (p->aCounter) );
264f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
26500 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 72 65 73  [pOp->p1];.  res
26510 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73   = pOp->p3;.  as
26520 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26530 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
26540 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
26550 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
26560 70 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73  pCursor );.  ass
26570 65 72 74 28 20 72 65 73 3d 3d 30 20 7c 7c 20 28  ert( res==0 || (
26580 72 65 73 3d 3d 31 20 26 26 20 70 43 2d 3e 69 73  res==1 && pC->is
26590 54 61 62 6c 65 3d 3d 30 29 20 29 3b 0a 20 20 74  Table==0) );.  t
265a0 65 73 74 63 61 73 65 28 20 72 65 73 3d 3d 31 20  estcase( res==1 
265b0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
265c0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
265d0 74 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41 64  t || pOp->p4.xAd
265e0 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42 74  vance==sqlite3Bt
265f0 72 65 65 4e 65 78 74 20 29 3b 0a 20 20 61 73 73  reeNext );.  ass
26600 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
26610 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70  !=OP_Prev || pOp
26620 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
26630 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
26640 6f 75 73 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ous );.  assert(
26650 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
26660 5f 4e 65 78 74 49 66 4f 70 65 6e 20 7c 7c 20 70  _NextIfOpen || p
26670 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d  Op->p4.xAdvance=
26680 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78  =sqlite3BtreeNex
26690 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  t );.  assert( p
266a0 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50  Op->opcode!=OP_P
266b0 72 65 76 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70  revIfOpen || pOp
266c0 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73  ->p4.xAdvance==s
266d0 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
266e0 6f 75 73 29 3b 0a 0a 20 20 2f 2a 20 54 68 65 20  ous);..  /* The 
266f0 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
26700 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
26710 65 65 6b 47 54 2c 20 53 65 65 6b 47 45 2c 20 61  eekGT, SeekGE, a
26720 6e 64 20 52 65 77 69 6e 64 2e 0a 20 20 2a 2a 20  nd Rewind..  ** 
26730 54 68 65 20 50 72 65 76 20 6f 70 63 6f 64 65 20  The Prev opcode 
26740 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 61 66 74  is only used aft
26750 65 72 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  er SeekLT, SeekL
26760 45 2c 20 61 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a  E, and Last. */.
26770 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
26780 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c  pcode!=OP_Next |
26790 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f  | pOp->opcode!=O
267a0 50 5f 4e 65 78 74 49 66 4f 70 65 6e 0a 20 20 20  P_NextIfOpen.   
267b0 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f      || pC->seekO
267c0 70 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20  p==OP_SeekGT || 
267d0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
267e0 65 65 6b 47 45 0a 20 20 20 20 20 20 20 7c 7c 20  eekGE.       || 
267f0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52  pC->seekOp==OP_R
26800 65 77 69 6e 64 20 29 3b 0a 20 20 61 73 73 65 72  ewind );.  asser
26810 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
26820 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
26830 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
26840 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
26850 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
26860 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
26870 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
26880 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
26890 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
268a0 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
268b0 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 70 43 75  xAdvance(pC->pCu
268c0 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 6e 65 78  rsor, &res);.nex
268d0 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d 3e 63 61  t_tail:.  pC->ca
268e0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
268f0 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64 62 65 42  E_STALE;.  VdbeB
26900 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 3d 3d  ranchTaken(res==
26910 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73 3d  0,2);.  if( res=
26920 3d 30 20 29 7b 0a 20 20 20 20 70 43 2d 3e 6e 75  =0 ){.    pC->nu
26930 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 70  llRow = 0;.    p
26940 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b  c = pOp->p2 - 1;
26950 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  .    p->aCounter
26960 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69 66  [pOp->p5]++;.#if
26970 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a  def SQLITE_TEST.
26980 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61 72      sqlite3_sear
26990 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64  ch_count++;.#end
269a0 69 66 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  if.  }else{.    
269b0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
269c0 0a 20 20 7d 0a 20 20 70 43 2d 3e 72 6f 77 69 64  .  }.  pC->rowid
269d0 49 73 56 61 6c 69 64 20 3d 20 30 3b 0a 20 20 67  IsValid = 0;.  g
269e0 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e  oto check_for_in
269f0 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f  terrupt;.}../* O
26a00 70 63 6f 64 65 3a 20 49 64 78 49 6e 73 65 72 74  pcode: IdxInsert
26a10 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a 2a   P1 P2 P3 * P5.*
26a20 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
26a30 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69  r[P2].**.** Regi
26a40 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e  ster P2 holds an
26a50 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d   SQL index key m
26a60 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  ade using the.**
26a70 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74   MakeRecord inst
26a80 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20  ructions.  This 
26a90 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68  opcode writes th
26aa0 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74  at key.** into t
26ab0 68 65 20 69 6e 64 65 78 20 50 31 2e 20 20 44 61  he index P1.  Da
26ac0 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
26ad0 20 69 73 20 6e 69 6c 2e 0a 2a 2a 0a 2a 2a 20 50   is nil..**.** P
26ae0 33 20 69 73 20 61 20 66 6c 61 67 20 74 68 61 74  3 is a flag that
26af0 20 70 72 6f 76 69 64 65 73 20 61 20 68 69 6e 74   provides a hint
26b00 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c   to the b-tree l
26b10 61 79 65 72 20 74 68 61 74 20 74 68 69 73 0a 2a  ayer that this.*
26b20 2a 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65  * insert is like
26b30 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65  ly to be an appe
26b40 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20  nd..**.** If P5 
26b50 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e  has the OPFLAG_N
26b60 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20  CHANGE bit set, 
26b70 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20  then the change 
26b80 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e  counter is.** in
26b90 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69  cremented by thi
26ba0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  s instruction.  
26bb0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
26bc0 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65  HANGE bit is cle
26bd0 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20  ar,.** then the 
26be0 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69  change counter i
26bf0 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a  s unchanged..**.
26c00 2a 2a 20 49 66 20 50 35 20 68 61 73 20 74 68 65  ** If P5 has the
26c10 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
26c20 45 53 55 4c 54 20 62 69 74 20 73 65 74 2c 20 74  ESULT bit set, t
26c30 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 6d  hen the cursor m
26c40 75 73 74 20 68 61 76 65 0a 2a 2a 20 6a 75 73 74  ust have.** just
26c50 20 64 6f 6e 65 20 61 20 73 65 65 6b 20 74 6f 20   done a seek to 
26c60 74 68 65 20 73 70 6f 74 20 77 68 65 72 65 20 74  the spot where t
26c70 68 65 20 6e 65 77 20 65 6e 74 72 79 20 69 73 20  he new entry is 
26c80 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e 0a  to be inserted..
26c90 2a 2a 20 54 68 69 73 20 66 6c 61 67 20 61 76 6f  ** This flag avo
26ca0 69 64 73 20 64 6f 69 6e 67 20 61 6e 20 65 78 74  ids doing an ext
26cb0 72 61 20 73 65 65 6b 2e 0a 2a 2a 0a 2a 2a 20 54  ra seek..**.** T
26cc0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
26cd0 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 69  only works for i
26ce0 6e 64 69 63 65 73 2e 20 20 54 68 65 20 65 71 75  ndices.  The equ
26cf0 69 76 61 6c 65 6e 74 20 69 6e 73 74 72 75 63 74  ivalent instruct
26d00 69 6f 6e 0a 2a 2a 20 66 6f 72 20 74 61 62 6c 65  ion.** for table
26d10 73 20 69 73 20 4f 50 5f 49 6e 73 65 72 74 2e 0a  s is OP_Insert..
26d20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65  */.case OP_Sorte
26d30 72 49 6e 73 65 72 74 3a 20 20 20 20 20 20 20 2f  rInsert:       /
26d40 2a 20 69 6e 32 20 2a 2f 0a 63 61 73 65 20 4f 50  * in2 */.case OP
26d50 5f 49 64 78 49 6e 73 65 72 74 3a 20 7b 20 20 20  _IdxInsert: {   
26d60 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20       /* in2 */. 
26d70 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b   VdbeCursor *pC;
26d80 0a 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72  .  BtCursor *pCr
26d90 73 72 3b 0a 20 20 69 6e 74 20 6e 4b 65 79 3b 0a  sr;.  int nKey;.
26da0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4b    const char *zK
26db0 65 79 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  ey;..  assert( p
26dc0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
26dd0 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
26de0 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
26df0 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
26e00 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
26e10 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74    assert( isSort
26e20 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f 70  er(pC)==(pOp->op
26e30 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
26e40 6e 73 65 72 74 29 20 29 3b 0a 20 20 70 49 6e 32  nsert) );.  pIn2
26e50 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
26e60 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e  ];.  assert( pIn
26e70 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 42  2->flags & MEM_B
26e80 6c 6f 62 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  lob );.  pCrsr =
26e90 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a 20 20   pC->pCursor;.  
26ea0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
26eb0 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20 70  FLAG_NCHANGE ) p
26ec0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 61  ->nChange++;.  a
26ed0 73 73 65 72 74 28 20 70 43 72 73 72 21 3d 30 20  ssert( pCrsr!=0 
26ee0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
26ef0 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20  >isTable==0 );. 
26f00 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c 6f 62   rc = ExpandBlob
26f10 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 72 63  (pIn2);.  if( rc
26f20 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
26f30 20 20 20 69 66 28 20 69 73 53 6f 72 74 65 72 28     if( isSorter(
26f40 70 43 29 20 29 7b 0a 20 20 20 20 20 20 72 63 20  pC) ){.      rc 
26f50 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
26f60 74 65 72 57 72 69 74 65 28 64 62 2c 20 70 43 2c  terWrite(db, pC,
26f70 20 70 49 6e 32 29 3b 0a 20 20 20 20 7d 65 6c 73   pIn2);.    }els
26f80 65 7b 0a 20 20 20 20 20 20 6e 4b 65 79 20 3d 20  e{.      nKey = 
26f90 70 49 6e 32 2d 3e 6e 3b 0a 20 20 20 20 20 20 7a  pIn2->n;.      z
26fa0 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 7a 3b 0a 20  Key = pIn2->z;. 
26fb0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
26fc0 33 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 72  3BtreeInsert(pCr
26fd0 73 72 2c 20 7a 4b 65 79 2c 20 6e 4b 65 79 2c 20  sr, zKey, nKey, 
26fe0 22 22 2c 20 30 2c 20 30 2c 20 70 4f 70 2d 3e 70  "", 0, 0, pOp->p
26ff0 33 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 28  3, .          ((
27000 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
27010 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 29 20  _USESEEKRESULT) 
27020 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74  ? pC->seekResult
27030 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20 20 20   : 0).          
27040 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
27050 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
27060 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  eto==0 );.      
27070 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27080 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27090 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
270a0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
270b0 49 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20  IdxDelete P1 P2 
270c0 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
270d0 69 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d  is: key=r[P2@P3]
270e0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65  .**.** The conte
270f0 6e 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65  nt of P3 registe
27100 72 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72  rs starting at r
27110 65 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a  egister P2 form.
27120 2a 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  ** an unpacked i
27130 6e 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f  ndex key. This o
27140 70 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68  pcode removes th
27150 61 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68  at entry from th
27160 65 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e  e .** index open
27170 65 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e  ed by cursor P1.
27180 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44  .*/.case OP_IdxD
27190 65 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43  elete: {.  VdbeC
271a0 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43  ursor *pC;.  BtC
271b0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
271c0 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
271d0 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
271e0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
271f0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27200 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
27210 3e 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d  >p2+pOp->p3<=(p-
27220 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f 72  >nMem-p->nCursor
27230 29 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28  )+1 );.  assert(
27240 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
27250 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f  Op->p1<p->nCurso
27260 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61  r );.  pC = p->a
27270 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
27280 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29   assert( pC!=0 )
27290 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
272a0 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72  pCursor;.  asser
272b0 74 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20  t( pCrsr!=0 );. 
272c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35   assert( pOp->p5
272d0 3d 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  ==0 );.  r.pKeyI
272e0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
272f0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
27300 20 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20   (u16)pOp->p3;. 
27310 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
27320 30 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61  0;.  r.aMem = &a
27330 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 23 69  Mem[pOp->p2];.#i
27340 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
27350 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66 6f 72  G.  { int i; for
27360 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65 6c 64  (i=0; i<r.nField
27370 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28 20 6d  ; i++) assert( m
27380 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61 4d 65  emIsValid(&r.aMe
27390 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e 64 69  m[i]) ); }.#endi
273a0 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  f.  rc = sqlite3
273b0 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63  BtreeMovetoUnpac
273c0 6b 65 64 28 70 43 72 73 72 2c 20 26 72 2c 20 30  ked(pCrsr, &r, 0
273d0 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 69 66  , 0, &res);.  if
273e0 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
273f0 26 26 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  && res==0 ){.   
27400 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
27410 65 65 44 65 6c 65 74 65 28 70 43 72 73 72 29 3b  eeDelete(pCrsr);
27420 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
27430 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
27440 6f 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61  o==0 );.  pC->ca
27450 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
27460 45 5f 53 54 41 4c 45 3b 0a 20 20 62 72 65 61 6b  E_STALE;.  break
27470 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27480 49 64 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a  IdxRowid P1 P2 *
27490 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
274a0 3a 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a  : r[P2]=rowid.**
274b0 0a 2a 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72  .** Write into r
274c0 65 67 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e  egister P2 an in
274d0 74 65 67 65 72 20 77 68 69 63 68 20 69 73 20 74  teger which is t
274e0 68 65 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e  he last entry in
274f0 20 74 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a   the record at.*
27500 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  * the end of the
27510 20 69 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74   index key point
27520 65 64 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20  ed to by cursor 
27530 50 31 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65  P1.  This intege
27540 72 20 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74  r should be.** t
27550 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
27560 74 61 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77  table entry to w
27570 68 69 63 68 20 74 68 69 73 20 69 6e 64 65 78 20  hich this index 
27580 65 6e 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a  entry points..**
27590 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f  .** See also: Ro
275a0 77 69 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e  wid, MakeRecord.
275b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 52  .*/.case OP_IdxR
275c0 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20  owid: {         
275d0 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65       /* out2-pre
275e0 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 42 74 43  release */.  BtC
275f0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20  ursor *pCrsr;.  
27600 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
27610 20 20 69 36 34 20 72 6f 77 69 64 3b 0a 0a 20 20    i64 rowid;..  
27620 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
27630 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
27640 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
27650 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
27660 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
27670 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 72 73 72  pC!=0 );.  pCrsr
27680 20 3d 20 70 43 2d 3e 70 43 75 72 73 6f 72 3b 0a   = pC->pCursor;.
27690 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 21    assert( pCrsr!
276a0 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  =0 );.  pOut->fl
276b0 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a  ags = MEM_Null;.
276c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
276d0 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f 28 70  beCursorMoveto(p
276e0 43 29 3b 0a 20 20 69 66 28 20 4e 45 56 45 52 28  C);.  if( NEVER(
276f0 72 63 29 20 29 20 67 6f 74 6f 20 61 62 6f 72 74  rc) ) goto abort
27700 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
27710 20 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66   assert( pC->def
27720 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29  erredMoveto==0 )
27730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
27740 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
27750 69 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77  if( !pC->nullRow
27760 20 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20   ){.    rowid = 
27770 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65  0;  /* Not neede
27780 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f  d.  Only used to
27790 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
277a0 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
277b0 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f  sqlite3VdbeIdxRo
277c0 77 69 64 28 64 62 2c 20 70 43 72 73 72 2c 20 26  wid(db, pCrsr, &
277d0 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66 28 20  rowid);.    if( 
277e0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
277f0 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  .      goto abor
27800 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27810 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e      }.    pOut->
27820 75 2e 69 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20  u.i = rowid;.   
27830 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
27840 45 4d 5f 49 6e 74 3b 0a 20 20 7d 0a 20 20 62 72  EM_Int;.  }.  br
27850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27860 65 3a 20 49 64 78 47 45 20 50 31 20 50 32 20 50  e: IdxGE P1 P2 P
27870 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
27880 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34  sis: key=r[P3@P4
27890 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72  ].**.** The P4 r
278a0 65 67 69 73 74 65 72 20 76 61 6c 75 65 73 20 62  egister values b
278b0 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 33  eginning with P3
278c0 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65   form an unpacke
278d0 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20  d index .** key 
278e0 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65 20 50  that omits the P
278f0 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d  RIMARY KEY.  Com
27900 70 61 72 65 20 74 68 69 73 20 6b 65 79 20 76 61  pare this key va
27910 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68 65 20  lue against the 
27920 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74 20 50  index .** that P
27930 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70  1 is currently p
27940 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f  ointing to, igno
27950 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41 52 59  ring the PRIMARY
27960 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a   KEY or ROWID .*
27970 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68 65 20  * fields at the 
27980 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  end..**.** If th
27990 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79  e P1 index entry
279a0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
279b0 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65   or equal to the
279c0 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68   key value.** th
279d0 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20  en jump to P2.  
279e0 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74  Otherwise fall t
279f0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
27a00 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
27a10 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
27a20 78 47 54 20 50 31 20 50 32 20 50 33 20 50 34 20  xGT P1 P2 P3 P4 
27a30 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
27a40 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
27a50 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74  ** The P4 regist
27a60 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e  er values beginn
27a70 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d  ing with P3 form
27a80 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64   an unpacked ind
27a90 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20  ex .** key that 
27aa0 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52  omits the PRIMAR
27ab0 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20  Y KEY.  Compare 
27ac0 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61  this key value a
27ad0 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78  gainst the index
27ae0 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20   .** that P1 is 
27af0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
27b00 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
27b10 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
27b20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65  or ROWID .** fie
27b30 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  lds at the end..
27b40 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
27b50 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73 20 67  index entry is g
27b60 72 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20  reater than the 
27b70 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74 68 65  key value.** the
27b80 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 20 4f  n jump to P2.  O
27b90 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
27ba0 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
27bb0 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
27bc0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
27bd0 4c 54 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LT P1 P2 P3 P4 P
27be0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
27bf0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
27c00 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
27c10 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
27c20 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
27c30 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
27c40 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
27c50 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
27c60 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
27c70 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
27c80 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
27c90 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
27ca0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
27cb0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
27cc0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
27cd0 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
27ce0 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
27cf0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
27d00 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
27d10 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 65  is less than the
27d20 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20   key value then 
27d30 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 20 4f  jump to P2..** O
27d40 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68  therwise fall th
27d50 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78  rough to the nex
27d60 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
27d70 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  /./* Opcode: Idx
27d80 4c 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50  LE P1 P2 P3 P4 P
27d90 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  5.** Synopsis: k
27da0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
27db0 2a 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65  * The P4 registe
27dc0 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69  r values beginni
27dd0 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20  ng with P3 form 
27de0 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65  an unpacked inde
27df0 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f  x .** key that o
27e00 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59  mits the PRIMARY
27e10 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e 20 20   KEY or ROWID.  
27e20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79  Compare this key
27e30 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 0a 2a   value against.*
27e40 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68 61 74  * the index that
27e50 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
27e60 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
27e70 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
27e80 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52 4f 57  RY KEY or.** ROW
27e90 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69 6e 64  ID on the P1 ind
27ea0 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ex..**.** If the
27eb0 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20   P1 index entry 
27ec0 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20  is less than or 
27ed0 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79  equal to the key
27ee0 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70   value then jump
27ef0 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68 65 72  .** to P2. Other
27f00 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67  wise fall throug
27f10 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e  h to the next in
27f20 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  struction..*/.ca
27f30 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20 20 20  se OP_IdxLE:    
27f40 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
27f50 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54 3a 20  .case OP_IdxGT: 
27f60 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
27f70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 4c   */.case OP_IdxL
27f80 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  T:          /* j
27f90 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ump */.case OP_I
27fa0 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20 20 2f  dxGE:  {       /
27fb0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
27fc0 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
27fd0 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b 65  t res;.  Unpacke
27fe0 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61 73  dRecord r;..  as
27ff0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
28000 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
28010 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d  Cursor );.  pC =
28020 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
28030 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
28040 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  !=0 );.  assert(
28050 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64 20 29   pC->isOrdered )
28060 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
28070 70 43 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61  pCursor!=0);.  a
28080 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
28090 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
280a0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
280b0 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  5==0 || pOp->p5=
280c0 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
280d0 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
280e0 49 4e 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65  INT32 );.  r.pKe
280f0 79 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79  yInfo = pC->pKey
28100 49 6e 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64  Info;.  r.nField
28110 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
28120 69 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  i;.  if( pOp->op
28130 63 6f 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b  code<OP_IdxLT ){
28140 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28150 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28160 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
28170 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
28180 20 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20     r.default_rc 
28190 3d 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  = -1;.  }else{. 
281a0 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
281b0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45  opcode==OP_IdxGE
281c0 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
281d0 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20  =OP_IdxLT );.   
281e0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
281f0 30 3b 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20  0;.  }.  r.aMem 
28200 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
28210 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
28220 44 45 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b  DEBUG.  { int i;
28230 20 66 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46   for(i=0; i<r.nF
28240 69 65 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72  ield; i++) asser
28250 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72  t( memIsValid(&r
28260 2e 61 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23  .aMem[i]) ); }.#
28270 65 6e 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b  endif.  res = 0;
28280 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
28290 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
282a0 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
282b0 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
282c0 74 65 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d  te3VdbeIdxKeyCom
282d0 70 61 72 65 28 70 43 2c 20 26 72 2c 20 26 72 65  pare(pC, &r, &re
282e0 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28 4f  s);.  assert( (O
282f0 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxLE&1)==(OP_
28300 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f 50 5f  IdxLT&1) && (OP_
28310 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f 49 64  IdxGE&1)==(OP_Id
28320 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66 28 20  xGT&1) );.  if( 
28330 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31 29 3d  (pOp->opcode&1)=
28340 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20 29 7b  =(OP_IdxLT&1) ){
28350 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
28360 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
28370 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  LE || pOp->opcod
28380 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b 0a 20  e==OP_IdxLT );. 
28390 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b 0a 20     res = -res;. 
283a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
283b0 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
283c0 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70 4f 70  =OP_IdxGE || pOp
283d0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
283e0 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b 2b 3b  GT );.    res++;
283f0 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63  .  }.  VdbeBranc
28400 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32 29 3b  hTaken(res>0,2);
28410 0a 20 20 69 66 28 20 72 65 73 3e 30 20 29 7b 0a  .  if( res>0 ){.
28420 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32      pc = pOp->p2
28430 20 2d 20 31 20 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1 ;.  }.  bre
28440 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
28450 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50 32 20  : Destroy P1 P2 
28460 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c  P3 * *.**.** Del
28470 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20 64 61  ete an entire da
28480 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20  tabase table or 
28490 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f 74  index whose root
284a0 20 70 61 67 65 20 69 6e 20 74 68 65 20 64 61 74   page in the dat
284b0 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20 69 73  abase.** file is
284c0 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a 2a 2a   given by P1..**
284d0 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65  .** The table be
284e0 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20 69 73  ing destroyed is
284f0 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61 74   in the main dat
28500 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 33  abase file if P3
28510 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33 3d 3d  ==0.  If.** P3==
28520 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65  1 then the table
28530 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73 20   to be clear is 
28540 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72 79  in the auxiliary
28550 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 2a   database file.*
28560 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  * that is used t
28570 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20 63  o store tables c
28580 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45 41  reate using CREA
28590 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41 42  TE TEMPORARY TAB
285a0 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41 55 54  LE..**.** If AUT
285b0 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61 62 6c  OVACUUM is enabl
285c0 65 64 20 74 68 65 6e 20 69 74 20 69 73 20 70 6f  ed then it is po
285d0 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e 6f 74  ssible that anot
285e0 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  her root page.**
285f0 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65 64 20   might be moved 
28600 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79 20 64  into the newly d
28610 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61 67 65  eleted root page
28620 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65   in order to kee
28630 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20 70 61  p all.** root pa
28640 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73 20 61  ges contiguous a
28650 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  t the beginning 
28660 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 2e  of the database.
28670 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a 2a 20    The former.** 
28680 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 6f  value of the roo
28690 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f 76 65  t page that move
286a0 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20 62 65  d - its value be
286b0 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20 6f 63  fore the move oc
286c0 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73 20 73  curred -.** is s
286d0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
286e0 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70 61 67  r P2.  If no pag
286f0 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74 20 77  e .** movement w
28700 61 73 20 72 65 71 75 69 72 65 64 20 28 62 65 63  as required (bec
28710 61 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 62  ause the table b
28720 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77 61 73  eing dropped was
28730 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74 68 65   already .** the
28740 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74 68 65   last one in the
28750 20 64 61 74 61 62 61 73 65 29 20 74 68 65 6e 20   database) then 
28760 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64  a zero is stored
28770 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
28780 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55 55  .** If AUTOVACUU
28790 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20 74 68  M is disabled th
287a0 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f  en a zero is sto
287b0 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
287c0 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  P2..**.** See al
287d0 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63 61 73  so: Clear.*/.cas
287e0 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20 7b 20  e OP_Destroy: { 
287f0 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72 65 72      /* out2-prer
28800 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e 74 20  elease */.  int 
28810 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 43  iMoved;.  int iC
28820 6e 74 3b 0a 20 20 56 64 62 65 20 2a 70 56 64 62  nt;.  Vdbe *pVdb
28830 65 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 0a 20  e;.  int iDb;.. 
28840 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64   assert( p->read
28850 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 23 69 66 6e 64  Only==0 );.#ifnd
28860 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
28870 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 43  IRTUALTABLE.  iC
28880 6e 74 20 3d 20 30 3b 0a 20 20 66 6f 72 28 70 56  nt = 0;.  for(pV
28890 64 62 65 3d 64 62 2d 3e 70 56 64 62 65 3b 20 70  dbe=db->pVdbe; p
288a0 56 64 62 65 3b 20 70 56 64 62 65 20 3d 20 70 56  Vdbe; pVdbe = pV
288b0 64 62 65 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20  dbe->pNext){.   
288c0 20 69 66 28 20 70 56 64 62 65 2d 3e 6d 61 67 69   if( pVdbe->magi
288d0 63 3d 3d 56 44 42 45 5f 4d 41 47 49 43 5f 52 55  c==VDBE_MAGIC_RU
288e0 4e 20 26 26 20 70 56 64 62 65 2d 3e 62 49 73 52  N && pVdbe->bIsR
288f0 65 61 64 65 72 20 0a 20 20 20 20 20 26 26 20 70  eader .     && p
28900 56 64 62 65 2d 3e 69 6e 56 74 61 62 4d 65 74 68  Vdbe->inVtabMeth
28910 6f 64 3c 32 20 26 26 20 70 56 64 62 65 2d 3e 70  od<2 && pVdbe->p
28920 63 3e 3d 30 20 0a 20 20 20 20 29 7b 0a 20 20 20  c>=0 .    ){.   
28930 20 20 20 69 43 6e 74 2b 2b 3b 0a 20 20 20 20 7d     iCnt++;.    }
28940 0a 20 20 7d 0a 23 65 6c 73 65 0a 20 20 69 43 6e  .  }.#else.  iCn
28950 74 20 3d 20 64 62 2d 3e 6e 56 64 62 65 52 65 61  t = db->nVdbeRea
28960 64 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 75 74  d;.#endif.  pOut
28970 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
28980 6c 6c 3b 0a 20 20 69 66 28 20 69 43 6e 74 3e 31  ll;.  if( iCnt>1
28990 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
289a0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
289b0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
289c0 20 4f 45 5f 41 62 6f 72 74 3b 0a 20 20 7d 65 6c   OE_Abort;.  }el
289d0 73 65 7b 0a 20 20 20 20 69 44 62 20 3d 20 70 4f  se{.    iDb = pO
289e0 70 2d 3e 70 33 3b 0a 20 20 20 20 61 73 73 65 72  p->p3;.    asser
289f0 74 28 20 69 43 6e 74 3d 3d 31 20 29 3b 0a 20 20  t( iCnt==1 );.  
28a00 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
28a10 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
28a20 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 20 20 69  k, iDb) );.    i
28a30 4d 6f 76 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e  Moved = 0;  /* N
28a40 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79  ot needed.  Only
28a50 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
28a60 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63  rning. */.    rc
28a70 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 44   = sqlite3BtreeD
28a80 72 6f 70 54 61 62 6c 65 28 64 62 2d 3e 61 44 62  ropTable(db->aDb
28a90 5b 69 44 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e  [iDb].pBt, pOp->
28aa0 70 31 2c 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20  p1, &iMoved);.  
28ab0 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
28ac0 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75  MEM_Int;.    pOu
28ad0 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b  t->u.i = iMoved;
28ae0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
28af0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
28b00 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
28b10 54 45 5f 4f 4b 20 26 26 20 69 4d 6f 76 65 64 21  TE_OK && iMoved!
28b20 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
28b30 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64  te3RootPageMoved
28b40 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76 65 64  (db, iDb, iMoved
28b50 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20  , pOp->p1);.    
28b60 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65 73 74    /* All OP_Dest
28b70 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  roy operations o
28b80 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61 6d 65  ccur on the same
28b90 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20 20 20   btree */.      
28ba0 61 73 73 65 72 74 28 20 72 65 73 65 74 53 63 68  assert( resetSch
28bb0 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20 7c 7c  emaOnFault==0 ||
28bc0 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
28bd0 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a 20 20  ult==iDb+1 );.  
28be0 20 20 20 20 72 65 73 65 74 53 63 68 65 6d 61 4f      resetSchemaO
28bf0 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31 3b 0a  nFault = iDb+1;.
28c00 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d      }.#endif.  }
28c10 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
28c20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20 50 31  Opcode: Clear P1
28c30 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44 65 6c   P2 P3.**.** Del
28c40 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73  ete all contents
28c50 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
28c60 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
28c70 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 0a  whose root page.
28c80 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ** in the databa
28c90 73 65 20 66 69 6c 65 20 69 73 20 67 69 76 65 6e  se file is given
28ca0 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20 75 6e   by P1.  But, un
28cb0 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20 64 6f  like Destroy, do
28cc0 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65 20 74   not.** remove t
28cd0 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  he table or inde
28ce0 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  x from the datab
28cf0 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
28d00 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  The table being 
28d10 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20  clear is in the 
28d20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
28d30 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20 49 66  le if P2==0.  If
28d40 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e 20 74  .** P2==1 then t
28d50 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65 20 63  he table to be c
28d60 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65 20 61  lear is in the a
28d70 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
28d80 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74 20 69  e file.** that i
28d90 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
28da0 74 61 62 6c 65 73 20 63 72 65 61 74 65 20 75 73  tables create us
28db0 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d 50 4f  ing CREATE TEMPO
28dc0 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a 0a 2a  RARY TABLE..**.*
28dd0 2a 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75  * If the P3 valu
28de0 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  e is non-zero, t
28df0 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 72 65  hen the table re
28e00 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74 20 62  ferred to must b
28e10 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79 20 74  e an.** intkey t
28e20 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74 61 62  able (an SQL tab
28e30 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64 65 78  le, not an index
28e40 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  ). In this case 
28e50 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65 20 0a  the row change .
28e60 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e 63 72  ** count is incr
28e70 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
28e80 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
28e90 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
28ea0 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20 49 66   cleared. .** If
28eb0 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20 74   P3 is greater t
28ec0 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74  han zero, then t
28ed0 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20  he value stored 
28ee0 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 69  in register P3 i
28ef0 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72 65 6d  s.** also increm
28f00 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e 75 6d  ented by the num
28f10 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 74  ber of rows in t
28f20 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 63  he table being c
28f30 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20 53 65  leared..**.** Se
28f40 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f 79 0a  e also: Destroy.
28f50 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65 61 72  */.case OP_Clear
28f60 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67  : {.  int nChang
28f70 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65 20 3d  e;. .  nChange =
28f80 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 2d   0;.  assert( p-
28f90 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
28fa0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
28fb0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
28fc0 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b 0a 20  k, pOp->p2) );. 
28fd0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
28fe0 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a 20 20  eeClearTable(.  
28ff0 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d      db->aDb[pOp-
29000 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70  >p2].pBt, pOp->p
29010 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20 26 6e  1, (pOp->p3 ? &n
29020 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20 29 3b  Change : 0).  );
29030 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
29040 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e 67 65  {.    p->nChange
29050 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
29060 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29   if( pOp->p3>0 )
29070 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
29080 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d  memIsValid(&aMem
29090 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20  [pOp->p3]) );.  
290a0 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
290b0 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b 70 4f  ange(p, &aMem[pO
290c0 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20 20 61  p->p3]);.      a
290d0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75 2e 69  Mem[pOp->p3].u.i
290e0 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20 20 20   += nChange;.   
290f0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
29100 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65  }../* Opcode: Re
29110 73 65 74 53 6f 72 74 65 72 20 50 31 20 2a 20 2a  setSorter P1 * *
29120 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74   * *.**.** Delet
29130 65 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66  e all contents f
29140 72 6f 6d 20 74 68 65 20 65 70 68 65 6d 65 72 61  rom the ephemera
29150 6c 20 74 61 62 6c 65 20 6f 72 20 73 6f 72 74 65  l table or sorte
29160 72 0a 2a 2a 20 74 68 61 74 20 69 73 20 6f 70 65  r.** that is ope
29170 6e 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a  n on cursor P1..
29180 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
29190 65 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72  e only works for
291a0 20 63 75 72 73 6f 72 73 20 75 73 65 64 20 66 6f   cursors used fo
291b0 72 20 73 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a  r sorting and.**
291c0 20 6f 70 65 6e 65 64 20 77 69 74 68 20 4f 50 5f   opened with OP_
291d0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72  OpenEphemeral or
291e0 20 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a   OP_SorterOpen..
291f0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
29200 53 6f 72 74 65 72 3a 20 7b 0a 20 20 56 64 62 65  Sorter: {.  Vdbe
29210 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20  Cursor *pC;. .  
29220 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
29230 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
29240 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
29250 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
29260 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
29270 70 43 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70  pC!=0 );.  if( p
29280 43 2d 3e 70 53 6f 72 74 65 72 20 29 7b 0a 20 20  C->pSorter ){.  
29290 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72    sqlite3VdbeSor
292a0 74 65 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d  terReset(db, pC-
292b0 3e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65 6c  >pSorter);.  }el
292c0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
292d0 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 20  pC->isEphemeral 
292e0 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
292f0 74 65 33 42 74 72 65 65 43 6c 65 61 72 54 61 62  te3BtreeClearTab
29300 6c 65 4f 66 43 75 72 73 6f 72 28 70 43 2d 3e 70  leOfCursor(pC->p
29310 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 62  Cursor);.  }.  b
29320 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
29330 64 65 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20  de: CreateTable 
29340 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
29350 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72  ynopsis: r[P2]=r
29360 6f 6f 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a  oot iDb=P1.**.**
29370 20 41 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20   Allocate a new 
29380 74 61 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69  table in the mai
29390 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
293a0 69 66 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74  if P1==0 or in t
293b0 68 65 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20  he.** auxiliary 
293c0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
293d0 20 50 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20   P1==1 or in an 
293e0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
293f0 65 20 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57  e if.** P1>1.  W
29400 72 69 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61  rite the root pa
29410 67 65 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  ge number of the
29420 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a   new table into.
29430 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a  ** register P2.*
29440 2a 0a 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65  *.** The differe
29450 6e 63 65 20 62 65 74 77 65 65 6e 20 61 20 74 61  nce between a ta
29460 62 6c 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78  ble and an index
29470 20 69 73 20 74 68 69 73 3a 20 20 41 20 74 61 62   is this:  A tab
29480 6c 65 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20  le must.** have 
29490 61 20 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72  a 4-byte integer
294a0 20 6b 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76   key and can hav
294b0 65 20 61 72 62 69 74 72 61 72 79 20 64 61 74 61  e arbitrary data
294c0 2e 20 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68  .  An index.** h
294d0 61 73 20 61 6e 20 61 72 62 69 74 72 61 72 79 20  as an arbitrary 
294e0 6b 65 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e  key but no data.
294f0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
29500 20 43 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a   CreateIndex.*/.
29510 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74  /* Opcode: Creat
29520 65 49 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a  eIndex P1 P2 * *
29530 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
29540 72 5b 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50  r[P2]=root iDb=P
29550 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65  1.**.** Allocate
29560 20 61 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20   a new index in 
29570 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
29580 65 20 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20  e file if P1==0 
29590 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78  or in the.** aux
295a0 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65 20  iliary database 
295b0 66 69 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72  file if P1==1 or
295c0 20 69 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20   in an attached 
295d0 64 61 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50  database if.** P
295e0 31 3e 31 2e 20 20 57 72 69 74 65 20 74 68 65 20  1>1.  Write the 
295f0 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
29600 20 6f 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c   of the new tabl
29610 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74  e into.** regist
29620 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  er P2..**.** See
29630 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
29640 6e 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  n OP_CreateTable
29650 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20   for additional 
29660 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
29670 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e  case OP_CreateIn
29680 64 65 78 3a 20 20 20 20 20 20 20 20 20 20 20 20  dex:            
29690 2f 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61  /* out2-prerelea
296a0 73 65 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72  se */.case OP_Cr
296b0 65 61 74 65 54 61 62 6c 65 3a 20 7b 20 20 20 20  eateTable: {    
296c0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70 72        /* out2-pr
296d0 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 69 6e  erelease */.  in
296e0 74 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c  t pgno;.  int fl
296f0 61 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  ags;.  Db *pDb;.
29700 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
29710 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
29720 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
29730 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
29740 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
29750 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
29760 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
29770 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
29780 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
29790 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
297a0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
297b0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
297c0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
297d0 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
297e0 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
297f0 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
29800 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
29810 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
29820 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
29830 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
29840 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
29850 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
29860 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
29870 61 67 73 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e  ags);.  pOut->u.
29880 69 20 3d 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61  i = pgno;.  brea
29890 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
298a0 20 50 61 72 73 65 53 63 68 65 6d 61 20 50 31 20   ParseSchema P1 
298b0 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
298c0 65 61 64 20 61 6e 64 20 70 61 72 73 65 20 61 6c  ead and parse al
298d0 6c 20 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74  l entries from t
298e0 68 65 20 53 51 4c 49 54 45 5f 4d 41 53 54 45 52  he SQLITE_MASTER
298f0 20 74 61 62 6c 65 20 6f 66 20 64 61 74 61 62 61   table of databa
29900 73 65 20 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61  se P1.** that ma
29910 74 63 68 20 74 68 65 20 57 48 45 52 45 20 63 6c  tch the WHERE cl
29920 61 75 73 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20  ause P4. .**.** 
29930 54 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f  This opcode invo
29940 6b 65 73 20 74 68 65 20 70 61 72 73 65 72 20 74  kes the parser t
29950 6f 20 63 72 65 61 74 65 20 61 20 6e 65 77 20 76  o create a new v
29960 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a  irtual machine,.
29970 2a 2a 20 74 68 65 6e 20 72 75 6e 73 20 74 68 65  ** then runs the
29980 20 6e 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63   new virtual mac
29990 68 69 6e 65 2e 20 20 49 74 20 69 73 20 74 68 75  hine.  It is thu
299a0 73 20 61 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f  s a re-entrant o
299b0 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f  pcode..*/.case O
299c0 50 5f 50 61 72 73 65 53 63 68 65 6d 61 3a 20 7b  P_ParseSchema: {
299d0 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f  .  int iDb;.  co
299e0 6e 73 74 20 63 68 61 72 20 2a 7a 4d 61 73 74 65  nst char *zMaste
299f0 72 3b 0a 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b  r;.  char *zSql;
29a00 0a 20 20 49 6e 69 74 44 61 74 61 20 69 6e 69 74  .  InitData init
29a10 44 61 74 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20  Data;..  /* Any 
29a20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
29a30 6e 74 20 74 68 61 74 20 69 6e 76 6f 6b 65 73 20  nt that invokes 
29a40 74 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c  this opcode will
29a50 20 68 6f 6c 64 20 6d 75 74 65 78 65 73 0a 20 20   hold mutexes.  
29a60 2a 2a 20 6f 6e 20 65 76 65 72 79 20 62 74 72 65  ** on every btre
29a70 65 2e 20 20 54 68 69 73 20 69 73 20 61 20 70 72  e.  This is a pr
29a80 65 72 65 71 75 69 73 69 74 65 20 66 6f 72 20 69  erequisite for i
29a90 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71  nvoking .  ** sq
29aa0 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63  lite3InitCallbac
29ab0 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66  k()..  */.#ifdef
29ac0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
29ad0 66 6f 72 28 69 44 62 3d 30 3b 20 69 44 62 3c 64  for(iDb=0; iDb<d
29ae0 62 2d 3e 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a  b->nDb; iDb++){.
29af0 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
29b00 3d 31 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72  =1 || sqlite3Btr
29b10 65 65 48 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d  eeHoldsMutex(db-
29b20 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 29 20 29  >aDb[iDb].pBt) )
29b30 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
29b40 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  iDb = pOp->p1;. 
29b50 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
29b60 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
29b70 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 48 61  ;.  assert( DbHa
29b80 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 69 44  sProperty(db, iD
29b90 62 2c 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64  b, DB_SchemaLoad
29ba0 65 64 29 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64  ed) );.  /* Used
29bb0 20 74 6f 20 62 65 20 61 20 63 6f 6e 64 69 74 69   to be a conditi
29bc0 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d  onal */ {.    zM
29bd0 61 73 74 65 72 20 3d 20 53 43 48 45 4d 41 5f 54  aster = SCHEMA_T
29be0 41 42 4c 45 28 69 44 62 29 3b 0a 20 20 20 20 69  ABLE(iDb);.    i
29bf0 6e 69 74 44 61 74 61 2e 64 62 20 3d 20 64 62 3b  nitData.db = db;
29c00 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 69 44  .    initData.iD
29c10 62 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 20  b = pOp->p1;.   
29c20 20 69 6e 69 74 44 61 74 61 2e 70 7a 45 72 72 4d   initData.pzErrM
29c30 73 67 20 3d 20 26 70 2d 3e 7a 45 72 72 4d 73 67  sg = &p->zErrMsg
29c40 3b 0a 20 20 20 20 7a 53 71 6c 20 3d 20 73 71 6c  ;.    zSql = sql
29c50 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 0a  ite3MPrintf(db,.
29c60 20 20 20 20 20 20 20 22 53 45 4c 45 43 54 20 6e         "SELECT n
29c70 61 6d 65 2c 20 72 6f 6f 74 70 61 67 65 2c 20 73  ame, rootpage, s
29c80 71 6c 20 46 52 4f 4d 20 27 25 71 27 2e 25 73 20  ql FROM '%q'.%s 
29c90 57 48 45 52 45 20 25 73 20 4f 52 44 45 52 20 42  WHERE %s ORDER B
29ca0 59 20 72 6f 77 69 64 22 2c 0a 20 20 20 20 20 20  Y rowid",.      
29cb0 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 7a 4e   db->aDb[iDb].zN
29cc0 61 6d 65 2c 20 7a 4d 61 73 74 65 72 2c 20 70 4f  ame, zMaster, pO
29cd0 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 69 66  p->p4.z);.    if
29ce0 28 20 7a 53 71 6c 3d 3d 30 20 29 7b 0a 20 20 20  ( zSql==0 ){.   
29cf0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4e     rc = SQLITE_N
29d00 4f 4d 45 4d 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  OMEM;.    }else{
29d10 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
29d20 62 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20  b->init.busy==0 
29d30 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69  );.      db->ini
29d40 74 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20  t.busy = 1;.    
29d50 20 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20    initData.rc = 
29d60 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
29d70 20 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61   assert( !db->ma
29d80 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20  llocFailed );.  
29d90 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
29da0 5f 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20  _exec(db, zSql, 
29db0 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
29dc0 61 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20  ack, &initData, 
29dd0 30 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  0);.      if( rc
29de0 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63  ==SQLITE_OK ) rc
29df0 20 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a   = initData.rc;.
29e00 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
29e10 72 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20  ree(db, zSql);. 
29e20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
29e30 73 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20  sy = 0;.    }.  
29e40 7d 0a 20 20 69 66 28 20 72 63 20 29 20 73 71 6c  }.  if( rc ) sql
29e50 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
29e60 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
29e70 64 62 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  db);.  if( rc==S
29e80 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29 7b 0a 20  QLITE_NOMEM ){. 
29e90 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
29ea0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d    }.  break;  .}
29eb0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
29ec0 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41 4c 59  QLITE_OMIT_ANALY
29ed0 5a 45 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c  ZE)./* Opcode: L
29ee0 6f 61 64 41 6e 61 6c 79 73 69 73 20 50 31 20 2a  oadAnalysis P1 *
29ef0 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61   * * *.**.** Rea
29f00 64 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  d the sqlite_sta
29f10 74 31 20 74 61 62 6c 65 20 66 6f 72 20 64 61 74  t1 table for dat
29f20 61 62 61 73 65 20 50 31 20 61 6e 64 20 6c 6f 61  abase P1 and loa
29f30 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a  d the content.**
29f40 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 20 69   of that table i
29f50 6e 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  nto the internal
29f60 20 69 6e 64 65 78 20 68 61 73 68 20 74 61 62 6c   index hash tabl
29f70 65 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61  e.  This will ca
29f80 75 73 65 0a 2a 2a 20 74 68 65 20 61 6e 61 6c 79  use.** the analy
29f90 73 69 73 20 74 6f 20 62 65 20 75 73 65 64 20 77  sis to be used w
29fa0 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 61 6c  hen preparing al
29fb0 6c 20 73 75 62 73 65 71 75 65 6e 74 20 71 75 65  l subsequent que
29fc0 72 69 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ries..*/.case OP
29fd0 5f 4c 6f 61 64 41 6e 61 6c 79 73 69 73 3a 20 7b  _LoadAnalysis: {
29fe0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29ff0 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
2a000 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 72 63  <db->nDb );.  rc
2a010 20 3d 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73   = sqlite3Analys
2a020 69 73 4c 6f 61 64 28 64 62 2c 20 70 4f 70 2d 3e  isLoad(db, pOp->
2a030 70 31 29 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a  p1);.  break;  .
2a040 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  }.#endif /* !def
2a050 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2a060 5f 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a  _ANALYZE) */../*
2a070 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62   Opcode: DropTab
2a080 6c 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a  le P1 * * P4 *.*
2a090 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20  *.** Remove the 
2a0a0 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d  internal (in-mem
2a0b0 6f 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74  ory) data struct
2a0c0 75 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69  ures that descri
2a0d0 62 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20  be.** the table 
2a0e0 6e 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61  named P4 in data
2a0f0 62 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69  base P1.  This i
2a100 73 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61  s called after a
2a110 20 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f   table.** is dro
2a120 70 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28  pped from disk (
2a130 75 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f  using the Destro
2a140 79 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64  y opcode) in ord
2a150 65 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74  er to keep .** t
2a160 68 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72  he internal repr
2a170 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68  esentation of th
2a180 65 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73  e.** schema cons
2a190 69 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74  istent with what
2a1a0 20 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a   is on disk..*/.
2a1b0 63 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c  case OP_DropTabl
2a1c0 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e  e: {.  sqlite3Un
2a1d0 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62  linkAndDeleteTab
2a1e0 6c 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  le(db, pOp->p1, 
2a1f0 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72  pOp->p4.z);.  br
2a200 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2a210 65 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20  e: DropIndex P1 
2a220 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52  * * P4 *.**.** R
2a230 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e  emove the intern
2a240 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64  al (in-memory) d
2a250 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74  ata structures t
2a260 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20  hat describe.** 
2a270 74 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20  the index named 
2a280 50 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50  P4 in database P
2a290 31 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c  1.  This is call
2a2a0 65 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65  ed after an inde
2a2b0 78 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20  x.** is dropped 
2a2c0 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67  from disk (using
2a2d0 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63   the Destroy opc
2a2e0 6f 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72  ode).** in order
2a2f0 20 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74   to keep the int
2a300 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a310 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a320 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a330 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a340 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a350 50 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20  P_DropIndex: {. 
2a360 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
2a370 64 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c  dDeleteIndex(db,
2a380 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2a390 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2a3a0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f  ../* Opcode: Dro
2a3b0 70 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20  pTrigger P1 * * 
2a3c0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2a3d0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2a3e0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2a3f0 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2a400 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2a410 74 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34  trigger named P4
2a420 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e   in database P1.
2a430 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64    This is called
2a440 20 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72   after a trigger
2a450 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2a460 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2a470 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2a480 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  de) in order to 
2a490 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74  keep .** the int
2a4a0 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61  ernal representa
2a4b0 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73  tion of the.** s
2a4c0 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74  chema consistent
2a4d0 20 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e   with what is on
2a4e0 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f   disk..*/.case O
2a4f0 50 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b  P_DropTrigger: {
2a500 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2a510 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
2a520 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
2a530 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61  p->p4.z);.  brea
2a540 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53  k;.}...#ifndef S
2a550 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2a560 52 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70  RITY_CHECK./* Op
2a570 63 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43  code: IntegrityC
2a580 6b 20 50 31 20 50 32 20 50 33 20 2a 20 50 35 0a  k P1 P2 P3 * P5.
2a590 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2a5a0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2a5b0 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2a5c0 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2a5d0 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2a5e0 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2a5f0 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2a600 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2a610 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2a620 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2a630 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2a640 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2a650 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2a660 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2a670 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2a680 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2a690 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2a6a0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2a6b0 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2a6c0 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2a6d0 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2a6e0 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2a6f0 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2a700 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2a710 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2a720 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2a730 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2a740 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2a750 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2a760 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2a770 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2a780 61 72 65 20 69 6e 74 65 67 65 72 0a 2a 2a 20 73  are integer.** s
2a790 74 6f 72 65 64 20 69 6e 20 72 65 67 28 50 31 29  tored in reg(P1)
2a7a0 2c 20 72 65 67 28 50 31 2b 31 29 2c 20 72 65 67  , reg(P1+1), reg
2a7b0 28 50 31 2b 32 29 2c 20 2e 2e 2e 2e 20 20 54 68  (P1+2), ....  Th
2a7c0 65 72 65 20 61 72 65 20 50 32 20 74 61 62 6c 65  ere are P2 table
2a7d0 73 0a 2a 2a 20 74 6f 74 61 6c 2e 0a 2a 2a 0a 2a  s.** total..**.*
2a7e0 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20 7a  * If P5 is not z
2a7f0 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20 69  ero, the check i
2a800 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61 75  s done on the au
2a810 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73 65  xiliary database
2a820 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74 68  .** file, not th
2a830 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2a840 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  file..**.** This
2a850 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64 20   opcode is used 
2a860 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65  to implement the
2a870 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
2a880 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73 65   pragma..*/.case
2a890 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 3a   OP_IntegrityCk:
2a8a0 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b 20   {.  int nRoot; 
2a8b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
2a8c0 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65 63  f tables to chec
2a8d0 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20 72  k.  (Number of r
2a8e0 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a 20  oot pages.) */. 
2a8f0 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20 20   int *aRoot;    
2a900 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f 6f   /* Array of roo
2a910 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66 6f  tpage numbers fo
2a920 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20 63  r tables to be c
2a930 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74 20  hecked */.  int 
2a940 6a 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  j;          /* L
2a950 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  oop counter */. 
2a960 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
2a970 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72   /* Number of er
2a980 72 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f  rors reported */
2a990 0a 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20  .  char *z;     
2a9a0 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68     /* Text of th
2a9b0 65 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a  e error report *
2a9c0 2f 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20  /.  Mem *pnErr; 
2a9d0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
2a9e0 6b 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66  keeping track of
2a9f0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2aa00 67 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  g */..  assert( 
2aa10 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a  p->bIsReader );.
2aa20 20 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70    nRoot = pOp->p
2aa30 32 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 52 6f  2;.  assert( nRo
2aa40 6f 74 3e 30 20 29 3b 0a 20 20 61 52 6f 6f 74 20  ot>0 );.  aRoot 
2aa50 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
2aa60 63 52 61 77 28 64 62 2c 20 73 69 7a 65 6f 66 28  cRaw(db, sizeof(
2aa70 69 6e 74 29 2a 28 6e 52 6f 6f 74 2b 31 29 20 29  int)*(nRoot+1) )
2aa80 3b 0a 20 20 69 66 28 20 61 52 6f 6f 74 3d 3d 30  ;.  if( aRoot==0
2aa90 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
2aaa0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2aab0 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
2aac0 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72  (p->nMem-p->nCur
2aad0 73 6f 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20  sor) );.  pnErr 
2aae0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2aaf0 3b 0a 20 20 61 73 73 65 72 74 28 20 28 70 6e 45  ;.  assert( (pnE
2ab00 72 72 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  rr->flags & MEM_
2ab10 49 6e 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73  Int)!=0 );.  ass
2ab20 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61  ert( (pnErr->fla
2ab30 67 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45  gs & (MEM_Str|ME
2ab40 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20  M_Blob))==0 );. 
2ab50 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
2ab60 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72 28 6a 3d  p->p1];.  for(j=
2ab70 30 3b 20 6a 3c 6e 52 6f 6f 74 3b 20 6a 2b 2b 29  0; j<nRoot; j++)
2ab80 7b 0a 20 20 20 20 61 52 6f 6f 74 5b 6a 5d 20 3d  {.    aRoot[j] =
2ab90 20 28 69 6e 74 29 73 71 6c 69 74 65 33 56 64 62   (int)sqlite3Vdb
2aba0 65 49 6e 74 56 61 6c 75 65 28 26 70 49 6e 31 5b  eIntValue(&pIn1[
2abb0 6a 5d 29 3b 0a 20 20 7d 0a 20 20 61 52 6f 6f 74  j]);.  }.  aRoot
2abc0 5b 6a 5d 20 3d 20 30 3b 0a 20 20 61 73 73 65 72  [j] = 0;.  asser
2abd0 74 28 20 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e  t( pOp->p5<db->n
2abe0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2abf0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2ac00 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35  reeMask, pOp->p5
2ac10 29 20 29 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74  ) );.  z = sqlit
2ac20 65 33 42 74 72 65 65 49 6e 74 65 67 72 69 74 79  e3BtreeIntegrity
2ac30 43 68 65 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f  Check(db->aDb[pO
2ac40 70 2d 3e 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f  p->p5].pBt, aRoo
2ac50 74 2c 20 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20  t, nRoot,.      
2ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ac70 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
2ac80 70 6e 45 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72  pnErr->u.i, &nEr
2ac90 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  r);.  sqlite3DbF
2aca0 72 65 65 28 64 62 2c 20 61 52 6f 6f 74 29 3b 0a  ree(db, aRoot);.
2acb0 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20    pnErr->u.i -= 
2acc0 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56  nErr;.  sqlite3V
2acd0 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49  dbeMemSetNull(pI
2ace0 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d  n1);.  if( nErr=
2acf0 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
2ad00 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73  ( z==0 );.  }els
2ad10 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20  e if( z==0 ){.  
2ad20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20    goto no_mem;. 
2ad30 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69   }else{.    sqli
2ad40 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72  te3VdbeMemSetStr
2ad50 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51  (pIn1, z, -1, SQ
2ad60 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74  LITE_UTF8, sqlit
2ad70 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20  e3_free);.  }.  
2ad80 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53  UPDATE_MAX_BLOBS
2ad90 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c  IZE(pIn1);.  sql
2ada0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
2adb0 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63  coding(pIn1, enc
2adc0 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b  oding);.  break;
2add0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
2ade0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2adf0 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20  TY_CHECK */../* 
2ae00 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64  Opcode: RowSetAd
2ae10 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  d P1 P2 * * *.**
2ae20 20 53 79 6e 6f 70 73 69 73 3a 20 20 72 6f 77 73   Synopsis:  rows
2ae30 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2ae40 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2ae50 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2ae60 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2ae70 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2ae80 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2ae90 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2aea0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2aeb0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2aec0 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2aed0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2aee0 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2aef0 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2af00 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2af10 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2af20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2af30 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2af40 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2af50 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2af60 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2af70 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2af80 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2af90 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2afa0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2afb0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2afc0 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2afd0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2afe0 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2aff0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b000 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2b010 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2b020 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2b030 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2b040 6e 6f 70 73 69 73 3a 20 20 72 5b 50 33 5d 3d 72  nopsis:  r[P3]=r
2b050 6f 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20  owset(P1).**.** 
2b060 45 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c  Extract the smal
2b070 6c 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20  lest value from 
2b080 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2b090 20 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61   and put that va
2b0a0 6c 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69  lue into.** regi
2b0b0 73 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66  ster P3.  Or, if
2b0c0 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50   boolean index P
2b0d0 31 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65  1 is initially e
2b0e0 6d 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a  mpty, leave P3.*
2b0f0 2a 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  * unchanged and 
2b100 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74  jump to instruct
2b110 69 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ion P2..*/.case 
2b120 4f 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b  OP_RowSetRead: {
2b130 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2b140 69 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69  in1, out3 */.  i
2b150 36 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20  64 val;..  pIn1 
2b160 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2b170 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
2b180 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2b190 74 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c  t)==0 .   || sql
2b1a0 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70  ite3RowSetNext(p
2b1b0 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2b1c0 26 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20  &val)==0.  ){.  
2b1d0 20 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e    /* The boolean
2b1e0 20 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20   index is empty 
2b1f0 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  */.    sqlite3Vd
2b200 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e  beMemSetNull(pIn
2b210 31 29 3b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70  1);.    pc = pOp
2b220 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 20 20 56 64  ->p2 - 1;.    Vd
2b230 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c  beBranchTaken(1,
2b240 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2);.  }else{.   
2b250 20 2f 2a 20 41 20 76 61 6c 75 65 20 77 61 73 20   /* A value was 
2b260 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
2b270 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20 73 71 6c  index */.    sql
2b280 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2b290 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
2b2a0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 20 20 56 64  3], val);.    Vd
2b2b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
2b2c0 32 29 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63  2);.  }.  goto c
2b2d0 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2b2e0 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  pt;.}../* Opcode
2b2f0 3a 20 52 6f 77 53 65 74 54 65 73 74 20 50 31 20  : RowSetTest P1 
2b300 50 32 20 50 33 20 50 34 0a 2a 2a 20 53 79 6e 6f  P2 P3 P4.** Syno
2b310 70 73 69 73 3a 20 69 66 20 72 5b 50 33 5d 20 69  psis: if r[P3] i
2b320 6e 20 72 6f 77 73 65 74 28 50 31 29 20 67 6f 74  n rowset(P1) got
2b330 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  o P2.**.** Regis
2b340 74 65 72 20 50 33 20 69 73 20 61 73 73 75 6d 65  ter P3 is assume
2b350 64 20 74 6f 20 68 6f 6c 64 20 61 20 36 34 2d 62  d to hold a 64-b
2b360 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  it integer value
2b370 2e 20 49 66 20 72 65 67 69 73 74 65 72 20 50 31  . If register P1
2b380 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20 52  .** contains a R
2b390 6f 77 53 65 74 20 6f 62 6a 65 63 74 20 61 6e 64  owSet object and
2b3a0 20 74 68 61 74 20 52 6f 77 53 65 74 20 6f 62 6a   that RowSet obj
2b3b0 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a 2a 2a 20  ect contains.** 
2b3c0 74 68 65 20 76 61 6c 75 65 20 68 65 6c 64 20 69  the value held i
2b3d0 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f 20 72 65  n P3, jump to re
2b3e0 67 69 73 74 65 72 20 50 32 2e 20 4f 74 68 65 72  gister P2. Other
2b3f0 77 69 73 65 2c 20 69 6e 73 65 72 74 20 74 68 65  wise, insert the
2b400 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69 6e 20 50  .** integer in P
2b410 33 20 69 6e 74 6f 20 74 68 65 20 52 6f 77 53 65  3 into the RowSe
2b420 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75 65 20 6f  t and continue o
2b430 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e 65 78 74  n to the.** next
2b440 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54   opcode..**.** T
2b450 68 65 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74  he RowSet object
2b460 20 69 73 20 6f 70 74 69 6d 69 7a 65 64 20 66 6f   is optimized fo
2b470 72 20 74 68 65 20 63 61 73 65 20 77 68 65 72 65  r the case where
2b480 20 73 75 63 63 65 73 73 69 76 65 20 73 65 74 73   successive sets
2b490 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65 72 73 2c  .** of integers,
2b4a0 20 77 68 65 72 65 20 65 61 63 68 20 73 65 74 20   where each set 
2b4b0 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 75 70 6c  contains no dupl
2b4c0 69 63 61 74 65 73 2e 20 45 61 63 68 20 73 65 74  icates. Each set
2b4d0 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73 20 69 73  .** of values is
2b4e0 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20 61   identified by a
2b4f0 20 75 6e 69 71 75 65 20 50 34 20 76 61 6c 75 65   unique P4 value
2b500 2e 20 54 68 65 20 66 69 72 73 74 20 73 65 74 0a  . The first set.
2b510 2a 2a 20 6d 75 73 74 20 68 61 76 65 20 50 34 3d  ** must have P4=
2b520 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c 20 73 65  =0, the final se
2b530 74 20 50 34 3d 2d 31 2e 20 20 50 34 20 6d 75 73  t P4=-1.  P4 mus
2b540 74 20 62 65 20 65 69 74 68 65 72 20 2d 31 20 6f  t be either -1 o
2b550 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61 74 69 76  r.** non-negativ
2b560 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e 65 67 61  e.  For non-nega
2b570 74 69 76 65 20 76 61 6c 75 65 73 20 6f 66 20 50  tive values of P
2b580 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f 77 65 72  4 only the lower
2b590 20 34 0a 2a 2a 20 62 69 74 73 20 61 72 65 20 73   4.** bits are s
2b5a0 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a 2a 0a 2a  ignificant..**.*
2b5b0 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 6f 70  * This allows op
2b5c0 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20 28 61 29  timizations: (a)
2b5d0 20 77 68 65 6e 20 50 34 3d 3d 30 20 74 68 65 72   when P4==0 ther
2b5e0 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2b5f0 74 65 73 74 0a 2a 2a 20 74 68 65 20 72 6f 77 73  test.** the rows
2b600 65 74 20 6f 62 6a 65 63 74 20 66 6f 72 20 50 33  et object for P3
2b610 2c 20 61 73 20 69 74 20 69 73 20 67 75 61 72 61  , as it is guara
2b620 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20 63 6f 6e  nteed not to con
2b630 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28 62 29 20  tain it,.** (b) 
2b640 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74 68 65 72  when P4==-1 ther
2b650 65 20 69 73 20 6e 6f 20 6e 65 65 64 20 74 6f 20  e is no need to 
2b660 69 6e 73 65 72 74 20 74 68 65 20 76 61 6c 75 65  insert the value
2b670 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a 2a 2a 20  , as it will.** 
2b680 6e 65 76 65 72 20 62 65 20 74 65 73 74 65 64 20  never be tested 
2b690 66 6f 72 2c 20 61 6e 64 20 28 63 29 20 77 68 65  for, and (c) whe
2b6a0 6e 20 61 20 76 61 6c 75 65 20 74 68 61 74 20 69  n a value that i
2b6b0 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2b6c0 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65 64 2c 20  is.** inserted, 
2b6d0 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64  there is no need
2b6e0 20 74 6f 20 73 65 61 72 63 68 20 74 6f 20 73 65   to search to se
2b6f0 65 20 69 66 20 74 68 65 20 73 61 6d 65 20 76 61  e if the same va
2b700 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72 65 76 69  lue was.** previ
2b710 6f 75 73 6c 79 20 69 6e 73 65 72 74 65 64 20 61  ously inserted a
2b720 73 20 70 61 72 74 20 6f 66 20 73 65 74 20 58 20  s part of set X 
2b730 28 6f 6e 6c 79 20 69 66 20 69 74 20 77 61 73 20  (only if it was 
2b740 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a 20 69 6e  previously.** in
2b750 73 65 72 74 65 64 20 61 73 20 70 61 72 74 20 6f  serted as part o
2b760 66 20 73 6f 6d 65 20 6f 74 68 65 72 20 73 65 74  f some other set
2b770 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 6f  )..*/.case OP_Ro
2b780 77 53 65 74 54 65 73 74 3a 20 7b 20 20 20 20 20  wSetTest: {     
2b790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b7a0 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  /* jump, in1, in
2b7b0 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 74 3b  3 */.  int iSet;
2b7c0 0a 20 20 69 6e 74 20 65 78 69 73 74 73 3b 0a 0a  .  int exists;..
2b7d0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
2b7e0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33 20  Op->p1];.  pIn3 
2b7f0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
2b800 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f 70 2d 3e  ;.  iSet = pOp->
2b810 70 34 2e 69 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.i;.  assert( 
2b820 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  pIn3->flags&MEM_
2b830 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 66 20  Int );..  /* If 
2b840 74 68 65 72 65 20 69 73 20 61 6e 79 74 68 69 6e  there is anythin
2b850 67 20 6f 74 68 65 72 20 74 68 61 6e 20 61 20 72  g other than a r
2b860 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 69 6e 20  owset object in 
2b870 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50 31 2c 0a  memory cell P1,.
2b880 20 20 2a 2a 20 64 65 6c 65 74 65 20 69 74 20 6e    ** delete it n
2b890 6f 77 20 61 6e 64 20 69 6e 69 74 69 61 6c 69 7a  ow and initializ
2b8a0 65 20 50 31 20 77 69 74 68 20 61 6e 20 65 6d 70  e P1 with an emp
2b8b0 74 79 20 72 6f 77 73 65 74 0a 20 20 2a 2f 0a 20  ty rowset.  */. 
2b8c0 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2b8d0 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2b8e0 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2b8f0 33 56 64 62 65 4d 65 6d 53 65 74 52 6f 77 53 65  3VdbeMemSetRowSe
2b900 74 28 70 49 6e 31 29 3b 0a 20 20 20 20 69 66 28  t(pIn1);.    if(
2b910 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
2b920 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d 30 20 29  MEM_RowSet)==0 )
2b930 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
2b940 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  }..  assert( pOp
2b950 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2b960 33 32 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  32 );.  assert( 
2b970 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69 53 65 74  iSet==-1 || iSet
2b980 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 53 65  >=0 );.  if( iSe
2b990 74 20 29 7b 0a 20 20 20 20 65 78 69 73 74 73 20  t ){.    exists 
2b9a0 3d 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 54  = sqlite3RowSetT
2b9b0 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77  est(pIn1->u.pRow
2b9c0 53 65 74 2c 20 69 53 65 74 2c 20 70 49 6e 33 2d  Set, iSet, pIn3-
2b9d0 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64 62 65 42  >u.i);.    VdbeB
2b9e0 72 61 6e 63 68 54 61 6b 65 6e 28 65 78 69 73 74  ranchTaken(exist
2b9f0 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28  s!=0,2);.    if(
2ba00 20 65 78 69 73 74 73 20 29 7b 0a 20 20 20 20 20   exists ){.     
2ba10 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 20 2d 20   pc = pOp->p2 - 
2ba20 31 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  1;.      break;.
2ba30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20      }.  }.  if( 
2ba40 69 53 65 74 3e 3d 30 20 29 7b 0a 20 20 20 20 73  iSet>=0 ){.    s
2ba50 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
2ba60 72 74 28 70 49 6e 31 2d 3e 75 2e 70 52 6f 77 53  rt(pIn1->u.pRowS
2ba70 65 74 2c 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a  et, pIn3->u.i);.
2ba80 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
2ba90 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2baa0 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 0a 2f 2a  OMIT_TRIGGER../*
2bab0 20 4f 70 63 6f 64 65 3a 20 50 72 6f 67 72 61 6d   Opcode: Program
2bac0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2bad0 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68  **.** Execute th
2bae0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2baf0 6d 20 70 61 73 73 65 64 20 61 73 20 50 34 20 28  m passed as P4 (
2bb00 74 79 70 65 20 50 34 5f 53 55 42 50 52 4f 47 52  type P4_SUBPROGR
2bb10 41 4d 29 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 63  AM). .**.** P1 c
2bb20 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72  ontains the addr
2bb30 65 73 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72  ess of the memor
2bb40 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74  y cell that cont
2bb50 61 69 6e 73 20 74 68 65 20 66 69 72 73 74 20 6d  ains the first m
2bb60 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 69  emory .** cell i
2bb70 6e 20 61 6e 20 61 72 72 61 79 20 6f 66 20 76 61  n an array of va
2bb80 6c 75 65 73 20 75 73 65 64 20 61 73 20 61 72 67  lues used as arg
2bb90 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 73 75  uments to the su
2bba0 62 2d 70 72 6f 67 72 61 6d 2e 20 50 32 20 0a 2a  b-program. P2 .*
2bbb0 2a 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 61  * contains the a
2bbc0 64 64 72 65 73 73 20 74 6f 20 6a 75 6d 70 20 74  ddress to jump t
2bbd0 6f 20 69 66 20 74 68 65 20 73 75 62 2d 70 72 6f  o if the sub-pro
2bbe0 67 72 61 6d 20 74 68 72 6f 77 73 20 61 6e 20 49  gram throws an I
2bbf0 47 4e 4f 52 45 20 0a 2a 2a 20 65 78 63 65 70 74  GNORE .** except
2bc00 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 52 41  ion using the RA
2bc10 49 53 45 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20  ISE() function. 
2bc20 52 65 67 69 73 74 65 72 20 50 33 20 63 6f 6e 74  Register P3 cont
2bc30 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73 73  ains the address
2bc40 20 0a 2a 2a 20 6f 66 20 61 20 6d 65 6d 6f 72 79   .** of a memory
2bc50 20 63 65 6c 6c 20 69 6e 20 74 68 69 73 20 28 74   cell in this (t
2bc60 68 65 20 70 61 72 65 6e 74 29 20 56 4d 20 74 68  he parent) VM th
2bc70 61 74 20 69 73 20 75 73 65 64 20 74 6f 20 61 6c  at is used to al
2bc80 6c 6f 63 61 74 65 20 74 68 65 20 0a 2a 2a 20 6d  locate the .** m
2bc90 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 62  emory required b
2bca0 79 20 74 68 65 20 73 75 62 2d 76 64 62 65 20 61  y the sub-vdbe a
2bcb0 74 20 72 75 6e 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  t runtime..**.**
2bcc0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
2bcd0 20 74 6f 20 74 68 65 20 56 4d 20 63 6f 6e 74 61   to the VM conta
2bce0 69 6e 69 6e 67 20 74 68 65 20 74 72 69 67 67 65  ining the trigge
2bcf0 72 20 70 72 6f 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a  r program..**.**
2bd00 20 49 66 20 50 35 20 69 73 20 6e 6f 6e 2d 7a 65   If P5 is non-ze
2bd10 72 6f 2c 20 74 68 65 6e 20 72 65 63 75 72 73 69  ro, then recursi
2bd20 76 65 20 70 72 6f 67 72 61 6d 20 69 6e 76 6f 63  ve program invoc
2bd30 61 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ation is enabled
2bd40 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 72 6f  ..*/.case OP_Pro
2bd50 67 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f  gram: {        /
2bd60 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  * jump */.  int 
2bd70 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
2bd80 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
2bd90 20 6d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72   memory register
2bda0 73 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  s for sub-progra
2bdb0 6d 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 79 74 65  m */.  int nByte
2bdc0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2bdd0 2a 20 42 79 74 65 73 20 6f 66 20 72 75 6e 74 69  * Bytes of runti
2bde0 6d 65 20 73 70 61 63 65 20 72 65 71 75 69 72 65  me space require
2bdf0 64 20 66 6f 72 20 73 75 62 2d 70 72 6f 67 72 61  d for sub-progra
2be00 6d 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 74 3b  m */.  Mem *pRt;
2be10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2be20 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 61 6c  * Register to al
2be30 6c 6f 63 61 74 65 20 72 75 6e 74 69 6d 65 20 73  locate runtime s
2be40 70 61 63 65 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  pace */.  Mem *p
2be50 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
2be60 20 20 2f 2a 20 55 73 65 64 20 74 6f 20 69 74 65    /* Used to ite
2be70 72 61 74 65 20 74 68 72 6f 75 67 68 20 6d 65 6d  rate through mem
2be80 6f 72 79 20 63 65 6c 6c 73 20 2a 2f 0a 20 20 4d  ory cells */.  M
2be90 65 6d 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  em *pEnd;       
2bea0 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74 20 6d         /* Last m
2beb0 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 6e 65  emory cell in ne
2bec0 77 20 61 72 72 61 79 20 2a 2f 0a 20 20 56 64 62  w array */.  Vdb
2bed0 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b 20  eFrame *pFrame; 
2bee0 20 20 20 20 20 2f 2a 20 4e 65 77 20 76 64 62 65       /* New vdbe
2bef0 20 66 72 61 6d 65 20 74 6f 20 65 78 65 63 75 74   frame to execut
2bf00 65 20 69 6e 20 2a 2f 0a 20 20 53 75 62 50 72 6f  e in */.  SubPro
2bf10 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
2bf20 20 20 2f 2a 20 53 75 62 2d 70 72 6f 67 72 61 6d    /* Sub-program
2bf30 20 74 6f 20 65 78 65 63 75 74 65 20 2a 2f 0a 20   to execute */. 
2bf40 20 76 6f 69 64 20 2a 74 3b 20 20 20 20 20 20 20   void *t;       
2bf50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
2bf60 6e 20 69 64 65 6e 74 69 66 79 69 6e 67 20 74 72  n identifying tr
2bf70 69 67 67 65 72 20 2a 2f 0a 0a 20 20 70 50 72 6f  igger */..  pPro
2bf80 67 72 61 6d 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  gram = pOp->p4.p
2bf90 50 72 6f 67 72 61 6d 3b 0a 20 20 70 52 74 20 3d  Program;.  pRt =
2bfa0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
2bfb0 0a 20 20 61 73 73 65 72 74 28 20 70 50 72 6f 67  .  assert( pProg
2bfc0 72 61 6d 2d 3e 6e 4f 70 3e 30 20 29 3b 0a 20 20  ram->nOp>0 );.  
2bfd0 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 70 35 20  .  /* If the p5 
2bfe0 66 6c 61 67 20 69 73 20 63 6c 65 61 72 2c 20 74  flag is clear, t
2bff0 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 69 6e  hen recursive in
2c000 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74 72 69 67  vocation of trig
2c010 67 65 72 73 20 69 73 20 0a 20 20 2a 2a 20 64 69  gers is .  ** di
2c020 73 61 62 6c 65 64 20 66 6f 72 20 62 61 63 6b 77  sabled for backw
2c030 61 72 64 73 20 63 6f 6d 70 61 74 69 62 69 6c 69  ards compatibili
2c040 74 79 20 28 70 35 20 69 73 20 73 65 74 20 69 66  ty (p5 is set if
2c050 20 74 68 69 73 20 73 75 62 2d 70 72 6f 67 72 61   this sub-progra
2c060 6d 0a 20 20 2a 2a 20 69 73 20 72 65 61 6c 6c 79  m.  ** is really
2c070 20 61 20 74 72 69 67 67 65 72 2c 20 6e 6f 74 20   a trigger, not 
2c080 61 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 61 63  a foreign key ac
2c090 74 69 6f 6e 2c 20 61 6e 64 20 74 68 65 20 66 6c  tion, and the fl
2c0a0 61 67 20 73 65 74 0a 20 20 2a 2a 20 61 6e 64 20  ag set.  ** and 
2c0b0 63 6c 65 61 72 65 64 20 62 79 20 74 68 65 20 22  cleared by the "
2c0c0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
2c0d0 5f 74 72 69 67 67 65 72 73 22 20 63 6f 6d 6d 61  _triggers" comma
2c0e0 6e 64 20 69 73 20 63 6c 65 61 72 29 2e 0a 20 20  nd is clear)..  
2c0f0 2a 2a 20 0a 20 20 2a 2a 20 49 74 20 69 73 20 72  ** .  ** It is r
2c100 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
2c110 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 2c  ion of triggers,
2c120 20 61 74 20 74 68 65 20 53 51 4c 20 6c 65 76 65   at the SQL leve
2c130 6c 2c 20 74 68 61 74 20 69 73 20 0a 20 20 2a 2a  l, that is .  **
2c140 20 64 69 73 61 62 6c 65 64 2e 20 49 6e 20 73 6f   disabled. In so
2c150 6d 65 20 63 61 73 65 73 20 61 20 73 69 6e 67 6c  me cases a singl
2c160 65 20 74 72 69 67 67 65 72 20 6d 61 79 20 67 65  e trigger may ge
2c170 6e 65 72 61 74 65 20 6d 6f 72 65 20 74 68 61 6e  nerate more than
2c180 20 6f 6e 65 20 0a 20 20 2a 2a 20 53 75 62 50 72   one .  ** SubPr
2c190 6f 67 72 61 6d 20 28 69 66 20 74 68 65 20 74 72  ogram (if the tr
2c1a0 69 67 67 65 72 20 6d 61 79 20 62 65 20 65 78 65  igger may be exe
2c1b0 63 75 74 65 64 20 77 69 74 68 20 6d 6f 72 65 20  cuted with more 
2c1c0 74 68 61 6e 20 6f 6e 65 20 64 69 66 66 65 72 65  than one differe
2c1d0 6e 74 20 0a 20 20 2a 2a 20 4f 4e 20 43 4f 4e 46  nt .  ** ON CONF
2c1e0 4c 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 29 2e  LICT algorithm).
2c1f0 20 53 75 62 50 72 6f 67 72 61 6d 20 73 74 72 75   SubProgram stru
2c200 63 74 75 72 65 73 20 61 73 73 6f 63 69 61 74 65  ctures associate
2c210 64 20 77 69 74 68 20 61 0a 20 20 2a 2a 20 73 69  d with a.  ** si
2c220 6e 67 6c 65 20 74 72 69 67 67 65 72 20 61 6c 6c  ngle trigger all
2c230 20 68 61 76 65 20 74 68 65 20 73 61 6d 65 20 76   have the same v
2c240 61 6c 75 65 20 66 6f 72 20 74 68 65 20 53 75 62  alue for the Sub
2c250 50 72 6f 67 72 61 6d 2e 74 6f 6b 65 6e 20 0a 20  Program.token . 
2c260 20 2a 2a 20 76 61 72 69 61 62 6c 65 2e 20 20 2a   ** variable.  *
2c270 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  /.  if( pOp->p5 
2c280 29 7b 0a 20 20 20 20 74 20 3d 20 70 50 72 6f 67  ){.    t = pProg
2c290 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20  ram->token;.    
2c2a0 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46  for(pFrame=p->pF
2c2b0 72 61 6d 65 3b 20 70 46 72 61 6d 65 20 26 26 20  rame; pFrame && 
2c2c0 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 21 3d 74  pFrame->token!=t
2c2d0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
2c2e0 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 69  >pParent);.    i
2c2f0 66 28 20 70 46 72 61 6d 65 20 29 20 62 72 65 61  f( pFrame ) brea
2c300 6b 3b 0a 20 20 7d 0a 0a 20 20 69 66 28 20 70 2d  k;.  }..  if( p-
2c310 3e 6e 46 72 61 6d 65 3e 3d 64 62 2d 3e 61 4c 69  >nFrame>=db->aLi
2c320 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49 54  mit[SQLITE_LIMIT
2c330 5f 54 52 49 47 47 45 52 5f 44 45 50 54 48 5d 20  _TRIGGER_DEPTH] 
2c340 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
2c350 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 73 71  TE_ERROR;.    sq
2c360 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28 26  lite3SetString(&
2c370 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20  p->zErrMsg, db, 
2c380 22 74 6f 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73  "too many levels
2c390 20 6f 66 20 74 72 69 67 67 65 72 20 72 65 63 75   of trigger recu
2c3a0 72 73 69 6f 6e 22 29 3b 0a 20 20 20 20 62 72 65  rsion");.    bre
2c3b0 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65  ak;.  }..  /* Re
2c3c0 67 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73  gister pRt is us
2c3d0 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20  ed to store the 
2c3e0 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20  memory required 
2c3f0 74 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74  to save the stat
2c400 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75  e.  ** of the cu
2c410 72 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61  rrent program, a
2c420 6e 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65  nd the memory re
2c430 71 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d  quired at runtim
2c440 65 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a  e to execute.  *
2c450 2a 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  * the trigger pr
2c460 6f 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74  ogram. If this t
2c470 72 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20  rigger has been 
2c480 66 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68  fired before, th
2c490 65 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20  en pRt .  ** is 
2c4a0 61 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65  already allocate
2c4b0 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74  d. Otherwise, it
2c4c0 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c   must be initial
2c4d0 69 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20  ized.  */.  if( 
2c4e0 28 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  (pRt->flags&MEM_
2c4f0 46 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20  Frame)==0 ){.   
2c500 20 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e   /* SubProgram.n
2c510 4d 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68  Mem is set to th
2c520 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  e number of memo
2c530 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79  ry cells used by
2c540 20 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f   the .    ** pro
2c550 67 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53  gram stored in S
2c560 75 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41  ubProgram.aOp. A
2c570 73 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c  s well as these,
2c580 20 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20   one memory.    
2c590 2a 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69  ** cell is requi
2c5a0 72 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72  red for each cur
2c5b0 73 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20  sor used by the 
2c5c0 70 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63  program. Set loc
2c5d0 61 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62  al.    ** variab
2c5e0 6c 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74  le nMem (and lat
2c5f0 65 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43  er, VdbeFrame.nC
2c600 68 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73  hildMem) to this
2c610 20 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20   value..    */. 
2c620 20 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72     nMem = pProgr
2c630 61 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67  am->nMem + pProg
2c640 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 6e  ram->nCsr;.    n
2c650 42 79 74 65 20 3d 20 52 4f 55 4e 44 38 28 73 69  Byte = ROUND8(si
2c660 7a 65 6f 66 28 56 64 62 65 46 72 61 6d 65 29 29  zeof(VdbeFrame))
2c670 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b  .              +
2c680 20 6e 4d 65 6d 20 2a 20 73 69 7a 65 6f 66 28 4d   nMem * sizeof(M
2c690 65 6d 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  em).            
2c6a0 20 20 2b 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43    + pProgram->nC
2c6b0 73 72 20 2a 20 73 69 7a 65 6f 66 28 56 64 62 65  sr * sizeof(Vdbe
2c6c0 43 75 72 73 6f 72 20 2a 29 0a 20 20 20 20 20 20  Cursor *).      
2c6d0 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
2c6e0 61 6d 2d 3e 6e 4f 6e 63 65 20 2a 20 73 69 7a 65  am->nOnce * size
2c6f0 6f 66 28 75 38 29 3b 0a 20 20 20 20 70 46 72 61  of(u8);.    pFra
2c700 6d 65 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61  me = sqlite3DbMa
2c710 6c 6c 6f 63 5a 65 72 6f 28 64 62 2c 20 6e 42 79  llocZero(db, nBy
2c720 74 65 29 3b 0a 20 20 20 20 69 66 28 20 21 70 46  te);.    if( !pF
2c730 72 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 67 6f  rame ){.      go
2c740 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d  to no_mem;.    }
2c750 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
2c760 4d 65 6d 52 65 6c 65 61 73 65 28 70 52 74 29 3b  MemRelease(pRt);
2c770 0a 20 20 20 20 70 52 74 2d 3e 66 6c 61 67 73 20  .    pRt->flags 
2c780 3d 20 4d 45 4d 5f 46 72 61 6d 65 3b 0a 20 20 20  = MEM_Frame;.   
2c790 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 20 3d   pRt->u.pFrame =
2c7a0 20 70 46 72 61 6d 65 3b 0a 0a 20 20 20 20 70 46   pFrame;..    pF
2c7b0 72 61 6d 65 2d 3e 76 20 3d 20 70 3b 0a 20 20 20  rame->v = p;.   
2c7c0 20 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d   pFrame->nChildM
2c7d0 65 6d 20 3d 20 6e 4d 65 6d 3b 0a 20 20 20 20 70  em = nMem;.    p
2c7e0 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72  Frame->nChildCsr
2c7f0 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73   = pProgram->nCs
2c800 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 70  r;.    pFrame->p
2c810 63 20 3d 20 70 63 3b 0a 20 20 20 20 70 46 72 61  c = pc;.    pFra
2c820 6d 65 2d 3e 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d  me->aMem = p->aM
2c830 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
2c840 6e 4d 65 6d 20 3d 20 70 2d 3e 6e 4d 65 6d 3b 0a  nMem = p->nMem;.
2c850 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 70 43 73      pFrame->apCs
2c860 72 20 3d 20 70 2d 3e 61 70 43 73 72 3b 0a 20 20  r = p->apCsr;.  
2c870 20 20 70 46 72 61 6d 65 2d 3e 6e 43 75 72 73 6f    pFrame->nCurso
2c880 72 20 3d 20 70 2d 3e 6e 43 75 72 73 6f 72 3b 0a  r = p->nCursor;.
2c890 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4f 70 20      pFrame->aOp 
2c8a0 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20 20 70 46  = p->aOp;.    pF
2c8b0 72 61 6d 65 2d 3e 6e 4f 70 20 3d 20 70 2d 3e 6e  rame->nOp = p->n
2c8c0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
2c8d0 74 6f 6b 65 6e 20 3d 20 70 50 72 6f 67 72 61 6d  token = pProgram
2c8e0 2d 3e 74 6f 6b 65 6e 3b 0a 20 20 20 20 70 46 72  ->token;.    pFr
2c8f0 61 6d 65 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d  ame->aOnceFlag =
2c900 20 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 3b 0a 20   p->aOnceFlag;. 
2c910 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 6e 63 65     pFrame->nOnce
2c920 46 6c 61 67 20 3d 20 70 2d 3e 6e 4f 6e 63 65 46  Flag = p->nOnceF
2c930 6c 61 67 3b 0a 0a 20 20 20 20 70 45 6e 64 20 3d  lag;..    pEnd =
2c940 20 26 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70   &VdbeFrameMem(p
2c950 46 72 61 6d 65 29 5b 70 46 72 61 6d 65 2d 3e 6e  Frame)[pFrame->n
2c960 43 68 69 6c 64 4d 65 6d 5d 3b 0a 20 20 20 20 66  ChildMem];.    f
2c970 6f 72 28 70 4d 65 6d 3d 56 64 62 65 46 72 61 6d  or(pMem=VdbeFram
2c980 65 4d 65 6d 28 70 46 72 61 6d 65 29 3b 20 70 4d  eMem(pFrame); pM
2c990 65 6d 21 3d 70 45 6e 64 3b 20 70 4d 65 6d 2b 2b  em!=pEnd; pMem++
2c9a0 29 7b 0a 20 20 20 20 20 20 70 4d 65 6d 2d 3e 66  ){.      pMem->f
2c9b0 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
2c9c0 69 6e 65 64 3b 0a 20 20 20 20 20 20 70 4d 65 6d  ined;.      pMem
2c9d0 2d 3e 64 62 20 3d 20 64 62 3b 0a 20 20 20 20 7d  ->db = db;.    }
2c9e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 46  .  }else{.    pF
2c9f0 72 61 6d 65 20 3d 20 70 52 74 2d 3e 75 2e 70 46  rame = pRt->u.pF
2ca00 72 61 6d 65 3b 0a 20 20 20 20 61 73 73 65 72 74  rame;.    assert
2ca10 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d  ( pProgram->nMem
2ca20 2b 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d  +pProgram->nCsr=
2ca30 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
2ca40 65 6d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  em );.    assert
2ca50 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72  ( pProgram->nCsr
2ca60 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  ==pFrame->nChild
2ca70 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72  Csr );.    asser
2ca80 74 28 20 70 63 3d 3d 70 46 72 61 6d 65 2d 3e 70  t( pc==pFrame->p
2ca90 63 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e  c );.  }..  p->n
2caa0 46 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d  Frame++;.  pFram
2cab0 65 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e  e->pParent = p->
2cac0 70 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65  pFrame;.  pFrame
2cad0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c 61  ->lastRowid = la
2cae0 73 74 52 6f 77 69 64 3b 0a 20 20 70 46 72 61 6d  stRowid;.  pFram
2caf0 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20 70 2d 3e  e->nChange = p->
2cb00 6e 43 68 61 6e 67 65 3b 0a 20 20 70 2d 3e 6e 43  nChange;.  p->nC
2cb10 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e  hange = 0;.  p->
2cb20 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b  pFrame = pFrame;
2cb30 0a 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65  .  p->aMem = aMe
2cb40 6d 20 3d 20 26 56 64 62 65 46 72 61 6d 65 4d 65  m = &VdbeFrameMe
2cb50 6d 28 70 46 72 61 6d 65 29 5b 2d 31 5d 3b 0a 20  m(pFrame)[-1];. 
2cb60 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46 72 61 6d   p->nMem = pFram
2cb70 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b 0a 20 20  e->nChildMem;.  
2cb80 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 28 75 31  p->nCursor = (u1
2cb90 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64  6)pFrame->nChild
2cba0 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43 73 72 20  Csr;.  p->apCsr 
2cbb0 3d 20 28 56 64 62 65 43 75 72 73 6f 72 20 2a 2a  = (VdbeCursor **
2cbc0 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65 6d 2b 31  )&aMem[p->nMem+1
2cbd0 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61 4f  ];.  p->aOp = aO
2cbe0 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61 4f  p = pProgram->aO
2cbf0 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70 50  p;.  p->nOp = pP
2cc00 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 20 20 70  rogram->nOp;.  p
2cc10 2d 3e 61 4f 6e 63 65 46 6c 61 67 20 3d 20 28 75  ->aOnceFlag = (u
2cc20 38 20 2a 29 26 70 2d 3e 61 70 43 73 72 5b 70 2d  8 *)&p->apCsr[p-
2cc30 3e 6e 43 75 72 73 6f 72 5d 3b 0a 20 20 70 2d 3e  >nCursor];.  p->
2cc40 6e 4f 6e 63 65 46 6c 61 67 20 3d 20 70 50 72 6f  nOnceFlag = pPro
2cc50 67 72 61 6d 2d 3e 6e 4f 6e 63 65 3b 0a 20 20 70  gram->nOnce;.  p
2cc60 63 20 3d 20 2d 31 3b 0a 20 20 6d 65 6d 73 65 74  c = -1;.  memset
2cc70 28 70 2d 3e 61 4f 6e 63 65 46 6c 61 67 2c 20 30  (p->aOnceFlag, 0
2cc80 2c 20 70 2d 3e 6e 4f 6e 63 65 46 6c 61 67 29 3b  , p->nOnceFlag);
2cc90 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ..  break;.}../*
2cca0 20 4f 70 63 6f 64 65 3a 20 50 61 72 61 6d 20 50   Opcode: Param P
2ccb0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  1 P2 * * *.**.**
2ccc0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
2ccd0 6f 6e 6c 79 20 65 76 65 72 20 70 72 65 73 65 6e  only ever presen
2cce0 74 20 69 6e 20 73 75 62 2d 70 72 6f 67 72 61 6d  t in sub-program
2ccf0 73 20 63 61 6c 6c 65 64 20 76 69 61 20 74 68 65  s called via the
2cd00 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72 61 6d 20   .** OP_Program 
2cd10 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 43 6f 70  instruction. Cop
2cd20 79 20 61 20 76 61 6c 75 65 20 63 75 72 72 65 6e  y a value curren
2cd30 74 6c 79 20 73 74 6f 72 65 64 20 69 6e 20 61 20  tly stored in a 
2cd40 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65 6c 6c 20  memory .** cell 
2cd50 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 28  of the calling (
2cd60 70 61 72 65 6e 74 29 20 66 72 61 6d 65 20 74 6f  parent) frame to
2cd70 20 63 65 6c 6c 20 50 32 20 69 6e 20 74 68 65 20   cell P2 in the 
2cd80 63 75 72 72 65 6e 74 20 66 72 61 6d 65 73 20 0a  current frames .
2cd90 2a 2a 20 61 64 64 72 65 73 73 20 73 70 61 63 65  ** address space
2cda0 2e 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62  . This is used b
2cdb0 79 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  y trigger progra
2cdc0 6d 73 20 74 6f 20 61 63 63 65 73 73 20 74 68 65  ms to access the
2cdd0 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f   new.* .** and o
2cde0 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a  ld.* values..**.
2cdf0 2a 2a 20 54 68 65 20 61 64 64 72 65 73 73 20 6f  ** The address o
2ce00 66 20 74 68 65 20 63 65 6c 6c 20 69 6e 20 74 68  f the cell in th
2ce10 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 20 69  e parent frame i
2ce20 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
2ce30 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65 20 76 61  adding.** the va
2ce40 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2ce50 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 76 61  gument to the va
2ce60 6c 75 65 20 6f 66 20 74 68 65 20 50 31 20 61 72  lue of the P1 ar
2ce70 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 0a 2a 2a  gument to the.**
2ce80 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67   calling OP_Prog
2ce90 72 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ram instruction.
2cea0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50 61 72 61  .*/.case OP_Para
2ceb0 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  m: {           /
2cec0 2a 20 6f 75 74 32 2d 70 72 65 72 65 6c 65 61 73  * out2-prereleas
2ced0 65 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65  e */.  VdbeFrame
2cee0 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d 20   *pFrame;.  Mem 
2cef0 2a 70 49 6e 3b 0a 20 20 70 46 72 61 6d 65 20 3d  *pIn;.  pFrame =
2cf00 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 70 49   p->pFrame;.  pI
2cf10 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  n = &pFrame->aMe
2cf20 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46 72 61  m[pOp->p1 + pFra
2cf30 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65 2d 3e  me->aOp[pFrame->
2cf40 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20 73 71  pc].p1];   .  sq
2cf50 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c  lite3VdbeMemShal
2cf60 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 49  lowCopy(pOut, pI
2cf70 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 20  n, MEM_Ephem);. 
2cf80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e 64 69   break;.}..#endi
2cf90 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53 51 4c  f /* #ifndef SQL
2cfa0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
2cfb0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
2cfc0 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2cfd0 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  _KEY./* Opcode: 
2cfe0 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50 32 20  FkCounter P1 P2 
2cff0 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
2d000 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d 50 32  s: fkctr[P1]+=P2
2d010 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74  .**.** Increment
2d020 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 63   a "constraint c
2d030 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20 28 50  ounter" by P2 (P
2d040 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74 69 76  2 may be negativ
2d050 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29 2e 0a  e or positive)..
2d060 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d  ** If P1 is non-
2d070 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61 62 61  zero, the databa
2d080 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 6f  se constraint co
2d090 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65 6d 65  unter is increme
2d0a0 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65 72 72  nted .** (deferr
2d0b0 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ed foreign key c
2d0c0 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f 74 68  onstraints). Oth
2d0d0 65 72 77 69 73 65 2c 20 69 66 20 50 31 20 69 73  erwise, if P1 is
2d0e0 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a 20 73   zero, the .** s
2d0f0 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74 65 72  tatement counter
2d100 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
2d110 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69  (immediate forei
2d120 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
2d130 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ts)..*/.case OP_
2d140 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20 20 69  FkCounter: {.  i
2d150 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  f( db->flags & S
2d160 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
2d170 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72  {.    db->nDefer
2d180 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20 70 4f  redImmCons += pO
2d190 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65 20 69  p->p2;.  }else i
2d1a0 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20  f( pOp->p1 ){.  
2d1b0 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43    db->nDeferredC
2d1c0 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
2d1d0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e    }else{.    p->
2d1e0 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20 2b 3d  nFkConstraint +=
2d1f0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a 20 20   pOp->p2;.  }.  
2d200 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2d210 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20 50 31  ode: FkIfZero P1
2d220 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d230 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74 72 5b  opsis: if fkctr[
2d240 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a  P1]==0 goto P2.*
2d250 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
2d260 20 74 65 73 74 73 20 69 66 20 61 20 66 6f 72 65   tests if a fore
2d270 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
2d280 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 63 75  nt-counter is cu
2d290 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a 2a 2a  rrently zero..**
2d2a0 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74 6f 20   If so, jump to 
2d2b0 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 20  instruction P2. 
2d2c0 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2d2d0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2d2e0 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75 63 74  ext .** instruct
2d2f0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31  ion..**.** If P1
2d300 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
2d310 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  en the jump is t
2d320 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61 74 61  aken if the data
2d330 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 2d  base constraint-
2d340 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20 7a 65  counter.** is ze
2d350 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68 61 74  ro (the one that
2d360 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72 65 64   counts deferred
2d370 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f 6c   constraint viol
2d380 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31 20 69  ations). If P1 i
2d390 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65 20 6a  s.** zero, the j
2d3a0 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 20  ump is taken if 
2d3b0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f  the statement co
2d3c0 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
2d3d0 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69 6d 6d   is zero.** (imm
2d3e0 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
2d3f0 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ey constraint vi
2d400 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a 63 61  olations)..*/.ca
2d410 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f 3a 20  se OP_FkIfZero: 
2d420 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d  {         /* jum
2d430 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70 2d 3e  p */.  if( pOp->
2d440 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72  p1 ){.    VdbeBr
2d450 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e 6e 44  anchTaken(db->nD
2d460 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26  eferredCons==0 &
2d470 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  & db->nDeferredI
2d480 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20  mmCons==0, 2);. 
2d490 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65 66 65     if( db->nDefe
2d4a0 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26 20 64  rredCons==0 && d
2d4b0 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
2d4c0 6f 6e 73 3d 3d 30 20 29 20 70 63 20 3d 20 70 4f  ons==0 ) pc = pO
2d4d0 70 2d 3e 70 32 2d 31 3b 0a 20 20 7d 65 6c 73 65  p->p2-1;.  }else
2d4e0 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68  {.    VdbeBranch
2d4f0 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43 6f 6e 73  Taken(p->nFkCons
2d500 74 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d  traint==0 && db-
2d510 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
2d520 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66  s==0, 2);.    if
2d530 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69  ( p->nFkConstrai
2d540 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65  nt==0 && db->nDe
2d550 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30  ferredImmCons==0
2d560 20 29 20 70 63 20 3d 20 70 4f 70 2d 3e 70 32 2d   ) pc = pOp->p2-
2d570 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  1;.  }.  break;.
2d580 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69 66 6e  }.#endif /* #ifn
2d590 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2d5a0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 2a 2f 0a 0a  FOREIGN_KEY */..
2d5b0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2d5c0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
2d5d0 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 65 6d  T./* Opcode: Mem
2d5e0 4d 61 78 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  Max P1 P2 * * *.
2d5f0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
2d600 31 5d 3d 6d 61 78 28 72 5b 50 31 5d 2c 72 5b 50  1]=max(r[P1],r[P
2d610 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  2]).**.** P1 is 
2d620 61 20 72 65 67 69 73 74 65 72 20 69 6e 20 74 68  a register in th
2d630 65 20 72 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20  e root frame of 
2d640 74 68 69 73 20 56 4d 20 28 74 68 65 20 72 6f 6f  this VM (the roo
2d650 74 20 66 72 61 6d 65 20 69 73 0a 2a 2a 20 64 69  t frame is.** di
2d660 66 66 65 72 65 6e 74 20 66 72 6f 6d 20 74 68 65  fferent from the
2d670 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65 20 69   current frame i
2d680 66 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  f this instructi
2d690 6f 6e 20 69 73 20 62 65 69 6e 67 20 65 78 65 63  on is being exec
2d6a0 75 74 65 64 0a 2a 2a 20 77 69 74 68 69 6e 20 61  uted.** within a
2d6b0 20 73 75 62 2d 70 72 6f 67 72 61 6d 29 2e 20 53   sub-program). S
2d6c0 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
2d6d0 72 65 67 69 73 74 65 72 20 50 31 20 74 6f 20 74  register P1 to t
2d6e0 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66 20 0a 2a  he maximum of .*
2d6f0 2a 20 69 74 73 20 63 75 72 72 65 6e 74 20 76 61  * its current va
2d700 6c 75 65 20 61 6e 64 20 74 68 65 20 76 61 6c 75  lue and the valu
2d710 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
2d720 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
2d730 74 72 75 63 74 69 6f 6e 20 74 68 72 6f 77 73 20  truction throws 
2d740 61 6e 20 65 72 72 6f 72 20 69 66 20 74 68 65 20  an error if the 
2d750 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 73 20 6e  memory cell is n
2d760 6f 74 20 69 6e 69 74 69 61 6c 6c 79 0a 2a 2a 20  ot initially.** 
2d770 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2d780 61 73 65 20 4f 50 5f 4d 65 6d 4d 61 78 3a 20 7b  ase OP_MemMax: {
2d790 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a          /* in2 *
2d7a0 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
2d7b0 46 72 61 6d 65 3b 0a 20 20 69 66 28 20 70 2d 3e  Frame;.  if( p->
2d7c0 70 46 72 61 6d 65 20 29 7b 0a 20 20 20 20 66 6f  pFrame ){.    fo
2d7d0 72 28 70 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61  r(pFrame=p->pFra
2d7e0 6d 65 3b 20 70 46 72 61 6d 65 2d 3e 70 50 61 72  me; pFrame->pPar
2d7f0 65 6e 74 3b 20 70 46 72 61 6d 65 3d 70 46 72 61  ent; pFrame=pFra
2d800 6d 65 2d 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20  me->pParent);.  
2d810 20 20 70 49 6e 31 20 3d 20 26 70 46 72 61 6d 65    pIn1 = &pFrame
2d820 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b  ->aMem[pOp->p1];
2d830 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49  .  }else{.    pI
2d840 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2d850 70 31 5d 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72  p1];.  }.  asser
2d860 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49  t( memIsValid(pI
2d870 6e 31 29 20 29 3b 0a 20 20 73 71 6c 69 74 65 33  n1) );.  sqlite3
2d880 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
2d890 79 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 32 20  y(pIn1);.  pIn2 
2d8a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
2d8b0 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
2d8c0 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
2d8d0 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e  2);.  if( pIn1->
2d8e0 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e 69 29 7b 0a  u.i<pIn2->u.i){.
2d8f0 20 20 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20      pIn1->u.i = 
2d900 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 7d 0a 20  pIn2->u.i;.  }. 
2d910 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
2d920 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
2d930 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f  AUTOINCREMENT */
2d940 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 50  ../* Opcode: IfP
2d950 6f 73 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  os P1 P2 * * *.*
2d960 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2d970 5b 50 31 5d 3e 30 20 67 6f 74 6f 20 50 32 0a 2a  [P1]>0 goto P2.*
2d980 2a 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75  *.** If the valu
2d990 65 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31  e of register P1
2d9a0 20 69 73 20 31 20 6f 72 20 67 72 65 61 74 65 72   is 1 or greater
2d9b0 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  , jump to P2..**
2d9c0 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61  .** It is illega
2d9d0 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e  l to use this in
2d9e0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72  struction on a r
2d9f0 65 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65  egister that doe
2da00 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e  s.** not contain
2da10 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e   an integer.  An
2da20 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74   assertion fault
2da30 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20   will result if 
2da40 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65  you try..*/.case
2da50 20 4f 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20   OP_IfPos: {    
2da60 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
2da70 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
2da80 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
2da90 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
2daa0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
2dab0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2dac0 20 70 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29   pIn1->u.i>0, 2)
2dad0 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e  ;.  if( pIn1->u.
2dae0 69 3e 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d  i>0 ){.     pc =
2daf0 20 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20   pOp->p2 - 1;.  
2db00 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2db10 20 4f 70 63 6f 64 65 3a 20 49 66 4e 65 67 20 50   Opcode: IfNeg P
2db20 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
2db30 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
2db40 3c 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  <0 goto P2.**.**
2db50 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f 66   If the value of
2db60 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
2db70 6c 65 73 73 20 74 68 61 6e 20 7a 65 72 6f 2c 20  less than zero, 
2db80 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 0a  jump to P2. .**.
2db90 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67 61 6c  ** It is illegal
2dba0 20 74 6f 20 75 73 65 20 74 68 69 73 20 69 6e 73   to use this ins
2dbb0 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61 20 72 65  truction on a re
2dbc0 67 69 73 74 65 72 20 74 68 61 74 20 64 6f 65 73  gister that does
2dbd0 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20  .** not contain 
2dbe0 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 41 6e 20  an integer.  An 
2dbf0 61 73 73 65 72 74 69 6f 6e 20 66 61 75 6c 74 20  assertion fault 
2dc00 77 69 6c 6c 20 72 65 73 75 6c 74 20 69 66 20 79  will result if y
2dc10 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61 73 65 20  ou try..*/.case 
2dc20 4f 50 5f 49 66 4e 65 67 3a 20 7b 20 20 20 20 20  OP_IfNeg: {     
2dc30 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
2dc40 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
2dc50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
2dc60 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
2dc70 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
2dc80 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
2dc90 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
2dca0 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c    if( pIn1->u.i<
2dcb0 30 20 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70  0 ){.     pc = p
2dcc0 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a  Op->p2 - 1;.  }.
2dcd0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
2dce0 70 63 6f 64 65 3a 20 49 66 5a 65 72 6f 20 50 31  pcode: IfZero P1
2dcf0 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2dd00 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 2b 3d 50  nopsis: r[P1]+=P
2dd10 33 2c 20 69 66 20 72 5b 50 31 5d 3d 3d 30 20 67  3, if r[P1]==0 g
2dd20 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65  oto P2.**.** The
2dd30 20 72 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   register P1 mus
2dd40 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
2dd50 65 67 65 72 2e 20 20 41 64 64 20 6c 69 74 65 72  eger.  Add liter
2dd60 61 6c 20 50 33 20 74 6f 20 74 68 65 0a 2a 2a 20  al P3 to the.** 
2dd70 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
2dd80 72 20 50 31 2e 20 20 49 66 20 74 68 65 20 72 65  r P1.  If the re
2dd90 73 75 6c 74 20 69 73 20 65 78 61 63 74 6c 79 20  sult is exactly 
2dda0 30 2c 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a  0, jump to P2. .
2ddb0 2a 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65  **.** It is ille
2ddc0 67 61 6c 20 74 6f 20 75 73 65 20 74 68 69 73 20  gal to use this 
2ddd0 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 6e 20 61  instruction on a
2dde0 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20 64   register that d
2ddf0 6f 65 73 0a 2a 2a 20 6e 6f 74 20 63 6f 6e 74 61  oes.** not conta
2de00 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
2de10 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 75  An assertion fau
2de20 6c 74 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  lt will result i
2de30 66 20 79 6f 75 20 74 72 79 2e 0a 2a 2f 0a 63 61  f you try..*/.ca
2de40 73 65 20 4f 50 5f 49 66 5a 65 72 6f 3a 20 7b 20  se OP_IfZero: { 
2de50 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
2de60 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  in1 */.  pIn1 = 
2de70 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
2de80 20 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e    assert( pIn1->
2de90 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b  flags&MEM_Int );
2dea0 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2b 3d 20  .  pIn1->u.i += 
2deb0 70 4f 70 2d 3e 70 33 3b 0a 20 20 56 64 62 65 42  pOp->p3;.  VdbeB
2dec0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
2ded0 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a 20 20 69  >u.i==0, 2);.  i
2dee0 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 20  f( pIn1->u.i==0 
2def0 29 7b 0a 20 20 20 20 20 70 63 20 3d 20 70 4f 70  ){.     pc = pOp
2df00 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d 0a 20 20  ->p2 - 1;.  }.  
2df10 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2df20 6f 64 65 3a 20 41 67 67 53 74 65 70 20 2a 20 50  ode: AggStep * P
2df30 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2df40 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
2df50 50 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35  P3] step(r[P2@P5
2df60 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65  ]).**.** Execute
2df70 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69   the step functi
2df80 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
2df90 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e  ate.  The.** fun
2dfa0 63 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67  ction has P5 arg
2dfb0 75 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20  uments.   P4 is 
2dfc0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
2dfd0 20 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75   FuncDef.** stru
2dfe0 63 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69  cture that speci
2dff0 66 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f  fies the functio
2e000 6e 2e 20 20 55 73 65 20 72 65 67 69 73 74 65 72  n.  Use register
2e010 0a 2a 2a 20 50 33 20 61 73 20 74 68 65 20 61 63  .** P3 as the ac
2e020 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
2e030 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
2e040 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
2e050 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
2e060 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
2e070 72 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  rs..*/.case OP_A
2e080 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e 74 20  ggStep: {.  int 
2e090 6e 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 4d 65  n;.  int i;.  Me
2e0a0 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d 20 2a  m *pMem;.  Mem *
2e0b0 70 52 65 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  pRec;.  sqlite3_
2e0c0 63 6f 6e 74 65 78 74 20 63 74 78 3b 0a 20 20 73  context ctx;.  s
2e0d0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 61  qlite3_value **a
2e0e0 70 56 61 6c 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70  pVal;..  n = pOp
2e0f0 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
2e100 6e 3e 3d 30 20 29 3b 0a 20 20 70 52 65 63 20 3d  n>=0 );.  pRec =
2e110 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
2e120 0a 20 20 61 70 56 61 6c 20 3d 20 70 2d 3e 61 70  .  apVal = p->ap
2e130 41 72 67 3b 0a 20 20 61 73 73 65 72 74 28 20 61  Arg;.  assert( a
2e140 70 56 61 6c 20 7c 7c 20 6e 3d 3d 30 20 29 3b 0a  pVal || n==0 );.
2e150 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b 20    for(i=0; i<n; 
2e160 69 2b 2b 2c 20 70 52 65 63 2b 2b 29 7b 0a 20 20  i++, pRec++){.  
2e170 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
2e180 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a 20 20  alid(pRec) );.  
2e190 20 20 61 70 56 61 6c 5b 69 5d 20 3d 20 70 52 65    apVal[i] = pRe
2e1a0 63 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  c;.    memAboutT
2e1b0 6f 43 68 61 6e 67 65 28 70 2c 20 70 52 65 63 29  oChange(p, pRec)
2e1c0 3b 0a 20 20 7d 0a 20 20 63 74 78 2e 70 46 75 6e  ;.  }.  ctx.pFun
2e1d0 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
2e1e0 63 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  c;.  assert( pOp
2e1f0 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p3>0 && pOp->p
2e200 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e  3<=(p->nMem-p->n
2e210 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 63 74 78  Cursor) );.  ctx
2e220 2e 70 4d 65 6d 20 3d 20 70 4d 65 6d 20 3d 20 26  .pMem = pMem = &
2e230 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
2e240 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 63 74   pMem->n++;.  ct
2e250 78 2e 73 2e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  x.s.flags = MEM_
2e260 4e 75 6c 6c 3b 0a 20 20 63 74 78 2e 73 2e 7a 20  Null;.  ctx.s.z 
2e270 3d 20 30 3b 0a 20 20 63 74 78 2e 73 2e 7a 4d 61  = 0;.  ctx.s.zMa
2e280 6c 6c 6f 63 20 3d 20 30 3b 0a 20 20 63 74 78 2e  lloc = 0;.  ctx.
2e290 73 2e 78 44 65 6c 20 3d 20 30 3b 0a 20 20 63 74  s.xDel = 0;.  ct
2e2a0 78 2e 73 2e 64 62 20 3d 20 64 62 3b 0a 20 20 63  x.s.db = db;.  c
2e2b0 74 78 2e 69 73 45 72 72 6f 72 20 3d 20 30 3b 0a  tx.isError = 0;.
2e2c0 20 20 63 74 78 2e 70 43 6f 6c 6c 20 3d 20 30 3b    ctx.pColl = 0;
2e2d0 0a 20 20 63 74 78 2e 73 6b 69 70 46 6c 61 67 20  .  ctx.skipFlag 
2e2e0 3d 20 30 3b 0a 20 20 69 66 28 20 63 74 78 2e 70  = 0;.  if( ctx.p
2e2f0 46 75 6e 63 2d 3e 66 75 6e 63 46 6c 61 67 73 20  Func->funcFlags 
2e300 26 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  & SQLITE_FUNC_NE
2e310 45 44 43 4f 4c 4c 20 29 7b 0a 20 20 20 20 61 73  EDCOLL ){.    as
2e320 73 65 72 74 28 20 70 4f 70 3e 70 2d 3e 61 4f 70  sert( pOp>p->aOp
2e330 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
2e340 70 4f 70 5b 2d 31 5d 2e 70 34 74 79 70 65 3d 3d  pOp[-1].p4type==
2e350 50 34 5f 43 4f 4c 4c 53 45 51 20 29 3b 0a 20 20  P4_COLLSEQ );.  
2e360 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31    assert( pOp[-1
2e370 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c  ].opcode==OP_Col
2e380 6c 53 65 71 20 29 3b 0a 20 20 20 20 63 74 78 2e  lSeq );.    ctx.
2e390 70 43 6f 6c 6c 20 3d 20 70 4f 70 5b 2d 31 5d 2e  pColl = pOp[-1].
2e3a0 70 34 2e 70 43 6f 6c 6c 3b 0a 20 20 7d 0a 20 20  p4.pColl;.  }.  
2e3b0 28 63 74 78 2e 70 46 75 6e 63 2d 3e 78 53 74 65  (ctx.pFunc->xSte
2e3c0 70 29 28 26 63 74 78 2c 20 6e 2c 20 61 70 56 61  p)(&ctx, n, apVa
2e3d0 6c 29 3b 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 34  l); /* IMP: R-24
2e3e0 35 30 35 2d 32 33 32 33 30 20 2a 2f 0a 20 20 69  505-23230 */.  i
2e3f0 66 28 20 63 74 78 2e 69 73 45 72 72 6f 72 20 29  f( ctx.isError )
2e400 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
2e410 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
2e420 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
2e430 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74  lite3_value_text
2e440 28 26 63 74 78 2e 73 29 29 3b 0a 20 20 20 20 72  (&ctx.s));.    r
2e450 63 20 3d 20 63 74 78 2e 69 73 45 72 72 6f 72 3b  c = ctx.isError;
2e460 0a 20 20 7d 0a 20 20 69 66 28 20 63 74 78 2e 73  .  }.  if( ctx.s
2e470 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
2e480 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
2e490 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
2e4a0 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
2e4b0 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
2e4c0 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
2e4d0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
2e4e0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 0a 20  m[i], 1);.  }.. 
2e4f0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
2e500 65 6c 65 61 73 65 28 26 63 74 78 2e 73 29 3b 0a  elease(&ctx.s);.
2e510 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
2e520 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c  Opcode: AggFinal
2e530 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a   P1 P2 * P4 *.**
2e540 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
2e550 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a  =r[P1] N=P2.**.*
2e560 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 66 69  * Execute the fi
2e570 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e  nalizer function
2e580 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61 74   for an aggregat
2e590 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74 68 65  e.  P1 is.** the
2e5a0 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e   memory location
2e5b0 20 74 68 61 74 20 69 73 20 74 68 65 20 61 63 63   that is the acc
2e5c0 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74 68 65  umulator for the
2e5d0 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a   aggregate..**.*
2e5e0 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75 6d 62  * P2 is the numb
2e5f0 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20  er of arguments 
2e600 74 68 61 74 20 74 68 65 20 73 74 65 70 20 66 75  that the step fu
2e610 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64  nction takes and
2e620 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
2e630 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
2e640 65 66 20 66 6f 72 20 74 68 69 73 20 66 75 6e 63  ef for this func
2e650 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a  tion.  The P2.**
2e660 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74   argument is not
2e670 20 75 73 65 64 20 62 79 20 74 68 69 73 20 6f 70   used by this op
2e680 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c  code.  It is onl
2e690 79 20 74 68 65 72 65 20 74 6f 20 64 69 73 61 6d  y there to disam
2e6a0 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74  biguate.** funct
2e6b0 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20 74 61  ions that can ta
2e6c0 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d 62 65  ke varying numbe
2e6d0 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e  rs of arguments.
2e6e0 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72 67 75    The.** P4 argu
2e6f0 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65  ment is only nee
2e700 64 65 64 20 66 6f 72 20 74 68 65 20 64 65 67 65  ded for the dege
2e710 6e 65 72 61 74 65 20 63 61 73 65 20 77 68 65 72  nerate case wher
2e720 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20 66 75  e.** the step fu
2e730 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70  nction was not p
2e740 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64  reviously called
2e750 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67  ..*/.case OP_Agg
2e760 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a  Final: {.  Mem *
2e770 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74 28 20  pMem;.  assert( 
2e780 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70  pOp->p1>0 && pOp
2e790 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2d 70  ->p1<=(p->nMem-p
2e7a0 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
2e7b0 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pMem = &aMem[pOp
2e7c0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2e7d0 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20   (pMem->flags & 
2e7e0 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f 41  ~(MEM_Null|MEM_A
2e7f0 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63 20  gg))==0 );.  rc 
2e800 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  = sqlite3VdbeMem
2e810 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20 70  Finalize(pMem, p
2e820 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a 20  Op->p4.pFunc);. 
2e830 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73   if( rc ){.    s
2e840 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e 67 28  qlite3SetString(
2e850 26 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 64 62 2c  &p->zErrMsg, db,
2e860 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
2e870 61 6c 75 65 5f 74 65 78 74 28 70 4d 65 6d 29 29  alue_text(pMem))
2e880 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
2e890 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
2e8a0 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
2e8b0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
2e8c0 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
2e8d0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
2e8e0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
2e8f0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
2e900 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
2e910 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
2e920 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
2e930 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
2e940 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
2e950 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
2e960 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
2e970 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
2e980 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
2e990 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
2e9a0 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
2e9b0 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
2e9c0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
2e9d0 41 53 53 49 56 45 2c 20 46 55 4c 4c 0a 2a 2a 20  ASSIVE, FULL.** 
2e9e0 6f 72 20 52 45 53 54 41 52 54 2e 20 20 57 72 69  or RESTART.  Wri
2e9f0 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
2ea00 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
2ea10 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
2ea20 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
2ea30 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
2ea40 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
2ea50 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
2ea60 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
2ea70 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
2ea80 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
2ea90 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
2eaa0 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
2eab0 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
2eac0 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
2ead0 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
2eae0 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
2eaf0 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
2eb00 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
2eb10 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
2eb20 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
2eb30 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
2eb40 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
2eb50 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
2eb60 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
2eb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2eb80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
2eb90 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
2eba0 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
2ebb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ebc0 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
2ebd0 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
2ebe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2ebf0 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
2ec00 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
2ec10 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
2ec20 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
2ec30 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
2ec40 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
2ec50 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
2ec60 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
2ec70 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
2ec80 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
2ec90 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
2eca0 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
2ecb0 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
2ecc0 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
2ecd0 54 0a 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  T.  );.  rc = sq
2ece0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2ecf0 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2ed00 2d 3e 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20  ->p2, &aRes[1], 
2ed10 26 61 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28  &aRes[2]);.  if(
2ed20 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59   rc==SQLITE_BUSY
2ed30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
2ed40 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73  ITE_OK;.    aRes
2ed50 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66  [0] = 1;.  }.  f
2ed60 6f 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26  or(i=0, pMem = &
2ed70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69  aMem[pOp->p3]; i
2ed80 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29  <3; i++, pMem++)
2ed90 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
2eda0 65 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65  eMemSetInt64(pMe
2edb0 6d 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29  m, (i64)aRes[i])
2edc0 3b 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61  ;.  }    .  brea
2edd0 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a  k;.};  .#endif..
2ede0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2edf0 4d 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70  MIT_PRAGMA./* Op
2ee00 63 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64  code: JournalMod
2ee10 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  e P1 P2 P3 * *.*
2ee20 2a 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20  *.** Change the 
2ee30 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
2ee40 64 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50  database P1 to P
2ee50 33 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e  3. P3 must be on
2ee60 65 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45  e of the.** PAGE
2ee70 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58  R_JOURNALMODE_XX
2ee80 58 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61  X values. If cha
2ee90 6e 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68  nging between th
2eea0 65 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61  e various rollba
2eeb0 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c  ck.** modes (del
2eec0 65 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70  ete, truncate, p
2eed0 65 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20  ersist, off and 
2eee0 6d 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73  memory), this is
2eef0 20 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65   a simple.** ope
2ef00 72 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73  ration. No IO is
2ef10 20 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a   required..**.**
2ef20 20 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74   If changing int
2ef30 6f 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20  o or out of WAL 
2ef40 6d 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75  mode the procedu
2ef50 72 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c  re is more compl
2ef60 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72  icated..**.** Wr
2ef70 69 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  ite a string con
2ef80 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61  taining the fina
2ef90 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74  l journal-mode t
2efa0 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  o register P2..*
2efb0 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61  /.case OP_Journa
2efc0 6c 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f  lMode: {    /* o
2efd0 75 74 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a  ut2-prerelease *
2efe0 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b 20  /.  Btree *pBt; 
2eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f000 20 20 20 20 2f 2a 20 42 74 72 65 65 20 74 6f 20      /* Btree to 
2f010 63 68 61 6e 67 65 20 6a 6f 75 72 6e 61 6c 20 6d  change journal m
2f020 6f 64 65 20 6f 66 20 2a 2f 0a 20 20 50 61 67 65  ode of */.  Page
2f030 72 20 2a 70 50 61 67 65 72 3b 20 20 20 20 20 20  r *pPager;      
2f040 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
2f050 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
2f060 77 69 74 68 20 70 42 74 20 2a 2f 0a 20 20 69 6e  with pBt */.  in
2f070 74 20 65 4e 65 77 3b 20 20 20 20 20 20 20 20 20  t eNew;         
2f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
2f090 20 4e 65 77 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64   New journal mod
2f0a0 65 20 2a 2f 0a 20 20 69 6e 74 20 65 4f 6c 64 3b  e */.  int eOld;
2f0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f0c0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6f 6c         /* The ol
2f0d0 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 2a  d journal mode *
2f0e0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2f0f0 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 63 6f 6e 73  _OMIT_WAL.  cons
2f100 74 20 63 68 61 72 20 2a 7a 46 69 6c 65 6e 61 6d  t char *zFilenam
2f110 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  e;          /* N
2f120 61 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ame of database 
2f130 66 69 6c 65 20 66 6f 72 20 70 50 61 67 65 72 20  file for pPager 
2f140 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20 20 65 4e 65  */.#endif..  eNe
2f150 77 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 61  w = pOp->p3;.  a
2f160 73 73 65 72 74 28 20 65 4e 65 77 3d 3d 50 41 47  ssert( eNew==PAG
2f170 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
2f180 45 4c 45 54 45 20 0a 20 20 20 20 20 20 20 7c 7c  ELETE .       ||
2f190 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
2f1a0 52 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54  RNALMODE_TRUNCAT
2f1b0 45 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  E .       || eNe
2f1c0 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f1d0 4d 4f 44 45 5f 50 45 52 53 49 53 54 20 0a 20 20  MODE_PERSIST .  
2f1e0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
2f1f0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
2f200 4f 46 46 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e  OFF.       || eN
2f210 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
2f220 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 0a 20 20 20  LMODE_MEMORY.   
2f230 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
2f240 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f250 41 4c 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  AL.       || eNe
2f260 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
2f270 4d 4f 44 45 5f 51 55 45 52 59 0a 20 20 29 3b 0a  MODE_QUERY.  );.
2f280 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2f290 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2f2a0 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73  db->nDb );.  ass
2f2b0 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2f2c0 3d 3d 30 20 29 3b 0a 0a 20 20 70 42 74 20 3d 20  ==0 );..  pBt = 
2f2d0 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d  db->aDb[pOp->p1]
2f2e0 2e 70 42 74 3b 0a 20 20 70 50 61 67 65 72 20 3d  .pBt;.  pPager =
2f2f0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
2f300 65 72 28 70 42 74 29 3b 0a 20 20 65 4f 6c 64 20  er(pBt);.  eOld 
2f310 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 47 65  = sqlite3PagerGe
2f320 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61  tJournalMode(pPa
2f330 67 65 72 29 3b 0a 20 20 69 66 28 20 65 4e 65 77  ger);.  if( eNew
2f340 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
2f350 4f 44 45 5f 51 55 45 52 59 20 29 20 65 4e 65 77  ODE_QUERY ) eNew
2f360 20 3d 20 65 4f 6c 64 3b 0a 20 20 69 66 28 20 21   = eOld;.  if( !
2f370 73 71 6c 69 74 65 33 50 61 67 65 72 4f 6b 54 6f  sqlite3PagerOkTo
2f380 43 68 61 6e 67 65 4a 6f 75 72 6e 61 6c 4d 6f 64  ChangeJournalMod
2f390 65 28 70 50 61 67 65 72 29 20 29 20 65 4e 65 77  e(pPager) ) eNew
2f3a0 20 3d 20 65 4f 6c 64 3b 0a 0a 23 69 66 6e 64 65   = eOld;..#ifnde
2f3b0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
2f3c0 4c 0a 20 20 7a 46 69 6c 65 6e 61 6d 65 20 3d 20  L.  zFilename = 
2f3d0 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
2f3e0 6e 61 6d 65 28 70 50 61 67 65 72 2c 20 31 29 3b  name(pPager, 1);
2f3f0 0a 0a 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c  ..  /* Do not al
2f400 6c 6f 77 20 61 20 74 72 61 6e 73 69 74 69 6f 6e  low a transition
2f410 20 74 6f 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65   to journal_mode
2f420 3d 57 41 4c 20 66 6f 72 20 61 20 64 61 74 61 62  =WAL for a datab
2f430 61 73 65 0a 20 20 2a 2a 20 69 6e 20 74 65 6d 70  ase.  ** in temp
2f440 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 6f 72  orary storage or
2f450 20 69 66 20 74 68 65 20 56 46 53 20 64 6f 65 73   if the VFS does
2f460 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 73 68 61   not support sha
2f470 72 65 64 20 6d 65 6d 6f 72 79 20 0a 20 20 2a 2f  red memory .  */
2f480 0a 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47  .  if( eNew==PAG
2f490 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
2f4a0 41 4c 0a 20 20 20 26 26 20 28 73 71 6c 69 74 65  AL.   && (sqlite
2f4b0 33 53 74 72 6c 65 6e 33 30 28 7a 46 69 6c 65 6e  3Strlen30(zFilen
2f4c0 61 6d 65 29 3d 3d 30 20 20 20 20 20 20 20 20 20  ame)==0         
2f4d0 20 20 2f 2a 20 54 65 6d 70 20 66 69 6c 65 20 2a    /* Temp file *
2f4e0 2f 0a 20 20 20 20 20 20 20 7c 7c 20 21 73 71 6c  /.       || !sql
2f4f0 69 74 65 33 50 61 67 65 72 57 61 6c 53 75 70 70  ite3PagerWalSupp
2f500 6f 72 74 65 64 28 70 50 61 67 65 72 29 29 20 20  orted(pPager))  
2f510 20 2f 2a 20 4e 6f 20 73 68 61 72 65 64 2d 6d 65   /* No shared-me
2f520 6d 6f 72 79 20 73 75 70 70 6f 72 74 20 2a 2f 0a  mory support */.
2f530 20 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20    ){.    eNew = 
2f540 65 4f 6c 64 3b 0a 20 20 7d 0a 0a 20 20 69 66 28  eOld;.  }..  if(
2f550 20 28 65 4e 65 77 21 3d 65 4f 6c 64 29 0a 20 20   (eNew!=eOld).  
2f560 20 26 26 20 28 65 4f 6c 64 3d 3d 50 41 47 45 52   && (eOld==PAGER
2f570 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c  _JOURNALMODE_WAL
2f580 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f   || eNew==PAGER_
2f590 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 29  JOURNALMODE_WAL)
2f5a0 0a 20 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64  .  ){.    if( !d
2f5b0 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c  b->autoCommit ||
2f5c0 20 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31   db->nVdbeRead>1
2f5d0 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2f5e0 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
2f5f0 20 20 20 73 71 6c 69 74 65 33 53 65 74 53 74 72     sqlite3SetStr
2f600 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73 67 2c  ing(&p->zErrMsg,
2f610 20 64 62 2c 20 0a 20 20 20 20 20 20 20 20 20 20   db, .          
2f620 22 63 61 6e 6e 6f 74 20 63 68 61 6e 67 65 20 25  "cannot change %
2f630 73 20 77 61 6c 20 6d 6f 64 65 20 66 72 6f 6d 20  s wal mode from 
2f640 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
2f650 74 69 6f 6e 22 2c 0a 20 20 20 20 20 20 20 20 20  tion",.         
2f660 20 28 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f   (eNew==PAGER_JO
2f670 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 3f 20  URNALMODE_WAL ? 
2f680 22 69 6e 74 6f 22 20 3a 20 22 6f 75 74 20 6f 66  "into" : "out of
2f690 22 29 0a 20 20 20 20 20 20 29 3b 0a 20 20 20 20  ").      );.    
2f6a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 65 6c    break;.    }el
2f6b0 73 65 7b 0a 20 0a 20 20 20 20 20 20 69 66 28 20  se{. .      if( 
2f6c0 65 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52  eOld==PAGER_JOUR
2f6d0 4e 41 4c 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20  NALMODE_WAL ){. 
2f6e0 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6c 65 61         /* If lea
2f6f0 76 69 6e 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63  ving WAL mode, c
2f700 6c 6f 73 65 20 74 68 65 20 6c 6f 67 20 66 69 6c  lose the log fil
2f710 65 2e 20 49 66 20 73 75 63 63 65 73 73 66 75 6c  e. If successful
2f720 2c 20 74 68 65 20 63 61 6c 6c 0a 20 20 20 20 20  , the call.     
2f730 20 20 20 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c     ** to PagerCl
2f740 6f 73 65 57 61 6c 28 29 20 63 68 65 63 6b 70 6f  oseWal() checkpo
2f750 69 6e 74 73 20 61 6e 64 20 64 65 6c 65 74 65 73  ints and deletes
2f760 20 74 68 65 20 77 72 69 74 65 2d 61 68 65 61 64   the write-ahead
2f770 2d 6c 6f 67 20 0a 20 20 20 20 20 20 20 20 2a 2a  -log .        **
2f780 20 66 69 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53   file. An EXCLUS
2f790 49 56 45 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69  IVE lock may sti
2f7a0 6c 6c 20 62 65 20 68 65 6c 64 20 6f 6e 20 74 68  ll be held on th
2f7b0 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
2f7c0 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 66 74 65  .        ** afte
2f7d0 72 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 72  r a successful r
2f7e0 65 74 75 72 6e 2e 20 0a 20 20 20 20 20 20 20 20  eturn. .        
2f7f0 2a 2f 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  */.        rc = 
2f800 73 71 6c 69 74 65 33 50 61 67 65 72 43 6c 6f 73  sqlite3PagerClos
2f810 65 57 61 6c 28 70 50 61 67 65 72 29 3b 0a 20 20  eWal(pPager);.  
2f820 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2f830 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
2f840 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
2f850 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28  rSetJournalMode(
2f860 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 20  pPager, eNew);. 
2f870 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
2f880 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d 50  else if( eOld==P
2f890 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f8a0 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20 20  _MEMORY ){.     
2f8b0 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72 61     /* Cannot tra
2f8c0 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c 79  nsition directly
2f8d0 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f 20   from MEMORY to 
2f8e0 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20 4f  WAL.  Use mode O
2f8f0 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 73  FF.        ** as
2f900 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74 65   an intermediate
2f910 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c 69   */.        sqli
2f920 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e  te3PagerSetJourn
2f930 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 50  alMode(pPager, P
2f940 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
2f950 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a 20  _OFF);.      }. 
2f960 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e 20   .      /* Open 
2f970 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  a transaction on
2f980 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
2f990 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  le. Regardless o
2f9a0 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20 20  f the journal.  
2f9b0 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68 69      ** mode, thi
2f9c0 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c  s transaction al
2f9d0 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c 6c  ways uses a roll
2f9e0 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20  back journal..  
2f9f0 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
2fa00 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72 65  ert( sqlite3Btre
2fa10 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29 3d  eIsInTrans(pBt)=
2fa20 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  =0 );.      if( 
2fa30 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
2fa40 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
2fa50 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65 72  lite3BtreeSetVer
2fa60 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77 3d  sion(pBt, (eNew=
2fa70 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
2fa80 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29 29  DE_WAL ? 2 : 1))
2fa90 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
2faa0 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66    }.#endif /* if
2fab0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2fac0 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20 72  _WAL */..  if( r
2fad0 63 20 29 7b 0a 20 20 20 20 65 4e 65 77 20 3d 20  c ){.    eNew = 
2fae0 65 4f 6c 64 3b 0a 20 20 7d 0a 20 20 65 4e 65 77  eOld;.  }.  eNew
2faf0 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 53   = sqlite3PagerS
2fb00 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50  etJournalMode(pP
2fb10 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a 0a 20 20  ager, eNew);..  
2fb20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
2fb30 2d 3e 70 32 5d 3b 0a 20 20 70 4f 75 74 2d 3e 66  ->p2];.  pOut->f
2fb40 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
2fb50 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
2fb60 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
2fb70 28 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a  (char *)sqlite3J
2fb80 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65  ournalModename(e
2fb90 4e 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  New);.  pOut->n 
2fba0 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
2fbb0 30 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f  0(pOut->z);.  pO
2fbc0 75 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45  ut->enc = SQLITE
2fbd0 5f 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33  _UTF8;.  sqlite3
2fbe0 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
2fbf0 6e 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e  ng(pOut, encodin
2fc00 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a  g);.  break;.};.
2fc10 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
2fc20 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a  _OMIT_PRAGMA */.
2fc30 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2fc40 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d  LITE_OMIT_VACUUM
2fc50 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
2fc60 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48  LITE_OMIT_ATTACH
2fc70 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63  )./* Opcode: Vac
2fc80 75 75 6d 20 2a 20 2a 20 2a 20 2a 20 2a 0a 2a 2a  uum * * * * *.**
2fc90 0a 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65  .** Vacuum the e
2fca0 6e 74 69 72 65 20 64 61 74 61 62 61 73 65 2e 20  ntire database. 
2fcb0 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 69 6c   This opcode wil
2fcc0 6c 20 63 61 75 73 65 20 6f 74 68 65 72 20 76 69  l cause other vi
2fcd0 72 74 75 61 6c 0a 2a 2a 20 6d 61 63 68 69 6e 65  rtual.** machine
2fce0 73 20 74 6f 20 62 65 20 63 72 65 61 74 65 64 20  s to be created 
2fcf0 61 6e 64 20 72 75 6e 2e 20 20 49 74 20 6d 61 79  and run.  It may
2fd00 20 6e 6f 74 20 62 65 20 63 61 6c 6c 65 64 20 66   not be called f
2fd10 72 6f 6d 20 77 69 74 68 69 6e 0a 2a 2a 20 61 20  rom within.** a 
2fd20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2f 0a  transaction..*/.
2fd30 63 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20  case OP_Vacuum: 
2fd40 7b 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72  {.  assert( p->r
2fd50 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20  eadOnly==0 );.  
2fd60 72 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56  rc = sqlite3RunV
2fd70 61 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73  acuum(&p->zErrMs
2fd80 67 2c 20 64 62 29 3b 0a 20 20 62 72 65 61 6b 3b  g, db);.  break;
2fd90 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 21  .}.#endif..#if !
2fda0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2fdb0 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
2fdc0 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72 56  /* Opcode: IncrV
2fdd0 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a 20  acuum P1 P2 * * 
2fde0 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d 20  *.**.** Perform 
2fdf0 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f 66  a single step of
2fe00 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c   the incremental
2fe10 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75 72   vacuum procedur
2fe20 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20 64  e on.** the P1 d
2fe30 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
2fe40 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69 73  vacuum has finis
2fe50 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  hed, jump to ins
2fe60 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20  truction.** P2. 
2fe70 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c 20  Otherwise, fall 
2fe80 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2fe90 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2fea0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63 72  .*/.case OP_Incr
2feb0 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20 20  Vacuum: {       
2fec0 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42 74   /* jump */.  Bt
2fed0 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73 73  ree *pBt;..  ass
2fee0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2fef0 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e  && pOp->p1<db->n
2ff00 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2ff10 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
2ff20 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 31  reeMask, pOp->p1
2ff30 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  ) );.  assert( p
2ff40 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
2ff50 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
2ff60 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20  [pOp->p1].pBt;. 
2ff70 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
2ff80 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42 74  eeIncrVacuum(pBt
2ff90 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
2ffa0 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45 5f  aken(rc==SQLITE_
2ffb0 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20 72  DONE,2);.  if( r
2ffc0 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29  c==SQLITE_DONE )
2ffd0 7b 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e  {.    pc = pOp->
2ffe0 70 32 20 2d 20 31 3b 0a 20 20 20 20 72 63 20 3d  p2 - 1;.    rc =
2fff0 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 7d 0a   SQLITE_OK;.  }.
30000 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
30010 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 78  f../* Opcode: Ex
30020 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  pire P1 * * * *.
30030 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65 63  **.** Cause prec
30040 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65 6e  ompiled statemen
30050 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20 57  ts to expire.  W
30060 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20 73  hen an expired s
30070 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20 65  tatement.** is e
30080 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73 71  xecuted using sq
30090 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74 20  lite3_step() it 
300a0 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74 6f  will either auto
300b0 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65 70  matically.** rep
300c0 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28 69  repare itself (i
300d0 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e 61  f it was origina
300e0 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69 6e  lly created usin
300f0 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  g sqlite3_prepar
30100 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69 74  e_v2()).** or it
30110 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68 20   will fail with 
30120 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a 2a  SQLITE_SCHEMA..*
30130 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 30  * .** If P1 is 0
30140 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20 73  , then all SQL s
30150 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d 65  tatements become
30160 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31 20   expired. If P1 
30170 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a 20  is non-zero,.** 
30180 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63 75  then only the cu
30190 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
301a0 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 65  g statement is e
301b0 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  xpired..*/.case 
301c0 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20 69  OP_Expire: {.  i
301d0 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  f( !pOp->p1 ){. 
301e0 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
301f0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
30200 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65 7b  ts(db);.  }else{
30210 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20  .    p->expired 
30220 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  = 1;.  }.  break
30230 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ;.}..#ifndef SQL
30240 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
30250 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  CACHE./* Opcode:
30260 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50 32   TableLock P1 P2
30270 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
30280 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f 6f  psis: iDb=P1 roo
30290 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a 2a  t=P2 write=P3.**
302a0 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f 63  .** Obtain a loc
302b0 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c 61  k on a particula
302c0 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69 6e  r table. This in
302d0 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e 6c  struction is onl
302e0 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20 74  y used when.** t
302f0 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  he shared-cache 
30300 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c  feature is enabl
30310 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  ed. .**.** P1 is
30320 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
30330 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73 71  e database in sq
30340 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20 74  lite3.aDb[] of t
30350 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 6f  he database.** o
30360 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63 6b  n which the lock
30370 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20 41   is acquired.  A
30380 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62 74   readlock is obt
30390 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20 6f  ained if P3==0 o
303a0 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f 63  r.** a write loc
303b0 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a 2a  k if P3==1..**.*
303c0 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74 68  * P2 contains th
303d0 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20 74  e root-page of t
303e0 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63 6b  he table to lock
303f0 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74 61  ..**.** P4 conta
30400 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  ins a pointer to
30410 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
30420 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f 63   table being loc
30430 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  ked. This is onl
30440 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65 6e  y.** used to gen
30450 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20 6d  erate an error m
30460 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c 6f  essage if the lo
30470 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  ck cannot be obt
30480 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ained..*/.case O
30490 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a 20  P_TableLock: {. 
304a0 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b 20   u8 isWriteLock 
304b0 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a 20  = (u8)pOp->p3;. 
304c0 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63 6b   if( isWriteLock
304d0 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61 67   || 0==(db->flag
304e0 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63  s&SQLITE_ReadUnc
304f0 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20 20  ommitted) ){.   
30500 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e 70   int p1 = pOp->p
30510 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28 20  1; .    assert( 
30520 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d 3e  p1>=0 && p1<db->
30530 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65 72  nDb );.    asser
30540 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
30550 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29 20  >btreeMask, p1) 
30560 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 69  );.    assert( i
30570 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c 7c  sWriteLock==0 ||
30580 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31 20   isWriteLock==1 
30590 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  );.    rc = sqli
305a0 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62 6c  te3BtreeLockTabl
305b0 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70 42  e(db->aDb[p1].pB
305c0 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57 72  t, pOp->p2, isWr
305d0 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69 66  iteLock);.    if
305e0 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51 4c  ( (rc&0xFF)==SQL
305f0 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20 20  ITE_LOCKED ){.  
30600 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
30610 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  z = pOp->p4.z;. 
30620 20 20 20 20 20 73 71 6c 69 74 65 33 53 65 74 53       sqlite3SetS
30630 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
30640 67 2c 20 64 62 2c 20 22 64 61 74 61 62 61 73 65  g, db, "database
30650 20 74 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64   table is locked
30660 3a 20 25 73 22 2c 20 7a 29 3b 0a 20 20 20 20 7d  : %s", z);.    }
30670 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
30680 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
30690 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
306a0 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  HE */..#ifndef S
306b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
306c0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
306d0 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20  e: VBegin * * * 
306e0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61  P4 *.**.** P4 ma
306f0 79 20 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74  y be a pointer t
30700 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  o an sqlite3_vta
30710 62 20 73 74 72 75 63 74 75 72 65 2e 20 49 66 20  b structure. If 
30720 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a  so, call the .**
30730 20 78 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66   xBegin method f
30740 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a  or that table..*
30750 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68  *.** Also, wheth
30760 65 72 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20  er or not P4 is 
30770 73 65 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20  set, check that 
30780 74 68 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e  this is not bein
30790 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a  g called from.**
307a0 20 77 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61   within a callba
307b0 63 6b 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20  ck to a virtual 
307c0 74 61 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65  table xSync() me
307d0 74 68 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20  thod. If it is, 
307e0 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64  the error.** cod
307f0 65 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f  e will be set to
30800 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a   SQLITE_LOCKED..
30810 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69  */.case OP_VBegi
30820 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70  n: {.  VTable *p
30830 56 54 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20  VTab;.  pVTab = 
30840 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20  pOp->p4.pVtab;. 
30850 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
30860 62 42 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62  bBegin(db, pVTab
30870 29 3b 0a 20 20 69 66 28 20 70 56 54 61 62 20 29  );.  if( pVTab )
30880 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
30890 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61  rtErrmsg(p, pVTa
308a0 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20 62 72 65  b->pVtab);.  bre
308b0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
308c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
308d0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
308e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
308f0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
30900 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61 74 65   Opcode: VCreate
30910 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
30920 2a 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d  ** P4 is the nam
30930 65 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  e of a virtual t
30940 61 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65  able in database
30950 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78 43   P1. Call the xC
30960 72 65 61 74 65 20 6d 65 74 68 6f 64 0a 2a 2a 20  reate method.** 
30970 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a  for that table..
30980 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61  */.case OP_VCrea
30990 74 65 3a 20 7b 0a 20 20 72 63 20 3d 20 73 71 6c  te: {.  rc = sql
309a0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
309b0 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20  te(db, pOp->p1, 
309c0 70 4f 70 2d 3e 70 34 2e 7a 2c 20 26 70 2d 3e 7a  pOp->p4.z, &p->z
309d0 45 72 72 4d 73 67 29 3b 0a 20 20 62 72 65 61 6b  ErrMsg);.  break
309e0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
309f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
30a00 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
30a10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
30a20 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
30a30 70 63 6f 64 65 3a 20 56 44 65 73 74 72 6f 79 20  pcode: VDestroy 
30a40 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
30a50 2a 20 50 34 20 69 73 20 74 68 65 20 6e 61 6d 65  * P4 is the name
30a60 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61   of a virtual ta
30a70 62 6c 65 20 69 6e 20 64 61 74 61 62 61 73 65 20  ble in database 
30a80 50 31 2e 20 20 43 61 6c 6c 20 74 68 65 20 78 44  P1.  Call the xD
30a90 65 73 74 72 6f 79 20 6d 65 74 68 6f 64 0a 2a 2a  estroy method.**
30aa0 20 6f 66 20 74 68 61 74 20 74 61 62 6c 65 2e 0a   of that table..
30ab0 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 44 65 73 74  */.case OP_VDest
30ac0 72 6f 79 3a 20 7b 0a 20 20 70 2d 3e 69 6e 56 74  roy: {.  p->inVt
30ad0 61 62 4d 65 74 68 6f 64 20 3d 20 32 3b 0a 20 20  abMethod = 2;.  
30ae0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
30af0 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
30b00 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
30b10 2e 7a 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62  .z);.  p->inVtab
30b20 4d 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 62 72  Method = 0;.  br
30b30 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
30b40 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
30b50 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
30b60 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
30b70 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
30b80 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
30b90 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
30ba0 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
30bb0 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
30bc0 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
30bd0 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
30be0 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
30bf0 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
30c00 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
30c10 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
30c20 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
30c30 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
30c40 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
30c50 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
30c60 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
30c70 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
30c80 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
30c90 72 20 2a 70 56 74 61 62 43 75 72 73 6f 72 3b 0a  r *pVtabCursor;.
30ca0 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
30cb0 70 56 74 61 62 3b 0a 20 20 73 71 6c 69 74 65 33  pVtab;.  sqlite3
30cc0 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
30cd0 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
30ce0 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70  bIsReader );.  p
30cf0 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74 61 62  Cur = 0;.  pVtab
30d00 43 75 72 73 6f 72 20 3d 20 30 3b 0a 20 20 70 56  Cursor = 0;.  pV
30d10 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56  tab = pOp->p4.pV
30d20 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d  tab->pVtab;.  pM
30d30 6f 64 75 6c 65 20 3d 20 28 73 71 6c 69 74 65 33  odule = (sqlite3
30d40 5f 6d 6f 64 75 6c 65 20 2a 29 70 56 74 61 62 2d  _module *)pVtab-
30d50 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65  >pModule;.  asse
30d60 72 74 28 70 56 74 61 62 20 26 26 20 70 4d 6f 64  rt(pVtab && pMod
30d70 75 6c 65 29 3b 0a 20 20 72 63 20 3d 20 70 4d 6f  ule);.  rc = pMo
30d80 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70 56 74 61  dule->xOpen(pVta
30d90 62 2c 20 26 70 56 74 61 62 43 75 72 73 6f 72 29  b, &pVtabCursor)
30da0 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62 49  ;.  sqlite3VtabI
30db0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
30dc0 56 74 61 62 29 3b 0a 20 20 69 66 28 20 53 51 4c  Vtab);.  if( SQL
30dd0 49 54 45 5f 4f 4b 3d 3d 72 63 20 29 7b 0a 20 20  ITE_OK==rc ){.  
30de0 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
30df0 73 71 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72  sqlite3_vtab_cur
30e00 73 6f 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a  sor base class *
30e10 2f 0a 20 20 20 20 70 56 74 61 62 43 75 72 73 6f  /.    pVtabCurso
30e20 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61 62  r->pVtab = pVtab
30e30 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61  ;..    /* Initia
30e40 6c 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72  lize vdbe cursor
30e50 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 20 20 70   object */.    p
30e60 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75  Cur = allocateCu
30e70 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c  rsor(p, pOp->p1,
30e80 20 30 2c 20 2d 31 2c 20 30 29 3b 0a 20 20 20 20   0, -1, 0);.    
30e90 69 66 28 20 70 43 75 72 20 29 7b 0a 20 20 20 20  if( pCur ){.    
30ea0 20 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72    pCur->pVtabCur
30eb0 73 6f 72 20 3d 20 70 56 74 61 62 43 75 72 73 6f  sor = pVtabCurso
30ec0 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
30ed0 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61      db->mallocFa
30ee0 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20 20 20 20  iled = 1;.      
30ef0 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28  pModule->xClose(
30f00 70 56 74 61 62 43 75 72 73 6f 72 29 3b 0a 20 20  pVtabCursor);.  
30f10 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
30f20 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
30f30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
30f40 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  TABLE */..#ifnde
30f50 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
30f60 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
30f70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72 20 50 31  code: VFilter P1
30f80 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
30f90 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61 6e 3d 72  ynopsis: iplan=r
30fa0 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50 34 27 0a  [P3] zplan='P4'.
30fb0 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 63 75  **.** P1 is a cu
30fc0 72 73 6f 72 20 6f 70 65 6e 65 64 20 75 73 69 6e  rsor opened usin
30fd0 67 20 56 4f 70 65 6e 2e 20 20 50 32 20 69 73 20  g VOpen.  P2 is 
30fe0 61 6e 20 61 64 64 72 65 73 73 20 74 6f 20 6a 75  an address to ju
30ff0 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74 68 65 20  mp to if.** the 
31000 66 69 6c 74 65 72 65 64 20 72 65 73 75 6c 74 20  filtered result 
31010 73 65 74 20 69 73 20 65 6d 70 74 79 2e 0a 2a 2a  set is empty..**
31020 0a 2a 2a 20 50 34 20 69 73 20 65 69 74 68 65 72  .** P4 is either
31030 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74 72 69 6e   NULL or a strin
31040 67 20 74 68 61 74 20 77 61 73 20 67 65 6e 65 72  g that was gener
31050 61 74 65 64 20 62 79 20 74 68 65 20 78 42 65 73  ated by the xBes
31060 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74 68 6f 64  tIndex.** method
31070 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20   of the module. 
31080 20 54 68 65 20 69 6e 74 65 72 70 72 65 74 61 74   The interpretat
31090 69 6f 6e 20 6f 66 20 74 68 65 20 50 34 20 73 74  ion of the P4 st
310a0 72 69 6e 67 20 69 73 20 6c 65 66 74 0a 2a 2a 20  ring is left.** 
310b0 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65 20 69 6d  to the module im
310c0 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a  plementation..**
310d0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
310e0 69 6e 76 6f 6b 65 73 20 74 68 65 20 78 46 69 6c  invokes the xFil
310f0 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e 20 74 68  ter method on th
31100 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
31110 73 70 65 63 69 66 69 65 64 0a 2a 2a 20 62 79 20  specified.** by 
31120 50 31 2e 20 20 54 68 65 20 69 6e 74 65 67 65 72  P1.  The integer
31130 20 71 75 65 72 79 20 70 6c 61 6e 20 70 61 72 61   query plan para
31140 6d 65 74 65 72 20 74 6f 20 78 46 69 6c 74 65 72  meter to xFilter
31150 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
31160 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e 20 52 65  gister.** P3. Re
31170 67 69 73 74 65 72 20 50 33 2b 31 20 73 74 6f 72  gister P3+1 stor
31180 65 73 20 74 68 65 20 61 72 67 63 20 70 61 72 61  es the argc para
31190 6d 65 74 65 72 20 74 6f 20 62 65 20 70 61 73 73  meter to be pass
311a0 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20 78 46 69  ed to the.** xFi
311b0 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20 52 65 67  lter method. Reg
311c0 69 73 74 65 72 73 20 50 33 2b 32 2e 2e 50 33 2b  isters P3+2..P3+
311d0 31 2b 61 72 67 63 20 61 72 65 20 74 68 65 20 61  1+argc are the a
311e0 72 67 63 0a 2a 2a 20 61 64 64 69 74 69 6f 6e 61  rgc.** additiona
311f0 6c 20 70 61 72 61 6d 65 74 65 72 73 20 77 68 69  l parameters whi
31200 63 68 20 61 72 65 20 70 61 73 73 65 64 20 74 6f  ch are passed to
31210 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61 73 20 61  .** xFilter as a
31220 72 67 76 2e 20 52 65 67 69 73 74 65 72 20 50 33  rgv. Register P3
31230 2b 32 20 62 65 63 6f 6d 65 73 20 61 72 67 76 5b  +2 becomes argv[
31240 30 5d 20 77 68 65 6e 20 70 61 73 73 65 64 20 74  0] when passed t
31250 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a 0a 2a 2a  o xFilter..**.**
31260 20 41 20 6a 75 6d 70 20 69 73 20 6d 61 64 65 20   A jump is made 
31270 74 6f 20 50 32 20 69 66 20 74 68 65 20 72 65 73  to P2 if the res
31280 75 6c 74 20 73 65 74 20 61 66 74 65 72 20 66 69  ult set after fi
31290 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64 20 62 65  ltering would be
312a0 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61 73 65 20   empty..*/.case 
312b0 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b 20 20 20  OP_VFilter: {   
312c0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74  /* jump */.  int
312d0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 51 75   nArg;.  int iQu
312e0 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  ery;.  const sql
312f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
31300 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a 70 51 75  dule;.  Mem *pQu
31310 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70 41 72 67  ery;.  Mem *pArg
31320 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  c;.  sqlite3_vta
31330 62 5f 63 75 72 73 6f 72 20 2a 70 56 74 61 62 43  b_cursor *pVtabC
31340 75 72 73 6f 72 3b 0a 20 20 73 71 6c 69 74 65 33  ursor;.  sqlite3
31350 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
31360 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
31370 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69  ;.  int res;.  i
31380 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  nt i;.  Mem **ap
31390 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d  Arg;..  pQuery =
313a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
313b0 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51 75 65  .  pArgc = &pQue
313c0 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20  ry[1];.  pCur = 
313d0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
313e0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d  ];.  assert( mem
313f0 49 73 56 61 6c 69 64 28 70 51 75 65 72 79 29 20  IsValid(pQuery) 
31400 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  );.  REGISTER_TR
31410 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75  ACE(pOp->p3, pQu
31420 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ery);.  assert( 
31430 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
31440 72 20 29 3b 0a 20 20 70 56 74 61 62 43 75 72 73  r );.  pVtabCurs
31450 6f 72 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62  or = pCur->pVtab
31460 43 75 72 73 6f 72 3b 0a 20 20 70 56 74 61 62 20  Cursor;.  pVtab 
31470 3d 20 70 56 74 61 62 43 75 72 73 6f 72 2d 3e 70  = pVtabCursor->p
31480 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
31490 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
314a0 3b 0a 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65  ;..  /* Grab the
314b0 20 69 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e   index number an
314c0 64 20 61 72 67 63 20 70 61 72 61 6d 65 74 65 72  d argc parameter
314d0 73 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  s */.  assert( (
314e0 70 51 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45  pQuery->flags&ME
314f0 4d 5f 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72  M_Int)!=0 && pAr
31500 67 63 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49  gc->flags==MEM_I
31510 6e 74 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28  nt );.  nArg = (
31520 69 6e 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a  int)pArgc->u.i;.
31530 20 20 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29    iQuery = (int)
31540 70 51 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20  pQuery->u.i;..  
31550 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46  /* Invoke the xF
31560 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a  ilter method */.
31570 20 20 7b 0a 20 20 20 20 72 65 73 20 3d 20 30 3b    {.    res = 0;
31580 0a 20 20 20 20 61 70 41 72 67 20 3d 20 70 2d 3e  .    apArg = p->
31590 61 70 41 72 67 3b 0a 20 20 20 20 66 6f 72 28 69  apArg;.    for(i
315a0 20 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b   = 0; i<nArg; i+
315b0 2b 29 7b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  +){.      apArg[
315c0 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d  i] = &pArgc[i+1]
315d0 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 70 2d 3e  ;.    }..    p->
315e0 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20 31  inVtabMethod = 1
315f0 3b 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75  ;.    rc = pModu
31600 6c 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 74 61  le->xFilter(pVta
31610 62 43 75 72 73 6f 72 2c 20 69 51 75 65 72 79 2c  bCursor, iQuery,
31620 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67   pOp->p4.z, nArg
31630 2c 20 61 70 41 72 67 29 3b 0a 20 20 20 20 70 2d  , apArg);.    p-
31640 3e 69 6e 56 74 61 62 4d 65 74 68 6f 64 20 3d 20  >inVtabMethod = 
31650 30 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 74  0;.    sqlite3Vt
31660 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
31670 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20 69 66  , pVtab);.    if
31680 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
31690 29 7b 0a 20 20 20 20 20 20 72 65 73 20 3d 20 70  ){.      res = p
316a0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 56 74  Module->xEof(pVt
316b0 61 62 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d  abCursor);.    }
316c0 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
316d0 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a  aken(res!=0,2);.
316e0 20 20 20 20 69 66 28 20 72 65 73 20 29 7b 0a 20      if( res ){. 
316f0 20 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70       pc = pOp->p
31700 32 20 2d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  2 - 1;.    }.  }
31710 0a 20 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77  .  pCur->nullRow
31720 20 3d 20 30 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a   = 0;..  break;.
31730 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
31740 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
31750 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
31760 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
31770 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
31780 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50 31 20  ode: VColumn P1 
31790 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
317a0 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76 63 6f  opsis: r[P3]=vco
317b0 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a 20 53  lumn(P2).**.** S
317c0 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65 20 6f  tore the value o
317d0 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75  f the P2-th colu
317e0 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72 6f 77  mn of.** the row
317f0 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 2d   of the virtual-
31800 74 61 62 6c 65 20 74 68 61 74 20 74 68 65 20 0a  table that the .
31810 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69 73 20  ** P1 cursor is 
31820 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e 74 6f  pointing to into
31830 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2f   register P3..*/
31840 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75 6d 6e  .case OP_VColumn
31850 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
31860 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e  ab *pVtab;.  con
31870 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  st sqlite3_modul
31880 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65  e *pModule;.  Me
31890 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71 6c 69  m *pDest;.  sqli
318a0 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43 6f 6e  te3_context sCon
318b0 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43 75 72  text;..  VdbeCur
318c0 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d 3e 61  sor *pCur = p->a
318d0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
318e0 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e 70   assert( pCur->p
318f0 56 74 61 62 43 75 72 73 6f 72 20 29 3b 0a 20 20  VtabCursor );.  
31900 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e  assert( pOp->p3>
31910 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70  0 && pOp->p3<=(p
31920 2d 3e 6e 4d 65 6d 2d 70 2d 3e 6e 43 75 72 73 6f  ->nMem-p->nCurso
31930 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20  r) );.  pDest = 
31940 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
31950 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e    memAboutToChan
31960 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20  ge(p, pDest);.  
31970 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f  if( pCur->nullRo
31980 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  w ){.    sqlite3
31990 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
319a0 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  Dest);.    break
319b0 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20  ;.  }.  pVtab = 
319c0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
319d0 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64  r->pVtab;.  pMod
319e0 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f  ule = pVtab->pMo
319f0 64 75 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20  dule;.  assert( 
31a00 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e  pModule->xColumn
31a10 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43   );.  memset(&sC
31a20 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f  ontext, 0, sizeo
31a30 66 28 73 43 6f 6e 74 65 78 74 29 29 3b 0a 0a 20  f(sContext));.. 
31a40 20 2f 2a 20 54 68 65 20 6f 75 74 70 75 74 20 63   /* The output c
31a50 65 6c 6c 20 6d 61 79 20 61 6c 72 65 61 64 79 20  ell may already 
31a60 68 61 76 65 20 61 20 62 75 66 66 65 72 20 61 6c  have a buffer al
31a70 6c 6f 63 61 74 65 64 2e 20 4d 6f 76 65 0a 20 20  located. Move.  
31a80 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 63  ** the current c
31a90 6f 6e 74 65 6e 74 73 20 74 6f 20 73 43 6f 6e 74  ontents to sCont
31aa0 65 78 74 2e 73 20 73 6f 20 69 6e 20 63 61 73 65  ext.s so in case
31ab0 20 74 68 65 20 75 73 65 72 2d 66 75 6e 63 74 69   the user-functi
31ac0 6f 6e 20 0a 20 20 2a 2a 20 63 61 6e 20 75 73 65  on .  ** can use
31ad0 20 74 68 65 20 61 6c 72 65 61 64 79 20 61 6c 6c   the already all
31ae0 6f 63 61 74 65 64 20 62 75 66 66 65 72 20 69 6e  ocated buffer in
31af0 73 74 65 61 64 20 6f 66 20 61 6c 6c 6f 63 61 74  stead of allocat
31b00 69 6e 67 20 61 20 0a 20 20 2a 2a 20 6e 65 77 20  ing a .  ** new 
31b10 6f 6e 65 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  one..  */.  sqli
31b20 74 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 26  te3VdbeMemMove(&
31b30 73 43 6f 6e 74 65 78 74 2e 73 2c 20 70 44 65 73  sContext.s, pDes
31b40 74 29 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  t);.  MemSetType
31b50 46 6c 61 67 28 26 73 43 6f 6e 74 65 78 74 2e 73  Flag(&sContext.s
31b60 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 0a 20 20  , MEM_Null);..  
31b70 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43  rc = pModule->xC
31b80 6f 6c 75 6d 6e 28 70 43 75 72 2d 3e 70 56 74 61  olumn(pCur->pVta
31b90 62 43 75 72 73 6f 72 2c 20 26 73 43 6f 6e 74 65  bCursor, &sConte
31ba0 78 74 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20  xt, pOp->p2);.  
31bb0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
31bc0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
31bd0 29 3b 0a 20 20 69 66 28 20 73 43 6f 6e 74 65 78  );.  if( sContex
31be0 74 2e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20  t.isError ){.   
31bf0 20 72 63 20 3d 20 73 43 6f 6e 74 65 78 74 2e 69   rc = sContext.i
31c00 73 45 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20 2f  sError;.  }..  /
31c10 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75 6c  * Copy the resul
31c20 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  t of the functio
31c30 6e 20 74 6f 20 74 68 65 20 50 33 20 72 65 67 69  n to the P3 regi
31c40 73 74 65 72 2e 20 57 65 0a 20 20 2a 2a 20 64 6f  ster. We.  ** do
31c50 20 74 68 69 73 20 72 65 67 61 72 64 6c 65 73 73   this regardless
31c60 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e   of whether or n
31c70 6f 74 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75  ot an error occu
31c80 72 72 65 64 20 74 6f 20 65 6e 73 75 72 65 20 61  rred to ensure a
31c90 6e 79 0a 20 20 2a 2a 20 64 79 6e 61 6d 69 63 20  ny.  ** dynamic 
31ca0 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 20 73 43  allocation in sC
31cb0 6f 6e 74 65 78 74 2e 73 20 28 61 20 4d 65 6d 20  ontext.s (a Mem 
31cc0 73 74 72 75 63 74 29 20 69 73 20 20 72 65 6c 65  struct) is  rele
31cd0 61 73 65 64 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c  ased..  */.  sql
31ce0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
31cf0 63 6f 64 69 6e 67 28 26 73 43 6f 6e 74 65 78 74  coding(&sContext
31d00 2e 73 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  .s, encoding);. 
31d10 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d   sqlite3VdbeMemM
31d20 6f 76 65 28 70 44 65 73 74 2c 20 26 73 43 6f 6e  ove(pDest, &sCon
31d30 74 65 78 74 2e 73 29 3b 0a 20 20 52 45 47 49 53  text.s);.  REGIS
31d40 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
31d50 33 2c 20 70 44 65 73 74 29 3b 0a 20 20 55 50 44  3, pDest);.  UPD
31d60 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
31d70 28 70 44 65 73 74 29 3b 0a 0a 20 20 69 66 28 20  (pDest);..  if( 
31d80 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
31d90 6f 42 69 67 28 70 44 65 73 74 29 20 29 7b 0a 20  oBig(pDest) ){. 
31da0 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b     goto too_big;
31db0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31dc0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
31dd0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
31de0 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  LE */..#ifndef S
31df0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
31e00 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
31e10 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20 2a  e: VNext P1 P2 *
31e20 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e   * *.**.** Advan
31e30 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  ce virtual table
31e40 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74 20   P1 to the next 
31e50 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75 6c  row in its resul
31e60 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d  t set and.** jum
31e70 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e  p to instruction
31e80 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68 65   P2.  Or, if the
31e90 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 68   virtual table h
31ea0 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74 68  as reached.** th
31eb0 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65 73  e end of its res
31ec0 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66 61  ult set, then fa
31ed0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
31ee0 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
31ef0 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  on..*/.case OP_V
31f00 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d  Next: {   /* jum
31f10 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76  p */.  sqlite3_v
31f20 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f  tab *pVtab;.  co
31f30 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
31f40 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69  le *pModule;.  i
31f50 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43 75  nt res;.  VdbeCu
31f60 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20 72  rsor *pCur;..  r
31f70 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20 3d  es = 0;.  pCur =
31f80 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
31f90 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  1];.  assert( pC
31fa0 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72 20  ur->pVtabCursor 
31fb0 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e 6e  );.  if( pCur->n
31fc0 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 62 72  ullRow ){.    br
31fd0 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62  eak;.  }.  pVtab
31fe0 20 3d 20 70 43 75 72 2d 3e 70 56 74 61 62 43 75   = pCur->pVtabCu
31ff0 72 73 6f 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  rsor->pVtab;.  p
32000 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
32010 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
32020 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78  t( pModule->xNex
32030 74 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f 6b  t );..  /* Invok
32040 65 20 74 68 65 20 78 4e 65 78 74 28 29 20 6d 65  e the xNext() me
32050 74 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75  thod of the modu
32060 6c 65 2e 20 54 68 65 72 65 20 69 73 20 6e 6f 20  le. There is no 
32070 77 61 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  way for the.  **
32080 20 75 6e 64 65 72 6c 79 69 6e 67 20 69 6d 70 6c   underlying impl
32090 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 72 65  ementation to re
320a0 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20 69 66  turn an error if
320b0 20 6f 6e 65 20 6f 63 63 75 72 73 20 64 75 72 69   one occurs duri
320c0 6e 67 0a 20 20 2a 2a 20 78 4e 65 78 74 28 29 2e  ng.  ** xNext().
320d0 20 49 6e 73 74 65 61 64 2c 20 69 66 20 61 6e 20   Instead, if an 
320e0 65 72 72 6f 72 20 6f 63 63 75 72 73 2c 20 74 72  error occurs, tr
320f0 75 65 20 69 73 20 72 65 74 75 72 6e 65 64 20 28  ue is returned (
32100 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
32110 0a 20 20 2a 2a 20 64 61 74 61 20 69 73 20 61 76  .  ** data is av
32120 61 69 6c 61 62 6c 65 29 20 61 6e 64 20 74 68 65  ailable) and the
32130 20 65 72 72 6f 72 20 63 6f 64 65 20 72 65 74 75   error code retu
32140 72 6e 65 64 20 77 68 65 6e 20 78 43 6f 6c 75 6d  rned when xColum
32150 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f 6d 65 20 6f  n or.  ** some o
32160 74 68 65 72 20 6d 65 74 68 6f 64 20 69 73 20 6e  ther method is n
32170 65 78 74 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 74  ext invoked on t
32180 68 65 20 73 61 76 65 20 76 69 72 74 75 61 6c 20  he save virtual 
32190 74 61 62 6c 65 20 63 75 72 73 6f 72 2e 0a 20 20  table cursor..  
321a0 2a 2f 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d 65  */.  p->inVtabMe
321b0 74 68 6f 64 20 3d 20 31 3b 0a 20 20 72 63 20 3d  thod = 1;.  rc =
321c0 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28   pModule->xNext(
321d0 70 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f  pCur->pVtabCurso
321e0 72 29 3b 0a 20 20 70 2d 3e 69 6e 56 74 61 62 4d  r);.  p->inVtabM
321f0 65 74 68 6f 64 20 3d 20 30 3b 0a 20 20 73 71 6c  ethod = 0;.  sql
32200 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72  ite3VtabImportEr
32210 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a  rmsg(p, pVtab);.
32220 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
32230 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 73 20 3d  _OK ){.    res =
32240 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70   pModule->xEof(p
32250 43 75 72 2d 3e 70 56 74 61 62 43 75 72 73 6f 72  Cur->pVtabCursor
32260 29 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  );.  }.  VdbeBra
32270 6e 63 68 54 61 6b 65 6e 28 21 72 65 73 2c 32 29  nchTaken(!res,2)
32280 3b 0a 20 20 69 66 28 20 21 72 65 73 20 29 7b 0a  ;.  if( !res ){.
32290 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20      /* If there 
322a0 69 73 20 64 61 74 61 2c 20 6a 75 6d 70 20 74 6f  is data, jump to
322b0 20 50 32 20 2a 2f 0a 20 20 20 20 70 63 20 3d 20   P2 */.    pc = 
322c0 70 4f 70 2d 3e 70 32 20 2d 20 31 3b 0a 20 20 7d  pOp->p2 - 1;.  }
322d0 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f  .  goto check_fo
322e0 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23  r_interrupt;.}.#
322f0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
32300 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
32310 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  E */..#ifndef SQ
32320 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
32330 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65  LTABLE./* Opcode
32340 3a 20 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a  : VRename P1 * *
32350 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69   P4 *.**.** P4 i
32360 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
32370 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f   virtual table o
32380 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65  bject, an sqlite
32390 33 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65  3_vtab structure
323a0 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  ..** This opcode
323b0 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72   invokes the cor
323c0 72 65 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61  responding xRena
323d0 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76  me method. The v
323e0 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73  alue.** in regis
323f0 74 65 72 20 50 31 20 69 73 20 70 61 73 73 65 64  ter P1 is passed
32400 20 61 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72   as the zName ar
32410 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52  gument to the xR
32420 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f  ename method..*/
32430 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65  .case OP_VRename
32440 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  : {.  sqlite3_vt
32450 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d  ab *pVtab;.  Mem
32460 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61   *pName;..  pVta
32470 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61  b = pOp->p4.pVta
32480 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d  b->pVtab;.  pNam
32490 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  e = &aMem[pOp->p
324a0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56  1];.  assert( pV
324b0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52  tab->pModule->xR
324c0 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72  ename );.  asser
324d0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e  t( memIsValid(pN
324e0 61 6d 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74  ame) );.  assert
324f0 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30  ( p->readOnly==0
32500 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54   );.  REGISTER_T
32510 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e  RACE(pOp->p1, pN
32520 61 6d 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ame);.  assert( 
32530 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d  pName->flags & M
32540 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74  EM_Str );.  test
32550 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63  case( pName->enc
32560 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b  ==SQLITE_UTF8 );
32570 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4e 61  .  testcase( pNa
32580 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  me->enc==SQLITE_
32590 55 54 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73  UTF16BE );.  tes
325a0 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e  tcase( pName->en
325b0 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  c==SQLITE_UTF16L
325c0 45 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  E );.  rc = sqli
325d0 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63  te3VdbeChangeEnc
325e0 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c  oding(pName, SQL
325f0 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28  ITE_UTF8);.  if(
32600 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
32610 7b 0a 20 20 20 20 72 63 20 3d 20 70 56 74 61 62  {.    rc = pVtab
32620 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61  ->pModule->xRena
32630 6d 65 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d  me(pVtab, pName-
32640 3e 7a 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  >z);.    sqlite3
32650 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67  VtabImportErrmsg
32660 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 20 20  (p, pVtab);.    
32670 70 2d 3e 65 78 70 69 72 65 64 20 3d 20 30 3b 0a  p->expired = 0;.
32680 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23    }.  break;.}.#
32690 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
326a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55  QLITE_OMIT_VIRTU
326b0 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64  ALTABLE./* Opcod
326c0 65 3a 20 56 55 70 64 61 74 65 20 50 31 20 50 32  e: VUpdate P1 P2
326d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
326e0 6f 70 73 69 73 3a 20 64 61 74 61 3d 72 5b 50 33  opsis: data=r[P3
326f0 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  @P2].**.** P4 is
32700 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
32710 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62  virtual table ob
32720 6a 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33  ject, an sqlite3
32730 5f 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e  _vtab structure.
32740 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
32750 69 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72  invokes the corr
32760 65 73 70 6f 6e 64 69 6e 67 20 78 55 70 64 61 74  esponding xUpdat
32770 65 20 6d 65 74 68 6f 64 2e 20 50 32 20 76 61 6c  e method. P2 val
32780 75 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 69  ues.** are conti
32790 67 75 6f 75 73 20 6d 65 6d 6f 72 79 20 63 65 6c  guous memory cel
327a0 6c 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 50  ls starting at P
327b0 33 20 74 6f 20 70 61 73 73 20 74 6f 20 74 68 65  3 to pass to the
327c0 20 78 55 70 64 61 74 65 20 0a 2a 2a 20 69 6e 76   xUpdate .** inv
327d0 6f 63 61 74 69 6f 6e 2e 20 54 68 65 20 76 61 6c  ocation. The val
327e0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 28  ue in register (
327f0 50 33 2b 50 32 2d 31 29 20 63 6f 72 72 65 73 70  P3+P2-1) corresp
32800 6f 6e 64 73 20 74 6f 20 74 68 65 20 0a 2a 2a 20  onds to the .** 
32810 70 32 74 68 20 65 6c 65 6d 65 6e 74 20 6f 66 20  p2th element of 
32820 74 68 65 20 61 72 67 76 20 61 72 72 61 79 20 70  the argv array p
32830 61 73 73 65 64 20 74 6f 20 78 55 70 64 61 74 65  assed to xUpdate
32840 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 78 55 70 64  ..**.** The xUpd
32850 61 74 65 20 6d 65 74 68 6f 64 20 77 69 6c 6c 20  ate method will 
32860 64 6f 20 61 20 44 45 4c 45 54 45 20 6f 72 20 61  do a DELETE or a
32870 6e 20 49 4e 53 45 52 54 20 6f 72 20 62 6f 74 68  n INSERT or both
32880 2e 0a 2a 2a 20 54 68 65 20 61 72 67 76 5b 30 5d  ..** The argv[0]
32890 20 65 6c 65 6d 65 6e 74 20 28 77 68 69 63 68 20   element (which 
328a0 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 6d  corresponds to m
328b0 65 6d 6f 72 79 20 63 65 6c 6c 20 50 33 29 0a 2a  emory cell P3).*
328c0 2a 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 6f  * is the rowid o
328d0 66 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74  f a row to delet
328e0 65 2e 20 20 49 66 20 61 72 67 76 5b 30 5d 20 69  e.  If argv[0] i
328f0 73 20 4e 55 4c 4c 20 74 68 65 6e 20 6e 6f 20 0a  s NULL then no .
32900 2a 2a 20 64 65 6c 65 74 69 6f 6e 20 6f 63 63 75  ** deletion occu
32910 72 73 2e 20 20 54 68 65 20 61 72 67 76 5b 31 5d  rs.  The argv[1]
32920 20 65 6c 65 6d 65 6e 74 20 69 73 20 74 68 65 20   element is the 
32930 72 6f 77 69 64 20 6f 66 20 74 68 65 20 6e 65 77  rowid of the new
32940 20 0a 2a 2a 20 72 6f 77 2e 20 20 54 68 69 73 20   .** row.  This 
32950 63 61 6e 20 62 65 20 4e 55 4c 4c 20 74 6f 20 68  can be NULL to h
32960 61 76 65 20 74 68 65 20 76 69 72 74 75 61 6c 20  ave the virtual 
32970 74 61 62 6c 65 20 73 65 6c 65 63 74 20 74 68 65  table select the
32980 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 69 64 20 66   new .** rowid f
32990 6f 72 20 69 74 73 65 6c 66 2e 20 20 54 68 65 20  or itself.  The 
329a0 73 75 62 73 65 71 75 65 6e 74 20 65 6c 65 6d 65  subsequent eleme
329b0 6e 74 73 20 69 6e 20 74 68 65 20 61 72 72 61 79  nts in the array
329c0 20 61 72 65 20 0a 2a 2a 20 74 68 65 20 76 61 6c   are .** the val
329d0 75 65 73 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ues of columns i
329e0 6e 20 74 68 65 20 6e 65 77 20 72 6f 77 2e 0a 2a  n the new row..*
329f0 2a 0a 2a 2a 20 49 66 20 50 32 3d 3d 31 20 74 68  *.** If P2==1 th
32a00 65 6e 20 6e 6f 20 69 6e 73 65 72 74 20 69 73 20  en no insert is 
32a10 70 65 72 66 6f 72 6d 65 64 2e 20 20 61 72 67 76  performed.  argv
32a20 5b 30 5d 20 69 73 20 74 68 65 20 72 6f 77 69 64  [0] is the rowid
32a30 20 6f 66 0a 2a 2a 20 61 20 72 6f 77 20 74 6f 20   of.** a row to 
32a40 64 65 6c 65 74 65 2e 0a 2a 2a 0a 2a 2a 20 50 31  delete..**.** P1
32a50 20 69 73 20 61 20 62 6f 6f 6c 65 61 6e 20 66 6c   is a boolean fl
32a60 61 67 2e 20 49 66 20 69 74 20 69 73 20 73 65 74  ag. If it is set
32a70 20 74 6f 20 74 72 75 65 20 61 6e 64 20 74 68 65   to true and the
32a80 20 78 55 70 64 61 74 65 20 63 61 6c 6c 0a 2a 2a   xUpdate call.**
32a90 20 69 73 20 73 75 63 63 65 73 73 66 75 6c 2c 20   is successful, 
32aa0 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20 72  then the value r
32ab0 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
32ac0 65 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72  e3_last_insert_r
32ad0 6f 77 69 64 28 29 20 0a 2a 2a 20 69 73 20 73 65  owid() .** is se
32ae0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
32af0 66 20 74 68 65 20 72 6f 77 69 64 20 66 6f 72 20  f the rowid for 
32b00 74 68 65 20 72 6f 77 20 6a 75 73 74 20 69 6e 73  the row just ins
32b10 65 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 35 20  erted..**.** P5 
32b20 69 73 20 74 68 65 20 65 72 72 6f 72 20 61 63 74  is the error act
32b30 69 6f 6e 73 20 28 4f 45 5f 52 65 70 6c 61 63 65  ions (OE_Replace
32b40 2c 20 4f 45 5f 46 61 69 6c 2c 20 4f 45 5f 49 67  , OE_Fail, OE_Ig
32b50 6e 6f 72 65 2c 20 65 74 63 29 20 74 6f 0a 2a 2a  nore, etc) to.**
32b60 20 61 70 70 6c 79 20 69 6e 20 74 68 65 20 63 61   apply in the ca
32b70 73 65 20 6f 66 20 61 20 63 6f 6e 73 74 72 61 69  se of a constrai
32b80 6e 74 20 66 61 69 6c 75 72 65 20 6f 6e 20 61 6e  nt failure on an
32b90 20 69 6e 73 65 72 74 20 6f 72 20 75 70 64 61 74   insert or updat
32ba0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 55  e..*/.case OP_VU
32bb0 70 64 61 74 65 3a 20 7b 0a 20 20 73 71 6c 69 74  pdate: {.  sqlit
32bc0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
32bd0 20 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65    sqlite3_module
32be0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
32bf0 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
32c00 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
32c10 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
32c20 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
32c30 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32c40 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
32c50 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
32c60 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
32c70 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
32c80 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
32c90 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
32ca0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
32cb0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
32cc0 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
32cd0 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
32ce0 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
32cf0 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
32d00 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
32d10 3d 20 28 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c  = (sqlite3_modul
32d20 65 20 2a 29 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e *)pVtab->pModu
32d30 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
32d40 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
32d50 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
32d60 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
32d70 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
32d80 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
32d90 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
32da0 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
32db0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
32dc0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
32dd0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
32de0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
32df0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
32e00 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
32e10 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
32e20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
32e30 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
32e40 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
32e50 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
32e60 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
32e70 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
32e80 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
32e90 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
32ea0 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
32eb0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
32ec0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
32ed0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
32ee0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
32ef0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
32f00 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
32f10 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
32f20 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
32f30 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
32f40 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
32f50 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
32f60 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
32f70 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
32f80 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
32f90 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
32fa0 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
32fb0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
32fc0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
32fd0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
32fe0 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
32ff0 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
33000 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
33010 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
33020 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
33030 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
33040 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
33050 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
33060 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
33070 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
33080 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
33090 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
330a0 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
330b0 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
330c0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
330d0 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
330e0 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41    SQLITE_OMIT_PA
330f0 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f  GER_PRAGMAS./* O
33100 70 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74  pcode: Pagecount
33110 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a   P1 P2 * * *.**.
33120 2a 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72  ** Write the cur
33130 72 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70  rent number of p
33140 61 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65  ages in database
33150 20 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65   P1 to memory ce
33160 6c 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ll P2..*/.case O
33170 50 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20  P_Pagecount: {  
33180 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
33190 32 2d 70 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a  2-prerelease */.
331a0 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71    pOut->u.i = sq
331b0 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61  lite3BtreeLastPa
331c0 67 65 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ge(db->aDb[pOp->
331d0 70 31 5d 2e 70 42 74 29 3b 0a 20 20 62 72 65 61  p1].pBt);.  brea
331e0 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 23 69  k;.}.#endif...#i
331f0 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f 4d  fndef  SQLITE_OM
33200 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
33210 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 78 50  ./* Opcode: MaxP
33220 67 63 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20  gcnt P1 P2 P3 * 
33230 2a 0a 2a 2a 0a 2a 2a 20 54 72 79 20 74 6f 20 73  *.**.** Try to s
33240 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 70  et the maximum p
33250 61 67 65 20 63 6f 75 6e 74 20 66 6f 72 20 64 61  age count for da
33260 74 61 62 61 73 65 20 50 31 20 74 6f 20 74 68 65  tabase P1 to the
33270 20 76 61 6c 75 65 20 69 6e 20 50 33 2e 0a 2a 2a   value in P3..**
33280 20 44 6f 20 6e 6f 74 20 6c 65 74 20 74 68 65 20   Do not let the 
33290 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75  maximum page cou
332a0 6e 74 20 66 61 6c 6c 20 62 65 6c 6f 77 20 74 68  nt fall below th
332b0 65 20 63 75 72 72 65 6e 74 20 70 61 67 65 20 63  e current page c
332c0 6f 75 6e 74 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e  ount and.** do n
332d0 6f 74 20 63 68 61 6e 67 65 20 74 68 65 20 6d 61  ot change the ma
332e0 78 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74  ximum page count
332f0 20 76 61 6c 75 65 20 69 66 20 50 33 3d 3d 30 2e   value if P3==0.
33300 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65  .**.** Store the
33310 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20 63 6f   maximum page co
33320 75 6e 74 20 61 66 74 65 72 20 74 68 65 20 63 68  unt after the ch
33330 61 6e 67 65 20 69 6e 20 72 65 67 69 73 74 65 72  ange in register
33340 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
33350 4d 61 78 50 67 63 6e 74 3a 20 7b 20 20 20 20 20  MaxPgcnt: {     
33360 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 2d 70         /* out2-p
33370 72 65 72 65 6c 65 61 73 65 20 2a 2f 0a 20 20 75  rerelease */.  u
33380 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77 4d  nsigned int newM
33390 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42 74  ax;.  Btree *pBt
333a0 3b 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61  ;..  pBt = db->a
333b0 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b  Db[pOp->p1].pBt;
333c0 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b 0a 20  .  newMax = 0;. 
333d0 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a   if( pOp->p3 ){.
333e0 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73 71 6c      newMax = sql
333f0 69 74 65 33 42 74 72 65 65 4c 61 73 74 50 61 67  ite3BtreeLastPag
33400 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66 28 20  e(pBt);.    if( 
33410 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69 67 6e  newMax < (unsign
33420 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e 65 77  ed)pOp->p3 ) new
33430 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65 64 29  Max = (unsigned)
33440 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 70  pOp->p3;.  }.  p
33450 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74  Out->u.i = sqlit
33460 65 33 42 74 72 65 65 4d 61 78 50 61 67 65 43 6f  e3BtreeMaxPageCo
33470 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61 78 29  unt(pBt, newMax)
33480 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
33490 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  dif.../* Opcode:
334a0 20 49 6e 69 74 20 2a 20 50 32 20 2a 20 50 34 20   Init * P2 * P4 
334b0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 20  *.** Synopsis:  
334c0 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a 0a 2a  Start at P2.**.*
334d0 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e 74 61  * Programs conta
334e0 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 73 74  in a single inst
334f0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 70 63  ance of this opc
33500 6f 64 65 20 61 73 20 74 68 65 20 76 65 72 79 20  ode as the very 
33510 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64 65 2e  first.** opcode.
33520 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63 69 6e  .**.** If tracin
33530 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28 62 79  g is enabled (by
33540 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72 61   the sqlite3_tra
33550 63 65 28 29 29 20 69 6e 74 65 72 66 61 63 65 2c  ce()) interface,
33560 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55 54 46   then.** the UTF
33570 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69  -8 string contai
33580 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65 6d 69  ned in P4 is emi
33590 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72 61 63  tted on the trac
335a0 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a 20 4f  e callback..** O
335b0 72 20 69 66 20 50 34 20 69 73 20 62 6c 61 6e 6b  r if P4 is blank
335c0 2c 20 75 73 65 20 74 68 65 20 73 74 72 69 6e 67  , use the string
335d0 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c   returned by sql
335e0 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a 0a 2a  ite3_sql()..**.*
335f0 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74 20 7a  * If P2 is not z
33600 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69 6e 73  ero, jump to ins
33610 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a 2f 0a  truction P2..*/.
33620 63 61 73 65 20 4f 50 5f 49 6e 69 74 3a 20 7b 20  case OP_Init: { 
33630 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
33640 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 72 61   */.  char *zTra
33650 63 65 3b 0a 20 20 63 68 61 72 20 2a 7a 3b 0a 0a  ce;.  char *z;..
33660 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 7b    if( pOp->p2 ){
33670 0a 20 20 20 20 70 63 20 3d 20 70 4f 70 2d 3e 70  .    pc = pOp->p
33680 32 20 2d 20 31 3b 0a 20 20 7d 0a 23 69 66 6e 64  2 - 1;.  }.#ifnd
33690 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
336a0 52 41 43 45 0a 20 20 69 66 28 20 64 62 2d 3e 78  RACE.  if( db->x
336b0 54 72 61 63 65 0a 20 20 20 26 26 20 21 70 2d 3e  Trace.   && !p->
336c0 64 6f 69 6e 67 52 65 72 75 6e 0a 20 20 20 26 26  doingRerun.   &&
336d0 20 28 7a 54 72 61 63 65 20 3d 20 28 70 4f 70 2d   (zTrace = (pOp-
336e0 3e 70 34 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e  >p4.z ? pOp->p4.
336f0 7a 20 3a 20 70 2d 3e 7a 53 71 6c 29 29 21 3d 30  z : p->zSql))!=0
33700 0a 20 20 29 7b 0a 20 20 20 20 7a 20 3d 20 73 71  .  ){.    z = sq
33710 6c 69 74 65 33 56 64 62 65 45 78 70 61 6e 64 53  lite3VdbeExpandS
33720 71 6c 28 70 2c 20 7a 54 72 61 63 65 29 3b 0a 20  ql(p, zTrace);. 
33730 20 20 20 64 62 2d 3e 78 54 72 61 63 65 28 64 62     db->xTrace(db
33740 2d 3e 70 54 72 61 63 65 41 72 67 2c 20 7a 29 3b  ->pTraceArg, z);
33750 0a 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72  .    sqlite3DbFr
33760 65 65 28 64 62 2c 20 7a 29 3b 0a 20 20 7d 0a 23  ee(db, z);.  }.#
33770 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
33780 5f 46 43 4e 54 4c 5f 54 52 41 43 45 0a 20 20 7a  _FCNTL_TRACE.  z
33790 54 72 61 63 65 20 3d 20 28 70 4f 70 2d 3e 70 34  Trace = (pOp->p4
337a0 2e 7a 20 3f 20 70 4f 70 2d 3e 70 34 2e 7a 20 3a  .z ? pOp->p4.z :
337b0 20 70 2d 3e 7a 53 71 6c 29 3b 0a 20 20 69 66 28   p->zSql);.  if(
337c0 20 7a 54 72 61 63 65 20 29 7b 0a 20 20 20 20 69   zTrace ){.    i
337d0 6e 74 20 69 3b 0a 20 20 20 20 66 6f 72 28 69 3d  nt i;.    for(i=
337e0 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
337f0 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 44 62  +){.      if( Db
33800 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
33810 65 4d 61 73 6b 2c 20 69 29 3d 3d 30 20 29 20 63  eMask, i)==0 ) c
33820 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73  ontinue;.      s
33830 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74  qlite3_file_cont
33840 72 6f 6c 28 64 62 2c 20 64 62 2d 3e 61 44 62 5b  rol(db, db->aDb[
33850 69 5d 2e 7a 4e 61 6d 65 2c 20 53 51 4c 49 54 45  i].zName, SQLITE
33860 5f 46 43 4e 54 4c 5f 54 52 41 43 45 2c 20 7a 54  _FCNTL_TRACE, zT
33870 72 61 63 65 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  race);.    }.  }
33880 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
33890 45 5f 55 53 45 5f 46 43 4e 54 4c 5f 54 52 41 43  E_USE_FCNTL_TRAC
338a0 45 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  E */.#ifdef SQLI
338b0 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28 20 28  TE_DEBUG.  if( (
338c0 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49  db->flags & SQLI
338d0 54 45 5f 53 71 6c 54 72 61 63 65 29 21 3d 30 0a  TE_SqlTrace)!=0.
338e0 20 20 20 26 26 20 28 7a 54 72 61 63 65 20 3d 20     && (zTrace = 
338f0 28 70 4f 70 2d 3e 70 34 2e 7a 20 3f 20 70 4f 70  (pOp->p4.z ? pOp
33900 2d 3e 70 34 2e 7a 20 3a 20 70 2d 3e 7a 53 71 6c  ->p4.z : p->zSql
33910 29 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 73  ))!=0.  ){.    s
33920 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
33930 66 28 22 53 51 4c 2d 74 72 61 63 65 3a 20 25 73  f("SQL-trace: %s
33940 5c 6e 22 2c 20 7a 54 72 61 63 65 29 3b 0a 20 20  \n", zTrace);.  
33950 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
33960 54 45 5f 44 45 42 55 47 20 2a 2f 0a 23 65 6e 64  TE_DEBUG */.#end
33970 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
33980 54 5f 54 52 41 43 45 20 2a 2f 0a 20 20 62 72 65  T_TRACE */.  bre
33990 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
339a0 65 3a 20 4e 6f 6f 70 20 2a 20 2a 20 2a 20 2a 20  e: Noop * * * * 
339b0 2a 0a 2a 2a 0a 2a 2a 20 44 6f 20 6e 6f 74 68 69  *.**.** Do nothi
339c0 6e 67 2e 20 20 54 68 69 73 20 69 6e 73 74 72 75  ng.  This instru
339d0 63 74 69 6f 6e 20 69 73 20 6f 66 74 65 6e 20 75  ction is often u
339e0 73 65 66 75 6c 20 61 73 20 61 20 6a 75 6d 70 0a  seful as a jump.
339f0 2a 2a 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0a  ** destination..
33a00 2a 2f 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6d 61 67  */./*.** The mag
33a10 69 63 20 45 78 70 6c 61 69 6e 20 6f 70 63 6f 64  ic Explain opcod
33a20 65 20 61 72 65 20 6f 6e 6c 79 20 69 6e 73 65 72  e are only inser
33a30 74 65 64 20 77 68 65 6e 20 65 78 70 6c 61 69 6e  ted when explain
33a40 3d 3d 32 20 28 77 68 69 63 68 0a 2a 2a 20 69 73  ==2 (which.** is
33a50 20 74 6f 20 73 61 79 20 77 68 65 6e 20 74 68 65   to say when the
33a60 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
33a70 4c 41 4e 20 73 79 6e 74 61 78 20 69 73 20 75 73  LAN syntax is us
33a80 65 64 2e 29 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ed.).** This opc
33a90 6f 64 65 20 72 65 63 6f 72 64 73 20 69 6e 66 6f  ode records info
33aa0 72 6d 61 74 69 6f 6e 20 66 72 6f 6d 20 74 68 65  rmation from the
33ab0 20 6f 70 74 69 6d 69 7a 65 72 2e 20 20 49 74 20   optimizer.  It 
33ac0 69 73 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 61  is the.** the sa
33ad0 6d 65 20 61 73 20 61 20 6e 6f 2d 6f 70 2e 20 20  me as a no-op.  
33ae0 54 68 69 73 20 6f 70 63 6f 64 65 73 6e 65 76 65  This opcodesneve
33af0 72 20 61 70 70 65 61 72 73 20 69 6e 20 61 20 72  r appears in a r
33b00 65 61 6c 20 56 4d 20 70 72 6f 67 72 61 6d 2e 0a  eal VM program..
33b10 2a 2f 0a 64 65 66 61 75 6c 74 3a 20 7b 20 20 20  */.default: {   
33b20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
33b30 73 20 72 65 61 6c 6c 79 20 4f 50 5f 4e 6f 6f 70  s really OP_Noop
33b40 20 61 6e 64 20 4f 50 5f 45 78 70 6c 61 69 6e 20   and OP_Explain 
33b50 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
33b60 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 6f 6f  ->opcode==OP_Noo
33b70 70 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  p || pOp->opcode
33b80 3d 3d 4f 50 5f 45 78 70 6c 61 69 6e 20 29 3b 0a  ==OP_Explain );.
33b90 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 2a 2a    break;.}../***
33ba0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
33bf0 65 20 63 61 73 65 73 20 6f 66 20 74 68 65 20 73  e cases of the s
33c00 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74 20  witch statement 
33c10 61 62 6f 76 65 20 74 68 69 73 20 6c 69 6e 65 20  above this line 
33c20 73 68 6f 75 6c 64 20 61 6c 6c 20 62 65 20 69 6e  should all be in
33c30 64 65 6e 74 65 64 0a 2a 2a 20 62 79 20 36 20 73  dented.** by 6 s
33c40 70 61 63 65 73 2e 20 20 42 75 74 20 74 68 65 20  paces.  But the 
33c50 6c 65 66 74 2d 6d 6f 73 74 20 36 20 73 70 61 63  left-most 6 spac
33c60 65 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 6d  es have been rem
33c70 6f 76 65 64 20 74 6f 20 69 6d 70 72 6f 76 65 20  oved to improve 
33c80 74 68 65 0a 2a 2a 20 72 65 61 64 61 62 69 6c 69  the.** readabili
33c90 74 79 2e 20 20 46 72 6f 6d 20 74 68 69 73 20 70  ty.  From this p
33ca0 6f 69 6e 74 20 6f 6e 20 64 6f 77 6e 2c 20 74 68  oint on down, th
33cb0 65 20 6e 6f 72 6d 61 6c 20 69 6e 64 65 6e 74 61  e normal indenta
33cc0 74 69 6f 6e 20 72 75 6c 65 73 20 61 72 65 0a 2a  tion rules are.*
33cd0 2a 20 72 65 73 74 6f 72 65 64 2e 0a 2a 2a 2a 2a  * restored..****
33ce0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33cf0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33d00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33d10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
33d20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 20 20 20 20 7d  *********/.    }
33d30 0a 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50 52  ..#ifdef VDBE_PR
33d40 4f 46 49 4c 45 0a 20 20 20 20 7b 0a 20 20 20 20  OFILE.    {.    
33d50 20 20 75 36 34 20 65 6e 64 54 69 6d 65 20 3d 20    u64 endTime = 
33d60 73 71 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b  sqlite3Hwtime();
33d70 0a 20 20 20 20 20 20 69 66 28 20 65 6e 64 54 69  .      if( endTi
33d80 6d 65 3e 73 74 61 72 74 20 29 20 70 4f 70 2d 3e  me>start ) pOp->
33d90 63 79 63 6c 65 73 20 2b 3d 20 65 6e 64 54 69 6d  cycles += endTim
33da0 65 20 2d 20 73 74 61 72 74 3b 0a 20 20 20 20 20  e - start;.     
33db0 20 70 4f 70 2d 3e 63 6e 74 2b 2b 3b 0a 20 20 20   pOp->cnt++;.   
33dc0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
33dd0 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
33de0 63 6f 64 65 20 61 64 64 73 20 6e 6f 74 68 69 6e  code adds nothin
33df0 67 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c 20  g to the actual 
33e00 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 0a 20 20  functionality.  
33e10 20 20 2a 2a 20 6f 66 20 74 68 65 20 70 72 6f 67    ** of the prog
33e20 72 61 6d 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79  ram.  It is only
33e30 20 68 65 72 65 20 66 6f 72 20 74 65 73 74 69 6e   here for testin
33e40 67 20 61 6e 64 20 64 65 62 75 67 67 69 6e 67 2e  g and debugging.
33e50 0a 20 20 20 20 2a 2a 20 4f 6e 20 74 68 65 20 6f  .    ** On the o
33e60 74 68 65 72 20 68 61 6e 64 2c 20 69 74 20 64 6f  ther hand, it do
33e70 65 73 20 62 75 72 6e 20 43 50 55 20 63 79 63 6c  es burn CPU cycl
33e80 65 73 20 65 76 65 72 79 20 74 69 6d 65 20 74 68  es every time th
33e90 72 6f 75 67 68 0a 20 20 20 20 2a 2a 20 74 68 65  rough.    ** the
33ea0 20 65 76 61 6c 75 61 74 6f 72 20 6c 6f 6f 70 2e   evaluator loop.
33eb0 20 20 53 6f 20 77 65 20 63 61 6e 20 6c 65 61 76    So we can leav
33ec0 65 20 69 74 20 6f 75 74 20 77 68 65 6e 20 4e 44  e it out when ND
33ed0 45 42 55 47 20 69 73 20 64 65 66 69 6e 65 64 2e  EBUG is defined.
33ee0 0a 20 20 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  .    */.#ifndef 
33ef0 4e 44 45 42 55 47 0a 20 20 20 20 61 73 73 65 72  NDEBUG.    asser
33f00 74 28 20 70 63 3e 3d 2d 31 20 26 26 20 70 63 3c  t( pc>=-1 && pc<
33f10 70 2d 3e 6e 4f 70 20 29 3b 0a 0a 23 69 66 64 65  p->nOp );..#ifde
33f20 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
33f30 20 20 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73     if( db->flags
33f40 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72   & SQLITE_VdbeTr
33f50 61 63 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ace ){.      if(
33f60 20 72 63 21 3d 30 20 29 20 70 72 69 6e 74 66 28   rc!=0 ) printf(
33f70 22 72 63 3d 25 64 5c 6e 22 2c 72 63 29 3b 0a 20  "rc=%d\n",rc);. 
33f80 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70       if( pOp->op
33f90 66 6c 61 67 73 20 26 20 28 4f 50 46 4c 47 5f 4f  flags & (OPFLG_O
33fa0 55 54 32 5f 50 52 45 52 45 4c 45 41 53 45 7c 4f  UT2_PRERELEASE|O
33fb0 50 46 4c 47 5f 4f 55 54 32 29 20 29 7b 0a 20 20  PFLG_OUT2) ){.  
33fc0 20 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72        registerTr
33fd0 61 63 65 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ace(pOp->p2, &aM
33fe0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
33ff0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
34000 70 4f 70 2d 3e 6f 70 66 6c 61 67 73 20 26 20 4f  pOp->opflags & O
34010 50 46 4c 47 5f 4f 55 54 33 20 29 7b 0a 20 20 20  PFLG_OUT3 ){.   
34020 20 20 20 20 20 72 65 67 69 73 74 65 72 54 72 61       registerTra
34030 63 65 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65  ce(pOp->p3, &aMe
34040 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20  m[pOp->p3]);.   
34050 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69     }.    }.#endi
34060 66 20 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45 42  f  /* SQLITE_DEB
34070 55 47 20 2a 2f 0a 23 65 6e 64 69 66 20 20 2f 2a  UG */.#endif  /*
34080 20 4e 44 45 42 55 47 20 2a 2f 0a 20 20 7d 20 20   NDEBUG */.  }  
34090 2f 2a 20 54 68 65 20 65 6e 64 20 6f 66 20 74 68  /* The end of th
340a0 65 20 66 6f 72 28 3b 3b 29 20 6c 6f 6f 70 20 74  e for(;;) loop t
340b0 68 65 20 6c 6f 6f 70 73 20 74 68 72 6f 75 67 68  he loops through
340c0 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 0a 20 20 2f   opcodes */..  /
340d0 2a 20 49 66 20 77 65 20 72 65 61 63 68 20 74 68  * If we reach th
340e0 69 73 20 70 6f 69 6e 74 2c 20 69 74 20 6d 65 61  is point, it mea
340f0 6e 73 20 74 68 61 74 20 65 78 65 63 75 74 69 6f  ns that executio
34100 6e 20 69 73 20 66 69 6e 69 73 68 65 64 20 77 69  n is finished wi
34110 74 68 0a 20 20 2a 2a 20 61 6e 20 65 72 72 6f 72  th.  ** an error
34120 20 6f 66 20 73 6f 6d 65 20 6b 69 6e 64 2e 0a 20   of some kind.. 
34130 20 2a 2f 0a 76 64 62 65 5f 65 72 72 6f 72 5f 68   */.vdbe_error_h
34140 61 6c 74 3a 0a 20 20 61 73 73 65 72 74 28 20 72  alt:.  assert( r
34150 63 20 29 3b 0a 20 20 70 2d 3e 72 63 20 3d 20 72  c );.  p->rc = r
34160 63 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 73  c;.  testcase( s
34170 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
34180 69 67 2e 78 4c 6f 67 21 3d 30 20 29 3b 0a 20 20  ig.xLog!=0 );.  
34190 73 71 6c 69 74 65 33 5f 6c 6f 67 28 72 63 2c 20  sqlite3_log(rc, 
341a0 22 73 74 61 74 65 6d 65 6e 74 20 61 62 6f 72 74  "statement abort
341b0 73 20 61 74 20 25 64 3a 20 5b 25 73 5d 20 25 73  s at %d: [%s] %s
341c0 22 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ", .            
341d0 20 20 20 20 20 20 20 70 63 2c 20 70 2d 3e 7a 53         pc, p->zS
341e0 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29 3b  ql, p->zErrMsg);
341f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 48 61  .  sqlite3VdbeHa
34200 6c 74 28 70 29 3b 0a 20 20 69 66 28 20 72 63 3d  lt(p);.  if( rc=
34210 3d 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f  =SQLITE_IOERR_NO
34220 4d 45 4d 20 29 20 64 62 2d 3e 6d 61 6c 6c 6f 63  MEM ) db->malloc
34230 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 72 63  Failed = 1;.  rc
34240 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b   = SQLITE_ERROR;
34250 0a 20 20 69 66 28 20 72 65 73 65 74 53 63 68 65  .  if( resetSche
34260 6d 61 4f 6e 46 61 75 6c 74 3e 30 20 29 7b 0a 20  maOnFault>0 ){. 
34270 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74 4f     sqlite3ResetO
34280 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 72 65 73  neSchema(db, res
34290 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 2d  etSchemaOnFault-
342a0 31 29 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 54 68  1);.  }..  /* Th
342b0 69 73 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 77  is is the only w
342c0 61 79 20 6f 75 74 20 6f 66 20 74 68 69 73 20 70  ay out of this p
342d0 72 6f 63 65 64 75 72 65 2e 20 20 57 65 20 68 61  rocedure.  We ha
342e0 76 65 20 74 6f 0a 20 20 2a 2a 20 72 65 6c 65 61  ve to.  ** relea
342f0 73 65 20 74 68 65 20 6d 75 74 65 78 65 73 20 6f  se the mutexes o
34300 6e 20 62 74 72 65 65 73 20 74 68 61 74 20 77 65  n btrees that we
34310 72 65 20 61 63 71 75 69 72 65 64 20 61 74 20 74  re acquired at t
34320 68 65 0a 20 20 2a 2a 20 74 6f 70 2e 20 2a 2f 0a  he.  ** top. */.
34330 76 64 62 65 5f 72 65 74 75 72 6e 3a 0a 20 20 64  vdbe_return:.  d
34340 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 6c  b->lastRowid = l
34350 61 73 74 52 6f 77 69 64 3b 0a 20 20 74 65 73 74  astRowid;.  test
34360 63 61 73 65 28 20 6e 56 6d 53 74 65 70 3e 30 20  case( nVmStep>0 
34370 29 3b 0a 20 20 70 2d 3e 61 43 6f 75 6e 74 65 72  );.  p->aCounter
34380 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53 54 41 54  [SQLITE_STMTSTAT
34390 55 53 5f 56 4d 5f 53 54 45 50 5d 20 2b 3d 20 28  US_VM_STEP] += (
343a0 69 6e 74 29 6e 56 6d 53 74 65 70 3b 0a 20 20 73  int)nVmStep;.  s
343b0 71 6c 69 74 65 33 56 64 62 65 4c 65 61 76 65 28  qlite3VdbeLeave(
343c0 70 29 3b 0a 20 20 72 65 74 75 72 6e 20 72 63 3b  p);.  return rc;
343d0 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68  ..  /* Jump to h
343e0 65 72 65 20 69 66 20 61 20 73 74 72 69 6e 67 20  ere if a string 
343f0 6f 72 20 62 6c 6f 62 20 6c 61 72 67 65 72 20 74  or blob larger t
34400 68 61 6e 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4c  han SQLITE_MAX_L
34410 45 4e 47 54 48 0a 20 20 2a 2a 20 69 73 20 65 6e  ENGTH.  ** is en
34420 63 6f 75 6e 74 65 72 65 64 2e 0a 20 20 2a 2f 0a  countered..  */.
34430 74 6f 6f 5f 62 69 67 3a 0a 20 20 73 71 6c 69 74  too_big:.  sqlit
34440 65 33 53 65 74 53 74 72 69 6e 67 28 26 70 2d 3e  e3SetString(&p->
34450 7a 45 72 72 4d 73 67 2c 20 64 62 2c 20 22 73 74  zErrMsg, db, "st
34460 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f  ring or blob too
34470 20 62 69 67 22 29 3b 0a 20 20 72 63 20 3d 20 53   big");.  rc = S
34480 51 4c 49 54 45 5f 54 4f 4f 42 49 47 3b 0a 20 20  QLITE_TOOBIG;.  
34490 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
344a0 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
344b0 20 74 6f 20 68 65 72 65 20 69 66 20 61 20 6d 61   to here if a ma
344c0 6c 6c 6f 63 28 29 20 66 61 69 6c 73 2e 0a 20 20  lloc() fails..  
344d0 2a 2f 0a 6e 6f 5f 6d 65 6d 3a 0a 20 20 64 62 2d  */.no_mem:.  db-
344e0 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
344f0 31 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74 53  1;.  sqlite3SetS
34500 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d 73  tring(&p->zErrMs
34510 67 2c 20 64 62 2c 20 22 6f 75 74 20 6f 66 20 6d  g, db, "out of m
34520 65 6d 6f 72 79 22 29 3b 0a 20 20 72 63 20 3d 20  emory");.  rc = 
34530 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a 20 20  SQLITE_NOMEM;.  
34540 67 6f 74 6f 20 76 64 62 65 5f 65 72 72 6f 72 5f  goto vdbe_error_
34550 68 61 6c 74 3b 0a 0a 20 20 2f 2a 20 4a 75 6d 70  halt;..  /* Jump
34560 20 74 6f 20 68 65 72 65 20 66 6f 72 20 61 6e 79   to here for any
34570 20 6f 74 68 65 72 20 6b 69 6e 64 20 6f 66 20 66   other kind of f
34580 61 74 61 6c 20 65 72 72 6f 72 2e 20 20 54 68 65  atal error.  The
34590 20 22 72 63 22 20 76 61 72 69 61 62 6c 65 0a 20   "rc" variable. 
345a0 20 2a 2a 20 73 68 6f 75 6c 64 20 68 6f 6c 64 20   ** should hold 
345b0 74 68 65 20 65 72 72 6f 72 20 6e 75 6d 62 65 72  the error number
345c0 2e 0a 20 20 2a 2f 0a 61 62 6f 72 74 5f 64 75 65  ..  */.abort_due
345d0 5f 74 6f 5f 65 72 72 6f 72 3a 0a 20 20 61 73 73  _to_error:.  ass
345e0 65 72 74 28 20 70 2d 3e 7a 45 72 72 4d 73 67 3d  ert( p->zErrMsg=
345f0 3d 30 20 29 3b 0a 20 20 69 66 28 20 64 62 2d 3e  =0 );.  if( db->
34600 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 72  mallocFailed ) r
34610 63 20 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  c = SQLITE_NOMEM
34620 3b 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49  ;.  if( rc!=SQLI
34630 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 20 29  TE_IOERR_NOMEM )
34640 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 53 65 74  {.    sqlite3Set
34650 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
34660 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
34670 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
34680 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64 62  ;.  }.  goto vdb
34690 65 5f 65 72 72 6f 72 5f 68 61 6c 74 3b 0a 0a 20  e_error_halt;.. 
346a0 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 68 65 72 65   /* Jump to here
346b0 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
346c0 69 6e 74 65 72 72 75 70 74 28 29 20 41 50 49 20  interrupt() API 
346d0 73 65 74 73 20 74 68 65 20 69 6e 74 65 72 72 75  sets the interru
346e0 70 74 0a 20 20 2a 2a 20 66 6c 61 67 2e 0a 20 20  pt.  ** flag..  
346f0 2a 2f 0a 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  */.abort_due_to_
34700 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 61 73 73  interrupt:.  ass
34710 65 72 74 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e  ert( db->u1.isIn
34720 74 65 72 72 75 70 74 65 64 20 29 3b 0a 20 20 72  terrupted );.  r
34730 63 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 52  c = SQLITE_INTER
34740 52 55 50 54 3b 0a 20 20 70 2d 3e 72 63 20 3d 20  RUPT;.  p->rc = 
34750 72 63 3b 0a 20 20 73 71 6c 69 74 65 33 53 65 74  rc;.  sqlite3Set
34760 53 74 72 69 6e 67 28 26 70 2d 3e 7a 45 72 72 4d  String(&p->zErrM
34770 73 67 2c 20 64 62 2c 20 22 25 73 22 2c 20 73 71  sg, db, "%s", sq
34780 6c 69 74 65 33 45 72 72 53 74 72 28 72 63 29 29  lite3ErrStr(rc))
34790 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 65 72  ;.  goto vdbe_er
347a0 72 6f 72 5f 68 61 6c 74 3b 0a 7d 0a              ror_halt;.}.