/ Hex Artifact Content
Login

Artifact 16542e327eb38763490473dc0e9e9396924f30b2:


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 28 28 44 42 29 2d 3e 78  OOK(DB) ((DB)->x
0d20: 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63  PreUpdateCallbac
0d30: 6b 7c 7c 28 44 42 29 2d 3e 78 55 70 64 61 74 65  k||(DB)->xUpdate
0d40: 43 61 6c 6c 62 61 63 6b 29 0a 23 65 6c 73 65 0a  Callback).#else.
0d50: 23 20 64 65 66 69 6e 65 20 48 41 53 5f 55 50 44  # define HAS_UPD
0d60: 41 54 45 5f 48 4f 4f 4b 28 44 42 29 20 28 28 44  ATE_HOOK(DB) ((D
0d70: 42 29 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c 62  B)->xUpdateCallb
0d80: 61 63 6b 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ack).#endif../*.
0d90: 2a 2a 20 54 68 65 20 6e 65 78 74 20 67 6c 6f 62  ** The next glob
0da0: 61 6c 20 76 61 72 69 61 62 6c 65 20 69 73 20 69  al variable is i
0db0: 6e 63 72 65 6d 65 6e 74 65 64 20 65 61 63 68 20  ncremented each 
0dc0: 74 69 6d 65 20 74 68 65 20 4f 50 5f 46 6f 75 6e  time the OP_Foun
0dd0: 64 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 65  d opcode.** is e
0de0: 78 65 63 75 74 65 64 2e 20 54 68 69 73 20 69 73  xecuted. This is
0df0: 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 77 68   used to test wh
0e00: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65  ether or not the
0e10: 20 66 6f 72 65 69 67 6e 20 6b 65 79 0a 2a 2a 20   foreign key.** 
0e20: 6f 70 65 72 61 74 69 6f 6e 20 69 6d 70 6c 65 6d  operation implem
0e30: 65 6e 74 65 64 20 75 73 69 6e 67 20 4f 50 5f 46  ented using OP_F
0e40: 6b 49 73 5a 65 72 6f 20 69 73 20 77 6f 72 6b 69  kIsZero is worki
0e50: 6e 67 2e 20 54 68 69 73 20 76 61 72 69 61 62 6c  ng. This variabl
0e60: 65 0a 2a 2a 20 68 61 73 20 6e 6f 20 66 75 6e 63  e.** has no func
0e70: 74 69 6f 6e 20 6f 74 68 65 72 20 74 68 61 6e 20  tion other than 
0e80: 74 6f 20 68 65 6c 70 20 76 65 72 69 66 79 20 74  to help verify t
0e90: 68 65 20 63 6f 72 72 65 63 74 20 6f 70 65 72 61  he correct opera
0ea0: 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 6c  tion of the.** l
0eb0: 69 62 72 61 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  ibrary..*/.#ifde
0ec0: 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 69 6e  f SQLITE_TEST.in
0ed0: 74 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f  t sqlite3_found_
0ee0: 63 6f 75 6e 74 20 3d 20 30 3b 0a 23 65 6e 64 69  count = 0;.#endi
0ef0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20 61 20  f../*.** Test a 
0f00: 72 65 67 69 73 74 65 72 20 74 6f 20 73 65 65 20  register to see 
0f10: 69 66 20 69 74 20 65 78 63 65 65 64 73 20 74 68  if it exceeds th
0f20: 65 20 63 75 72 72 65 6e 74 20 6d 61 78 69 6d 75  e current maximu
0f30: 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2a 20  m blob size..** 
0f40: 49 66 20 69 74 20 64 6f 65 73 2c 20 72 65 63 6f  If it does, reco
0f50: 72 64 20 74 68 65 20 6e 65 77 20 6d 61 78 69 6d  rd the new maxim
0f60: 75 6d 20 62 6c 6f 62 20 73 69 7a 65 2e 0a 2a 2f  um blob size..*/
0f70: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
0f80: 49 54 45 5f 54 45 53 54 29 20 26 26 20 21 64 65  ITE_TEST) && !de
0f90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 55 4e 54  fined(SQLITE_UNT
0fa0: 45 53 54 41 42 4c 45 29 0a 23 20 64 65 66 69 6e  ESTABLE).# defin
0fb0: 65 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f  e UPDATE_MAX_BLO
0fc0: 42 53 49 5a 45 28 50 29 20 20 75 70 64 61 74 65  BSIZE(P)  update
0fd0: 4d 61 78 42 6c 6f 62 73 69 7a 65 28 50 29 0a 23  MaxBlobsize(P).#
0fe0: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 55 50  else.# define UP
0ff0: 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
1000: 45 28 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E(P).#endif../*.
1010: 2a 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 56 44  ** Invoke the VD
1020: 42 45 20 63 6f 76 65 72 61 67 65 20 63 61 6c 6c  BE coverage call
1030: 62 61 63 6b 2c 20 69 66 20 74 68 61 74 20 63 61  back, if that ca
1040: 6c 6c 62 61 63 6b 20 69 73 20 64 65 66 69 6e 65  llback is define
1050: 64 2e 20 20 54 68 69 73 0a 2a 2a 20 66 65 61 74  d.  This.** feat
1060: 75 72 65 20 69 73 20 75 73 65 64 20 66 6f 72 20  ure is used for 
1070: 74 65 73 74 20 73 75 69 74 65 20 76 61 6c 69 64  test suite valid
1080: 61 74 69 6f 6e 20 6f 6e 6c 79 20 61 6e 64 20 64  ation only and d
1090: 6f 65 73 20 6e 6f 74 20 61 70 70 65 61 72 20 61  oes not appear a
10a0: 6e 0a 2a 2a 20 70 72 6f 64 75 63 74 69 6f 6e 20  n.** production 
10b0: 62 75 69 6c 64 73 2e 0a 2a 2a 0a 2a 2a 20 4d 20  builds..**.** M 
10c0: 69 73 20 61 6e 20 69 6e 74 65 67 65 72 2c 20 32  is an integer, 2
10d0: 20 6f 72 20 33 2c 20 74 68 61 74 20 69 6e 64 69   or 3, that indi
10e0: 63 65 73 20 68 6f 77 20 6d 61 6e 79 20 64 69 66  ces how many dif
10f0: 66 65 72 65 6e 74 20 77 61 79 73 20 74 68 65 0a  ferent ways the.
1100: 2a 2a 20 62 72 61 6e 63 68 20 63 61 6e 20 67 6f  ** branch can go
1110: 2e 20 20 49 74 20 69 73 20 75 73 75 61 6c 6c 79  .  It is usually
1120: 20 32 2e 20 20 22 49 22 20 69 73 20 74 68 65 20   2.  "I" is the 
1130: 64 69 72 65 63 74 69 6f 6e 20 74 68 65 20 62 72  direction the br
1140: 61 6e 63 68 0a 2a 2a 20 67 6f 65 73 2e 20 20 30  anch.** goes.  0
1150: 20 6d 65 61 6e 73 20 66 61 6c 6c 73 20 74 68 72   means falls thr
1160: 6f 75 67 68 2e 20 20 31 20 6d 65 61 6e 73 20 62  ough.  1 means b
1170: 72 61 6e 63 68 20 69 73 20 74 61 6b 65 6e 2e 20  ranch is taken. 
1180: 20 32 20 6d 65 61 6e 73 20 74 68 65 0a 2a 2a 20   2 means the.** 
1190: 73 65 63 6f 6e 64 20 61 6c 74 65 72 6e 61 74 69  second alternati
11a0: 76 65 20 62 72 61 6e 63 68 20 69 73 20 74 61 6b  ve branch is tak
11b0: 65 6e 2e 0a 2a 2a 0a 2a 2a 20 69 53 72 63 4c 69  en..**.** iSrcLi
11c0: 6e 65 20 69 73 20 74 68 65 20 73 6f 75 72 63 65  ne is the source
11d0: 20 63 6f 64 65 20 6c 69 6e 65 20 28 66 72 6f 6d   code line (from
11e0: 20 74 68 65 20 5f 5f 4c 49 4e 45 5f 5f 20 6d 61   the __LINE__ ma
11f0: 63 72 6f 29 20 74 68 61 74 0a 2a 2a 20 67 65 6e  cro) that.** gen
1200: 65 72 61 74 65 64 20 74 68 65 20 56 44 42 45 20  erated the VDBE 
1210: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 54 68  instruction.  Th
1220: 69 73 20 69 6e 73 74 72 75 6d 65 6e 74 61 74 69  is instrumentati
1230: 6f 6e 20 61 73 73 75 6d 65 73 20 74 68 61 74 20  on assumes that 
1240: 61 6c 6c 0a 2a 2a 20 73 6f 75 72 63 65 20 63 6f  all.** source co
1250: 64 65 20 69 73 20 69 6e 20 61 20 73 69 6e 67 6c  de is in a singl
1260: 65 20 66 69 6c 65 20 28 74 68 65 20 61 6d 61 6c  e file (the amal
1270: 67 61 6d 61 74 69 6f 6e 29 2e 20 20 53 70 65 63  gamation).  Spec
1280: 69 61 6c 20 76 61 6c 75 65 73 20 31 0a 2a 2a 20  ial values 1.** 
1290: 61 6e 64 20 32 20 66 6f 72 20 74 68 65 20 69 53  and 2 for the iS
12a0: 72 63 4c 69 6e 65 20 70 61 72 61 6d 65 74 65 72  rcLine parameter
12b0: 20 6d 65 61 6e 20 74 68 61 74 20 74 68 69 73 20   mean that this 
12c0: 70 61 72 74 69 63 75 6c 61 72 20 62 72 61 6e 63  particular branc
12d0: 68 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  h is.** always t
12e0: 61 6b 65 6e 20 6f 72 20 6e 65 76 65 72 20 74 61  aken or never ta
12f0: 6b 65 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ken, respectivel
1300: 79 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  y..*/.#if !defin
1310: 65 64 28 53 51 4c 49 54 45 5f 56 44 42 45 5f 43  ed(SQLITE_VDBE_C
1320: 4f 56 45 52 41 47 45 29 0a 23 20 64 65 66 69 6e  OVERAGE).# defin
1330: 65 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65  e VdbeBranchTake
1340: 6e 28 49 2c 4d 29 0a 23 65 6c 73 65 0a 23 20 64  n(I,M).#else.# d
1350: 65 66 69 6e 65 20 56 64 62 65 42 72 61 6e 63 68  efine VdbeBranch
1360: 54 61 6b 65 6e 28 49 2c 4d 29 20 76 64 62 65 54  Taken(I,M) vdbeT
1370: 61 6b 65 42 72 61 6e 63 68 28 70 4f 70 2d 3e 69  akeBranch(pOp->i
1380: 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 0a 20 20 73  SrcLine,I,M).  s
1390: 74 61 74 69 63 20 76 6f 69 64 20 76 64 62 65 54  tatic void vdbeT
13a0: 61 6b 65 42 72 61 6e 63 68 28 69 6e 74 20 69 53  akeBranch(int iS
13b0: 72 63 4c 69 6e 65 2c 20 75 38 20 49 2c 20 75 38  rcLine, u8 I, u8
13c0: 20 4d 29 7b 0a 20 20 20 20 69 66 28 20 69 53 72   M){.    if( iSr
13d0: 63 4c 69 6e 65 3c 3d 32 20 26 26 20 41 4c 57 41  cLine<=2 && ALWA
13e0: 59 53 28 69 53 72 63 4c 69 6e 65 3e 30 29 20 29  YS(iSrcLine>0) )
13f0: 7b 0a 20 20 20 20 20 20 4d 20 3d 20 69 53 72 63  {.      M = iSrc
1400: 4c 69 6e 65 3b 0a 20 20 20 20 20 20 2f 2a 20 41  Line;.      /* A
1410: 73 73 65 72 74 20 74 68 65 20 74 72 75 74 68 20  ssert the truth 
1420: 6f 66 20 56 64 62 65 43 6f 76 65 72 61 67 65 41  of VdbeCoverageA
1430: 6c 77 61 79 73 54 61 6b 65 6e 28 29 20 61 6e 64  lwaysTaken() and
1440: 20 0a 20 20 20 20 20 20 2a 2a 20 56 64 62 65 43   .      ** VdbeC
1450: 6f 76 65 72 61 67 65 4e 65 76 65 72 54 61 6b 65  overageNeverTake
1460: 6e 28 29 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  n() */.      ass
1470: 65 72 74 28 20 28 4d 20 26 20 49 29 3d 3d 49 20  ert( (M & I)==I 
1480: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
1490: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
14a0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14b0: 65 42 72 61 6e 63 68 3d 3d 30 20 29 20 72 65 74  eBranch==0 ) ret
14c0: 75 72 6e 3b 20 20 2f 2a 4e 4f 5f 54 45 53 54 2a  urn;  /*NO_TEST*
14d0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 47  /.      sqlite3G
14e0: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 78 56 64 62  lobalConfig.xVdb
14f0: 65 42 72 61 6e 63 68 28 73 71 6c 69 74 65 33 47  eBranch(sqlite3G
1500: 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 70 56 64 62  lobalConfig.pVdb
1510: 65 42 72 61 6e 63 68 41 72 67 2c 0a 20 20 20 20  eBranchArg,.    
1520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1540: 20 20 69 53 72 63 4c 69 6e 65 2c 49 2c 4d 29 3b    iSrcLine,I,M);
1550: 0a 20 20 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69  .    }.  }.#endi
1560: 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74  f../*.** Convert
1570: 20 74 68 65 20 67 69 76 65 6e 20 72 65 67 69 73   the given regis
1580: 74 65 72 20 69 6e 74 6f 20 61 20 73 74 72 69 6e  ter into a strin
1590: 67 20 69 66 20 69 74 20 69 73 6e 27 74 20 6f 6e  g if it isn't on
15a0: 65 0a 2a 2a 20 61 6c 72 65 61 64 79 2e 20 52 65  e.** already. Re
15b0: 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  turn non-zero if
15c0: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
15d0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 74  s..*/.#define St
15e0: 72 69 6e 67 69 66 79 28 50 2c 20 65 6e 63 29 20  ringify(P, enc) 
15f0: 5c 0a 20 20 20 69 66 28 28 28 50 29 2d 3e 66 6c  \.   if(((P)->fl
1600: 61 67 73 26 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  ags&(MEM_Str|MEM
1610: 5f 42 6c 6f 62 29 29 3d 3d 30 20 26 26 20 73 71  _Blob))==0 && sq
1620: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69  lite3VdbeMemStri
1630: 6e 67 69 66 79 28 50 2c 65 6e 63 2c 30 29 29 20  ngify(P,enc,0)) 
1640: 5c 0a 20 20 20 20 20 7b 20 67 6f 74 6f 20 6e 6f  \.     { goto no
1650: 5f 6d 65 6d 3b 20 7d 0a 0a 2f 2a 0a 2a 2a 20 41  _mem; }../*.** A
1660: 6e 20 65 70 68 65 6d 65 72 61 6c 20 73 74 72 69  n ephemeral stri
1670: 6e 67 20 76 61 6c 75 65 20 28 73 69 67 6e 69 66  ng value (signif
1680: 69 65 64 20 62 79 20 74 68 65 20 4d 45 4d 5f 45  ied by the MEM_E
1690: 70 68 65 6d 20 66 6c 61 67 29 20 63 6f 6e 74 61  phem flag) conta
16a0: 69 6e 73 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72  ins.** a pointer
16b0: 20 74 6f 20 61 20 64 79 6e 61 6d 69 63 61 6c 6c   to a dynamicall
16c0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 73 74 72 69  y allocated stri
16d0: 6e 67 20 77 68 65 72 65 20 73 6f 6d 65 20 6f 74  ng where some ot
16e0: 68 65 72 20 65 6e 74 69 74 79 0a 2a 2a 20 69 73  her entity.** is
16f0: 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72   responsible for
1700: 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74 68   deallocating th
1710: 61 74 20 73 74 72 69 6e 67 2e 20 20 42 65 63 61  at string.  Beca
1720: 75 73 65 20 74 68 65 20 72 65 67 69 73 74 65 72  use the register
1730: 0a 2a 2a 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e  .** does not con
1740: 74 72 6f 6c 20 74 68 65 20 73 74 72 69 6e 67 2c  trol the string,
1750: 20 69 74 20 6d 69 67 68 74 20 62 65 20 64 65 6c   it might be del
1760: 65 74 65 64 20 77 69 74 68 6f 75 74 20 74 68 65  eted without the
1770: 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6b 6e 6f   register.** kno
1780: 77 69 6e 67 20 69 74 2e 0a 2a 2a 0a 2a 2a 20 54  wing it..**.** T
1790: 68 69 73 20 72 6f 75 74 69 6e 65 20 63 6f 6e 76  his routine conv
17a0: 65 72 74 73 20 61 6e 20 65 70 68 65 6d 65 72 61  erts an ephemera
17b0: 6c 20 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20  l string into a 
17c0: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
17d0: 63 61 74 65 64 0a 2a 2a 20 73 74 72 69 6e 67 20  cated.** string 
17e0: 74 68 61 74 20 74 68 65 20 72 65 67 69 73 74 65  that the registe
17f0: 72 20 69 74 73 65 6c 66 20 63 6f 6e 74 72 6f 6c  r itself control
1800: 73 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  s.  In other wor
1810: 64 73 2c 20 69 74 0a 2a 2a 20 63 6f 6e 76 65 72  ds, it.** conver
1820: 74 73 20 61 6e 20 4d 45 4d 5f 45 70 68 65 6d 20  ts an MEM_Ephem 
1830: 73 74 72 69 6e 67 20 69 6e 74 6f 20 61 20 73 74  string into a st
1840: 72 69 6e 67 20 77 69 74 68 20 50 2e 7a 3d 3d 50  ring with P.z==P
1850: 2e 7a 4d 61 6c 6c 6f 63 2e 0a 2a 2f 0a 23 64 65  .zMalloc..*/.#de
1860: 66 69 6e 65 20 44 65 65 70 68 65 6d 65 72 61 6c  fine Deephemeral
1870: 69 7a 65 28 50 29 20 5c 0a 20 20 20 69 66 28 20  ize(P) \.   if( 
1880: 28 28 50 29 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  ((P)->flags&MEM_
1890: 45 70 68 65 6d 29 21 3d 30 20 5c 0a 20 20 20 20  Ephem)!=0 \.    
18a0: 20 20 20 26 26 20 73 71 6c 69 74 65 33 56 64 62     && sqlite3Vdb
18b0: 65 4d 65 6d 4d 61 6b 65 57 72 69 74 65 61 62 6c  eMemMakeWriteabl
18c0: 65 28 50 29 20 29 7b 20 67 6f 74 6f 20 6e 6f 5f  e(P) ){ goto no_
18d0: 6d 65 6d 3b 7d 0a 0a 2f 2a 20 52 65 74 75 72 6e  mem;}../* Return
18e0: 20 74 72 75 65 20 69 66 20 74 68 65 20 63 75 72   true if the cur
18f0: 73 6f 72 20 77 61 73 20 6f 70 65 6e 65 64 20 75  sor was opened u
1900: 73 69 6e 67 20 74 68 65 20 4f 50 5f 4f 70 65 6e  sing the OP_Open
1910: 53 6f 72 74 65 72 20 6f 70 63 6f 64 65 2e 20 2a  Sorter opcode. *
1920: 2f 0a 23 64 65 66 69 6e 65 20 69 73 53 6f 72 74  /.#define isSort
1930: 65 72 28 78 29 20 28 28 78 29 2d 3e 65 43 75 72  er(x) ((x)->eCur
1940: 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 53 4f  Type==CURTYPE_SO
1950: 52 54 45 52 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  RTER)../*.** All
1960: 6f 63 61 74 65 20 56 64 62 65 43 75 72 73 6f 72  ocate VdbeCursor
1970: 20 6e 75 6d 62 65 72 20 69 43 75 72 2e 20 20 52   number iCur.  R
1980: 65 74 75 72 6e 20 61 20 70 6f 69 6e 74 65 72 20  eturn a pointer 
1990: 74 6f 20 69 74 2e 20 20 52 65 74 75 72 6e 20 4e  to it.  Return N
19a0: 55 4c 4c 0a 2a 2a 20 69 66 20 77 65 20 72 75 6e  ULL.** if we run
19b0: 20 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a   out of memory..
19c0: 2a 2f 0a 73 74 61 74 69 63 20 56 64 62 65 43 75  */.static VdbeCu
19d0: 72 73 6f 72 20 2a 61 6c 6c 6f 63 61 74 65 43 75  rsor *allocateCu
19e0: 72 73 6f 72 28 0a 20 20 56 64 62 65 20 2a 70 2c  rsor(.  Vdbe *p,
19f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a00: 20 54 68 65 20 76 69 72 74 75 61 6c 20 6d 61 63   The virtual mac
1a10: 68 69 6e 65 20 2a 2f 0a 20 20 69 6e 74 20 69 43  hine */.  int iC
1a20: 75 72 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  ur,             
1a30: 2f 2a 20 49 6e 64 65 78 20 6f 66 20 74 68 65 20  /* Index of the 
1a40: 6e 65 77 20 56 64 62 65 43 75 72 73 6f 72 20 2a  new VdbeCursor *
1a50: 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 2c 20  /.  int nField, 
1a60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1a70: 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e  ber of fields in
1a80: 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1a90: 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62  dex */.  int iDb
1aa0: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ,              /
1ab0: 2a 20 44 61 74 61 62 61 73 65 20 74 68 65 20 63  * Database the c
1ac0: 75 72 73 6f 72 20 62 65 6c 6f 6e 67 73 20 74 6f  ursor belongs to
1ad0: 2c 20 6f 72 20 2d 31 20 2a 2f 0a 20 20 75 38 20  , or -1 */.  u8 
1ae0: 65 43 75 72 54 79 70 65 20 20 20 20 20 20 20 20  eCurType        
1af0: 20 20 20 2f 2a 20 54 79 70 65 20 6f 66 20 74 68     /* Type of th
1b00: 65 20 6e 65 77 20 63 75 72 73 6f 72 20 2a 2f 0a  e new cursor */.
1b10: 29 7b 0a 20 20 2f 2a 20 46 69 6e 64 20 74 68 65  ){.  /* Find the
1b20: 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74 68 61   memory cell tha
1b30: 74 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 74  t will be used t
1b40: 6f 20 73 74 6f 72 65 20 74 68 65 20 62 6c 6f 62  o store the blob
1b50: 20 6f 66 20 6d 65 6d 6f 72 79 0a 20 20 2a 2a 20   of memory.  ** 
1b60: 72 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69  required for thi
1b70: 73 20 56 64 62 65 43 75 72 73 6f 72 20 73 74 72  s VdbeCursor str
1b80: 75 63 74 75 72 65 2e 20 49 74 20 69 73 20 63 6f  ucture. It is co
1b90: 6e 76 65 6e 69 65 6e 74 20 74 6f 20 75 73 65 20  nvenient to use 
1ba0: 61 20 0a 20 20 2a 2a 20 76 64 62 65 20 6d 65 6d  a .  ** vdbe mem
1bb0: 6f 72 79 20 63 65 6c 6c 20 74 6f 20 6d 61 6e 61  ory cell to mana
1bc0: 67 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c  ge the memory al
1bd0: 6c 6f 63 61 74 69 6f 6e 20 72 65 71 75 69 72 65  location require
1be0: 64 20 66 6f 72 20 61 0a 20 20 2a 2a 20 56 64 62  d for a.  ** Vdb
1bf0: 65 43 75 72 73 6f 72 20 73 74 72 75 63 74 75 72  eCursor structur
1c00: 65 20 66 6f 72 20 74 68 65 20 66 6f 6c 6c 6f 77  e for the follow
1c10: 69 6e 67 20 72 65 61 73 6f 6e 73 3a 0a 20 20 2a  ing reasons:.  *
1c20: 2a 0a 20 20 2a 2a 20 20 20 2a 20 53 6f 6d 65 74  *.  **   * Somet
1c30: 69 6d 65 73 20 63 75 72 73 6f 72 20 6e 75 6d 62  imes cursor numb
1c40: 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f 72  ers are used for
1c50: 20 61 20 63 6f 75 70 6c 65 20 6f 66 20 64 69 66   a couple of dif
1c60: 66 65 72 65 6e 74 0a 20 20 2a 2a 20 20 20 20 20  ferent.  **     
1c70: 70 75 72 70 6f 73 65 73 20 69 6e 20 61 20 76 64  purposes in a vd
1c80: 62 65 20 70 72 6f 67 72 61 6d 2e 20 54 68 65 20  be program. The 
1c90: 64 69 66 66 65 72 65 6e 74 20 75 73 65 73 20 6d  different uses m
1ca0: 69 67 68 74 20 72 65 71 75 69 72 65 0a 20 20 2a  ight require.  *
1cb0: 2a 20 20 20 20 20 64 69 66 66 65 72 65 6e 74 20  *     different 
1cc0: 73 69 7a 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e  sized allocation
1cd0: 73 2e 20 4d 65 6d 6f 72 79 20 63 65 6c 6c 73 20  s. Memory cells 
1ce0: 70 72 6f 76 69 64 65 20 67 72 6f 77 61 62 6c 65  provide growable
1cf0: 0a 20 20 2a 2a 20 20 20 20 20 61 6c 6c 6f 63 61  .  **     alloca
1d00: 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tions..  **.  **
1d10: 20 20 20 2a 20 57 68 65 6e 20 75 73 69 6e 67 20     * When using 
1d20: 45 4e 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41  ENABLE_MEMORY_MA
1d30: 4e 41 47 45 4d 45 4e 54 2c 20 6d 65 6d 6f 72 79  NAGEMENT, memory
1d40: 20 63 65 6c 6c 20 62 75 66 66 65 72 73 20 63 61   cell buffers ca
1d50: 6e 0a 20 20 2a 2a 20 20 20 20 20 62 65 20 66 72  n.  **     be fr
1d60: 65 65 64 20 6c 61 7a 69 6c 79 20 76 69 61 20 74  eed lazily via t
1d70: 68 65 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61  he sqlite3_relea
1d80: 73 65 5f 6d 65 6d 6f 72 79 28 29 20 41 50 49 2e  se_memory() API.
1d90: 20 54 68 69 73 0a 20 20 2a 2a 20 20 20 20 20 6d   This.  **     m
1da0: 69 6e 69 6d 69 7a 65 73 20 74 68 65 20 6e 75 6d  inimizes the num
1db0: 62 65 72 20 6f 66 20 6d 61 6c 6c 6f 63 20 63 61  ber of malloc ca
1dc0: 6c 6c 73 20 6d 61 64 65 20 62 79 20 74 68 65 20  lls made by the 
1dd0: 73 79 73 74 65 6d 2e 0a 20 20 2a 2a 0a 20 20 2a  system..  **.  *
1de0: 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  * The memory cel
1df0: 6c 20 66 6f 72 20 63 75 72 73 6f 72 20 30 20 69  l for cursor 0 i
1e00: 73 20 61 4d 65 6d 5b 30 5d 2e 20 54 68 65 20 72  s aMem[0]. The r
1e10: 65 73 74 20 61 72 65 20 61 6c 6c 6f 63 61 74 65  est are allocate
1e20: 64 20 66 72 6f 6d 0a 20 20 2a 2a 20 74 68 65 20  d from.  ** the 
1e30: 74 6f 70 20 6f 66 20 74 68 65 20 72 65 67 69 73  top of the regis
1e40: 74 65 72 20 73 70 61 63 65 2e 20 20 43 75 72 73  ter space.  Curs
1e50: 6f 72 20 31 20 69 73 20 61 74 20 4d 65 6d 5b 70  or 1 is at Mem[p
1e60: 2d 3e 6e 4d 65 6d 2d 31 5d 2e 0a 20 20 2a 2a 20  ->nMem-1]..  ** 
1e70: 43 75 72 73 6f 72 20 32 20 69 73 20 61 74 20 4d  Cursor 2 is at M
1e80: 65 6d 5b 70 2d 3e 6e 4d 65 6d 2d 32 5d 2e 20 41  em[p->nMem-2]. A
1e90: 6e 64 20 73 6f 20 66 6f 72 74 68 2e 0a 20 20 2a  nd so forth..  *
1ea0: 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 20 3d 20  /.  Mem *pMem = 
1eb0: 69 43 75 72 3e 30 20 3f 20 26 70 2d 3e 61 4d 65  iCur>0 ? &p->aMe
1ec0: 6d 5b 70 2d 3e 6e 4d 65 6d 2d 69 43 75 72 5d 20  m[p->nMem-iCur] 
1ed0: 3a 20 70 2d 3e 61 4d 65 6d 3b 0a 0a 20 20 69 6e  : p->aMem;..  in
1ee0: 74 20 6e 42 79 74 65 3b 0a 20 20 56 64 62 65 43  t nByte;.  VdbeC
1ef0: 75 72 73 6f 72 20 2a 70 43 78 20 3d 20 30 3b 0a  ursor *pCx = 0;.
1f00: 20 20 6e 42 79 74 65 20 3d 20 0a 20 20 20 20 20    nByte = .     
1f10: 20 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56   ROUND8(sizeof(V
1f20: 64 62 65 43 75 72 73 6f 72 29 29 20 2b 20 32 2a  dbeCursor)) + 2*
1f30: 73 69 7a 65 6f 66 28 75 33 32 29 2a 6e 46 69 65  sizeof(u32)*nFie
1f40: 6c 64 20 2b 20 0a 20 20 20 20 20 20 28 65 43 75  ld + .      (eCu
1f50: 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
1f60: 54 52 45 45 3f 73 71 6c 69 74 65 33 42 74 72 65  TREE?sqlite3Btre
1f70: 65 43 75 72 73 6f 72 53 69 7a 65 28 29 3a 30 29  eCursorSize():0)
1f80: 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 69 43 75  ;..  assert( iCu
1f90: 72 3e 3d 30 20 26 26 20 69 43 75 72 3c 70 2d 3e  r>=0 && iCur<p->
1fa0: 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69 66 28  nCursor );.  if(
1fb0: 20 70 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20   p->apCsr[iCur] 
1fc0: 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f  ){ /*OPTIMIZATIO
1fd0: 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20  N-IF-FALSE*/.   
1fe0: 20 73 71 6c 69 74 65 33 56 64 62 65 46 72 65 65   sqlite3VdbeFree
1ff0: 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61 70 43  Cursor(p, p->apC
2000: 73 72 5b 69 43 75 72 5d 29 3b 0a 20 20 20 20 70  sr[iCur]);.    p
2010: 2d 3e 61 70 43 73 72 5b 69 43 75 72 5d 20 3d 20  ->apCsr[iCur] = 
2020: 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20 53 51 4c  0;.  }.  if( SQL
2030: 49 54 45 5f 4f 4b 3d 3d 73 71 6c 69 74 65 33 56  ITE_OK==sqlite3V
2040: 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65  dbeMemClearAndRe
2050: 73 69 7a 65 28 70 4d 65 6d 2c 20 6e 42 79 74 65  size(pMem, nByte
2060: 29 20 29 7b 0a 20 20 20 20 70 2d 3e 61 70 43 73  ) ){.    p->apCs
2070: 72 5b 69 43 75 72 5d 20 3d 20 70 43 78 20 3d 20  r[iCur] = pCx = 
2080: 28 56 64 62 65 43 75 72 73 6f 72 2a 29 70 4d 65  (VdbeCursor*)pMe
2090: 6d 2d 3e 7a 3b 0a 20 20 20 20 6d 65 6d 73 65 74  m->z;.    memset
20a0: 28 70 43 78 2c 20 30 2c 20 6f 66 66 73 65 74 6f  (pCx, 0, offseto
20b0: 66 28 56 64 62 65 43 75 72 73 6f 72 2c 70 41 6c  f(VdbeCursor,pAl
20c0: 74 43 75 72 73 6f 72 29 29 3b 0a 20 20 20 20 70  tCursor));.    p
20d0: 43 78 2d 3e 65 43 75 72 54 79 70 65 20 3d 20 65  Cx->eCurType = e
20e0: 43 75 72 54 79 70 65 3b 0a 20 20 20 20 70 43 78  CurType;.    pCx
20f0: 2d 3e 69 44 62 20 3d 20 69 44 62 3b 0a 20 20 20  ->iDb = iDb;.   
2100: 20 70 43 78 2d 3e 6e 46 69 65 6c 64 20 3d 20 6e   pCx->nField = n
2110: 46 69 65 6c 64 3b 0a 20 20 20 20 70 43 78 2d 3e  Field;.    pCx->
2120: 61 4f 66 66 73 65 74 20 3d 20 26 70 43 78 2d 3e  aOffset = &pCx->
2130: 61 54 79 70 65 5b 6e 46 69 65 6c 64 5d 3b 0a 20  aType[nField];. 
2140: 20 20 20 69 66 28 20 65 43 75 72 54 79 70 65 3d     if( eCurType=
2150: 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
2160: 7b 0a 20 20 20 20 20 20 70 43 78 2d 3e 75 63 2e  {.      pCx->uc.
2170: 70 43 75 72 73 6f 72 20 3d 20 28 42 74 43 75 72  pCursor = (BtCur
2180: 73 6f 72 2a 29 0a 20 20 20 20 20 20 20 20 20 20  sor*).          
2190: 26 70 4d 65 6d 2d 3e 7a 5b 52 4f 55 4e 44 38 28  &pMem->z[ROUND8(
21a0: 73 69 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f  sizeof(VdbeCurso
21b0: 72 29 29 2b 32 2a 73 69 7a 65 6f 66 28 75 33 32  r))+2*sizeof(u32
21c0: 29 2a 6e 46 69 65 6c 64 5d 3b 0a 20 20 20 20 20  )*nField];.     
21d0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72   sqlite3BtreeCur
21e0: 73 6f 72 5a 65 72 6f 28 70 43 78 2d 3e 75 63 2e  sorZero(pCx->uc.
21f0: 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
2200: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 43 78    }.  return pCx
2210: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 79 20 74  ;.}../*.** Try t
2220: 6f 20 63 6f 6e 76 65 72 74 20 61 20 76 61 6c 75  o convert a valu
2230: 65 20 69 6e 74 6f 20 61 20 6e 75 6d 65 72 69 63  e into a numeric
2240: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20   representation 
2250: 69 66 20 77 65 20 63 61 6e 0a 2a 2a 20 64 6f 20  if we can.** do 
2260: 73 6f 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20  so without loss 
2270: 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20  of information. 
2280: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
2290: 20 69 66 20 74 68 65 20 73 74 72 69 6e 67 0a 2a   if the string.*
22a0: 2a 20 6c 6f 6f 6b 73 20 6c 69 6b 65 20 61 20 6e  * looks like a n
22b0: 75 6d 62 65 72 2c 20 63 6f 6e 76 65 72 74 20 69  umber, convert i
22c0: 74 20 69 6e 74 6f 20 61 20 6e 75 6d 62 65 72 2e  t into a number.
22d0: 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74    If it does not
22e0: 0a 2a 2a 20 6c 6f 6f 6b 20 6c 69 6b 65 20 61 20  .** look like a 
22f0: 6e 75 6d 62 65 72 2c 20 6c 65 61 76 65 20 69 74  number, leave it
2300: 20 61 6c 6f 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   alone..**.** If
2310: 20 74 68 65 20 62 54 72 79 46 6f 72 49 6e 74 20   the bTryForInt 
2320: 66 6c 61 67 20 69 73 20 74 72 75 65 2c 20 74 68  flag is true, th
2330: 65 6e 20 65 78 74 72 61 20 65 66 66 6f 72 74 20  en extra effort 
2340: 69 73 20 6d 61 64 65 20 74 6f 20 67 69 76 65 0a  is made to give.
2350: 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 20 72 65  ** an integer re
2360: 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e 20 20 53  presentation.  S
2370: 74 72 69 6e 67 73 20 74 68 61 74 20 6c 6f 6f 6b  trings that look
2380: 20 6c 69 6b 65 20 66 6c 6f 61 74 69 6e 67 20 70   like floating p
2390: 6f 69 6e 74 0a 2a 2a 20 76 61 6c 75 65 73 20 62  oint.** values b
23a0: 75 74 20 77 68 69 63 68 20 68 61 76 65 20 6e 6f  ut which have no
23b0: 20 66 72 61 63 74 69 6f 6e 61 6c 20 63 6f 6d 70   fractional comp
23c0: 6f 6e 65 6e 74 20 28 65 78 61 6d 70 6c 65 3a 20  onent (example: 
23d0: 27 34 38 2e 30 30 27 29 0a 2a 2a 20 77 69 6c 6c  '48.00').** will
23e0: 20 68 61 76 65 20 61 20 4d 45 4d 5f 49 6e 74 20   have a MEM_Int 
23f0: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 77  representation w
2400: 68 65 6e 20 62 54 72 79 46 6f 72 49 6e 74 20 69  hen bTryForInt i
2410: 73 20 74 72 75 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  s true..**.** If
2420: 20 62 54 72 79 46 6f 72 49 6e 74 20 69 73 20 66   bTryForInt is f
2430: 61 6c 73 65 2c 20 74 68 65 6e 20 69 66 20 74 68  alse, then if th
2440: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
2450: 6f 6e 74 61 69 6e 73 20 61 20 64 65 63 69 6d 61  ontains a decima
2460: 6c 0a 2a 2a 20 70 6f 69 6e 74 20 6f 72 20 65 78  l.** point or ex
2470: 70 6f 6e 65 6e 74 69 61 6c 20 6e 6f 74 61 74 69  ponential notati
2480: 6f 6e 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  on, the result i
2490: 73 20 6f 6e 6c 79 20 4d 45 4d 5f 52 65 61 6c 2c  s only MEM_Real,
24a0: 20 65 76 65 6e 0a 2a 2a 20 69 66 20 74 68 65 72   even.** if ther
24b0: 65 20 69 73 20 61 6e 20 65 78 61 63 74 20 69 6e  e is an exact in
24c0: 74 65 67 65 72 20 72 65 70 72 65 73 65 6e 74 61  teger representa
24d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 71 75 61 6e  tion of the quan
24e0: 74 69 74 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  tity..*/.static 
24f0: 76 6f 69 64 20 61 70 70 6c 79 4e 75 6d 65 72 69  void applyNumeri
2500: 63 41 66 66 69 6e 69 74 79 28 4d 65 6d 20 2a 70  cAffinity(Mem *p
2510: 52 65 63 2c 20 69 6e 74 20 62 54 72 79 46 6f 72  Rec, int bTryFor
2520: 49 6e 74 29 7b 0a 20 20 64 6f 75 62 6c 65 20 72  Int){.  double r
2530: 56 61 6c 75 65 3b 0a 20 20 69 36 34 20 69 56 61  Value;.  i64 iVa
2540: 6c 75 65 3b 0a 20 20 75 38 20 65 6e 63 20 3d 20  lue;.  u8 enc = 
2550: 70 52 65 63 2d 3e 65 6e 63 3b 0a 20 20 61 73 73  pRec->enc;.  ass
2560: 65 72 74 28 20 28 70 52 65 63 2d 3e 66 6c 61 67  ert( (pRec->flag
2570: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
2580: 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29 29 3d  _Int|MEM_Real))=
2590: 3d 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 69 66  =MEM_Str );.  if
25a0: 28 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 52  ( sqlite3AtoF(pR
25b0: 65 63 2d 3e 7a 2c 20 26 72 56 61 6c 75 65 2c 20  ec->z, &rValue, 
25c0: 70 52 65 63 2d 3e 6e 2c 20 65 6e 63 29 3d 3d 30  pRec->n, enc)==0
25d0: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28   ) return;.  if(
25e0: 20 30 3d 3d 73 71 6c 69 74 65 33 41 74 6f 69 36   0==sqlite3Atoi6
25f0: 34 28 70 52 65 63 2d 3e 7a 2c 20 26 69 56 61 6c  4(pRec->z, &iVal
2600: 75 65 2c 20 70 52 65 63 2d 3e 6e 2c 20 65 6e 63  ue, pRec->n, enc
2610: 29 20 29 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) ){.    pRec->u
2620: 2e 69 20 3d 20 69 56 61 6c 75 65 3b 0a 20 20 20  .i = iValue;.   
2630: 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20   pRec->flags |= 
2640: 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d 65 6c 73 65  MEM_Int;.  }else
2650: 7b 0a 20 20 20 20 70 52 65 63 2d 3e 75 2e 72 20  {.    pRec->u.r 
2660: 3d 20 72 56 61 6c 75 65 3b 0a 20 20 20 20 70 52  = rValue;.    pR
2670: 65 63 2d 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d  ec->flags |= MEM
2680: 5f 52 65 61 6c 3b 0a 20 20 20 20 69 66 28 20 62  _Real;.    if( b
2690: 54 72 79 46 6f 72 49 6e 74 20 29 20 73 71 6c 69  TryForInt ) sqli
26a0: 74 65 33 56 64 62 65 49 6e 74 65 67 65 72 41 66  te3VdbeIntegerAf
26b0: 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a 20 20  finity(pRec);.  
26c0: 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65  }.}../*.** Proce
26d0: 73 73 69 6e 67 20 69 73 20 64 65 74 65 72 6d 69  ssing is determi
26e0: 6e 65 20 62 79 20 74 68 65 20 61 66 66 69 6e 69  ne by the affini
26f0: 74 79 20 70 61 72 61 6d 65 74 65 72 3a 0a 2a 2a  ty parameter:.**
2700: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  .** SQLITE_AFF_I
2710: 4e 54 45 47 45 52 3a 0a 2a 2a 20 53 51 4c 49 54  NTEGER:.** SQLIT
2720: 45 5f 41 46 46 5f 52 45 41 4c 3a 0a 2a 2a 20 53  E_AFF_REAL:.** S
2730: 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49  QLITE_AFF_NUMERI
2740: 43 3a 0a 2a 2a 20 20 20 20 54 72 79 20 74 6f 20  C:.**    Try to 
2750: 63 6f 6e 76 65 72 74 20 70 52 65 63 20 74 6f 20  convert pRec to 
2760: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
2770: 73 65 6e 74 61 74 69 6f 6e 20 6f 72 20 61 20 0a  sentation or a .
2780: 2a 2a 20 20 20 20 66 6c 6f 61 74 69 6e 67 2d 70  **    floating-p
2790: 6f 69 6e 74 20 72 65 70 72 65 73 65 6e 74 61 74  oint representat
27a0: 69 6f 6e 20 69 66 20 61 6e 20 69 6e 74 65 67 65  ion if an intege
27b0: 72 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  r representation
27c0: 0a 2a 2a 20 20 20 20 69 73 20 6e 6f 74 20 70 6f  .**    is not po
27d0: 73 73 69 62 6c 65 2e 20 20 4e 6f 74 65 20 74 68  ssible.  Note th
27e0: 61 74 20 74 68 65 20 69 6e 74 65 67 65 72 20 72  at the integer r
27f0: 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69 73  epresentation is
2800: 0a 2a 2a 20 20 20 20 61 6c 77 61 79 73 20 70 72  .**    always pr
2810: 65 66 65 72 72 65 64 2c 20 65 76 65 6e 20 69 66  eferred, even if
2820: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 69 73   the affinity is
2830: 20 52 45 41 4c 2c 20 62 65 63 61 75 73 65 0a 2a   REAL, because.*
2840: 2a 20 20 20 20 61 6e 20 69 6e 74 65 67 65 72 20  *    an integer 
2850: 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 69  representation i
2860: 73 20 6d 6f 72 65 20 73 70 61 63 65 20 65 66 66  s more space eff
2870: 69 63 69 65 6e 74 20 6f 6e 20 64 69 73 6b 2e 0a  icient on disk..
2880: 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46  **.** SQLITE_AFF
2890: 5f 54 45 58 54 3a 0a 2a 2a 20 20 20 20 43 6f 6e  _TEXT:.**    Con
28a0: 76 65 72 74 20 70 52 65 63 20 74 6f 20 61 20 74  vert pRec to a t
28b0: 65 78 74 20 72 65 70 72 65 73 65 6e 74 61 74 69  ext representati
28c0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c 49 54 45  on..**.** SQLITE
28d0: 5f 41 46 46 5f 42 4c 4f 42 3a 0a 2a 2a 20 20 20  _AFF_BLOB:.**   
28e0: 20 4e 6f 2d 6f 70 2e 20 20 70 52 65 63 20 69 73   No-op.  pRec is
28f0: 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2f 0a 73   unchanged..*/.s
2900: 74 61 74 69 63 20 76 6f 69 64 20 61 70 70 6c 79  tatic void apply
2910: 41 66 66 69 6e 69 74 79 28 0a 20 20 4d 65 6d 20  Affinity(.  Mem 
2920: 2a 70 52 65 63 2c 20 20 20 20 20 20 20 20 20 20  *pRec,          
2930: 2f 2a 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20  /* The value to 
2940: 61 70 70 6c 79 20 61 66 66 69 6e 69 74 79 20 74  apply affinity t
2950: 6f 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69  o */.  char affi
2960: 6e 69 74 79 2c 20 20 20 20 20 20 2f 2a 20 54 68  nity,      /* Th
2970: 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
2980: 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 75 38   applied */.  u8
2990: 20 65 6e 63 20 20 20 20 20 20 20 20 20 20 20 20   enc            
29a0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 74 65    /* Use this te
29b0: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 29  xt encoding */.)
29c0: 7b 0a 20 20 69 66 28 20 61 66 66 69 6e 69 74 79  {.  if( affinity
29d0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  >=SQLITE_AFF_NUM
29e0: 45 52 49 43 20 29 7b 0a 20 20 20 20 61 73 73 65  ERIC ){.    asse
29f0: 72 74 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  rt( affinity==SQ
2a00: 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52  LITE_AFF_INTEGER
2a10: 20 7c 7c 20 61 66 66 69 6e 69 74 79 3d 3d 53 51   || affinity==SQ
2a20: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 0a 20 20  LITE_AFF_REAL.  
2a30: 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 61 66             || af
2a40: 66 69 6e 69 74 79 3d 3d 53 51 4c 49 54 45 5f 41  finity==SQLITE_A
2a50: 46 46 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20  FF_NUMERIC );.  
2a60: 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66 6c 61    if( (pRec->fla
2a70: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
2a80: 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49   ){ /*OPTIMIZATI
2a90: 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20  ON-IF-FALSE*/.  
2aa0: 20 20 20 20 69 66 28 20 28 70 52 65 63 2d 3e 66      if( (pRec->f
2ab0: 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29  lags & MEM_Real)
2ac0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 69  ==0 ){.        i
2ad0: 66 28 20 70 52 65 63 2d 3e 66 6c 61 67 73 20 26  f( pRec->flags &
2ae0: 20 4d 45 4d 5f 53 74 72 20 29 20 61 70 70 6c 79   MEM_Str ) apply
2af0: 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
2b00: 70 52 65 63 2c 31 29 3b 0a 20 20 20 20 20 20 7d  pRec,1);.      }
2b10: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
2b20: 6c 69 74 65 33 56 64 62 65 49 6e 74 65 67 65 72  lite3VdbeInteger
2b30: 41 66 66 69 6e 69 74 79 28 70 52 65 63 29 3b 0a  Affinity(pRec);.
2b40: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
2b50: 7d 65 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69  }else if( affini
2b60: 74 79 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54  ty==SQLITE_AFF_T
2b70: 45 58 54 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  EXT ){.    /* On
2b80: 6c 79 20 61 74 74 65 6d 70 74 20 74 68 65 20 63  ly attempt the c
2b90: 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 54 45 58  onversion to TEX
2ba0: 54 20 69 66 20 74 68 65 72 65 20 69 73 20 61 6e  T if there is an
2bb0: 20 69 6e 74 65 67 65 72 20 6f 72 20 72 65 61 6c   integer or real
2bc0: 0a 20 20 20 20 2a 2a 20 72 65 70 72 65 73 65 6e  .    ** represen
2bd0: 74 61 74 69 6f 6e 20 28 62 6c 6f 62 20 61 6e 64  tation (blob and
2be0: 20 4e 55 4c 4c 20 64 6f 20 6e 6f 74 20 67 65 74   NULL do not get
2bf0: 20 63 6f 6e 76 65 72 74 65 64 29 20 62 75 74 20   converted) but 
2c00: 6e 6f 20 73 74 72 69 6e 67 0a 20 20 20 20 2a 2a  no string.    **
2c10: 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 2e   representation.
2c20: 20 20 49 74 20 77 6f 75 6c 64 20 62 65 20 68 61    It would be ha
2c30: 72 6d 6c 65 73 73 20 74 6f 20 72 65 70 65 61 74  rmless to repeat
2c40: 20 74 68 65 20 63 6f 6e 76 65 72 73 69 6f 6e 20   the conversion 
2c50: 69 66 20 0a 20 20 20 20 2a 2a 20 74 68 65 72 65  if .    ** there
2c60: 20 69 73 20 61 6c 72 65 61 64 79 20 61 20 73 74   is already a st
2c70: 72 69 6e 67 20 72 65 70 2c 20 62 75 74 20 69 74  ring rep, but it
2c80: 20 69 73 20 70 6f 69 6e 74 6c 65 73 73 20 74 6f   is pointless to
2c90: 20 77 61 73 74 65 20 74 68 6f 73 65 0a 20 20 20   waste those.   
2ca0: 20 2a 2a 20 43 50 55 20 63 79 63 6c 65 73 2e 20   ** CPU cycles. 
2cb0: 2a 2f 0a 20 20 20 20 69 66 28 20 30 3d 3d 28 70  */.    if( 0==(p
2cc0: 52 65 63 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 53  Rec->flags&MEM_S
2cd0: 74 72 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a  tr) ){ /*OPTIMIZ
2ce0: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f  ATION-IF-FALSE*/
2cf0: 0a 20 20 20 20 20 20 69 66 28 20 28 70 52 65 63  .      if( (pRec
2d00: 2d 3e 66 6c 61 67 73 26 28 4d 45 4d 5f 52 65 61  ->flags&(MEM_Rea
2d10: 6c 7c 4d 45 4d 5f 49 6e 74 29 29 20 29 7b 0a 20  l|MEM_Int)) ){. 
2d20: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
2d30: 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
2d40: 52 65 63 2c 20 65 6e 63 2c 20 31 29 3b 0a 20 20  Rec, enc, 1);.  
2d50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
2d60: 70 52 65 63 2d 3e 66 6c 61 67 73 20 26 3d 20 7e  pRec->flags &= ~
2d70: 28 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 49 6e  (MEM_Real|MEM_In
2d80: 74 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a 2a 2a  t);.  }.}../*.**
2d90: 20 54 72 79 20 74 6f 20 63 6f 6e 76 65 72 74 20   Try to convert 
2da0: 74 68 65 20 74 79 70 65 20 6f 66 20 61 20 66 75  the type of a fu
2db0: 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 20  nction argument 
2dc0: 6f 72 20 61 20 72 65 73 75 6c 74 20 63 6f 6c 75  or a result colu
2dd0: 6d 6e 0a 2a 2a 20 69 6e 74 6f 20 61 20 6e 75 6d  mn.** into a num
2de0: 65 72 69 63 20 72 65 70 72 65 73 65 6e 74 61 74  eric representat
2df0: 69 6f 6e 2e 20 20 55 73 65 20 65 69 74 68 65 72  ion.  Use either
2e00: 20 49 4e 54 45 47 45 52 20 6f 72 20 52 45 41 4c   INTEGER or REAL
2e10: 20 77 68 69 63 68 65 76 65 72 0a 2a 2a 20 69 73   whichever.** is
2e20: 20 61 70 70 72 6f 70 72 69 61 74 65 2e 20 20 42   appropriate.  B
2e30: 75 74 20 6f 6e 6c 79 20 64 6f 20 74 68 65 20 63  ut only do the c
2e40: 6f 6e 76 65 72 73 69 6f 6e 20 69 66 20 69 74 20  onversion if it 
2e50: 69 73 20 70 6f 73 73 69 62 6c 65 20 77 69 74 68  is possible with
2e60: 6f 75 74 0a 2a 2a 20 6c 6f 73 73 20 6f 66 20 69  out.** loss of i
2e70: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 6e 64 20 72  nformation and r
2e80: 65 74 75 72 6e 20 74 68 65 20 72 65 76 69 73 65  eturn the revise
2e90: 64 20 74 79 70 65 20 6f 66 20 74 68 65 20 61 72  d type of the ar
2ea0: 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73  gument..*/.int s
2eb0: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 6e 75 6d  qlite3_value_num
2ec0: 65 72 69 63 5f 74 79 70 65 28 73 71 6c 69 74 65  eric_type(sqlite
2ed0: 33 5f 76 61 6c 75 65 20 2a 70 56 61 6c 29 7b 0a  3_value *pVal){.
2ee0: 20 20 69 6e 74 20 65 54 79 70 65 20 3d 20 73 71    int eType = sq
2ef0: 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70 65  lite3_value_type
2f00: 28 70 56 61 6c 29 3b 0a 20 20 69 66 28 20 65 54  (pVal);.  if( eT
2f10: 79 70 65 3d 3d 53 51 4c 49 54 45 5f 54 45 58 54  ype==SQLITE_TEXT
2f20: 20 29 7b 0a 20 20 20 20 4d 65 6d 20 2a 70 4d 65   ){.    Mem *pMe
2f30: 6d 20 3d 20 28 4d 65 6d 2a 29 70 56 61 6c 3b 0a  m = (Mem*)pVal;.
2f40: 20 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63      applyNumeric
2f50: 41 66 66 69 6e 69 74 79 28 70 4d 65 6d 2c 20 30  Affinity(pMem, 0
2f60: 29 3b 0a 20 20 20 20 65 54 79 70 65 20 3d 20 73  );.    eType = s
2f70: 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 79 70  qlite3_value_typ
2f80: 65 28 70 56 61 6c 29 3b 0a 20 20 7d 0a 20 20 72  e(pVal);.  }.  r
2f90: 65 74 75 72 6e 20 65 54 79 70 65 3b 0a 7d 0a 0a  eturn eType;.}..
2fa0: 2f 2a 0a 2a 2a 20 45 78 70 6f 72 74 65 64 20 76  /*.** Exported v
2fb0: 65 72 73 69 6f 6e 20 6f 66 20 61 70 70 6c 79 41  ersion of applyA
2fc0: 66 66 69 6e 69 74 79 28 29 2e 20 54 68 69 73 20  ffinity(). This 
2fd0: 6f 6e 65 20 77 6f 72 6b 73 20 6f 6e 20 73 71 6c  one works on sql
2fe0: 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 0a 2a 2a  ite3_value*, .**
2ff0: 20 6e 6f 74 20 74 68 65 20 69 6e 74 65 72 6e 61   not the interna
3000: 6c 20 4d 65 6d 2a 20 74 79 70 65 2e 0a 2a 2f 0a  l Mem* type..*/.
3010: 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
3020: 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 0a  eApplyAffinity(.
3030: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
3040: 2a 70 56 61 6c 2c 20 0a 20 20 75 38 20 61 66 66  *pVal, .  u8 aff
3050: 69 6e 69 74 79 2c 20 0a 20 20 75 38 20 65 6e 63  inity, .  u8 enc
3060: 0a 29 7b 0a 20 20 61 70 70 6c 79 41 66 66 69 6e  .){.  applyAffin
3070: 69 74 79 28 28 4d 65 6d 20 2a 29 70 56 61 6c 2c  ity((Mem *)pVal,
3080: 20 61 66 66 69 6e 69 74 79 2c 20 65 6e 63 29 3b   affinity, enc);
3090: 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 70 4d 65 6d 20 63  .}../*.** pMem c
30a0: 75 72 72 65 6e 74 6c 79 20 6f 6e 6c 79 20 68 6f  urrently only ho
30b0: 6c 64 73 20 61 20 73 74 72 69 6e 67 20 74 79 70  lds a string typ
30c0: 65 20 28 6f 72 20 6d 61 79 62 65 20 61 20 42 4c  e (or maybe a BL
30d0: 4f 42 20 74 68 61 74 20 77 65 20 63 61 6e 0a 2a  OB that we can.*
30e0: 2a 20 69 6e 74 65 72 70 72 65 74 20 61 73 20 61  * interpret as a
30f0: 20 73 74 72 69 6e 67 20 69 66 20 77 65 20 77 61   string if we wa
3100: 6e 74 20 74 6f 29 2e 20 20 43 6f 6d 70 75 74 65  nt to).  Compute
3110: 20 69 74 73 20 63 6f 72 72 65 73 70 6f 6e 64 69   its correspondi
3120: 6e 67 0a 2a 2a 20 6e 75 6d 65 72 69 63 20 74 79  ng.** numeric ty
3130: 70 65 2c 20 69 66 20 68 61 73 20 6f 6e 65 2e 20  pe, if has one. 
3140: 20 53 65 74 20 74 68 65 20 70 4d 65 6d 2d 3e 75   Set the pMem->u
3150: 2e 72 20 61 6e 64 20 70 4d 65 6d 2d 3e 75 2e 69  .r and pMem->u.i
3160: 20 66 69 65 6c 64 73 0a 2a 2a 20 61 63 63 6f 72   fields.** accor
3170: 64 69 6e 67 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69  dingly..*/.stati
3180: 63 20 75 31 36 20 53 51 4c 49 54 45 5f 4e 4f 49  c u16 SQLITE_NOI
3190: 4e 4c 49 4e 45 20 63 6f 6d 70 75 74 65 4e 75 6d  NLINE computeNum
31a0: 65 72 69 63 54 79 70 65 28 4d 65 6d 20 2a 70 4d  ericType(Mem *pM
31b0: 65 6d 29 7b 0a 20 20 61 73 73 65 72 74 28 20 28  em){.  assert( (
31c0: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
31d0: 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
31e0: 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  )==0 );.  assert
31f0: 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
3200: 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c   (MEM_Str|MEM_Bl
3210: 6f 62 29 29 21 3d 30 20 29 3b 0a 20 20 69 66 28  ob))!=0 );.  if(
3220: 20 73 71 6c 69 74 65 33 41 74 6f 46 28 70 4d 65   sqlite3AtoF(pMe
3230: 6d 2d 3e 7a 2c 20 26 70 4d 65 6d 2d 3e 75 2e 72  m->z, &pMem->u.r
3240: 2c 20 70 4d 65 6d 2d 3e 6e 2c 20 70 4d 65 6d 2d  , pMem->n, pMem-
3250: 3e 65 6e 63 29 3d 3d 30 20 29 7b 0a 20 20 20 20  >enc)==0 ){.    
3260: 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20 20  return 0;.  }.  
3270: 69 66 28 20 73 71 6c 69 74 65 33 41 74 6f 69 36  if( sqlite3Atoi6
3280: 34 28 70 4d 65 6d 2d 3e 7a 2c 20 26 70 4d 65 6d  4(pMem->z, &pMem
3290: 2d 3e 75 2e 69 2c 20 70 4d 65 6d 2d 3e 6e 2c 20  ->u.i, pMem->n, 
32a0: 70 4d 65 6d 2d 3e 65 6e 63 29 3d 3d 53 51 4c 49  pMem->enc)==SQLI
32b0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65 74  TE_OK ){.    ret
32c0: 75 72 6e 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 7d  urn MEM_Int;.  }
32d0: 0a 20 20 72 65 74 75 72 6e 20 4d 45 4d 5f 52 65  .  return MEM_Re
32e0: 61 6c 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  al;.}../*.** Ret
32f0: 75 72 6e 20 74 68 65 20 6e 75 6d 65 72 69 63 20  urn the numeric 
3300: 74 79 70 65 20 66 6f 72 20 70 4d 65 6d 2c 20 65  type for pMem, e
3310: 69 74 68 65 72 20 4d 45 4d 5f 49 6e 74 20 6f 72  ither MEM_Int or
3320: 20 4d 45 4d 5f 52 65 61 6c 20 6f 72 20 62 6f 74   MEM_Real or bot
3330: 68 20 6f 72 0a 2a 2a 20 6e 6f 6e 65 2e 20 20 0a  h or.** none.  .
3340: 2a 2a 0a 2a 2a 20 55 6e 6c 69 6b 65 20 61 70 70  **.** Unlike app
3350: 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
3360: 79 28 29 2c 20 74 68 69 73 20 72 6f 75 74 69 6e  y(), this routin
3370: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 6f 64 69 66  e does not modif
3380: 79 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 2e 0a 2a  y pMem->flags..*
3390: 2a 20 42 75 74 20 69 74 20 64 6f 65 73 20 73 65  * But it does se
33a0: 74 20 70 4d 65 6d 2d 3e 75 2e 72 20 61 6e 64 20  t pMem->u.r and 
33b0: 70 4d 65 6d 2d 3e 75 2e 69 20 61 70 70 72 6f 70  pMem->u.i approp
33c0: 72 69 61 74 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  riately..*/.stat
33d0: 69 63 20 75 31 36 20 6e 75 6d 65 72 69 63 54 79  ic u16 numericTy
33e0: 70 65 28 4d 65 6d 20 2a 70 4d 65 6d 29 7b 0a 20  pe(Mem *pMem){. 
33f0: 20 69 66 28 20 70 4d 65 6d 2d 3e 66 6c 61 67 73   if( pMem->flags
3400: 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
3410: 52 65 61 6c 29 20 29 7b 0a 20 20 20 20 72 65 74  Real) ){.    ret
3420: 75 72 6e 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20  urn pMem->flags 
3430: 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
3440: 65 61 6c 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  eal);.  }.  if( 
3450: 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26 20 28 4d  pMem->flags & (M
3460: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29  EM_Str|MEM_Blob)
3470: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 63   ){.    return c
3480: 6f 6d 70 75 74 65 4e 75 6d 65 72 69 63 54 79 70  omputeNumericTyp
3490: 65 28 70 4d 65 6d 29 3b 0a 20 20 7d 0a 20 20 72  e(pMem);.  }.  r
34a0: 65 74 75 72 6e 20 30 3b 0a 7d 0a 0a 23 69 66 64  eturn 0;.}..#ifd
34b0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
34c0: 2f 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 6e 69  /*.** Write a ni
34d0: 63 65 20 73 74 72 69 6e 67 20 72 65 70 72 65 73  ce string repres
34e0: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  entation of the 
34f0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 63 65 6c 6c  contents of cell
3500: 20 70 4d 65 6d 0a 2a 2a 20 69 6e 74 6f 20 62 75   pMem.** into bu
3510: 66 66 65 72 20 7a 42 75 66 2c 20 6c 65 6e 67 74  ffer zBuf, lengt
3520: 68 20 6e 42 75 66 2e 0a 2a 2f 0a 76 6f 69 64 20  h nBuf..*/.void 
3530: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 50 72  sqlite3VdbeMemPr
3540: 65 74 74 79 50 72 69 6e 74 28 4d 65 6d 20 2a 70  ettyPrint(Mem *p
3550: 4d 65 6d 2c 20 63 68 61 72 20 2a 7a 42 75 66 29  Mem, char *zBuf)
3560: 7b 0a 20 20 63 68 61 72 20 2a 7a 43 73 72 20 3d  {.  char *zCsr =
3570: 20 7a 42 75 66 3b 0a 20 20 69 6e 74 20 66 20 3d   zBuf;.  int f =
3580: 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 3b 0a 0a 20   pMem->flags;.. 
3590: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
35a0: 61 72 20 2a 63 6f 6e 73 74 20 65 6e 63 6e 61 6d  ar *const encnam
35b0: 65 73 5b 5d 20 3d 20 7b 22 28 58 29 22 2c 20 22  es[] = {"(X)", "
35c0: 28 38 29 22 2c 20 22 28 31 36 4c 45 29 22 2c 20  (8)", "(16LE)", 
35d0: 22 28 31 36 42 45 29 22 7d 3b 0a 0a 20 20 69 66  "(16BE)"};..  if
35e0: 28 20 66 26 4d 45 4d 5f 42 6c 6f 62 20 29 7b 0a  ( f&MEM_Blob ){.
35f0: 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 63      int i;.    c
3600: 68 61 72 20 63 3b 0a 20 20 20 20 69 66 28 20 66  har c;.    if( f
3610: 20 26 20 4d 45 4d 5f 44 79 6e 20 29 7b 0a 20 20   & MEM_Dyn ){.  
3620: 20 20 20 20 63 20 3d 20 27 7a 27 3b 0a 20 20 20      c = 'z';.   
3630: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
3640: 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f  (MEM_Static|MEM_
3650: 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20  Ephem))==0 );.  
3660: 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26 20    }else if( f & 
3670: 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20 20  MEM_Static ){.  
3680: 20 20 20 20 63 20 3d 20 27 74 27 3b 0a 20 20 20      c = 't';.   
3690: 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26 20     assert( (f & 
36a0: 28 4d 45 4d 5f 44 79 6e 7c 4d 45 4d 5f 45 70 68  (MEM_Dyn|MEM_Eph
36b0: 65 6d 29 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d  em))==0 );.    }
36c0: 65 6c 73 65 20 69 66 28 20 66 20 26 20 4d 45 4d  else if( f & MEM
36d0: 5f 45 70 68 65 6d 20 29 7b 0a 20 20 20 20 20 20  _Ephem ){.      
36e0: 63 20 3d 20 27 65 27 3b 0a 20 20 20 20 20 20 61  c = 'e';.      a
36f0: 73 73 65 72 74 28 20 28 66 20 26 20 28 4d 45 4d  ssert( (f & (MEM
3700: 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29  _Static|MEM_Dyn)
3710: 29 3d 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73  )==0 );.    }els
3720: 65 7b 0a 20 20 20 20 20 20 63 20 3d 20 27 73 27  e{.      c = 's'
3730: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3740: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3750: 30 2c 20 7a 43 73 72 2c 20 22 25 63 22 2c 20 63  0, zCsr, "%c", c
3760: 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b 3d 20 73  );.    zCsr += s
3770: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
3780: 43 73 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  Csr);.    sqlite
3790: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
37a0: 7a 43 73 72 2c 20 22 25 64 5b 22 2c 20 70 4d 65  zCsr, "%d[", pMe
37b0: 6d 2d 3e 6e 29 3b 0a 20 20 20 20 7a 43 73 72 20  m->n);.    zCsr 
37c0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
37d0: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 66 6f  30(zCsr);.    fo
37e0: 72 28 69 3d 30 3b 20 69 3c 31 36 20 26 26 20 69  r(i=0; i<16 && i
37f0: 3c 70 4d 65 6d 2d 3e 6e 3b 20 69 2b 2b 29 7b 0a  <pMem->n; i++){.
3800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e        sqlite3_sn
3810: 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73 72  printf(100, zCsr
3820: 2c 20 22 25 30 32 58 22 2c 20 28 28 69 6e 74 29  , "%02X", ((int)
3830: 70 4d 65 6d 2d 3e 7a 5b 69 5d 20 26 20 30 78 46  pMem->z[i] & 0xF
3840: 46 29 29 3b 0a 20 20 20 20 20 20 7a 43 73 72 20  F));.      zCsr 
3850: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3860: 33 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 7d 0a  30(zCsr);.    }.
3870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 31      for(i=0; i<1
3880: 36 20 26 26 20 69 3c 70 4d 65 6d 2d 3e 6e 3b 20  6 && i<pMem->n; 
3890: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 63 68 61 72  i++){.      char
38a0: 20 7a 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 69 5d 3b   z = pMem->z[i];
38b0: 0a 20 20 20 20 20 20 69 66 28 20 7a 3c 33 32 20  .      if( z<32 
38c0: 7c 7c 20 7a 3e 31 32 36 20 29 20 2a 7a 43 73 72  || z>126 ) *zCsr
38d0: 2b 2b 20 3d 20 27 2e 27 3b 0a 20 20 20 20 20 20  ++ = '.';.      
38e0: 65 6c 73 65 20 2a 7a 43 73 72 2b 2b 20 3d 20 7a  else *zCsr++ = z
38f0: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 73 71 6c  ;.    }..    sql
3900: 69 74 65 33 5f 73 6e 70 72 69 6e 74 66 28 31 30  ite3_snprintf(10
3910: 30 2c 20 7a 43 73 72 2c 20 22 5d 25 73 22 2c 20  0, zCsr, "]%s", 
3920: 65 6e 63 6e 61 6d 65 73 5b 70 4d 65 6d 2d 3e 65  encnames[pMem->e
3930: 6e 63 5d 29 3b 0a 20 20 20 20 7a 43 73 72 20 2b  nc]);.    zCsr +
3940: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
3950: 30 28 7a 43 73 72 29 3b 0a 20 20 20 20 69 66 28  0(zCsr);.    if(
3960: 20 66 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b   f & MEM_Zero ){
3970: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
3980: 6e 70 72 69 6e 74 66 28 31 30 30 2c 20 7a 43 73  nprintf(100, zCs
3990: 72 2c 22 2b 25 64 7a 22 2c 70 4d 65 6d 2d 3e 75  r,"+%dz",pMem->u
39a0: 2e 6e 5a 65 72 6f 29 3b 0a 20 20 20 20 20 20 7a  .nZero);.      z
39b0: 43 73 72 20 2b 3d 20 73 71 6c 69 74 65 33 53 74  Csr += sqlite3St
39c0: 72 6c 65 6e 33 30 28 7a 43 73 72 29 3b 0a 20 20  rlen30(zCsr);.  
39d0: 20 20 7d 0a 20 20 20 20 2a 7a 43 73 72 20 3d 20    }.    *zCsr = 
39e0: 27 5c 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66  '\0';.  }else if
39f0: 28 20 66 20 26 20 4d 45 4d 5f 53 74 72 20 29 7b  ( f & MEM_Str ){
3a00: 0a 20 20 20 20 69 6e 74 20 6a 2c 20 6b 3b 0a 20  .    int j, k;. 
3a10: 20 20 20 7a 42 75 66 5b 30 5d 20 3d 20 27 20 27     zBuf[0] = ' '
3a20: 3b 0a 20 20 20 20 69 66 28 20 66 20 26 20 4d 45  ;.    if( f & ME
3a30: 4d 5f 44 79 6e 20 29 7b 0a 20 20 20 20 20 20 7a  M_Dyn ){.      z
3a40: 42 75 66 5b 31 5d 20 3d 20 27 7a 27 3b 0a 20 20  Buf[1] = 'z';.  
3a50: 20 20 20 20 61 73 73 65 72 74 28 20 28 66 20 26      assert( (f &
3a60: 20 28 4d 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d   (MEM_Static|MEM
3a70: 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29 3b 0a 20  _Ephem))==0 );. 
3a80: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 66 20 26     }else if( f &
3a90: 20 4d 45 4d 5f 53 74 61 74 69 63 20 29 7b 0a 20   MEM_Static ){. 
3aa0: 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20 27       zBuf[1] = '
3ab0: 74 27 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  t';.      assert
3ac0: 28 20 28 66 20 26 20 28 4d 45 4d 5f 44 79 6e 7c  ( (f & (MEM_Dyn|
3ad0: 4d 45 4d 5f 45 70 68 65 6d 29 29 3d 3d 30 20 29  MEM_Ephem))==0 )
3ae0: 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20  ;.    }else if( 
3af0: 66 20 26 20 4d 45 4d 5f 45 70 68 65 6d 20 29 7b  f & MEM_Ephem ){
3b00: 0a 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d  .      zBuf[1] =
3b10: 20 27 65 27 3b 0a 20 20 20 20 20 20 61 73 73 65   'e';.      asse
3b20: 72 74 28 20 28 66 20 26 20 28 4d 45 4d 5f 53 74  rt( (f & (MEM_St
3b30: 61 74 69 63 7c 4d 45 4d 5f 44 79 6e 29 29 3d 3d  atic|MEM_Dyn))==
3b40: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
3b50: 20 20 20 20 20 20 7a 42 75 66 5b 31 5d 20 3d 20        zBuf[1] = 
3b60: 27 73 27 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6b  's';.    }.    k
3b70: 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
3b80: 33 5f 73 6e 70 72 69 6e 74 66 28 31 30 30 2c 20  3_snprintf(100, 
3b90: 26 7a 42 75 66 5b 6b 5d 2c 20 22 25 64 22 2c 20  &zBuf[k], "%d", 
3ba0: 70 4d 65 6d 2d 3e 6e 29 3b 0a 20 20 20 20 6b 20  pMem->n);.    k 
3bb0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3bc0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3bd0: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5b    zBuf[k++] = '[
3be0: 27 3b 0a 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20  ';.    for(j=0; 
3bf0: 6a 3c 31 35 20 26 26 20 6a 3c 70 4d 65 6d 2d 3e  j<15 && j<pMem->
3c00: 6e 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 75  n; j++){.      u
3c10: 38 20 63 20 3d 20 70 4d 65 6d 2d 3e 7a 5b 6a 5d  8 c = pMem->z[j]
3c20: 3b 0a 20 20 20 20 20 20 69 66 28 20 63 3e 3d 30  ;.      if( c>=0
3c30: 78 32 30 20 26 26 20 63 3c 30 78 37 66 20 29 7b  x20 && c<0x7f ){
3c40: 0a 20 20 20 20 20 20 20 20 7a 42 75 66 5b 6b 2b  .        zBuf[k+
3c50: 2b 5d 20 3d 20 63 3b 0a 20 20 20 20 20 20 7d 65  +] = c;.      }e
3c60: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 7a 42 75  lse{.        zBu
3c70: 66 5b 6b 2b 2b 5d 20 3d 20 27 2e 27 3b 0a 20 20  f[k++] = '.';.  
3c80: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
3c90: 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 27 5d 27 3b  zBuf[k++] = ']';
3ca0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6e 70  .    sqlite3_snp
3cb0: 72 69 6e 74 66 28 31 30 30 2c 26 7a 42 75 66 5b  rintf(100,&zBuf[
3cc0: 6b 5d 2c 20 65 6e 63 6e 61 6d 65 73 5b 70 4d 65  k], encnames[pMe
3cd0: 6d 2d 3e 65 6e 63 5d 29 3b 0a 20 20 20 20 6b 20  m->enc]);.    k 
3ce0: 2b 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  += sqlite3Strlen
3cf0: 33 30 28 26 7a 42 75 66 5b 6b 5d 29 3b 0a 20 20  30(&zBuf[k]);.  
3d00: 20 20 7a 42 75 66 5b 6b 2b 2b 5d 20 3d 20 30 3b    zBuf[k++] = 0;
3d10: 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23  .  }.}.#endif..#
3d20: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
3d30: 55 47 0a 2f 2a 0a 2a 2a 20 50 72 69 6e 74 20 74  UG./*.** Print t
3d40: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 72 65  he value of a re
3d50: 67 69 73 74 65 72 20 66 6f 72 20 74 72 61 63 69  gister for traci
3d60: 6e 67 20 70 75 72 70 6f 73 65 73 3a 0a 2a 2f 0a  ng purposes:.*/.
3d70: 73 74 61 74 69 63 20 76 6f 69 64 20 6d 65 6d 54  static void memT
3d80: 72 61 63 65 50 72 69 6e 74 28 4d 65 6d 20 2a 70  racePrint(Mem *p
3d90: 29 7b 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67  ){.  if( p->flag
3da0: 73 20 26 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65  s & MEM_Undefine
3db0: 64 20 29 7b 0a 20 20 20 20 70 72 69 6e 74 66 28  d ){.    printf(
3dc0: 22 20 75 6e 64 65 66 69 6e 65 64 22 29 3b 0a 20  " undefined");. 
3dd0: 20 7d 65 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c   }else if( p->fl
3de0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
3df0: 7b 0a 20 20 20 20 70 72 69 6e 74 66 28 22 20 4e  {.    printf(" N
3e00: 55 4c 4c 22 29 3b 0a 20 20 7d 65 6c 73 65 20 69  ULL");.  }else i
3e10: 66 28 20 28 70 2d 3e 66 6c 61 67 73 20 26 20 28  f( (p->flags & (
3e20: 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 53 74 72 29  MEM_Int|MEM_Str)
3e30: 29 3d 3d 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f  )==(MEM_Int|MEM_
3e40: 53 74 72 29 20 29 7b 0a 20 20 20 20 70 72 69 6e  Str) ){.    prin
3e50: 74 66 28 22 20 73 69 3a 25 6c 6c 64 22 2c 20 70  tf(" si:%lld", p
3e60: 2d 3e 75 2e 69 29 3b 0a 20 20 7d 65 6c 73 65 20  ->u.i);.  }else 
3e70: 69 66 28 20 70 2d 3e 66 6c 61 67 73 20 26 20 4d  if( p->flags & M
3e80: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 70 72  EM_Int ){.    pr
3e90: 69 6e 74 66 28 22 20 69 3a 25 6c 6c 64 22 2c 20  intf(" i:%lld", 
3ea0: 70 2d 3e 75 2e 69 29 3b 0a 23 69 66 6e 64 65 66  p->u.i);.#ifndef
3eb0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
3ec0: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 7d 65  ATING_POINT.  }e
3ed0: 6c 73 65 20 69 66 28 20 70 2d 3e 66 6c 61 67 73  lse if( p->flags
3ee0: 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 7b 0a 20   & MEM_Real ){. 
3ef0: 20 20 20 70 72 69 6e 74 66 28 22 20 72 3a 25 67     printf(" r:%g
3f00: 22 2c 20 70 2d 3e 75 2e 72 29 3b 0a 23 65 6e 64  ", p->u.r);.#end
3f10: 69 66 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  if.  }else if( p
3f20: 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
3f30: 77 53 65 74 20 29 7b 0a 20 20 20 20 70 72 69 6e  wSet ){.    prin
3f40: 74 66 28 22 20 28 72 6f 77 73 65 74 29 22 29 3b  tf(" (rowset)");
3f50: 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 63 68  .  }else{.    ch
3f60: 61 72 20 7a 42 75 66 5b 32 30 30 5d 3b 0a 20 20  ar zBuf[200];.  
3f70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
3f80: 50 72 65 74 74 79 50 72 69 6e 74 28 70 2c 20 7a  PrettyPrint(p, z
3f90: 42 75 66 29 3b 0a 20 20 20 20 70 72 69 6e 74 66  Buf);.    printf
3fa0: 28 22 20 25 73 22 2c 20 7a 42 75 66 29 3b 0a 20  (" %s", zBuf);. 
3fb0: 20 7d 0a 20 20 69 66 28 20 70 2d 3e 66 6c 61 67   }.  if( p->flag
3fc0: 73 20 26 20 4d 45 4d 5f 53 75 62 74 79 70 65 20  s & MEM_Subtype 
3fd0: 29 20 70 72 69 6e 74 66 28 22 20 73 75 62 74 79  ) printf(" subty
3fe0: 70 65 3d 30 78 25 30 32 78 22 2c 20 70 2d 3e 65  pe=0x%02x", p->e
3ff0: 53 75 62 74 79 70 65 29 3b 0a 7d 0a 73 74 61 74  Subtype);.}.stat
4000: 69 63 20 76 6f 69 64 20 72 65 67 69 73 74 65 72  ic void register
4010: 54 72 61 63 65 28 69 6e 74 20 69 52 65 67 2c 20  Trace(int iReg, 
4020: 4d 65 6d 20 2a 70 29 7b 0a 20 20 70 72 69 6e 74  Mem *p){.  print
4030: 66 28 22 52 45 47 5b 25 64 5d 20 3d 20 22 2c 20  f("REG[%d] = ", 
4040: 69 52 65 67 29 3b 0a 20 20 6d 65 6d 54 72 61 63  iReg);.  memTrac
4050: 65 50 72 69 6e 74 28 70 29 3b 0a 20 20 70 72 69  ePrint(p);.  pri
4060: 6e 74 66 28 22 5c 6e 22 29 3b 0a 7d 0a 23 65 6e  ntf("\n");.}.#en
4070: 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
4080: 54 45 5f 44 45 42 55 47 0a 23 20 20 64 65 66 69  TE_DEBUG.#  defi
4090: 6e 65 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  ne REGISTER_TRAC
40a0: 45 28 52 2c 4d 29 20 69 66 28 64 62 2d 3e 66 6c  E(R,M) if(db->fl
40b0: 61 67 73 26 53 51 4c 49 54 45 5f 56 64 62 65 54  ags&SQLITE_VdbeT
40c0: 72 61 63 65 29 72 65 67 69 73 74 65 72 54 72 61  race)registerTra
40d0: 63 65 28 52 2c 4d 29 0a 23 65 6c 73 65 0a 23 20  ce(R,M).#else.# 
40e0: 20 64 65 66 69 6e 65 20 52 45 47 49 53 54 45 52   define REGISTER
40f0: 5f 54 52 41 43 45 28 52 2c 4d 29 0a 23 65 6e 64  _TRACE(R,M).#end
4100: 69 66 0a 0a 0a 23 69 66 64 65 66 20 56 44 42 45  if...#ifdef VDBE
4110: 5f 50 52 4f 46 49 4c 45 0a 0a 2f 2a 20 0a 2a 2a  _PROFILE../* .**
4120: 20 68 77 74 69 6d 65 2e 68 20 63 6f 6e 74 61 69   hwtime.h contai
4130: 6e 73 20 69 6e 6c 69 6e 65 20 61 73 73 65 6d 62  ns inline assemb
4140: 6c 65 72 20 63 6f 64 65 20 66 6f 72 20 69 6d 70  ler code for imp
4150: 6c 65 6d 65 6e 74 69 6e 67 20 0a 2a 2a 20 68 69  lementing .** hi
4160: 67 68 2d 70 65 72 66 6f 72 6d 61 6e 63 65 20 74  gh-performance t
4170: 69 6d 69 6e 67 20 72 6f 75 74 69 6e 65 73 2e 0a  iming routines..
4180: 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 68 77 74  */.#include "hwt
4190: 69 6d 65 2e 68 22 0a 0a 23 65 6e 64 69 66 0a 0a  ime.h"..#endif..
41a0: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 2f  #ifndef NDEBUG./
41b0: 2a 0a 2a 2a 20 54 68 69 73 20 66 75 6e 63 74 69  *.** This functi
41c0: 6f 6e 20 69 73 20 6f 6e 6c 79 20 63 61 6c 6c 65  on is only calle
41d0: 64 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 6e  d from within an
41e0: 20 61 73 73 65 72 74 28 29 20 65 78 70 72 65 73   assert() expres
41f0: 73 69 6f 6e 2e 20 49 74 0a 2a 2a 20 63 68 65 63  sion. It.** chec
4200: 6b 73 20 74 68 61 74 20 74 68 65 20 73 71 6c 69  ks that the sqli
4210: 74 65 33 2e 6e 54 72 61 6e 73 61 63 74 69 6f 6e  te3.nTransaction
4220: 20 76 61 72 69 61 62 6c 65 20 69 73 20 63 6f 72   variable is cor
4230: 72 65 63 74 6c 79 20 73 65 74 20 74 6f 0a 2a 2a  rectly set to.**
4240: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 6e   the number of n
4250: 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  on-transaction s
4260: 61 76 65 70 6f 69 6e 74 73 20 63 75 72 72 65 6e  avepoints curren
4270: 74 6c 79 20 69 6e 20 74 68 65 20 0a 2a 2a 20 6c  tly in the .** l
4280: 69 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74  inked list start
4290: 69 6e 67 20 61 74 20 73 71 6c 69 74 65 33 2e 70  ing at sqlite3.p
42a0: 53 61 76 65 70 6f 69 6e 74 2e 0a 2a 2a 20 0a 2a  Savepoint..** .*
42b0: 2a 20 55 73 61 67 65 3a 0a 2a 2a 0a 2a 2a 20 20  * Usage:.**.**  
42c0: 20 20 20 61 73 73 65 72 74 28 20 63 68 65 63 6b     assert( check
42d0: 53 61 76 65 70 6f 69 6e 74 43 6f 75 6e 74 28 64  SavepointCount(d
42e0: 62 29 20 29 3b 0a 2a 2f 0a 73 74 61 74 69 63 20  b) );.*/.static 
42f0: 69 6e 74 20 63 68 65 63 6b 53 61 76 65 70 6f 69  int checkSavepoi
4300: 6e 74 43 6f 75 6e 74 28 73 71 6c 69 74 65 33 20  ntCount(sqlite3 
4310: 2a 64 62 29 7b 0a 20 20 69 6e 74 20 6e 20 3d 20  *db){.  int n = 
4320: 30 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  0;.  Savepoint *
4330: 70 3b 0a 20 20 66 6f 72 28 70 3d 64 62 2d 3e 70  p;.  for(p=db->p
4340: 53 61 76 65 70 6f 69 6e 74 3b 20 70 3b 20 70 3d  Savepoint; p; p=
4350: 70 2d 3e 70 4e 65 78 74 29 20 6e 2b 2b 3b 0a 20  p->pNext) n++;. 
4360: 20 61 73 73 65 72 74 28 20 6e 3d 3d 28 64 62 2d   assert( n==(db-
4370: 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62  >nSavepoint + db
4380: 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53  ->isTransactionS
4390: 61 76 65 70 6f 69 6e 74 29 20 29 3b 0a 20 20 72  avepoint) );.  r
43a0: 65 74 75 72 6e 20 31 3b 0a 7d 0a 23 65 6e 64 69  eturn 1;.}.#endi
43b0: 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20  f../*.** Return 
43c0: 74 68 65 20 72 65 67 69 73 74 65 72 20 6f 66 20  the register of 
43d0: 70 4f 70 2d 3e 70 32 20 61 66 74 65 72 20 66 69  pOp->p2 after fi
43e0: 72 73 74 20 70 72 65 70 61 72 69 6e 67 20 69 74  rst preparing it
43f0: 20 74 6f 20 62 65 0a 2a 2a 20 6f 76 65 72 77 72   to be.** overwr
4400: 69 74 74 65 6e 20 77 69 74 68 20 61 6e 20 69 6e  itten with an in
4410: 74 65 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a  teger value..*/.
4420: 73 74 61 74 69 63 20 53 51 4c 49 54 45 5f 4e 4f  static SQLITE_NO
4430: 49 4e 4c 49 4e 45 20 4d 65 6d 20 2a 6f 75 74 32  INLINE Mem *out2
4440: 50 72 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c  PrereleaseWithCl
4450: 65 61 72 28 4d 65 6d 20 2a 70 4f 75 74 29 7b 0a  ear(Mem *pOut){.
4460: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
4470: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
4480: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
4490: 45 4d 5f 49 6e 74 3b 0a 20 20 72 65 74 75 72 6e  EM_Int;.  return
44a0: 20 70 4f 75 74 3b 0a 7d 0a 73 74 61 74 69 63 20   pOut;.}.static 
44b0: 4d 65 6d 20 2a 6f 75 74 32 50 72 65 72 65 6c 65  Mem *out2Prerele
44c0: 61 73 65 28 56 64 62 65 20 2a 70 2c 20 56 64 62  ase(Vdbe *p, Vdb
44d0: 65 4f 70 20 2a 70 4f 70 29 7b 0a 20 20 4d 65 6d  eOp *pOp){.  Mem
44e0: 20 2a 70 4f 75 74 3b 0a 20 20 61 73 73 65 72 74   *pOut;.  assert
44f0: 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a 20  ( pOp->p2>0 );. 
4500: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
4510: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
4520: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
4530: 70 4f 75 74 20 3d 20 26 70 2d 3e 61 4d 65 6d 5b  pOut = &p->aMem[
4540: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41  pOp->p2];.  memA
4550: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
4560: 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 56 64 62  pOut);.  if( Vdb
4570: 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74  eMemDynamic(pOut
4580: 29 20 29 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54  ) ){ /*OPTIMIZAT
4590: 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20  ION-IF-FALSE*/. 
45a0: 20 20 20 72 65 74 75 72 6e 20 6f 75 74 32 50 72     return out2Pr
45b0: 65 72 65 6c 65 61 73 65 57 69 74 68 43 6c 65 61  ereleaseWithClea
45c0: 72 28 70 4f 75 74 29 3b 0a 20 20 7d 65 6c 73 65  r(pOut);.  }else
45d0: 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
45e0: 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
45f0: 20 72 65 74 75 72 6e 20 70 4f 75 74 3b 0a 20 20   return pOut;.  
4600: 7d 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 45 78 65 63  }.}.../*.** Exec
4610: 75 74 65 20 61 73 20 6d 75 63 68 20 6f 66 20 61  ute as much of a
4620: 20 56 44 42 45 20 70 72 6f 67 72 61 6d 20 61 73   VDBE program as
4630: 20 77 65 20 63 61 6e 2e 0a 2a 2a 20 54 68 69 73   we can..** This
4640: 20 69 73 20 74 68 65 20 63 6f 72 65 20 6f 66 20   is the core of 
4650: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 2e 20  sqlite3_step(). 
4660: 20 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33   .*/.int sqlite3
4670: 56 64 62 65 45 78 65 63 28 0a 20 20 56 64 62 65  VdbeExec(.  Vdbe
4680: 20 2a 70 20 20 20 20 20 20 20 20 20 20 20 20 20   *p             
4690: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 56 44         /* The VD
46a0: 42 45 20 2a 2f 0a 29 7b 0a 20 20 4f 70 20 2a 61  BE */.){.  Op *a
46b0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 20 20 20 20  Op = p->aOp;    
46c0: 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66        /* Copy of
46d0: 20 70 2d 3e 61 4f 70 20 2a 2f 0a 20 20 4f 70 20   p->aOp */.  Op 
46e0: 2a 70 4f 70 20 3d 20 61 4f 70 3b 20 20 20 20 20  *pOp = aOp;     
46f0: 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65          /* Curre
4700: 6e 74 20 6f 70 65 72 61 74 69 6f 6e 20 2a 2f 0a  nt operation */.
4710: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
4720: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
4730: 69 6e 65 64 28 56 44 42 45 5f 50 52 4f 46 49 4c  ined(VDBE_PROFIL
4740: 45 29 0a 20 20 4f 70 20 2a 70 4f 72 69 67 4f 70  E).  Op *pOrigOp
4750: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
4760: 2f 2a 20 56 61 6c 75 65 20 6f 66 20 70 4f 70 20  /* Value of pOp 
4770: 61 74 20 74 68 65 20 74 6f 70 20 6f 66 20 74 68  at the top of th
4780: 65 20 6c 6f 6f 70 20 2a 2f 0a 23 65 6e 64 69 66  e loop */.#endif
4790: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
47a0: 45 42 55 47 0a 20 20 69 6e 74 20 6e 45 78 74 72  EBUG.  int nExtr
47b0: 61 44 65 6c 65 74 65 20 3d 20 30 3b 20 20 20 20  aDelete = 0;    
47c0: 20 20 2f 2a 20 56 65 72 69 66 69 65 73 20 46 4f    /* Verifies FO
47d0: 52 44 45 4c 45 54 45 20 61 6e 64 20 41 55 58 44  RDELETE and AUXD
47e0: 45 4c 45 54 45 20 66 6c 61 67 73 20 2a 2f 0a 23  ELETE flags */.#
47f0: 65 6e 64 69 66 0a 20 20 69 6e 74 20 72 63 20 3d  endif.  int rc =
4800: 20 53 51 4c 49 54 45 5f 4f 4b 3b 20 20 20 20 20   SQLITE_OK;     
4810: 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
4820: 65 74 75 72 6e 20 2a 2f 0a 20 20 73 71 6c 69 74  eturn */.  sqlit
4830: 65 33 20 2a 64 62 20 3d 20 70 2d 3e 64 62 3b 20  e3 *db = p->db; 
4840: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61 74        /* The dat
4850: 61 62 61 73 65 20 2a 2f 0a 20 20 75 38 20 72 65  abase */.  u8 re
4860: 73 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74  setSchemaOnFault
4870: 20 3d 20 30 3b 20 2f 2a 20 52 65 73 65 74 20 73   = 0; /* Reset s
4880: 63 68 65 6d 61 20 61 66 74 65 72 20 61 6e 20 65  chema after an e
4890: 72 72 6f 72 20 69 66 20 70 6f 73 69 74 69 76 65  rror if positive
48a0: 20 2a 2f 0a 20 20 75 38 20 65 6e 63 6f 64 69 6e   */.  u8 encodin
48b0: 67 20 3d 20 45 4e 43 28 64 62 29 3b 20 20 20 20  g = ENC(db);    
48c0: 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
48d0: 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 69   encoding */.  i
48e0: 6e 74 20 69 43 6f 6d 70 61 72 65 20 3d 20 30 3b  nt iCompare = 0;
48f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
4900: 75 6c 74 20 6f 66 20 6c 61 73 74 20 63 6f 6d 70  ult of last comp
4910: 61 72 69 73 6f 6e 20 2a 2f 0a 20 20 75 6e 73 69  arison */.  unsi
4920: 67 6e 65 64 20 6e 56 6d 53 74 65 70 20 3d 20 30  gned nVmStep = 0
4930: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
4940: 20 6f 66 20 76 69 72 74 75 61 6c 20 6d 61 63 68   of virtual mach
4950: 69 6e 65 20 73 74 65 70 73 20 2a 2f 0a 23 69 66  ine steps */.#if
4960: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4970: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
4980: 43 4b 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e 50  CK.  unsigned nP
4990: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 30  rogressLimit = 0
49a0: 3b 2f 2a 20 49 6e 76 6f 6b 65 20 78 50 72 6f 67  ;/* Invoke xProg
49b0: 72 65 73 73 28 29 20 77 68 65 6e 20 6e 56 6d 53  ress() when nVmS
49c0: 74 65 70 20 72 65 61 63 68 65 73 20 74 68 69 73  tep reaches this
49d0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 4d 65 6d   */.#endif.  Mem
49e0: 20 2a 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d   *aMem = p->aMem
49f0: 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20  ;       /* Copy 
4a00: 6f 66 20 70 2d 3e 61 4d 65 6d 20 2a 2f 0a 20 20  of p->aMem */.  
4a10: 4d 65 6d 20 2a 70 49 6e 31 20 3d 20 30 3b 20 20  Mem *pIn1 = 0;  
4a20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73             /* 1s
4a30: 74 20 69 6e 70 75 74 20 6f 70 65 72 61 6e 64 20  t input operand 
4a40: 2a 2f 0a 20 20 4d 65 6d 20 2a 70 49 6e 32 20 3d  */.  Mem *pIn2 =
4a50: 20 30 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   0;             
4a60: 2f 2a 20 32 6e 64 20 69 6e 70 75 74 20 6f 70 65  /* 2nd input ope
4a70: 72 61 6e 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  rand */.  Mem *p
4a80: 49 6e 33 20 3d 20 30 3b 20 20 20 20 20 20 20 20  In3 = 0;        
4a90: 20 20 20 20 20 2f 2a 20 33 72 64 20 69 6e 70 75       /* 3rd inpu
4aa0: 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 4d  t operand */.  M
4ab0: 65 6d 20 2a 70 4f 75 74 20 3d 20 30 3b 20 20 20  em *pOut = 0;   
4ac0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 75 74            /* Out
4ad0: 70 75 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 23  put operand */.#
4ae0: 69 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49  ifdef VDBE_PROFI
4af0: 4c 45 0a 20 20 75 36 34 20 73 74 61 72 74 3b 20  LE.  u64 start; 
4b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4b10: 2f 2a 20 43 50 55 20 63 6c 6f 63 6b 20 63 6f 75  /* CPU clock cou
4b20: 6e 74 20 61 74 20 73 74 61 72 74 20 6f 66 20 6f  nt at start of o
4b30: 70 63 6f 64 65 20 2a 2f 0a 23 65 6e 64 69 66 0a  pcode */.#endif.
4b40: 20 20 2f 2a 2a 2a 20 49 4e 53 45 52 54 20 53 54    /*** INSERT ST
4b50: 41 43 4b 20 55 4e 49 4f 4e 20 48 45 52 45 20 2a  ACK UNION HERE *
4b60: 2a 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70  **/..  assert( p
4b70: 2d 3e 6d 61 67 69 63 3d 3d 56 44 42 45 5f 4d 41  ->magic==VDBE_MA
4b80: 47 49 43 5f 52 55 4e 20 29 3b 20 20 2f 2a 20 73  GIC_RUN );  /* s
4b90: 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 76 65  qlite3_step() ve
4ba0: 72 69 66 69 65 73 20 74 68 69 73 20 2a 2f 0a 20  rifies this */. 
4bb0: 20 73 71 6c 69 74 65 33 56 64 62 65 45 6e 74 65   sqlite3VdbeEnte
4bc0: 72 28 70 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72  r(p);.  if( p->r
4bd0: 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20  c==SQLITE_NOMEM 
4be0: 29 7b 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 68  ){.    /* This h
4bf0: 61 70 70 65 6e 73 20 69 66 20 61 20 6d 61 6c 6c  appens if a mall
4c00: 6f 63 28 29 20 69 6e 73 69 64 65 20 61 20 63 61  oc() inside a ca
4c10: 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 5f 63 6f  ll to sqlite3_co
4c20: 6c 75 6d 6e 5f 74 65 78 74 28 29 20 6f 72 0a 20  lumn_text() or. 
4c30: 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f     ** sqlite3_co
4c40: 6c 75 6d 6e 5f 74 65 78 74 31 36 28 29 20 66 61  lumn_text16() fa
4c50: 69 6c 65 64 2e 20 20 2a 2f 0a 20 20 20 20 67 6f  iled.  */.    go
4c60: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20  to no_mem;.  }. 
4c70: 20 61 73 73 65 72 74 28 20 70 2d 3e 72 63 3d 3d   assert( p->rc==
4c80: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
4c90: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
4ca0: 45 5f 42 55 53 59 20 29 3b 0a 20 20 61 73 73 65  E_BUSY );.  asse
4cb0: 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
4cc0: 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 21   || p->readOnly!
4cd0: 3d 30 20 29 3b 0a 20 20 70 2d 3e 69 43 75 72 72  =0 );.  p->iCurr
4ce0: 65 6e 74 54 69 6d 65 20 3d 20 30 3b 0a 20 20 61  entTime = 0;.  a
4cf0: 73 73 65 72 74 28 20 70 2d 3e 65 78 70 6c 61 69  ssert( p->explai
4d00: 6e 3d 3d 30 20 29 3b 0a 20 20 70 2d 3e 70 52 65  n==0 );.  p->pRe
4d10: 73 75 6c 74 53 65 74 20 3d 20 30 3b 0a 20 20 64  sultSet = 0;.  d
4d20: 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65 72 2e 6e  b->busyHandler.n
4d30: 42 75 73 79 20 3d 20 30 3b 0a 20 20 69 66 28 20  Busy = 0;.  if( 
4d40: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
4d50: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
4d60: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
4d70: 70 74 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  pt;.  sqlite3Vdb
4d80: 65 49 4f 54 72 61 63 65 53 71 6c 28 70 29 3b 0a  eIOTraceSql(p);.
4d90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4da0: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
4db0: 4c 42 41 43 4b 0a 20 20 69 66 28 20 64 62 2d 3e  LBACK.  if( db->
4dc0: 78 50 72 6f 67 72 65 73 73 20 29 7b 0a 20 20 20  xProgress ){.   
4dd0: 20 75 33 32 20 69 50 72 69 6f 72 20 3d 20 70 2d   u32 iPrior = p-
4de0: 3e 61 43 6f 75 6e 74 65 72 5b 53 51 4c 49 54 45  >aCounter[SQLITE
4df0: 5f 53 54 4d 54 53 54 41 54 55 53 5f 56 4d 5f 53  _STMTSTATUS_VM_S
4e00: 54 45 50 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  TEP];.    assert
4e10: 28 20 30 20 3c 20 64 62 2d 3e 6e 50 72 6f 67 72  ( 0 < db->nProgr
4e20: 65 73 73 4f 70 73 20 29 3b 0a 20 20 20 20 6e 50  essOps );.    nP
4e30: 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 64  rogressLimit = d
4e40: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 20  b->nProgressOps 
4e50: 2d 20 28 69 50 72 69 6f 72 20 25 20 64 62 2d 3e  - (iPrior % db->
4e60: 6e 50 72 6f 67 72 65 73 73 4f 70 73 29 3b 0a 20  nProgressOps);. 
4e70: 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66   }.#endif.#ifdef
4e80: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
4e90: 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
4ea0: 67 6e 4d 61 6c 6c 6f 63 28 29 3b 0a 20 20 69 66  gnMalloc();.  if
4eb0: 28 20 70 2d 3e 70 63 3d 3d 30 0a 20 20 20 26 26  ( p->pc==0.   &&
4ec0: 20 28 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26   (p->db->flags &
4ed0: 20 28 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73   (SQLITE_VdbeLis
4ee0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
4ef0: 45 51 50 7c 53 51 4c 49 54 45 5f 56 64 62 65 54  EQP|SQLITE_VdbeT
4f00: 72 61 63 65 29 29 21 3d 30 0a 20 20 29 7b 0a 20  race))!=0.  ){. 
4f10: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 69 6e     int i;.    in
4f20: 74 20 6f 6e 63 65 20 3d 20 31 3b 0a 20 20 20 20  t once = 1;.    
4f30: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
4f40: 53 71 6c 28 70 29 3b 0a 20 20 20 20 69 66 28 20  Sql(p);.    if( 
4f50: 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53  p->db->flags & S
4f60: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
4f70: 67 20 29 7b 0a 20 20 20 20 20 20 70 72 69 6e 74  g ){.      print
4f80: 66 28 22 56 44 42 45 20 50 72 6f 67 72 61 6d 20  f("VDBE Program 
4f90: 4c 69 73 74 69 6e 67 3a 5c 6e 22 29 3b 0a 20 20  Listing:\n");.  
4fa0: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
4fb0: 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nOp; i++){.   
4fc0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
4fd0: 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20  PrintOp(stdout, 
4fe0: 69 2c 20 26 61 4f 70 5b 69 5d 29 3b 0a 20 20 20  i, &aOp[i]);.   
4ff0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 69     }.    }.    i
5000: 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67 73 20  f( p->db->flags 
5010: 26 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  & SQLITE_VdbeEQP
5020: 20 29 7b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d   ){.      for(i=
5030: 30 3b 20 69 3c 70 2d 3e 6e 4f 70 3b 20 69 2b 2b  0; i<p->nOp; i++
5040: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 61  ){.        if( a
5050: 4f 70 5b 69 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50  Op[i].opcode==OP
5060: 5f 45 78 70 6c 61 69 6e 20 29 7b 0a 20 20 20 20  _Explain ){.    
5070: 20 20 20 20 20 20 69 66 28 20 6f 6e 63 65 20 29        if( once )
5080: 20 70 72 69 6e 74 66 28 22 56 44 42 45 20 51 75   printf("VDBE Qu
5090: 65 72 79 20 50 6c 61 6e 3a 5c 6e 22 29 3b 0a 20  ery Plan:\n");. 
50a0: 20 20 20 20 20 20 20 20 20 70 72 69 6e 74 66 28           printf(
50b0: 22 25 73 5c 6e 22 2c 20 61 4f 70 5b 69 5d 2e 70  "%s\n", aOp[i].p
50c0: 34 2e 7a 29 3b 0a 20 20 20 20 20 20 20 20 20 20  4.z);.          
50d0: 6f 6e 63 65 20 3d 20 30 3b 0a 20 20 20 20 20 20  once = 0;.      
50e0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
50f0: 7d 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62 2d  }.    if( p->db-
5100: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
5110: 56 64 62 65 54 72 61 63 65 20 29 20 20 70 72 69  VdbeTrace )  pri
5120: 6e 74 66 28 22 56 44 42 45 20 54 72 61 63 65 3a  ntf("VDBE Trace:
5130: 5c 6e 22 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69  \n");.  }.  sqli
5140: 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c  te3EndBenignMall
5150: 6f 63 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 66  oc();.#endif.  f
5160: 6f 72 28 70 4f 70 3d 26 61 4f 70 5b 70 2d 3e 70  or(pOp=&aOp[p->p
5170: 63 5d 3b 20 31 3b 20 70 4f 70 2b 2b 29 7b 0a 20  c]; 1; pOp++){. 
5180: 20 20 20 2f 2a 20 45 72 72 6f 72 73 20 61 72 65     /* Errors are
5190: 20 64 65 74 65 63 74 65 64 20 62 79 20 69 6e 64   detected by ind
51a0: 69 76 69 64 75 61 6c 20 6f 70 63 6f 64 65 73 2c  ividual opcodes,
51b0: 20 77 69 74 68 20 61 6e 20 69 6d 6d 65 64 69 61   with an immedia
51c0: 74 65 0a 20 20 20 20 2a 2a 20 6a 75 6d 70 73 20  te.    ** jumps 
51d0: 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
51e0: 65 72 72 6f 72 2e 20 2a 2f 0a 20 20 20 20 61 73  error. */.    as
51f0: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
5200: 5f 4f 4b 20 29 3b 0a 0a 20 20 20 20 61 73 73 65  _OK );..    asse
5210: 72 74 28 20 70 4f 70 3e 3d 61 4f 70 20 26 26 20  rt( pOp>=aOp && 
5220: 70 4f 70 3c 26 61 4f 70 5b 70 2d 3e 6e 4f 70 5d  pOp<&aOp[p->nOp]
5230: 29 3b 0a 23 69 66 64 65 66 20 56 44 42 45 5f 50  );.#ifdef VDBE_P
5240: 52 4f 46 49 4c 45 0a 20 20 20 20 73 74 61 72 74  ROFILE.    start
5250: 20 3d 20 73 71 6c 69 74 65 33 48 77 74 69 6d 65   = sqlite3Hwtime
5260: 28 29 3b 0a 23 65 6e 64 69 66 0a 20 20 20 20 6e  ();.#endif.    n
5270: 56 6d 53 74 65 70 2b 2b 3b 0a 23 69 66 64 65 66  VmStep++;.#ifdef
5280: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
5290: 54 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 0a 20  TMT_SCANSTATUS. 
52a0: 20 20 20 69 66 28 20 70 2d 3e 61 6e 45 78 65 63     if( p->anExec
52b0: 20 29 20 70 2d 3e 61 6e 45 78 65 63 5b 28 69 6e   ) p->anExec[(in
52c0: 74 29 28 70 4f 70 2d 61 4f 70 29 5d 2b 2b 3b 0a  t)(pOp-aOp)]++;.
52d0: 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f 2a 20 4f  #endif..    /* O
52e0: 6e 6c 79 20 61 6c 6c 6f 77 20 74 72 61 63 69 6e  nly allow tracin
52f0: 67 20 69 66 20 53 51 4c 49 54 45 5f 44 45 42 55  g if SQLITE_DEBU
5300: 47 20 69 73 20 64 65 66 69 6e 65 64 2e 0a 20 20  G is defined..  
5310: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
5320: 54 45 5f 44 45 42 55 47 0a 20 20 20 20 69 66 28  TE_DEBUG.    if(
5330: 20 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c   db->flags & SQL
5340: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 29 7b  ITE_VdbeTrace ){
5350: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
5360: 62 65 50 72 69 6e 74 4f 70 28 73 74 64 6f 75 74  bePrintOp(stdout
5370: 2c 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  , (int)(pOp - aO
5380: 70 29 2c 20 70 4f 70 29 3b 0a 20 20 20 20 7d 0a  p), pOp);.    }.
5390: 23 65 6e 64 69 66 0a 20 20 20 20 20 20 0a 0a 20  #endif.      .. 
53a0: 20 20 20 2f 2a 20 43 68 65 63 6b 20 74 6f 20 73     /* Check to s
53b0: 65 65 20 69 66 20 77 65 20 6e 65 65 64 20 74 6f  ee if we need to
53c0: 20 73 69 6d 75 6c 61 74 65 20 61 6e 20 69 6e 74   simulate an int
53d0: 65 72 72 75 70 74 2e 20 20 54 68 69 73 20 6f 6e  errupt.  This on
53e0: 6c 79 20 68 61 70 70 65 6e 73 0a 20 20 20 20 2a  ly happens.    *
53f0: 2a 20 69 66 20 77 65 20 68 61 76 65 20 61 20 73  * if we have a s
5400: 70 65 63 69 61 6c 20 74 65 73 74 20 62 75 69 6c  pecial test buil
5410: 64 2e 0a 20 20 20 20 2a 2f 0a 23 69 66 64 65 66  d..    */.#ifdef
5420: 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 20   SQLITE_TEST.   
5430: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e 74   if( sqlite3_int
5440: 65 72 72 75 70 74 5f 63 6f 75 6e 74 3e 30 20 29  errupt_count>0 )
5450: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
5460: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 2d  interrupt_count-
5470: 2d 3b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  -;.      if( sql
5480: 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 5f 63  ite3_interrupt_c
5490: 6f 75 6e 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ount==0 ){.     
54a0: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
54b0: 72 75 70 74 28 64 62 29 3b 0a 20 20 20 20 20 20  rupt(db);.      
54c0: 7d 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  }.    }.#endif..
54d0: 20 20 20 20 2f 2a 20 53 61 6e 69 74 79 20 63 68      /* Sanity ch
54e0: 65 63 6b 69 6e 67 20 6f 6e 20 6f 74 68 65 72 20  ecking on other 
54f0: 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 23 69 66 64  operands */.#ifd
5500: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
5510: 20 20 20 20 7b 0a 20 20 20 20 20 20 75 38 20 6f      {.      u8 o
5520: 70 50 72 6f 70 65 72 74 79 20 3d 20 73 71 6c 69  pProperty = sqli
5530: 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
5540: 79 5b 70 4f 70 2d 3e 6f 70 63 6f 64 65 5d 3b 0a  y[pOp->opcode];.
5550: 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f        if( (opPro
5560: 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e  perty & OPFLG_IN
5570: 31 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  1)!=0 ){.       
5580: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
5590: 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  >0 );.        as
55a0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3c 3d 28  sert( pOp->p1<=(
55b0: 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e  p->nMem+1 - p->n
55c0: 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20  Cursor) );.     
55d0: 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
55e0: 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d  Valid(&aMem[pOp-
55f0: 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20 20  >p1]) );.       
5600: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
5610: 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61  VdbeCheckMemInva
5620: 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70  riants(&aMem[pOp
5630: 2d 3e 70 31 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p1]) );.      
5640: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
5650: 28 70 4f 70 2d 3e 70 31 2c 20 26 61 4d 65 6d 5b  (pOp->p1, &aMem[
5660: 70 4f 70 2d 3e 70 31 5d 29 3b 0a 20 20 20 20 20  pOp->p1]);.     
5670: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70   }.      if( (op
5680: 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47  Property & OPFLG
5690: 5f 49 4e 32 29 21 3d 30 20 29 7b 0a 20 20 20 20  _IN2)!=0 ){.    
56a0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
56b0: 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20 20 20  >p2>0 );.       
56c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
56d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
56e0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
56f0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
5700: 6d 49 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70  mIsValid(&aMem[p
5710: 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20 20  Op->p2]) );.    
5720: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
5730: 74 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49  te3VdbeCheckMemI
5740: 6e 76 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b  nvariants(&aMem[
5750: 70 4f 70 2d 3e 70 32 5d 29 20 29 3b 0a 20 20 20  pOp->p2]) );.   
5760: 20 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52       REGISTER_TR
5770: 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 26 61 4d  ACE(pOp->p2, &aM
5780: 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20  em[pOp->p2]);.  
5790: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
57a0: 28 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50  (opProperty & OP
57b0: 46 4c 47 5f 49 4e 33 29 21 3d 30 20 29 7b 0a 20  FLG_IN3)!=0 ){. 
57c0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
57d0: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
57e0: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
57f0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
5800: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5810: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5820: 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d 65   memIsValid(&aMe
5830: 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a 20  m[pOp->p3]) );. 
5840: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73         assert( s
5850: 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 4d  qlite3VdbeCheckM
5860: 65 6d 49 6e 76 61 72 69 61 6e 74 73 28 26 61 4d  emInvariants(&aM
5870: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
5880: 20 20 20 20 20 20 20 20 52 45 47 49 53 54 45 52          REGISTER
5890: 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
58a0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b  &aMem[pOp->p3]);
58b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
58c0: 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20 26  f( (opProperty &
58d0: 20 4f 50 46 4c 47 5f 4f 55 54 32 29 21 3d 30 20   OPFLG_OUT2)!=0 
58e0: 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
58f0: 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 3b 0a  t( pOp->p2>0 );.
5900: 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
5910: 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d 3e 6e 4d 65  pOp->p2<=(p->nMe
5920: 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
5930: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d  ) );.        mem
5940: 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
5950: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29   &aMem[pOp->p2])
5960: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
5970: 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79 20  if( (opProperty 
5980: 26 20 4f 50 46 4c 47 5f 4f 55 54 33 29 21 3d 30  & OPFLG_OUT3)!=0
5990: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
59a0: 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b  rt( pOp->p3>0 );
59b0: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
59c0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
59d0: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
59e0: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 6d 65  r) );.        me
59f0: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
5a00: 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  , &aMem[pOp->p3]
5a10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
5a20: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
5a30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
5a40: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 56 44 42  ) || defined(VDB
5a50: 45 5f 50 52 4f 46 49 4c 45 29 0a 20 20 20 20 70  E_PROFILE).    p
5a60: 4f 72 69 67 4f 70 20 3d 20 70 4f 70 3b 0a 23 65  OrigOp = pOp;.#e
5a70: 6e 64 69 66 0a 20 20 0a 20 20 20 20 73 77 69 74  ndif.  .    swit
5a80: 63 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20  ch( pOp->opcode 
5a90: 29 7b 0a 0a 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ){../***********
5aa0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ab0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ac0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ad0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5ae0: 2a 2a 0a 2a 2a 20 57 68 61 74 20 66 6f 6c 6c 6f  **.** What follo
5af0: 77 73 20 69 73 20 61 20 6d 61 73 73 69 76 65 20  ws is a massive 
5b00: 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e 74  switch statement
5b10: 20 77 68 65 72 65 20 65 61 63 68 20 63 61 73 65   where each case
5b20: 20 69 6d 70 6c 65 6d 65 6e 74 73 20 61 0a 2a 2a   implements a.**
5b30: 20 73 65 70 61 72 61 74 65 20 69 6e 73 74 72 75   separate instru
5b40: 63 74 69 6f 6e 20 69 6e 20 74 68 65 20 76 69 72  ction in the vir
5b50: 74 75 61 6c 20 6d 61 63 68 69 6e 65 2e 20 20 49  tual machine.  I
5b60: 66 20 77 65 20 66 6f 6c 6c 6f 77 20 74 68 65 20  f we follow the 
5b70: 75 73 75 61 6c 0a 2a 2a 20 69 6e 64 65 6e 74 61  usual.** indenta
5b80: 74 69 6f 6e 20 63 6f 6e 76 65 6e 74 69 6f 6e 73  tion conventions
5b90: 2c 20 65 61 63 68 20 63 61 73 65 20 73 68 6f 75  , each case shou
5ba0: 6c 64 20 62 65 20 69 6e 64 65 6e 74 65 64 20 62  ld be indented b
5bb0: 79 20 36 20 73 70 61 63 65 73 2e 20 20 42 75 74  y 6 spaces.  But
5bc0: 0a 2a 2a 20 74 68 61 74 20 69 73 20 61 20 6c 6f  .** that is a lo
5bd0: 74 20 6f 66 20 77 61 73 74 65 64 20 73 70 61 63  t of wasted spac
5be0: 65 20 6f 6e 20 74 68 65 20 6c 65 66 74 20 6d 61  e on the left ma
5bf0: 72 67 69 6e 2e 20 20 53 6f 20 74 68 65 20 63 6f  rgin.  So the co
5c00: 64 65 20 77 69 74 68 69 6e 0a 2a 2a 20 74 68 65  de within.** the
5c10: 20 73 77 69 74 63 68 20 73 74 61 74 65 6d 65 6e   switch statemen
5c20: 74 20 77 69 6c 6c 20 62 72 65 61 6b 20 77 69 74  t will break wit
5c30: 68 20 63 6f 6e 76 65 6e 74 69 6f 6e 20 61 6e 64  h convention and
5c40: 20 62 65 20 66 6c 75 73 68 2d 6c 65 66 74 2e 20   be flush-left. 
5c50: 41 6e 6f 74 68 65 72 0a 2a 2a 20 62 69 67 20 63  Another.** big c
5c60: 6f 6d 6d 65 6e 74 20 28 73 69 6d 69 6c 61 72 20  omment (similar 
5c70: 74 6f 20 74 68 69 73 20 6f 6e 65 29 20 77 69 6c  to this one) wil
5c80: 6c 20 6d 61 72 6b 20 74 68 65 20 70 6f 69 6e 74  l mark the point
5c90: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 77 68 65   in the code whe
5ca0: 72 65 0a 2a 2a 20 77 65 20 74 72 61 6e 73 69 74  re.** we transit
5cb0: 69 6f 6e 20 62 61 63 6b 20 74 6f 20 6e 6f 72 6d  ion back to norm
5cc0: 61 6c 20 69 6e 64 65 6e 74 61 74 69 6f 6e 2e 0a  al indentation..
5cd0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 72 6d 61 74  **.** The format
5ce0: 74 69 6e 67 20 6f 66 20 65 61 63 68 20 63 61 73  ting of each cas
5cf0: 65 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 2e 20  e is important. 
5d00: 20 54 68 65 20 6d 61 6b 65 66 69 6c 65 20 66 6f   The makefile fo
5d10: 72 20 53 51 4c 69 74 65 0a 2a 2a 20 67 65 6e 65  r SQLite.** gene
5d20: 72 61 74 65 73 20 74 77 6f 20 43 20 66 69 6c 65  rates two C file
5d30: 73 20 22 6f 70 63 6f 64 65 73 2e 68 22 20 61 6e  s "opcodes.h" an
5d40: 64 20 22 6f 70 63 6f 64 65 73 2e 63 22 20 62 79  d "opcodes.c" by
5d50: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 0a 2a   scanning this.*
5d60: 2a 20 66 69 6c 65 20 6c 6f 6f 6b 69 6e 67 20 66  * file looking f
5d70: 6f 72 20 6c 69 6e 65 73 20 74 68 61 74 20 62 65  or lines that be
5d80: 67 69 6e 20 77 69 74 68 20 22 63 61 73 65 20 4f  gin with "case O
5d90: 50 5f 22 2e 20 20 54 68 65 20 6f 70 63 6f 64 65  P_".  The opcode
5da0: 73 2e 68 20 66 69 6c 65 73 0a 2a 2a 20 77 69 6c  s.h files.** wil
5db0: 6c 20 62 65 20 66 69 6c 6c 65 64 20 77 69 74 68  l be filled with
5dc0: 20 23 64 65 66 69 6e 65 73 20 74 68 61 74 20 67   #defines that g
5dd0: 69 76 65 20 75 6e 69 71 75 65 20 69 6e 74 65 67  ive unique integ
5de0: 65 72 20 76 61 6c 75 65 73 20 74 6f 20 65 61 63  er values to eac
5df0: 68 0a 2a 2a 20 6f 70 63 6f 64 65 20 61 6e 64 20  h.** opcode and 
5e00: 74 68 65 20 6f 70 63 6f 64 65 73 2e 63 20 66 69  the opcodes.c fi
5e10: 6c 65 20 69 73 20 66 69 6c 6c 65 64 20 77 69 74  le is filled wit
5e20: 68 20 61 6e 20 61 72 72 61 79 20 6f 66 20 73 74  h an array of st
5e30: 72 69 6e 67 73 20 77 68 65 72 65 0a 2a 2a 20 65  rings where.** e
5e40: 61 63 68 20 73 74 72 69 6e 67 20 69 73 20 74 68  ach string is th
5e50: 65 20 73 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  e symbolic name 
5e60: 66 6f 72 20 74 68 65 20 63 6f 72 72 65 73 70 6f  for the correspo
5e70: 6e 64 69 6e 67 20 6f 70 63 6f 64 65 2e 20 20 49  nding opcode.  I
5e80: 66 20 74 68 65 0a 2a 2a 20 63 61 73 65 20 73 74  f the.** case st
5e90: 61 74 65 6d 65 6e 74 20 69 73 20 66 6f 6c 6c 6f  atement is follo
5ea0: 77 65 64 20 62 79 20 61 20 63 6f 6d 6d 65 6e 74  wed by a comment
5eb0: 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 2f 23   of the form "/#
5ec0: 20 73 61 6d 65 20 61 73 20 2e 2e 2e 20 23 2f 22   same as ... #/"
5ed0: 0a 2a 2a 20 74 68 61 74 20 63 6f 6d 6d 65 6e 74  .** that comment
5ee0: 20 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65   is used to dete
5ef0: 72 6d 69 6e 65 20 74 68 65 20 70 61 72 74 69 63  rmine the partic
5f00: 75 6c 61 72 20 76 61 6c 75 65 20 6f 66 20 74 68  ular value of th
5f10: 65 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  e opcode..**.** 
5f20: 4f 74 68 65 72 20 6b 65 79 77 6f 72 64 73 20 69  Other keywords i
5f30: 6e 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74 68  n the comment th
5f40: 61 74 20 66 6f 6c 6c 6f 77 73 20 65 61 63 68 20  at follows each 
5f50: 63 61 73 65 20 61 72 65 20 75 73 65 64 20 74 6f  case are used to
5f60: 0a 2a 2a 20 63 6f 6e 73 74 72 75 63 74 20 74 68  .** construct th
5f70: 65 20 4f 50 46 4c 47 5f 49 4e 49 54 49 41 4c 49  e OPFLG_INITIALI
5f80: 5a 45 52 20 76 61 6c 75 65 20 74 68 61 74 20 69  ZER value that i
5f90: 6e 69 74 69 61 6c 69 7a 65 73 20 6f 70 63 6f 64  nitializes opcod
5fa0: 65 50 72 6f 70 65 72 74 79 5b 5d 2e 0a 2a 2a 20  eProperty[]..** 
5fb0: 4b 65 79 77 6f 72 64 73 20 69 6e 63 6c 75 64 65  Keywords include
5fc0: 3a 20 69 6e 31 2c 20 69 6e 32 2c 20 69 6e 33 2c  : in1, in2, in3,
5fd0: 20 6f 75 74 32 2c 20 6f 75 74 33 2e 20 20 53 65   out2, out3.  Se
5fe0: 65 0a 2a 2a 20 74 68 65 20 6d 6b 6f 70 63 6f 64  e.** the mkopcod
5ff0: 65 68 2e 61 77 6b 20 73 63 72 69 70 74 20 66 6f  eh.awk script fo
6000: 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66  r additional inf
6010: 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20  ormation..**.** 
6020: 44 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 61 62  Documentation ab
6030: 6f 75 74 20 56 44 42 45 20 6f 70 63 6f 64 65 73  out VDBE opcodes
6040: 20 69 73 20 67 65 6e 65 72 61 74 65 64 20 62 79   is generated by
6050: 20 73 63 61 6e 6e 69 6e 67 20 74 68 69 73 20 66   scanning this f
6060: 69 6c 65 0a 2a 2a 20 66 6f 72 20 6c 69 6e 65 73  ile.** for lines
6070: 20 6f 66 20 74 68 61 74 20 63 6f 6e 74 61 69 6e   of that contain
6080: 20 22 4f 70 63 6f 64 65 3a 22 2e 20 20 54 68 61   "Opcode:".  Tha
6090: 74 20 6c 69 6e 65 20 61 6e 64 20 61 6c 6c 20 73  t line and all s
60a0: 75 62 73 65 71 75 65 6e 74 0a 2a 2a 20 63 6f 6d  ubsequent.** com
60b0: 6d 65 6e 74 20 6c 69 6e 65 73 20 61 72 65 20 75  ment lines are u
60c0: 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72  sed in the gener
60d0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 63  ation of the opc
60e0: 6f 64 65 2e 68 74 6d 6c 20 64 6f 63 75 6d 65 6e  ode.html documen
60f0: 74 61 74 69 6f 6e 0a 2a 2a 20 66 69 6c 65 2e 0a  tation.** file..
6100: 2a 2a 0a 2a 2a 20 53 55 4d 4d 41 52 59 3a 0a 2a  **.** SUMMARY:.*
6110: 2a 0a 2a 2a 20 20 20 20 20 46 6f 72 6d 61 74 74  *.**     Formatt
6120: 69 6e 67 20 69 73 20 69 6d 70 6f 72 74 61 6e 74  ing is important
6130: 20 74 6f 20 73 63 72 69 70 74 73 20 74 68 61 74   to scripts that
6140: 20 73 63 61 6e 20 74 68 69 73 20 66 69 6c 65 2e   scan this file.
6150: 0a 2a 2a 20 20 20 20 20 44 6f 20 6e 6f 74 20 64  .**     Do not d
6160: 65 76 69 61 74 65 20 66 72 6f 6d 20 74 68 65 20  eviate from the 
6170: 66 6f 72 6d 61 74 74 69 6e 67 20 73 74 79 6c 65  formatting style
6180: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
6190: 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..**.**********
61a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61d0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
61e0: 2a 2a 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ***/../* Opcode:
61f0: 20 20 47 6f 74 6f 20 2a 20 50 32 20 2a 20 2a 20    Goto * P2 * * 
6200: 2a 0a 2a 2a 0a 2a 2a 20 41 6e 20 75 6e 63 6f 6e  *.**.** An uncon
6210: 64 69 74 69 6f 6e 61 6c 20 6a 75 6d 70 20 74 6f  ditional jump to
6220: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2a 20   address P2..** 
6230: 54 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63  The next instruc
6240: 74 69 6f 6e 20 65 78 65 63 75 74 65 64 20 77 69  tion executed wi
6250: 6c 6c 20 62 65 20 0a 2a 2a 20 74 68 65 20 6f 6e  ll be .** the on
6260: 65 20 61 74 20 69 6e 64 65 78 20 50 32 20 66 72  e at index P2 fr
6270: 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  om the beginning
6280: 20 6f 66 0a 2a 2a 20 74 68 65 20 70 72 6f 67 72   of.** the progr
6290: 61 6d 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31  am..**.** The P1
62a0: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f   parameter is no
62b0: 74 20 61 63 74 75 61 6c 6c 79 20 75 73 65 64 20  t actually used 
62c0: 62 79 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 20  by this opcode. 
62d0: 20 48 6f 77 65 76 65 72 2c 20 69 74 0a 2a 2a 20   However, it.** 
62e0: 69 73 20 73 6f 6d 65 74 69 6d 65 73 20 73 65 74  is sometimes set
62f0: 20 74 6f 20 31 20 69 6e 73 74 65 61 64 20 6f 66   to 1 instead of
6300: 20 30 20 61 73 20 61 20 68 69 6e 74 20 74 6f 20   0 as a hint to 
6310: 74 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65  the command-line
6320: 20 73 68 65 6c 6c 0a 2a 2a 20 74 68 61 74 20 74   shell.** that t
6330: 68 69 73 20 47 6f 74 6f 20 69 73 20 74 68 65 20  his Goto is the 
6340: 62 6f 74 74 6f 6d 20 6f 66 20 61 20 6c 6f 6f 70  bottom of a loop
6350: 20 61 6e 64 20 74 68 61 74 20 74 68 65 20 6c 69   and that the li
6360: 6e 65 73 20 66 72 6f 6d 20 50 32 20 64 6f 77 6e  nes from P2 down
6370: 0a 2a 2a 20 74 6f 20 74 68 65 20 63 75 72 72 65  .** to the curre
6380: 6e 74 20 6c 69 6e 65 20 73 68 6f 75 6c 64 20 62  nt line should b
6390: 65 20 69 6e 64 65 6e 74 65 64 20 66 6f 72 20 45  e indented for E
63a0: 58 50 4c 41 49 4e 20 6f 75 74 70 75 74 2e 0a 2a  XPLAIN output..*
63b0: 2f 0a 63 61 73 65 20 4f 50 5f 47 6f 74 6f 3a 20  /.case OP_Goto: 
63c0: 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  {             /*
63d0: 20 6a 75 6d 70 20 2a 2f 0a 6a 75 6d 70 5f 74 6f   jump */.jump_to
63e0: 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f  _p2_and_check_fo
63f0: 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20 20 70  r_interrupt:.  p
6400: 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70  Op = &aOp[pOp->p
6410: 32 20 2d 20 31 5d 3b 0a 0a 20 20 2f 2a 20 4f 70  2 - 1];..  /* Op
6420: 63 6f 64 65 73 20 74 68 61 74 20 61 72 65 20 75  codes that are u
6430: 73 65 64 20 61 73 20 74 68 65 20 62 6f 74 74 6f  sed as the botto
6440: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 28 4f 50 5f  m of a loop (OP_
6450: 4e 65 78 74 2c 20 4f 50 5f 50 72 65 76 2c 0a 20  Next, OP_Prev,. 
6460: 20 2a 2a 20 4f 50 5f 56 4e 65 78 74 2c 20 4f 50   ** OP_VNext, OP
6470: 5f 52 6f 77 53 65 74 4e 65 78 74 2c 20 6f 72 20  _RowSetNext, or 
6480: 4f 50 5f 53 6f 72 74 65 72 4e 65 78 74 29 20 61  OP_SorterNext) a
6490: 6c 6c 20 6a 75 6d 70 20 68 65 72 65 20 75 70 6f  ll jump here upo
64a0: 6e 0a 20 20 2a 2a 20 63 6f 6d 70 6c 65 74 69 6f  n.  ** completio
64b0: 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65  n.  Check to see
64c0: 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65   if sqlite3_inte
64d0: 72 72 75 70 74 28 29 20 68 61 73 20 62 65 65 6e  rrupt() has been
64e0: 20 63 61 6c 6c 65 64 0a 20 20 2a 2a 20 6f 72 20   called.  ** or 
64f0: 69 66 20 74 68 65 20 70 72 6f 67 72 65 73 73 20  if the progress 
6500: 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64 73 20 74  callback needs t
6510: 6f 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20 0a 20  o be invoked. . 
6520: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 63 6f   **.  ** This co
6530: 64 65 20 75 73 65 73 20 75 6e 73 74 72 75 63 74  de uses unstruct
6540: 75 72 65 64 20 22 67 6f 74 6f 22 20 73 74 61 74  ured "goto" stat
6550: 65 6d 65 6e 74 73 20 61 6e 64 20 64 6f 65 73 20  ements and does 
6560: 6e 6f 74 20 6c 6f 6f 6b 20 63 6c 65 61 6e 2e 0a  not look clean..
6570: 20 20 2a 2a 20 42 75 74 20 74 68 61 74 20 69 73    ** But that is
6580: 20 6e 6f 74 20 64 75 65 20 74 6f 20 73 6c 6f 70   not due to slop
6590: 70 79 20 63 6f 64 69 6e 67 20 68 61 62 69 74 73  py coding habits
65a0: 2e 20 54 68 65 20 63 6f 64 65 20 69 73 20 77 72  . The code is wr
65b0: 69 74 74 65 6e 20 74 68 69 73 0a 20 20 2a 2a 20  itten this.  ** 
65c0: 77 61 79 20 66 6f 72 20 70 65 72 66 6f 72 6d 61  way for performa
65d0: 6e 63 65 2c 20 74 6f 20 61 76 6f 69 64 20 68 61  nce, to avoid ha
65e0: 76 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 20  ving to run the 
65f0: 69 6e 74 65 72 72 75 70 74 20 61 6e 64 20 70 72  interrupt and pr
6600: 6f 67 72 65 73 73 0a 20 20 2a 2a 20 63 68 65 63  ogress.  ** chec
6610: 6b 73 20 6f 6e 20 65 76 65 72 79 20 6f 70 63 6f  ks on every opco
6620: 64 65 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20  de.  This helps 
6630: 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 74  sqlite3_step() t
6640: 6f 20 72 75 6e 20 61 62 6f 75 74 20 31 2e 35 25  o run about 1.5%
6650: 0a 20 20 2a 2a 20 66 61 73 74 65 72 20 61 63 63  .  ** faster acc
6660: 6f 72 64 69 6e 67 20 74 6f 20 22 76 61 6c 67 72  ording to "valgr
6670: 69 6e 64 20 2d 2d 74 6f 6f 6c 3d 63 61 63 68 65  ind --tool=cache
6680: 67 72 69 6e 64 22 20 2a 2f 0a 63 68 65 63 6b 5f  grind" */.check_
6690: 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3a 0a 20  for_interrupt:. 
66a0: 20 69 66 28 20 64 62 2d 3e 75 31 2e 69 73 49 6e   if( db->u1.isIn
66b0: 74 65 72 72 75 70 74 65 64 20 29 20 67 6f 74 6f  terrupted ) goto
66c0: 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 69 6e   abort_due_to_in
66d0: 74 65 72 72 75 70 74 3b 0a 23 69 66 6e 64 65 66  terrupt;.#ifndef
66e0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f   SQLITE_OMIT_PRO
66f0: 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20  GRESS_CALLBACK. 
6700: 20 2f 2a 20 43 61 6c 6c 20 74 68 65 20 70 72 6f   /* Call the pro
6710: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 69  gress callback i
6720: 66 20 69 74 20 69 73 20 63 6f 6e 66 69 67 75 72  f it is configur
6730: 65 64 20 61 6e 64 20 74 68 65 20 72 65 71 75 69  ed and the requi
6740: 72 65 64 20 6e 75 6d 62 65 72 0a 20 20 2a 2a 20  red number.  ** 
6750: 6f 66 20 56 44 42 45 20 6f 70 73 20 68 61 76 65  of VDBE ops have
6760: 20 62 65 65 6e 20 65 78 65 63 75 74 65 64 20 28   been executed (
6770: 65 69 74 68 65 72 20 73 69 6e 63 65 20 74 68 69  either since thi
6780: 73 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 0a  s invocation of.
6790: 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
67a0: 45 78 65 63 28 29 20 6f 72 20 73 69 6e 63 65 20  Exec() or since 
67b0: 6c 61 73 74 20 74 69 6d 65 20 74 68 65 20 70 72  last time the pr
67c0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
67d0: 77 61 73 20 63 61 6c 6c 65 64 29 2e 0a 20 20 2a  was called)..  *
67e0: 2a 20 49 66 20 74 68 65 20 70 72 6f 67 72 65 73  * If the progres
67f0: 73 20 63 61 6c 6c 62 61 63 6b 20 72 65 74 75 72  s callback retur
6800: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 65 78 69  ns non-zero, exi
6810: 74 20 74 68 65 20 76 69 72 74 75 61 6c 20 6d 61  t the virtual ma
6820: 63 68 69 6e 65 20 77 69 74 68 0a 20 20 2a 2a 20  chine with.  ** 
6830: 61 20 72 65 74 75 72 6e 20 63 6f 64 65 20 53 51  a return code SQ
6840: 4c 49 54 45 5f 41 42 4f 52 54 2e 0a 20 20 2a 2f  LITE_ABORT..  */
6850: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
6860: 72 65 73 73 21 3d 30 20 26 26 20 6e 56 6d 53 74  ress!=0 && nVmSt
6870: 65 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d  ep>=nProgressLim
6880: 69 74 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  it ){.    assert
6890: 28 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f  ( db->nProgressO
68a0: 70 73 21 3d 30 20 29 3b 0a 20 20 20 20 6e 50 72  ps!=0 );.    nPr
68b0: 6f 67 72 65 73 73 4c 69 6d 69 74 20 3d 20 6e 56  ogressLimit = nV
68c0: 6d 53 74 65 70 20 2b 20 64 62 2d 3e 6e 50 72 6f  mStep + db->nPro
68d0: 67 72 65 73 73 4f 70 73 20 2d 20 28 6e 56 6d 53  gressOps - (nVmS
68e0: 74 65 70 25 64 62 2d 3e 6e 50 72 6f 67 72 65 73  tep%db->nProgres
68f0: 73 4f 70 73 29 3b 0a 20 20 20 20 69 66 28 20 64  sOps);.    if( d
6900: 62 2d 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d  b->xProgress(db-
6910: 3e 70 50 72 6f 67 72 65 73 73 41 72 67 29 20 29  >pProgressArg) )
6920: 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
6930: 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a 20  ITE_INTERRUPT;. 
6940: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
6950: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
6960: 20 20 7d 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20    }.  }.#endif. 
6970: 20 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a   .  break;.}../*
6980: 20 4f 70 63 6f 64 65 3a 20 20 47 6f 73 75 62 20   Opcode:  Gosub 
6990: 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
69a0: 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
69b0: 65 6e 74 20 61 64 64 72 65 73 73 20 6f 6e 74 6f  ent address onto
69c0: 20 72 65 67 69 73 74 65 72 20 50 31 0a 2a 2a 20   register P1.** 
69d0: 61 6e 64 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  and then jump to
69e0: 20 61 64 64 72 65 73 73 20 50 32 2e 0a 2a 2f 0a   address P2..*/.
69f0: 63 61 73 65 20 4f 50 5f 47 6f 73 75 62 3a 20 7b  case OP_Gosub: {
6a00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a              /* j
6a10: 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ump */.  assert(
6a20: 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f   pOp->p1>0 && pO
6a30: 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p1<=(p->nMem+
6a40: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
6a50: 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
6a60: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
6a70: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
6a80: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
6a90: 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
6aa0: 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b 0a 20 20  nge(p, pIn1);.  
6ab0: 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pIn1->flags = ME
6ac0: 4d 5f 49 6e 74 3b 0a 20 20 70 49 6e 31 2d 3e 75  M_Int;.  pIn1->u
6ad0: 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f 70 2d 61  .i = (int)(pOp-a
6ae0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
6af0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
6b00: 49 6e 31 29 3b 0a 0a 20 20 2f 2a 20 4d 6f 73 74  In1);..  /* Most
6b10: 20 6a 75 6d 70 20 6f 70 65 72 61 74 69 6f 6e 73   jump operations
6b20: 20 64 6f 20 61 20 67 6f 74 6f 20 74 6f 20 74 68   do a goto to th
6b30: 69 73 20 73 70 6f 74 20 69 6e 20 6f 72 64 65 72  is spot in order
6b40: 20 74 6f 20 75 70 64 61 74 65 0a 20 20 2a 2a 20   to update.  ** 
6b50: 74 68 65 20 70 4f 70 20 70 6f 69 6e 74 65 72 2e  the pOp pointer.
6b60: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 3a 0a   */.jump_to_p2:.
6b70: 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70    pOp = &aOp[pOp
6b80: 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 62 72 65  ->p2 - 1];.  bre
6b90: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
6ba0: 3a 20 20 52 65 74 75 72 6e 20 50 31 20 2a 20 2a  :  Return P1 * *
6bb0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
6bc0: 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
6bd0: 72 75 63 74 69 6f 6e 20 61 66 74 65 72 20 74 68  ruction after th
6be0: 65 20 61 64 64 72 65 73 73 20 69 6e 20 72 65 67  e address in reg
6bf0: 69 73 74 65 72 20 50 31 2e 20 20 41 66 74 65 72  ister P1.  After
6c00: 0a 2a 2a 20 74 68 65 20 6a 75 6d 70 2c 20 72 65  .** the jump, re
6c10: 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d 65  gister P1 become
6c20: 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a  s undefined..*/.
6c30: 63 61 73 65 20 4f 50 5f 52 65 74 75 72 6e 3a 20  case OP_Return: 
6c40: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
6c50: 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  n1 */.  pIn1 = &
6c60: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
6c70: 20 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66   assert( pIn1->f
6c80: 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b  lags==MEM_Int );
6c90: 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 49  .  pOp = &aOp[pI
6ca0: 6e 31 2d 3e 75 2e 69 5d 3b 0a 20 20 70 49 6e 31  n1->u.i];.  pIn1
6cb0: 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e  ->flags = MEM_Un
6cc0: 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b  defined;.  break
6cd0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
6ce0: 49 6e 69 74 43 6f 72 6f 75 74 69 6e 65 20 50 31  InitCoroutine P1
6cf0: 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a   P2 P3 * *.**.**
6d00: 20 53 65 74 20 75 70 20 72 65 67 69 73 74 65 72   Set up register
6d10: 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 77   P1 so that it w
6d20: 69 6c 6c 20 59 69 65 6c 64 20 74 6f 20 74 68 65  ill Yield to the
6d30: 20 63 6f 72 6f 75 74 69 6e 65 0a 2a 2a 20 6c 6f   coroutine.** lo
6d40: 63 61 74 65 64 20 61 74 20 61 64 64 72 65 73 73  cated at address
6d50: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32   P3..**.** If P2
6d60: 21 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 72  !=0 then the cor
6d70: 6f 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74  outine implement
6d80: 61 74 69 6f 6e 20 69 6d 6d 65 64 69 61 74 65 6c  ation immediatel
6d90: 79 20 66 6f 6c 6c 6f 77 73 0a 2a 2a 20 74 68 69  y follows.** thi
6da0: 73 20 6f 70 63 6f 64 65 2e 20 20 53 6f 20 6a 75  s opcode.  So ju
6db0: 6d 70 20 6f 76 65 72 20 74 68 65 20 63 6f 72 6f  mp over the coro
6dc0: 75 74 69 6e 65 20 69 6d 70 6c 65 6d 65 6e 74 61  utine implementa
6dd0: 74 69 6f 6e 20 74 6f 0a 2a 2a 20 61 64 64 72 65  tion to.** addre
6de0: 73 73 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65  ss P2..**.** See
6df0: 20 61 6c 73 6f 3a 20 45 6e 64 43 6f 72 6f 75 74   also: EndCorout
6e00: 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  ine.*/.case OP_I
6e10: 6e 69 74 43 6f 72 6f 75 74 69 6e 65 3a 20 7b 20  nitCoroutine: { 
6e20: 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
6e30: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
6e40: 3e 30 20 26 26 20 20 70 4f 70 2d 3e 70 31 3c 3d  >0 &&  pOp->p1<=
6e50: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
6e60: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
6e70: 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
6e80: 20 26 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e   && pOp->p2<p->n
6e90: 4f 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Op );.  assert( 
6ea0: 70 4f 70 2d 3e 70 33 3e 3d 30 20 26 26 20 70 4f  pOp->p3>=0 && pO
6eb0: 70 2d 3e 70 33 3c 70 2d 3e 6e 4f 70 20 29 3b 0a  p->p3<p->nOp );.
6ec0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
6ed0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72  Op->p1];.  asser
6ee0: 74 28 20 21 56 64 62 65 4d 65 6d 44 79 6e 61 6d  t( !VdbeMemDynam
6ef0: 69 63 28 70 4f 75 74 29 20 29 3b 0a 20 20 70 4f  ic(pOut) );.  pO
6f00: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
6f10: 33 20 2d 20 31 3b 0a 20 20 70 4f 75 74 2d 3e 66  3 - 1;.  pOut->f
6f20: 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a  lags = MEM_Int;.
6f30: 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 29 20    if( pOp->p2 ) 
6f40: 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
6f50: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
6f60: 4f 70 63 6f 64 65 3a 20 20 45 6e 64 43 6f 72 6f  Opcode:  EndCoro
6f70: 75 74 69 6e 65 20 50 31 20 2a 20 2a 20 2a 20 2a  utine P1 * * * *
6f80: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 73 74 72  .**.** The instr
6f90: 75 63 74 69 6f 6e 20 61 74 20 74 68 65 20 61 64  uction at the ad
6fa0: 64 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65  dress in registe
6fb0: 72 20 50 31 20 69 73 20 61 20 59 69 65 6c 64 2e  r P1 is a Yield.
6fc0: 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20  .** Jump to the 
6fd0: 50 32 20 70 61 72 61 6d 65 74 65 72 20 6f 66 20  P2 parameter of 
6fe0: 74 68 61 74 20 59 69 65 6c 64 2e 0a 2a 2a 20 41  that Yield..** A
6ff0: 66 74 65 72 20 74 68 65 20 6a 75 6d 70 2c 20 72  fter the jump, r
7000: 65 67 69 73 74 65 72 20 50 31 20 62 65 63 6f 6d  egister P1 becom
7010: 65 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a  es undefined..**
7020: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e  .** See also: In
7030: 69 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63  itCoroutine.*/.c
7040: 61 73 65 20 4f 50 5f 45 6e 64 43 6f 72 6f 75 74  ase OP_EndCorout
7050: 69 6e 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ine: {          
7060: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 56 64 62   /* in1 */.  Vdb
7070: 65 4f 70 20 2a 70 43 61 6c 6c 65 72 3b 0a 20 20  eOp *pCaller;.  
7080: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
7090: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
70a0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d 3d 4d 45   pIn1->flags==ME
70b0: 4d 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72  M_Int );.  asser
70c0: 74 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 3d 30 20  t( pIn1->u.i>=0 
70d0: 26 26 20 70 49 6e 31 2d 3e 75 2e 69 3c 70 2d 3e  && pIn1->u.i<p->
70e0: 6e 4f 70 20 29 3b 0a 20 20 70 43 61 6c 6c 65 72  nOp );.  pCaller
70f0: 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75 2e   = &aOp[pIn1->u.
7100: 69 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  i];.  assert( pC
7110: 61 6c 6c 65 72 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  aller->opcode==O
7120: 50 5f 59 69 65 6c 64 20 29 3b 0a 20 20 61 73 73  P_Yield );.  ass
7130: 65 72 74 28 20 70 43 61 6c 6c 65 72 2d 3e 70 32  ert( pCaller->p2
7140: 3e 3d 30 20 26 26 20 70 43 61 6c 6c 65 72 2d 3e  >=0 && pCaller->
7150: 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70  p2<p->nOp );.  p
7160: 4f 70 20 3d 20 26 61 4f 70 5b 70 43 61 6c 6c 65  Op = &aOp[pCalle
7170: 72 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 70 49  r->p2 - 1];.  pI
7180: 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  n1->flags = MEM_
7190: 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 62 72 65  Undefined;.  bre
71a0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
71b0: 3a 20 20 59 69 65 6c 64 20 50 31 20 50 32 20 2a  :  Yield P1 P2 *
71c0: 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 77 61 70 20   * *.**.** Swap 
71d0: 74 68 65 20 70 72 6f 67 72 61 6d 20 63 6f 75 6e  the program coun
71e0: 74 65 72 20 77 69 74 68 20 74 68 65 20 76 61 6c  ter with the val
71f0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
7200: 31 2e 20 20 54 68 69 73 0a 2a 2a 20 68 61 73 20  1.  This.** has 
7210: 74 68 65 20 65 66 66 65 63 74 20 6f 66 20 79 69  the effect of yi
7220: 65 6c 64 69 6e 67 20 74 6f 20 61 20 63 6f 72 6f  elding to a coro
7230: 75 74 69 6e 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  utine..**.** If 
7240: 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20 74 68  the coroutine th
7250: 61 74 20 69 73 20 6c 61 75 6e 63 68 65 64 20 62  at is launched b
7260: 79 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  y this instructi
7270: 6f 6e 20 65 6e 64 73 20 77 69 74 68 0a 2a 2a 20  on ends with.** 
7280: 59 69 65 6c 64 20 6f 72 20 52 65 74 75 72 6e 20  Yield or Return 
7290: 74 68 65 6e 20 63 6f 6e 74 69 6e 75 65 20 74 6f  then continue to
72a0: 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
72b0: 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 0a 2a  ction.  But if.*
72c0: 2a 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65 20  * the coroutine 
72d0: 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69 73  launched by this
72e0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e 64   instruction end
72f0: 73 20 77 69 74 68 0a 2a 2a 20 45 6e 64 43 6f 72  s with.** EndCor
7300: 6f 75 74 69 6e 65 2c 20 74 68 65 6e 20 6a 75 6d  outine, then jum
7310: 70 20 74 6f 20 50 32 20 72 61 74 68 65 72 20 74  p to P2 rather t
7320: 68 61 6e 20 63 6f 6e 74 69 6e 75 69 6e 67 20 77  han continuing w
7330: 69 74 68 20 74 68 65 0a 2a 2a 20 6e 65 78 74 20  ith the.** next 
7340: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
7350: 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 49 6e 69  ** See also: Ini
7360: 74 43 6f 72 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61  tCoroutine.*/.ca
7370: 73 65 20 4f 50 5f 59 69 65 6c 64 3a 20 7b 20 20  se OP_Yield: {  
7380: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31            /* in1
7390: 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 69 6e 74 20  , jump */.  int 
73a0: 70 63 44 65 73 74 3b 0a 20 20 70 49 6e 31 20 3d  pcDest;.  pIn1 =
73b0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
73c0: 0a 20 20 61 73 73 65 72 74 28 20 56 64 62 65 4d  .  assert( VdbeM
73d0: 65 6d 44 79 6e 61 6d 69 63 28 70 49 6e 31 29 3d  emDynamic(pIn1)=
73e0: 3d 30 20 29 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c  =0 );.  pIn1->fl
73f0: 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
7400: 20 70 63 44 65 73 74 20 3d 20 28 69 6e 74 29 70   pcDest = (int)p
7410: 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 70 49 6e 31  In1->u.i;.  pIn1
7420: 2d 3e 75 2e 69 20 3d 20 28 69 6e 74 29 28 70 4f  ->u.i = (int)(pO
7430: 70 20 2d 20 61 4f 70 29 3b 0a 20 20 52 45 47 49  p - aOp);.  REGI
7440: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
7450: 70 31 2c 20 70 49 6e 31 29 3b 0a 20 20 70 4f 70  p1, pIn1);.  pOp
7460: 20 3d 20 26 61 4f 70 5b 70 63 44 65 73 74 5d 3b   = &aOp[pcDest];
7470: 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
7480: 4f 70 63 6f 64 65 3a 20 20 48 61 6c 74 49 66 4e  Opcode:  HaltIfN
7490: 75 6c 6c 20 20 50 31 20 50 32 20 50 33 20 50 34  ull  P1 P2 P3 P4
74a0: 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
74b0: 20 69 66 20 72 5b 50 33 5d 3d 6e 75 6c 6c 20 68   if r[P3]=null h
74c0: 61 6c 74 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 20  alt.**.** Check 
74d0: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
74e0: 69 73 74 65 72 20 50 33 2e 20 20 49 66 20 69 74  ister P3.  If it
74f0: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 48 61   is NULL then Ha
7500: 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 70 61 72 61  lt using.** para
7510: 6d 65 74 65 72 20 50 31 2c 20 50 32 2c 20 61 6e  meter P1, P2, an
7520: 64 20 50 34 20 61 73 20 69 66 20 74 68 69 73 20  d P4 as if this 
7530: 77 65 72 65 20 61 20 48 61 6c 74 20 69 6e 73 74  were a Halt inst
7540: 72 75 63 74 69 6f 6e 2e 20 20 49 66 20 74 68 65  ruction.  If the
7550: 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20 72 65 67  .** value in reg
7560: 69 73 74 65 72 20 50 33 20 69 73 20 6e 6f 74 20  ister P3 is not 
7570: 4e 55 4c 4c 2c 20 74 68 65 6e 20 74 68 69 73 20  NULL, then this 
7580: 72 6f 75 74 69 6e 65 20 69 73 20 61 20 6e 6f 2d  routine is a no-
7590: 6f 70 2e 0a 2a 2a 20 54 68 65 20 50 35 20 70 61  op..** The P5 pa
75a0: 72 61 6d 65 74 65 72 20 73 68 6f 75 6c 64 20 62  rameter should b
75b0: 65 20 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  e 1..*/.case OP_
75c0: 48 61 6c 74 49 66 4e 75 6c 6c 3a 20 7b 20 20 20  HaltIfNull: {   
75d0: 20 20 20 2f 2a 20 69 6e 33 20 2a 2f 0a 20 20 70     /* in3 */.  p
75e0: 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In3 = &aMem[pOp-
75f0: 3e 70 33 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e  >p3];.  if( (pIn
7600: 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e  3->flags & MEM_N
7610: 75 6c 6c 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b  ull)==0 ) break;
7620: 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
7630: 67 68 20 69 6e 74 6f 20 4f 50 5f 48 61 6c 74 20  gh into OP_Halt 
7640: 2a 2f 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  */.}../* Opcode:
7650: 20 20 48 61 6c 74 20 50 31 20 50 32 20 2a 20 50    Halt P1 P2 * P
7660: 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78 69 74 20  4 P5.**.** Exit 
7670: 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 20 41 6c  immediately.  Al
7680: 6c 20 6f 70 65 6e 20 63 75 72 73 6f 72 73 2c 20  l open cursors, 
7690: 65 74 63 20 61 72 65 20 63 6c 6f 73 65 64 0a 2a  etc are closed.*
76a0: 2a 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  * automatically.
76b0: 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65  .**.** P1 is the
76c0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 72 65 74   result code ret
76d0: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
76e0: 5f 65 78 65 63 28 29 2c 20 73 71 6c 69 74 65 33  _exec(), sqlite3
76f0: 5f 72 65 73 65 74 28 29 2c 0a 2a 2a 20 6f 72 20  _reset(),.** or 
7700: 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65  sqlite3_finalize
7710: 28 29 2e 20 20 46 6f 72 20 61 20 6e 6f 72 6d 61  ().  For a norma
7720: 6c 20 68 61 6c 74 2c 20 74 68 69 73 20 73 68 6f  l halt, this sho
7730: 75 6c 64 20 62 65 20 53 51 4c 49 54 45 5f 4f 4b  uld be SQLITE_OK
7740: 20 28 30 29 2e 0a 2a 2a 20 46 6f 72 20 65 72 72   (0)..** For err
7750: 6f 72 73 2c 20 69 74 20 63 61 6e 20 62 65 20 73  ors, it can be s
7760: 6f 6d 65 20 6f 74 68 65 72 20 76 61 6c 75 65 2e  ome other value.
7770: 20 20 49 66 20 50 31 21 3d 30 20 74 68 65 6e 20    If P1!=0 then 
7780: 50 32 20 77 69 6c 6c 20 64 65 74 65 72 6d 69 6e  P2 will determin
7790: 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6f 72 20  e.** whether or 
77a0: 6e 6f 74 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20  not to rollback 
77b0: 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e  the current tran
77c0: 73 61 63 74 69 6f 6e 2e 20 20 44 6f 20 6e 6f 74  saction.  Do not
77d0: 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 69 66 20   rollback.** if 
77e0: 50 32 3d 3d 4f 45 5f 46 61 69 6c 2e 20 44 6f 20  P2==OE_Fail. Do 
77f0: 74 68 65 20 72 6f 6c 6c 62 61 63 6b 20 69 66 20  the rollback if 
7800: 50 32 3d 3d 4f 45 5f 52 6f 6c 6c 62 61 63 6b 2e  P2==OE_Rollback.
7810: 20 20 49 66 20 50 32 3d 3d 4f 45 5f 41 62 6f 72    If P2==OE_Abor
7820: 74 2c 0a 2a 2a 20 74 68 65 6e 20 62 61 63 6b 20  t,.** then back 
7830: 6f 75 74 20 61 6c 6c 20 63 68 61 6e 67 65 73 20  out all changes 
7840: 74 68 61 74 20 68 61 76 65 20 6f 63 63 75 72 72  that have occurr
7850: 65 64 20 64 75 72 69 6e 67 20 74 68 69 73 20 65  ed during this e
7860: 78 65 63 75 74 69 6f 6e 20 6f 66 20 74 68 65 0a  xecution of the.
7870: 2a 2a 20 56 44 42 45 2c 20 62 75 74 20 64 6f 20  ** VDBE, but do 
7880: 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65  not rollback the
7890: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 0a 2a   transaction. .*
78a0: 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e 6f  *.** If P4 is no
78b0: 74 20 6e 75 6c 6c 20 74 68 65 6e 20 69 74 20 69  t null then it i
78c0: 73 20 61 6e 20 65 72 72 6f 72 20 6d 65 73 73 61  s an error messa
78d0: 67 65 20 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a  ge string..**.**
78e0: 20 50 35 20 69 73 20 61 20 76 61 6c 75 65 20 62   P5 is a value b
78f0: 65 74 77 65 65 6e 20 30 20 61 6e 64 20 34 2c 20  etween 0 and 4, 
7900: 69 6e 63 6c 75 73 69 76 65 2c 20 74 68 61 74 20  inclusive, that 
7910: 6d 6f 64 69 66 69 65 73 20 74 68 65 20 50 34 20  modifies the P4 
7920: 73 74 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 20 20  string..**.**   
7930: 20 30 3a 20 20 28 6e 6f 20 63 68 61 6e 67 65 29   0:  (no change)
7940: 0a 2a 2a 20 20 20 20 31 3a 20 20 4e 4f 54 20 4e  .**    1:  NOT N
7950: 55 4c 4c 20 63 6f 6e 74 72 61 69 6e 74 20 66 61  ULL contraint fa
7960: 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20 20 32  iled: P4.**    2
7970: 3a 20 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72  :  UNIQUE constr
7980: 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34 0a  aint failed: P4.
7990: 2a 2a 20 20 20 20 33 3a 20 20 43 48 45 43 4b 20  **    3:  CHECK 
79a0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
79b0: 64 3a 20 50 34 0a 2a 2a 20 20 20 20 34 3a 20 20  d: P4.**    4:  
79c0: 46 4f 52 45 49 47 4e 20 4b 45 59 20 63 6f 6e 73  FOREIGN KEY cons
79d0: 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50  traint failed: P
79e0: 34 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73  4.**.** If P5 is
79f0: 20 6e 6f 74 20 7a 65 72 6f 20 61 6e 64 20 50 34   not zero and P4
7a00: 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 65   is NULL, then e
7a10: 76 65 72 79 74 68 69 6e 67 20 61 66 74 65 72 20  verything after 
7a20: 74 68 65 20 22 3a 22 20 69 73 0a 2a 2a 20 6f 6d  the ":" is.** om
7a30: 69 74 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  itted..**.** The
7a40: 72 65 20 69 73 20 61 6e 20 69 6d 70 6c 69 65 64  re is an implied
7a50: 20 22 48 61 6c 74 20 30 20 30 20 30 22 20 69 6e   "Halt 0 0 0" in
7a60: 73 74 72 75 63 74 69 6f 6e 20 69 6e 73 65 72 74  struction insert
7a70: 65 64 20 61 74 20 74 68 65 20 76 65 72 79 20 65  ed at the very e
7a80: 6e 64 20 6f 66 0a 2a 2a 20 65 76 65 72 79 20 70  nd of.** every p
7a90: 72 6f 67 72 61 6d 2e 20 20 53 6f 20 61 20 6a 75  rogram.  So a ju
7aa0: 6d 70 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  mp past the last
7ab0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f 66 20   instruction of 
7ac0: 74 68 65 20 70 72 6f 67 72 61 6d 0a 2a 2a 20 69  the program.** i
7ad0: 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 65 78  s the same as ex
7ae0: 65 63 75 74 69 6e 67 20 48 61 6c 74 2e 0a 2a 2f  ecuting Halt..*/
7af0: 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 3a 20 7b  .case OP_Halt: {
7b00: 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70 46  .  VdbeFrame *pF
7b10: 72 61 6d 65 3b 0a 20 20 69 6e 74 20 70 63 78 3b  rame;.  int pcx;
7b20: 0a 0a 20 20 70 63 78 20 3d 20 28 69 6e 74 29 28  ..  pcx = (int)(
7b30: 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 69 66  pOp - aOp);.  if
7b40: 28 20 70 4f 70 2d 3e 70 31 3d 3d 53 51 4c 49 54  ( pOp->p1==SQLIT
7b50: 45 5f 4f 4b 20 26 26 20 70 2d 3e 70 46 72 61 6d  E_OK && p->pFram
7b60: 65 20 29 7b 0a 20 20 20 20 2f 2a 20 48 61 6c 74  e ){.    /* Halt
7b70: 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d   the sub-program
7b80: 2e 20 52 65 74 75 72 6e 20 63 6f 6e 74 72 6f 6c  . Return control
7b90: 20 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 66   to the parent f
7ba0: 72 61 6d 65 2e 20 2a 2f 0a 20 20 20 20 70 46 72  rame. */.    pFr
7bb0: 61 6d 65 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b  ame = p->pFrame;
7bc0: 0a 20 20 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  .    p->pFrame =
7bd0: 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
7be0: 3b 0a 20 20 20 20 70 2d 3e 6e 46 72 61 6d 65 2d  ;.    p->nFrame-
7bf0: 2d 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  -;.    sqlite3Vd
7c00: 62 65 53 65 74 43 68 61 6e 67 65 73 28 64 62 2c  beSetChanges(db,
7c10: 20 70 2d 3e 6e 43 68 61 6e 67 65 29 3b 0a 20 20   p->nChange);.  
7c20: 20 20 70 63 78 20 3d 20 73 71 6c 69 74 65 33 56    pcx = sqlite3V
7c30: 64 62 65 46 72 61 6d 65 52 65 73 74 6f 72 65 28  dbeFrameRestore(
7c40: 70 46 72 61 6d 65 29 3b 0a 20 20 20 20 69 66 28  pFrame);.    if(
7c50: 20 70 4f 70 2d 3e 70 32 3d 3d 4f 45 5f 49 67 6e   pOp->p2==OE_Ign
7c60: 6f 72 65 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ore ){.      /* 
7c70: 49 6e 73 74 72 75 63 74 69 6f 6e 20 70 63 78 20  Instruction pcx 
7c80: 69 73 20 74 68 65 20 4f 50 5f 50 72 6f 67 72 61  is the OP_Progra
7c90: 6d 20 74 68 61 74 20 69 6e 76 6f 6b 65 64 20 74  m that invoked t
7ca0: 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 0a  he sub-program .
7cb0: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
7cc0: 6c 79 20 62 65 69 6e 67 20 68 61 6c 74 65 64 2e  ly being halted.
7cd0: 20 49 66 20 74 68 65 20 70 32 20 69 6e 73 74 72   If the p2 instr
7ce0: 75 63 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 4f  uction of this O
7cf0: 50 5f 48 61 6c 74 0a 20 20 20 20 20 20 2a 2a 20  P_Halt.      ** 
7d00: 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 73  instruction is s
7d10: 65 74 20 74 6f 20 4f 45 5f 49 67 6e 6f 72 65 2c  et to OE_Ignore,
7d20: 20 74 68 65 6e 20 74 68 65 20 73 75 62 2d 70 72   then the sub-pr
7d30: 6f 67 72 61 6d 20 69 73 20 74 68 72 6f 77 69 6e  ogram is throwin
7d40: 67 0a 20 20 20 20 20 20 2a 2a 20 61 6e 20 49 47  g.      ** an IG
7d50: 4e 4f 52 45 20 65 78 63 65 70 74 69 6f 6e 2e 20  NORE exception. 
7d60: 49 6e 20 74 68 69 73 20 63 61 73 65 20 6a 75 6d  In this case jum
7d70: 70 20 74 6f 20 74 68 65 20 61 64 64 72 65 73 73  p to the address
7d80: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
7d90: 20 2a 2a 20 61 73 20 74 68 65 20 70 32 20 6f 66   ** as the p2 of
7da0: 20 74 68 65 20 63 61 6c 6c 69 6e 67 20 4f 50 5f   the calling OP_
7db0: 50 72 6f 67 72 61 6d 2e 20 20 2a 2f 0a 20 20 20  Program.  */.   
7dc0: 20 20 20 70 63 78 20 3d 20 70 2d 3e 61 4f 70 5b     pcx = p->aOp[
7dd0: 70 63 78 5d 2e 70 32 2d 31 3b 0a 20 20 20 20 7d  pcx].p2-1;.    }
7de0: 0a 20 20 20 20 61 4f 70 20 3d 20 70 2d 3e 61 4f  .    aOp = p->aO
7df0: 70 3b 0a 20 20 20 20 61 4d 65 6d 20 3d 20 70 2d  p;.    aMem = p-
7e00: 3e 61 4d 65 6d 3b 0a 20 20 20 20 70 4f 70 20 3d  >aMem;.    pOp =
7e10: 20 26 61 4f 70 5b 70 63 78 5d 3b 0a 20 20 20 20   &aOp[pcx];.    
7e20: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 2d 3e  break;.  }.  p->
7e30: 72 63 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20  rc = pOp->p1;.  
7e40: 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
7e50: 20 28 75 38 29 70 4f 70 2d 3e 70 32 3b 0a 20 20   (u8)pOp->p2;.  
7e60: 70 2d 3e 70 63 20 3d 20 70 63 78 3b 0a 20 20 61  p->pc = pcx;.  a
7e70: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c 3d  ssert( pOp->p5<=
7e80: 34 20 29 3b 0a 20 20 69 66 28 20 70 2d 3e 72 63  4 );.  if( p->rc
7e90: 20 29 7b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d   ){.    if( pOp-
7ea0: 3e 70 35 20 29 7b 0a 20 20 20 20 20 20 73 74 61  >p5 ){.      sta
7eb0: 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
7ec0: 20 63 6f 6e 73 74 20 61 7a 54 79 70 65 5b 5d 20   const azType[] 
7ed0: 3d 20 7b 20 22 4e 4f 54 20 4e 55 4c 4c 22 2c 20  = { "NOT NULL", 
7ee0: 22 55 4e 49 51 55 45 22 2c 20 22 43 48 45 43 4b  "UNIQUE", "CHECK
7ef0: 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ",.             
7f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f20: 22 46 4f 52 45 49 47 4e 20 4b 45 59 22 20 7d 3b  "FOREIGN KEY" };
7f30: 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
7f40: 20 70 4f 70 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20   pOp->p5==1 );. 
7f50: 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
7f60: 4f 70 2d 3e 70 35 3d 3d 32 20 29 3b 0a 20 20 20  Op->p5==2 );.   
7f70: 20 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70     testcase( pOp
7f80: 2d 3e 70 35 3d 3d 33 20 29 3b 0a 20 20 20 20 20  ->p5==3 );.     
7f90: 20 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e   testcase( pOp->
7fa0: 70 35 3d 3d 34 20 29 3b 0a 20 20 20 20 20 20 73  p5==4 );.      s
7fb0: 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
7fc0: 70 2c 20 22 25 73 20 63 6f 6e 73 74 72 61 69 6e  p, "%s constrain
7fd0: 74 20 66 61 69 6c 65 64 22 2c 20 61 7a 54 79 70  t failed", azTyp
7fe0: 65 5b 70 4f 70 2d 3e 70 35 2d 31 5d 29 3b 0a 20  e[pOp->p5-1]);. 
7ff0: 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
8000: 2e 7a 20 29 7b 0a 20 20 20 20 20 20 20 20 70 2d  .z ){.        p-
8010: 3e 7a 45 72 72 4d 73 67 20 3d 20 73 71 6c 69 74  >zErrMsg = sqlit
8020: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 25  e3MPrintf(db, "%
8030: 7a 3a 20 25 73 22 2c 20 70 2d 3e 7a 45 72 72 4d  z: %s", p->zErrM
8040: 73 67 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a  sg, pOp->p4.z);.
8050: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
8060: 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e{.      sqlite3
8070: 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73  VdbeError(p, "%s
8080: 22 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20  ", pOp->p4.z);. 
8090: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
80a0: 5f 6c 6f 67 28 70 4f 70 2d 3e 70 31 2c 20 22 61  _log(pOp->p1, "a
80b0: 62 6f 72 74 20 61 74 20 25 64 20 69 6e 20 5b 25  bort at %d in [%
80c0: 73 5d 3a 20 25 73 22 2c 20 70 63 78 2c 20 70 2d  s]: %s", pcx, p-
80d0: 3e 7a 53 71 6c 2c 20 70 2d 3e 7a 45 72 72 4d 73  >zSql, p->zErrMs
80e0: 67 29 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73  g);.  }.  rc = s
80f0: 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28 70  qlite3VdbeHalt(p
8100: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
8110: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 7c 7c 20  =SQLITE_BUSY || 
8120: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc==SQLITE_OK ||
8130: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 45 52 52 4f   rc==SQLITE_ERRO
8140: 52 20 29 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53  R );.  if( rc==S
8150: 51 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20  QLITE_BUSY ){.  
8160: 20 20 70 2d 3e 72 63 20 3d 20 53 51 4c 49 54 45    p->rc = SQLITE
8170: 5f 42 55 53 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a  _BUSY;.  }else{.
8180: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8190: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 28 70 2d  SQLITE_OK || (p-
81a0: 3e 72 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54  >rc&0xff)==SQLIT
81b0: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 29 3b 0a  E_CONSTRAINT );.
81c0: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
81d0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 64 62 2d  SQLITE_OK || db-
81e0: 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3e 30  >nDeferredCons>0
81f0: 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   || db->nDeferre
8200: 64 49 6d 6d 43 6f 6e 73 3e 30 20 29 3b 0a 20 20  dImmCons>0 );.  
8210: 20 20 72 63 20 3d 20 70 2d 3e 72 63 20 3f 20 53    rc = p->rc ? S
8220: 51 4c 49 54 45 5f 45 52 52 4f 52 20 3a 20 53 51  QLITE_ERROR : SQ
8230: 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20 7d 0a 20  LITE_DONE;.  }. 
8240: 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
8250: 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n;.}../* Opcode:
8260: 20 49 6e 74 65 67 65 72 20 50 31 20 50 32 20 2a   Integer P1 P2 *
8270: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8280: 3a 20 72 5b 50 32 5d 3d 50 31 0a 2a 2a 0a 2a 2a  : r[P2]=P1.**.**
8290: 20 54 68 65 20 33 32 2d 62 69 74 20 69 6e 74 65   The 32-bit inte
82a0: 67 65 72 20 76 61 6c 75 65 20 50 31 20 69 73 20  ger value P1 is 
82b0: 77 72 69 74 74 65 6e 20 69 6e 74 6f 20 72 65 67  written into reg
82c0: 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73  ister P2..*/.cas
82d0: 65 20 4f 50 5f 49 6e 74 65 67 65 72 3a 20 7b 20  e OP_Integer: { 
82e0: 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20          /* out2 
82f0: 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  */.  pOut = out2
8300: 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
8310: 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
8320: 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 62 72 65  = pOp->p1;.  bre
8330: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
8340: 3a 20 49 6e 74 36 34 20 2a 20 50 32 20 2a 20 50  : Int64 * P2 * P
8350: 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
8360: 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20   r[P2]=P4.**.** 
8370: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
8380: 74 6f 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  to a 64-bit inte
8390: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2a 20 57 72  ger value..** Wr
83a0: 69 74 65 20 74 68 61 74 20 76 61 6c 75 65 20 69  ite that value i
83b0: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e  nto register P2.
83c0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74 36  .*/.case OP_Int6
83d0: 34 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  4: {           /
83e0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74  * out2 */.  pOut
83f0: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8400: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73  e(p, pOp);.  ass
8410: 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 49 36  ert( pOp->p4.pI6
8420: 34 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 2d 3e  4!=0 );.  pOut->
8430: 75 2e 69 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70  u.i = *pOp->p4.p
8440: 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  I64;.  break;.}.
8450: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
8460: 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
8470: 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  INT./* Opcode: R
8480: 65 61 6c 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a  eal * P2 * P4 *.
8490: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
84a0: 32 5d 3d 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69  2]=P4.**.** P4 i
84b0: 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
84c0: 20 36 34 2d 62 69 74 20 66 6c 6f 61 74 69 6e 67   64-bit floating
84d0: 20 70 6f 69 6e 74 20 76 61 6c 75 65 2e 0a 2a 2a   point value..**
84e0: 20 57 72 69 74 65 20 74 68 61 74 20 76 61 6c 75   Write that valu
84f0: 65 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  e into register 
8500: 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
8510: 65 61 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20  eal: {          
8520: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
8530: 46 4c 4f 41 54 2c 20 6f 75 74 32 20 2a 2f 0a 20  FLOAT, out2 */. 
8540: 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
8550: 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
8560: 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20    pOut->flags = 
8570: 4d 45 4d 5f 52 65 61 6c 3b 0a 20 20 61 73 73 65  MEM_Real;.  asse
8580: 72 74 28 20 21 73 71 6c 69 74 65 33 49 73 4e 61  rt( !sqlite3IsNa
8590: 4e 28 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61 6c  N(*pOp->p4.pReal
85a0: 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 72  ) );.  pOut->u.r
85b0: 20 3d 20 2a 70 4f 70 2d 3e 70 34 2e 70 52 65 61   = *pOp->p4.pRea
85c0: 6c 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65  l;.  break;.}.#e
85d0: 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  ndif../* Opcode:
85e0: 20 53 74 72 69 6e 67 38 20 2a 20 50 32 20 2a 20   String8 * P2 * 
85f0: 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
8600: 3a 20 72 5b 50 32 5d 3d 27 50 34 27 0a 2a 2a 0a  : r[P2]='P4'.**.
8610: 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20 74 6f 20  ** P4 points to 
8620: 61 20 6e 75 6c 20 74 65 72 6d 69 6e 61 74 65 64  a nul terminated
8630: 20 55 54 46 2d 38 20 73 74 72 69 6e 67 2e 20 54   UTF-8 string. T
8640: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 74 72  his opcode is tr
8650: 61 6e 73 66 6f 72 6d 65 64 20 0a 2a 2a 20 69 6e  ansformed .** in
8660: 74 6f 20 61 20 53 74 72 69 6e 67 20 6f 70 63 6f  to a String opco
8670: 64 65 20 62 65 66 6f 72 65 20 69 74 20 69 73 20  de before it is 
8680: 65 78 65 63 75 74 65 64 20 66 6f 72 20 74 68 65  executed for the
8690: 20 66 69 72 73 74 20 74 69 6d 65 2e 20 20 44 75   first time.  Du
86a0: 72 69 6e 67 0a 2a 2a 20 74 68 69 73 20 74 72 61  ring.** this tra
86b0: 6e 73 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65  nsformation, the
86c0: 20 6c 65 6e 67 74 68 20 6f 66 20 73 74 72 69 6e   length of strin
86d0: 67 20 50 34 20 69 73 20 63 6f 6d 70 75 74 65 64  g P4 is computed
86e0: 20 61 6e 64 20 73 74 6f 72 65 64 0a 2a 2a 20 61   and stored.** a
86f0: 73 20 74 68 65 20 50 31 20 70 61 72 61 6d 65 74  s the P1 paramet
8700: 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  er..*/.case OP_S
8710: 74 72 69 6e 67 38 3a 20 7b 20 20 20 20 20 20 20  tring8: {       
8720: 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
8730: 53 54 52 49 4e 47 2c 20 6f 75 74 32 20 2a 2f 0a  STRING, out2 */.
8740: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
8750: 34 2e 7a 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74  4.z!=0 );.  pOut
8760: 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73   = out2Prereleas
8770: 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 70  e(p, pOp);.  pOp
8780: 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 53 74  ->opcode = OP_St
8790: 72 69 6e 67 3b 0a 20 20 70 4f 70 2d 3e 70 31 20  ring;.  pOp->p1 
87a0: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
87b0: 30 28 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 0a 23  0(pOp->p4.z);..#
87c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
87d0: 49 54 5f 55 54 46 31 36 0a 20 20 69 66 28 20 65  IT_UTF16.  if( e
87e0: 6e 63 6f 64 69 6e 67 21 3d 53 51 4c 49 54 45 5f  ncoding!=SQLITE_
87f0: 55 54 46 38 20 29 7b 0a 20 20 20 20 72 63 20 3d  UTF8 ){.    rc =
8800: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
8810: 65 74 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d  etStr(pOut, pOp-
8820: 3e 70 34 2e 7a 2c 20 2d 31 2c 20 53 51 4c 49 54  >p4.z, -1, SQLIT
8830: 45 5f 55 54 46 38 2c 20 53 51 4c 49 54 45 5f 53  E_UTF8, SQLITE_S
8840: 54 41 54 49 43 29 3b 0a 20 20 20 20 61 73 73 65  TATIC);.    asse
8850: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
8860: 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c 49 54 45 5f  K || rc==SQLITE_
8870: 54 4f 4f 42 49 47 20 29 3b 0a 20 20 20 20 69 66  TOOBIG );.    if
8880: 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 73 71 6c  ( SQLITE_OK!=sql
8890: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
88a0: 63 6f 64 69 6e 67 28 70 4f 75 74 2c 20 65 6e 63  coding(pOut, enc
88b0: 6f 64 69 6e 67 29 20 29 20 67 6f 74 6f 20 6e 6f  oding) ) goto no
88c0: 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72 74  _mem;.    assert
88d0: 28 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f 63  ( pOut->szMalloc
88e0: 3e 30 20 26 26 20 70 4f 75 74 2d 3e 7a 4d 61 6c  >0 && pOut->zMal
88f0: 6c 6f 63 3d 3d 70 4f 75 74 2d 3e 7a 20 29 3b 0a  loc==pOut->z );.
8900: 20 20 20 20 61 73 73 65 72 74 28 20 56 64 62 65      assert( Vdbe
8910: 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f 75 74 29  MemDynamic(pOut)
8920: 3d 3d 30 20 29 3b 0a 20 20 20 20 70 4f 75 74 2d  ==0 );.    pOut-
8930: 3e 73 7a 4d 61 6c 6c 6f 63 20 3d 20 30 3b 0a 20  >szMalloc = 0;. 
8940: 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 7c     pOut->flags |
8950: 3d 20 4d 45 4d 5f 53 74 61 74 69 63 3b 0a 20 20  = MEM_Static;.  
8960: 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
8970: 65 3d 3d 50 34 5f 44 59 4e 41 4d 49 43 20 29 7b  e==P4_DYNAMIC ){
8980: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62  .      sqlite3Db
8990: 46 72 65 65 28 64 62 2c 20 70 4f 70 2d 3e 70 34  Free(db, pOp->p4
89a0: 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70  .z);.    }.    p
89b0: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
89c0: 44 59 4e 41 4d 49 43 3b 0a 20 20 20 20 70 4f 70  DYNAMIC;.    pOp
89d0: 2d 3e 70 34 2e 7a 20 3d 20 70 4f 75 74 2d 3e 7a  ->p4.z = pOut->z
89e0: 3b 0a 20 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20  ;.    pOp->p1 = 
89f0: 70 4f 75 74 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 74  pOut->n;.  }.  t
8a00: 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51 4c  estcase( rc==SQL
8a10: 49 54 45 5f 54 4f 4f 42 49 47 20 29 3b 0a 23 65  ITE_TOOBIG );.#e
8a20: 6e 64 69 66 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ndif.  if( pOp->
8a30: 70 31 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  p1>db->aLimit[SQ
8a40: 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
8a50: 48 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74  H] ){.    goto t
8a60: 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 61 73  oo_big;.  }.  as
8a70: 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45  sert( rc==SQLITE
8a80: 5f 4f 4b 20 29 3b 0a 20 20 2f 2a 20 46 61 6c 6c  _OK );.  /* Fall
8a90: 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
8aa0: 6e 65 78 74 20 63 61 73 65 2c 20 4f 50 5f 53 74  next case, OP_St
8ab0: 72 69 6e 67 20 2a 2f 0a 7d 0a 20 20 0a 2f 2a 20  ring */.}.  ./* 
8ac0: 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 20 50  Opcode: String P
8ad0: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
8ae0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
8af0: 3d 27 50 34 27 20 28 6c 65 6e 3d 50 31 29 0a 2a  ='P4' (len=P1).*
8b00: 2a 0a 2a 2a 20 54 68 65 20 73 74 72 69 6e 67 20  *.** The string 
8b10: 76 61 6c 75 65 20 50 34 20 6f 66 20 6c 65 6e 67  value P4 of leng
8b20: 74 68 20 50 31 20 28 62 79 74 65 73 29 20 69 73  th P1 (bytes) is
8b30: 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
8b40: 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66  ter P2..**.** If
8b50: 20 50 33 20 69 73 20 6e 6f 74 20 7a 65 72 6f 20   P3 is not zero 
8b60: 61 6e 64 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  and the content 
8b70: 6f 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69  of register P3 i
8b80: 73 20 65 71 75 61 6c 20 74 6f 20 50 35 2c 20 74  s equal to P5, t
8b90: 68 65 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 74  hen.** the datat
8ba0: 79 70 65 20 6f 66 20 74 68 65 20 72 65 67 69 73  ype of the regis
8bb0: 74 65 72 20 50 32 20 69 73 20 63 6f 6e 76 65 72  ter P2 is conver
8bc0: 74 65 64 20 74 6f 20 42 4c 4f 42 2e 20 20 54 68  ted to BLOB.  Th
8bd0: 65 20 63 6f 6e 74 65 6e 74 20 69 73 0a 2a 2a 20  e content is.** 
8be0: 74 68 65 20 73 61 6d 65 20 73 65 71 75 65 6e 63  the same sequenc
8bf0: 65 20 6f 66 20 62 79 74 65 73 2c 20 69 74 20 69  e of bytes, it i
8c00: 73 20 6d 65 72 65 6c 79 20 69 6e 74 65 72 70 72  s merely interpr
8c10: 65 74 65 64 20 61 73 20 61 20 42 4c 4f 42 20 69  eted as a BLOB i
8c20: 6e 73 74 65 61 64 0a 2a 2a 20 6f 66 20 61 20 73  nstead.** of a s
8c30: 74 72 69 6e 67 2c 20 61 73 20 69 66 20 69 74 20  tring, as if it 
8c40: 68 61 64 20 62 65 65 6e 20 43 41 53 54 2e 20 20  had been CAST.  
8c50: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 3a 0a  In other words:.
8c60: 2a 2a 0a 2a 2a 20 69 66 28 20 50 33 21 3d 30 20  **.** if( P3!=0 
8c70: 61 6e 64 20 72 65 67 5b 50 33 5d 3d 3d 50 35 20  and reg[P3]==P5 
8c80: 29 20 72 65 67 5b 50 32 5d 20 3a 3d 20 43 41 53  ) reg[P2] := CAS
8c90: 54 28 72 65 67 5b 50 32 5d 20 61 73 20 42 4c 4f  T(reg[P2] as BLO
8ca0: 42 29 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 74  B).*/.case OP_St
8cb0: 72 69 6e 67 3a 20 7b 20 20 20 20 20 20 20 20 20  ring: {         
8cc0: 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73   /* out2 */.  as
8cd0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e 7a 21  sert( pOp->p4.z!
8ce0: 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f  =0 );.  pOut = o
8cf0: 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c  ut2Prerelease(p,
8d00: 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 66   pOp);.  pOut->f
8d10: 6c 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d  lags = MEM_Str|M
8d20: 45 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65  EM_Static|MEM_Te
8d30: 72 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20  rm;.  pOut->z = 
8d40: 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20 20 70 4f 75  pOp->p4.z;.  pOu
8d50: 74 2d 3e 6e 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a  t->n = pOp->p1;.
8d60: 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e    pOut->enc = en
8d70: 63 6f 64 69 6e 67 3b 0a 20 20 55 50 44 41 54 45  coding;.  UPDATE
8d80: 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
8d90: 75 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ut);.#ifndef SQL
8da0: 49 54 45 5f 4c 49 4b 45 5f 44 4f 45 53 4e 54 5f  ITE_LIKE_DOESNT_
8db0: 4d 41 54 43 48 5f 42 4c 4f 42 53 0a 20 20 69 66  MATCH_BLOBS.  if
8dc0: 28 20 70 4f 70 2d 3e 70 33 3e 30 20 29 7b 0a 20  ( pOp->p3>0 ){. 
8dd0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
8de0: 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p3<=(p->nMem+1 -
8df0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
8e00: 20 20 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d      pIn3 = &aMem
8e10: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 61  [pOp->p3];.    a
8e20: 73 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61  ssert( pIn3->fla
8e30: 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a  gs & MEM_Int );.
8e40: 20 20 20 20 69 66 28 20 70 49 6e 33 2d 3e 75 2e      if( pIn3->u.
8e50: 69 3d 3d 70 4f 70 2d 3e 70 35 20 29 20 70 4f 75  i==pOp->p5 ) pOu
8e60: 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 42  t->flags = MEM_B
8e70: 6c 6f 62 7c 4d 45 4d 5f 53 74 61 74 69 63 7c 4d  lob|MEM_Static|M
8e80: 45 4d 5f 54 65 72 6d 3b 0a 20 20 7d 0a 23 65 6e  EM_Term;.  }.#en
8e90: 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  dif.  break;.}..
8ea0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 75 6c 6c 20  /* Opcode: Null 
8eb0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
8ec0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 2e 2e  Synopsis: r[P2..
8ed0: 50 33 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20 57  P3]=NULL.**.** W
8ee0: 72 69 74 65 20 61 20 4e 55 4c 4c 20 69 6e 74 6f  rite a NULL into
8ef0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 20 20   registers P2.  
8f00: 49 66 20 50 33 20 67 72 65 61 74 65 72 20 74 68  If P3 greater th
8f10: 61 6e 20 50 32 2c 20 74 68 65 6e 20 61 6c 73 6f  an P2, then also
8f20: 20 77 72 69 74 65 0a 2a 2a 20 4e 55 4c 4c 20 69   write.** NULL i
8f30: 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 20  nto register P3 
8f40: 61 6e 64 20 65 76 65 72 79 20 72 65 67 69 73 74  and every regist
8f50: 65 72 20 69 6e 20 62 65 74 77 65 65 6e 20 50 32  er in between P2
8f60: 20 61 6e 64 20 50 33 2e 20 20 49 66 20 50 33 0a   and P3.  If P3.
8f70: 2a 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ** is less than 
8f80: 50 32 20 28 74 79 70 69 63 61 6c 6c 79 20 50 33  P2 (typically P3
8f90: 20 69 73 20 7a 65 72 6f 29 20 74 68 65 6e 20 6f   is zero) then o
8fa0: 6e 6c 79 20 72 65 67 69 73 74 65 72 20 50 32 20  nly register P2 
8fb0: 69 73 0a 2a 2a 20 73 65 74 20 74 6f 20 4e 55 4c  is.** set to NUL
8fc0: 4c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  L..**.** If the 
8fd0: 50 31 20 76 61 6c 75 65 20 69 73 20 6e 6f 6e 2d  P1 value is non-
8fe0: 7a 65 72 6f 2c 20 74 68 65 6e 20 61 6c 73 6f 20  zero, then also 
8ff0: 73 65 74 20 74 68 65 20 4d 45 4d 5f 43 6c 65 61  set the MEM_Clea
9000: 72 65 64 20 66 6c 61 67 20 73 6f 20 74 68 61 74  red flag so that
9010: 0a 2a 2a 20 4e 55 4c 4c 20 76 61 6c 75 65 73 20  .** NULL values 
9020: 77 69 6c 6c 20 6e 6f 74 20 63 6f 6d 70 61 72 65  will not compare
9030: 20 65 71 75 61 6c 20 65 76 65 6e 20 69 66 20 53   equal even if S
9040: 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20  QLITE_NULLEQ is 
9050: 73 65 74 20 6f 6e 0a 2a 2a 20 4f 50 5f 4e 65 20  set on.** OP_Ne 
9060: 6f 72 20 4f 50 5f 45 71 2e 0a 2a 2f 0a 63 61 73  or OP_Eq..*/.cas
9070: 65 20 4f 50 5f 4e 75 6c 6c 3a 20 7b 20 20 20 20  e OP_Null: {    
9080: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
9090: 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 0a 20 20 75  /.  int cnt;.  u
90a0: 31 36 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20 20 70  16 nullFlag;.  p
90b0: 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
90c0: 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
90d0: 63 6e 74 20 3d 20 70 4f 70 2d 3e 70 33 2d 70 4f  cnt = pOp->p3-pO
90e0: 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28  p->p2;.  assert(
90f0: 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
9100: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
9110: 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c  r) );.  pOut->fl
9120: 61 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 20 3d  ags = nullFlag =
9130: 20 70 4f 70 2d 3e 70 31 20 3f 20 28 4d 45 4d 5f   pOp->p1 ? (MEM_
9140: 4e 75 6c 6c 7c 4d 45 4d 5f 43 6c 65 61 72 65 64  Null|MEM_Cleared
9150: 29 20 3a 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20  ) : MEM_Null;.  
9160: 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a 20 20 77  pOut->n = 0;.  w
9170: 68 69 6c 65 28 20 63 6e 74 3e 30 20 29 7b 0a 20  hile( cnt>0 ){. 
9180: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 6d     pOut++;.    m
9190: 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28  emAboutToChange(
91a0: 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 73 71  p, pOut);.    sq
91b0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
91c0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 70  ull(pOut);.    p
91d0: 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75 6c  Out->flags = nul
91e0: 6c 46 6c 61 67 3b 0a 20 20 20 20 70 4f 75 74 2d  lFlag;.    pOut-
91f0: 3e 6e 20 3d 20 30 3b 0a 20 20 20 20 63 6e 74 2d  >n = 0;.    cnt-
9200: 2d 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  -;.  }.  break;.
9210: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f  }../* Opcode: So
9220: 66 74 4e 75 6c 6c 20 50 31 20 2a 20 2a 20 2a 20  ftNull P1 * * * 
9230: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
9240: 5b 50 31 5d 3d 4e 55 4c 4c 0a 2a 2a 0a 2a 2a 20  [P1]=NULL.**.** 
9250: 53 65 74 20 72 65 67 69 73 74 65 72 20 50 31 20  Set register P1 
9260: 74 6f 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  to have the valu
9270: 65 20 4e 55 4c 4c 20 61 73 20 73 65 65 6e 20 62  e NULL as seen b
9280: 79 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  y the OP_MakeRec
9290: 6f 72 64 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69  ord.** instructi
92a0: 6f 6e 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 66  on, but do not f
92b0: 72 65 65 20 61 6e 79 20 73 74 72 69 6e 67 20 6f  ree any string o
92c0: 72 20 62 6c 6f 62 20 6d 65 6d 6f 72 79 20 61 73  r blob memory as
92d0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
92e0: 20 74 68 65 20 72 65 67 69 73 74 65 72 2c 20 73   the register, s
92f0: 6f 20 74 68 61 74 20 69 66 20 74 68 65 20 76 61  o that if the va
9300: 6c 75 65 20 77 61 73 20 61 20 73 74 72 69 6e 67  lue was a string
9310: 20 6f 72 20 62 6c 6f 62 20 74 68 61 74 20 77 61   or blob that wa
9320: 73 0a 2a 2a 20 70 72 65 76 69 6f 75 73 6c 79 20  s.** previously 
9330: 63 6f 70 69 65 64 20 75 73 69 6e 67 20 4f 50 5f  copied using OP_
9340: 53 43 6f 70 79 2c 20 74 68 65 20 63 6f 70 69 65  SCopy, the copie
9350: 73 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65 20  s will continue 
9360: 74 6f 20 62 65 20 76 61 6c 69 64 2e 0a 2a 2f 0a  to be valid..*/.
9370: 63 61 73 65 20 4f 50 5f 53 6f 66 74 4e 75 6c 6c  case OP_SoftNull
9380: 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  : {.  assert( pO
9390: 70 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p1>0 && pOp->
93a0: 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p1<=(p->nMem+1 -
93b0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
93c0: 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
93d0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 2d  Op->p1];.  pOut-
93e0: 3e 66 6c 61 67 73 20 3d 20 28 70 4f 75 74 2d 3e  >flags = (pOut->
93f0: 66 6c 61 67 73 7c 4d 45 4d 5f 4e 75 6c 6c 29 26  flags|MEM_Null)&
9400: 7e 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a  ~MEM_Undefined;.
9410: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
9420: 70 63 6f 64 65 3a 20 42 6c 6f 62 20 50 31 20 50  pcode: Blob P1 P
9430: 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f  2 * P4 *.** Syno
9440: 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 20 28  psis: r[P2]=P4 (
9450: 6c 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 50 34  len=P1).**.** P4
9460: 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 62 6c 6f   points to a blo
9470: 62 20 6f 66 20 64 61 74 61 20 50 31 20 62 79 74  b of data P1 byt
9480: 65 73 20 6c 6f 6e 67 2e 20 20 53 74 6f 72 65 20  es long.  Store 
9490: 74 68 69 73 0a 2a 2a 20 62 6c 6f 62 20 69 6e 20  this.** blob in 
94a0: 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a  register P2..*/.
94b0: 63 61 73 65 20 4f 50 5f 42 6c 6f 62 3a 20 7b 20  case OP_Blob: { 
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
94d0: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65  * out2 */.  asse
94e0: 72 74 28 20 70 4f 70 2d 3e 70 31 20 3c 3d 20 53  rt( pOp->p1 <= S
94f0: 51 4c 49 54 45 5f 4d 41 58 5f 4c 45 4e 47 54 48  QLITE_MAX_LENGTH
9500: 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   );.  pOut = out
9510: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
9520: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
9530: 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f 75 74  beMemSetStr(pOut
9540: 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 70 4f 70  , pOp->p4.z, pOp
9550: 2d 3e 70 31 2c 20 30 2c 20 30 29 3b 0a 20 20 70  ->p1, 0, 0);.  p
9560: 4f 75 74 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64  Out->enc = encod
9570: 69 6e 67 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41  ing;.  UPDATE_MA
9580: 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29  X_BLOBSIZE(pOut)
9590: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
95a0: 20 4f 70 63 6f 64 65 3a 20 56 61 72 69 61 62 6c   Opcode: Variabl
95b0: 65 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  e P1 P2 * P4 *.*
95c0: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
95d0: 5d 3d 70 61 72 61 6d 65 74 65 72 28 50 31 2c 50  ]=parameter(P1,P
95e0: 34 29 0a 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65  4).**.** Transfe
95f0: 72 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66 20  r the values of 
9600: 62 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20  bound parameter 
9610: 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  P1 into register
9620: 20 50 32 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65   P2.**.** If the
9630: 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 61   parameter is na
9640: 6d 65 64 2c 20 74 68 65 6e 20 69 74 73 20 6e 61  med, then its na
9650: 6d 65 20 61 70 70 65 61 72 73 20 69 6e 20 50 34  me appears in P4
9660: 2e 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c 75  ..** The P4 valu
9670: 65 20 69 73 20 75 73 65 64 20 62 79 20 73 71 6c  e is used by sql
9680: 69 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65  ite3_bind_parame
9690: 74 65 72 5f 6e 61 6d 65 28 29 2e 0a 2a 2f 0a 63  ter_name()..*/.c
96a0: 61 73 65 20 4f 50 5f 56 61 72 69 61 62 6c 65 3a  ase OP_Variable:
96b0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
96c0: 20 6f 75 74 32 20 2a 2f 0a 20 20 4d 65 6d 20 2a   out2 */.  Mem *
96d0: 70 56 61 72 3b 20 20 20 20 20 20 20 2f 2a 20 56  pVar;       /* V
96e0: 61 6c 75 65 20 62 65 69 6e 67 20 74 72 61 6e 73  alue being trans
96f0: 66 65 72 72 65 64 20 2a 2f 0a 0a 20 20 61 73 73  ferred */..  ass
9700: 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26  ert( pOp->p1>0 &
9710: 26 20 70 4f 70 2d 3e 70 31 3c 3d 70 2d 3e 6e 56  & pOp->p1<=p->nV
9720: 61 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ar );.  assert( 
9730: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 30 20 7c 7c 20  pOp->p4.z==0 || 
9740: 70 4f 70 2d 3e 70 34 2e 7a 3d 3d 73 71 6c 69 74  pOp->p4.z==sqlit
9750: 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65  e3VListNumToName
9760: 28 70 2d 3e 70 56 4c 69 73 74 2c 70 4f 70 2d 3e  (p->pVList,pOp->
9770: 70 31 29 20 29 3b 0a 20 20 70 56 61 72 20 3d 20  p1) );.  pVar = 
9780: 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d 3e 70 31  &p->aVar[pOp->p1
9790: 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20 73 71 6c   - 1];.  if( sql
97a0: 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
97b0: 67 28 70 56 61 72 29 20 29 7b 0a 20 20 20 20 67  g(pVar) ){.    g
97c0: 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d  oto too_big;.  }
97d0: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
97e0: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69  pOp->p2];.  sqli
97f0: 74 65 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f  te3VdbeMemShallo
9800: 77 43 6f 70 79 28 70 4f 75 74 2c 20 70 56 61 72  wCopy(pOut, pVar
9810: 2c 20 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20  , MEM_Static);. 
9820: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
9830: 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
9840: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9850: 65 3a 20 4d 6f 76 65 20 50 31 20 50 32 20 50 33  e: Move P1 P2 P3
9860: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9870: 3a 20 72 5b 50 32 40 50 33 5d 3d 72 5b 50 31 40  : r[P2@P3]=r[P1@
9880: 50 33 5d 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65 20 74  P3].**.** Move t
9890: 68 65 20 50 33 20 76 61 6c 75 65 73 20 69 6e 20  he P3 values in 
98a0: 72 65 67 69 73 74 65 72 20 50 31 2e 2e 50 31 2b  register P1..P1+
98b0: 50 33 2d 31 20 6f 76 65 72 20 69 6e 74 6f 0a 2a  P3-1 over into.*
98c0: 2a 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e  * registers P2..
98d0: 50 32 2b 50 33 2d 31 2e 20 20 52 65 67 69 73 74  P2+P3-1.  Regist
98e0: 65 72 73 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ers P1..P1+P3-1 
98f0: 61 72 65 0a 2a 2a 20 6c 65 66 74 20 68 6f 6c 64  are.** left hold
9900: 69 6e 67 20 61 20 4e 55 4c 4c 2e 20 20 49 74 20  ing a NULL.  It 
9910: 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
9920: 72 65 67 69 73 74 65 72 20 72 61 6e 67 65 73 0a  register ranges.
9930: 2a 2a 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20 61  ** P1..P1+P3-1 a
9940: 6e 64 20 50 32 2e 2e 50 32 2b 50 33 2d 31 20 74  nd P2..P2+P3-1 t
9950: 6f 20 6f 76 65 72 6c 61 70 2e 20 20 49 74 20 69  o overlap.  It i
9960: 73 20 61 6e 20 65 72 72 6f 72 0a 2a 2a 20 66 6f  s an error.** fo
9970: 72 20 50 33 20 74 6f 20 62 65 20 6c 65 73 73 20  r P3 to be less 
9980: 74 68 61 6e 20 31 2e 0a 2a 2f 0a 63 61 73 65 20  than 1..*/.case 
9990: 4f 50 5f 4d 6f 76 65 3a 20 7b 0a 20 20 69 6e 74  OP_Move: {.  int
99a0: 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a   n;           /*
99b0: 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73   Number of regis
99c0: 74 65 72 73 20 6c 65 66 74 20 74 6f 20 63 6f 70  ters left to cop
99d0: 79 20 2a 2f 0a 20 20 69 6e 74 20 70 31 3b 20 20  y */.  int p1;  
99e0: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
99f0: 74 65 72 20 74 6f 20 63 6f 70 79 20 66 72 6f 6d  ter to copy from
9a00: 20 2a 2f 0a 20 20 69 6e 74 20 70 32 3b 20 20 20   */.  int p2;   
9a10: 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
9a20: 65 72 20 74 6f 20 63 6f 70 79 20 74 6f 20 2a 2f  er to copy to */
9a30: 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 33 3b  ..  n = pOp->p3;
9a40: 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
9a50: 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
9a60: 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30 20 26  .  assert( n>0 &
9a70: 26 20 70 31 3e 30 20 26 26 20 70 32 3e 30 20 29  & p1>0 && p2>0 )
9a80: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 31 2b 6e  ;.  assert( p1+n
9a90: 3c 3d 70 32 20 7c 7c 20 70 32 2b 6e 3c 3d 70 31  <=p2 || p2+n<=p1
9aa0: 20 29 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   );..  pIn1 = &a
9ab0: 4d 65 6d 5b 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Mem[p1];.  pOut 
9ac0: 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 64  = &aMem[p2];.  d
9ad0: 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  o{.    assert( p
9ae0: 4f 75 74 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  Out<=&aMem[(p->n
9af0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9b00: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9b10: 72 74 28 20 70 49 6e 31 3c 3d 26 61 4d 65 6d 5b  rt( pIn1<=&aMem[
9b20: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
9b30: 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
9b40: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
9b50: 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
9b60: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
9b70: 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20  e(p, pOut);.    
9b80: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 4d 6f  sqlite3VdbeMemMo
9b90: 76 65 28 70 4f 75 74 2c 20 70 49 6e 31 29 3b 0a  ve(pOut, pIn1);.
9ba0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
9bb0: 42 55 47 0a 20 20 20 20 69 66 28 20 70 4f 75 74  BUG.    if( pOut
9bc0: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 3e 3d 26 61  ->pScopyFrom>=&a
9bd0: 4d 65 6d 5b 70 31 5d 20 26 26 20 70 4f 75 74 2d  Mem[p1] && pOut-
9be0: 3e 70 53 63 6f 70 79 46 72 6f 6d 3c 70 4f 75 74  >pScopyFrom<pOut
9bf0: 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e   ){.      pOut->
9c00: 70 53 63 6f 70 79 46 72 6f 6d 20 2b 3d 20 70 4f  pScopyFrom += pO
9c10: 70 2d 3e 70 32 20 2d 20 70 31 3b 0a 20 20 20 20  p->p2 - p1;.    
9c20: 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 44 65 65  }.#endif.    Dee
9c30: 70 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74  phemeralize(pOut
9c40: 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
9c50: 54 52 41 43 45 28 70 32 2b 2b 2c 20 70 4f 75 74  TRACE(p2++, pOut
9c60: 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b 0a 20  );.    pIn1++;. 
9c70: 20 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 7d 77 68     pOut++;.  }wh
9c80: 69 6c 65 28 20 2d 2d 6e 20 29 3b 0a 20 20 62 72  ile( --n );.  br
9c90: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
9ca0: 65 3a 20 43 6f 70 79 20 50 31 20 50 32 20 50 33  e: Copy P1 P2 P3
9cb0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
9cc0: 3a 20 72 5b 50 32 40 50 33 2b 31 5d 3d 72 5b 50  : r[P2@P3+1]=r[P
9cd0: 31 40 50 33 2b 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61  1@P3+1].**.** Ma
9ce0: 6b 65 20 61 20 63 6f 70 79 20 6f 66 20 72 65 67  ke a copy of reg
9cf0: 69 73 74 65 72 73 20 50 31 2e 2e 50 31 2b 50 33  isters P1..P1+P3
9d00: 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 73 20   into registers 
9d10: 50 32 2e 2e 50 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a  P2..P2+P3..**.**
9d20: 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   This instructio
9d30: 6e 20 6d 61 6b 65 73 20 61 20 64 65 65 70 20 63  n makes a deep c
9d40: 6f 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65  opy of the value
9d50: 2e 20 20 41 20 64 75 70 6c 69 63 61 74 65 0a 2a  .  A duplicate.*
9d60: 2a 20 69 73 20 6d 61 64 65 20 6f 66 20 61 6e 79  * is made of any
9d70: 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20   string or blob 
9d80: 63 6f 6e 73 74 61 6e 74 2e 20 20 53 65 65 20 61  constant.  See a
9d90: 6c 73 6f 20 4f 50 5f 53 43 6f 70 79 2e 0a 2a 2f  lso OP_SCopy..*/
9da0: 0a 63 61 73 65 20 4f 50 5f 43 6f 70 79 3a 20 7b  .case OP_Copy: {
9db0: 0a 20 20 69 6e 74 20 6e 3b 0a 0a 20 20 6e 20 3d  .  int n;..  n =
9dc0: 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 49 6e 31   pOp->p3;.  pIn1
9dd0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
9de0: 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65  ];.  pOut = &aMe
9df0: 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73  m[pOp->p2];.  as
9e00: 73 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31  sert( pOut!=pIn1
9e10: 20 29 3b 0a 20 20 77 68 69 6c 65 28 20 31 20 29   );.  while( 1 )
9e20: 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
9e30: 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28  eMemShallowCopy(
9e40: 70 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f  pOut, pIn1, MEM_
9e50: 45 70 68 65 6d 29 3b 0a 20 20 20 20 44 65 65 70  Ephem);.    Deep
9e60: 68 65 6d 65 72 61 6c 69 7a 65 28 70 4f 75 74 29  hemeralize(pOut)
9e70: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
9e80: 44 45 42 55 47 0a 20 20 20 20 70 4f 75 74 2d 3e  DEBUG.    pOut->
9e90: 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 30 3b 0a  pScopyFrom = 0;.
9ea0: 23 65 6e 64 69 66 0a 20 20 20 20 52 45 47 49 53  #endif.    REGIS
9eb0: 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
9ec0: 32 2b 70 4f 70 2d 3e 70 33 2d 6e 2c 20 70 4f 75  2+pOp->p3-n, pOu
9ed0: 74 29 3b 0a 20 20 20 20 69 66 28 20 28 6e 2d 2d  t);.    if( (n--
9ee0: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
9ef0: 20 20 70 4f 75 74 2b 2b 3b 0a 20 20 20 20 70 49    pOut++;.    pI
9f00: 6e 31 2b 2b 3b 0a 20 20 7d 0a 20 20 62 72 65 61  n1++;.  }.  brea
9f10: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9f20: 20 53 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a   SCopy P1 P2 * *
9f30: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
9f40: 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]=r[P1].**.*
9f50: 2a 20 4d 61 6b 65 20 61 20 73 68 61 6c 6c 6f 77  * Make a shallow
9f60: 20 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65   copy of registe
9f70: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
9f80: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
9f90: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61  s instruction ma
9fa0: 6b 65 73 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f  kes a shallow co
9fb0: 70 79 20 6f 66 20 74 68 65 20 76 61 6c 75 65 2e  py of the value.
9fc0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
9fd0: 2a 20 69 73 20 61 20 73 74 72 69 6e 67 20 6f 72  * is a string or
9fe0: 20 62 6c 6f 62 2c 20 74 68 65 6e 20 74 68 65 20   blob, then the 
9ff0: 63 6f 70 79 20 69 73 20 6f 6e 6c 79 20 61 20 70  copy is only a p
a000: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 0a 2a 2a  ointer to the.**
a010: 20 6f 72 69 67 69 6e 61 6c 20 61 6e 64 20 68 65   original and he
a020: 6e 63 65 20 69 66 20 74 68 65 20 6f 72 69 67 69  nce if the origi
a030: 6e 61 6c 20 63 68 61 6e 67 65 73 20 73 6f 20 77  nal changes so w
a040: 69 6c 6c 20 74 68 65 20 63 6f 70 79 2e 0a 2a 2a  ill the copy..**
a050: 20 57 6f 72 73 65 2c 20 69 66 20 74 68 65 20 6f   Worse, if the o
a060: 72 69 67 69 6e 61 6c 20 69 73 20 64 65 61 6c 6c  riginal is deall
a070: 6f 63 61 74 65 64 2c 20 74 68 65 20 63 6f 70 79  ocated, the copy
a080: 20 62 65 63 6f 6d 65 73 20 69 6e 76 61 6c 69 64   becomes invalid
a090: 2e 0a 2a 2a 20 54 68 75 73 20 74 68 65 20 70 72  ..** Thus the pr
a0a0: 6f 67 72 61 6d 20 6d 75 73 74 20 67 75 61 72 61  ogram must guara
a0b0: 6e 74 65 65 20 74 68 61 74 20 74 68 65 20 6f 72  ntee that the or
a0c0: 69 67 69 6e 61 6c 20 77 69 6c 6c 20 6e 6f 74 20  iginal will not 
a0d0: 63 68 61 6e 67 65 0a 2a 2a 20 64 75 72 69 6e 67  change.** during
a0e0: 20 74 68 65 20 6c 69 66 65 74 69 6d 65 20 6f 66   the lifetime of
a0f0: 20 74 68 65 20 63 6f 70 79 2e 20 20 55 73 65 20   the copy.  Use 
a100: 4f 50 5f 43 6f 70 79 20 74 6f 20 6d 61 6b 65 20  OP_Copy to make 
a110: 61 20 63 6f 6d 70 6c 65 74 65 0a 2a 2a 20 63 6f  a complete.** co
a120: 70 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  py..*/.case OP_S
a130: 43 6f 70 79 3a 20 7b 20 20 20 20 20 20 20 20 20  Copy: {         
a140: 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
a150: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
a160: 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20  ->p1];.  pOut = 
a170: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
a180: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 21 3d    assert( pOut!=
a190: 70 49 6e 31 20 29 3b 0a 20 20 73 71 6c 69 74 65  pIn1 );.  sqlite
a1a0: 33 56 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43  3VdbeMemShallowC
a1b0: 6f 70 79 28 70 4f 75 74 2c 20 70 49 6e 31 2c 20  opy(pOut, pIn1, 
a1c0: 4d 45 4d 5f 45 70 68 65 6d 29 3b 0a 23 69 66 64  MEM_Ephem);.#ifd
a1d0: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
a1e0: 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63 6f    if( pOut->pSco
a1f0: 70 79 46 72 6f 6d 3d 3d 30 20 29 20 70 4f 75 74  pyFrom==0 ) pOut
a200: 2d 3e 70 53 63 6f 70 79 46 72 6f 6d 20 3d 20 70  ->pScopyFrom = p
a210: 49 6e 31 3b 0a 23 65 6e 64 69 66 0a 20 20 62 72  In1;.#endif.  br
a220: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
a230: 65 3a 20 49 6e 74 43 6f 70 79 20 50 31 20 50 32  e: IntCopy P1 P2
a240: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
a250: 69 73 3a 20 72 5b 50 32 5d 3d 72 5b 50 31 5d 0a  is: r[P2]=r[P1].
a260: 2a 2a 0a 2a 2a 20 54 72 61 6e 73 66 65 72 20 74  **.** Transfer t
a270: 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  he integer value
a280: 20 68 65 6c 64 20 69 6e 20 72 65 67 69 73 74 65   held in registe
a290: 72 20 50 31 20 69 6e 74 6f 20 72 65 67 69 73 74  r P1 into regist
a2a0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69  er P2..**.** Thi
a2b0: 73 20 69 73 20 61 6e 20 6f 70 74 69 6d 69 7a 65  s is an optimize
a2c0: 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 43 6f  d version of SCo
a2d0: 70 79 20 74 68 61 74 20 77 6f 72 6b 73 20 6f 6e  py that works on
a2e0: 6c 79 20 66 6f 72 20 69 6e 74 65 67 65 72 0a 2a  ly for integer.*
a2f0: 2a 20 76 61 6c 75 65 73 2e 0a 2a 2f 0a 63 61 73  * values..*/.cas
a300: 65 20 4f 50 5f 49 6e 74 43 6f 70 79 3a 20 7b 20  e OP_IntCopy: { 
a310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
a320: 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26  t2 */.  pIn1 = &
a330: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
a340: 20 61 73 73 65 72 74 28 20 28 70 49 6e 31 2d 3e   assert( (pIn1->
a350: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
a360: 21 3d 30 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  !=0 );.  pOut = 
a370: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a  &aMem[pOp->p2];.
a380: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
a390: 53 65 74 49 6e 74 36 34 28 70 4f 75 74 2c 20 70  SetInt64(pOut, p
a3a0: 49 6e 31 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65  In1->u.i);.  bre
a3b0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
a3c0: 3a 20 52 65 73 75 6c 74 52 6f 77 20 50 31 20 50  : ResultRow P1 P
a3d0: 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
a3e0: 73 69 73 3a 20 6f 75 74 70 75 74 3d 72 5b 50 31  sis: output=r[P1
a3f0: 40 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72  @P2].**.** The r
a400: 65 67 69 73 74 65 72 73 20 50 31 20 74 68 72 6f  egisters P1 thro
a410: 75 67 68 20 50 31 2b 50 32 2d 31 20 63 6f 6e 74  ugh P1+P2-1 cont
a420: 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  ain a single row
a430: 20 6f 66 0a 2a 2a 20 72 65 73 75 6c 74 73 2e 20   of.** results. 
a440: 54 68 69 73 20 6f 70 63 6f 64 65 20 63 61 75 73  This opcode caus
a450: 65 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73  es the sqlite3_s
a460: 74 65 70 28 29 20 63 61 6c 6c 20 74 6f 20 74 65  tep() call to te
a470: 72 6d 69 6e 61 74 65 0a 2a 2a 20 77 69 74 68 20  rminate.** with 
a480: 61 6e 20 53 51 4c 49 54 45 5f 52 4f 57 20 72 65  an SQLITE_ROW re
a490: 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 69 74  turn code and it
a4a0: 20 73 65 74 73 20 75 70 20 74 68 65 20 73 71 6c   sets up the sql
a4b0: 69 74 65 33 5f 73 74 6d 74 0a 2a 2a 20 73 74 72  ite3_stmt.** str
a4c0: 75 63 74 75 72 65 20 74 6f 20 70 72 6f 76 69 64  ucture to provid
a4d0: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 65 20  e access to the 
a4e0: 72 28 50 31 29 2e 2e 72 28 50 31 2b 50 32 2d 31  r(P1)..r(P1+P2-1
a4f0: 29 20 76 61 6c 75 65 73 20 61 73 0a 2a 2a 20 74  ) values as.** t
a500: 68 65 20 72 65 73 75 6c 74 20 72 6f 77 2e 0a 2a  he result row..*
a510: 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 75 6c 74  /.case OP_Result
a520: 52 6f 77 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d  Row: {.  Mem *pM
a530: 65 6d 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 61  em;.  int i;.  a
a540: 73 73 65 72 74 28 20 70 2d 3e 6e 52 65 73 43 6f  ssert( p->nResCo
a550: 6c 75 6d 6e 3d 3d 70 4f 70 2d 3e 70 32 20 29 3b  lumn==pOp->p2 );
a560: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
a570: 70 31 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74  p1>0 );.  assert
a580: 28 20 70 4f 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70  ( pOp->p1+pOp->p
a590: 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  2<=(p->nMem+1 - 
a5a0: 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
a5b0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
a5c0: 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43  _OMIT_PROGRESS_C
a5d0: 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 52 75 6e  ALLBACK.  /* Run
a5e0: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 6f   the progress co
a5f0: 75 6e 74 65 72 20 6a 75 73 74 20 62 65 66 6f 72  unter just befor
a600: 65 20 72 65 74 75 72 6e 69 6e 67 2e 0a 20 20 2a  e returning..  *
a610: 2f 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f  /.  if( db->xPro
a620: 67 72 65 73 73 21 3d 30 0a 20 20 20 26 26 20 6e  gress!=0.   && n
a630: 56 6d 53 74 65 70 3e 3d 6e 50 72 6f 67 72 65 73  VmStep>=nProgres
a640: 73 4c 69 6d 69 74 0a 20 20 20 26 26 20 64 62 2d  sLimit.   && db-
a650: 3e 78 50 72 6f 67 72 65 73 73 28 64 62 2d 3e 70  >xProgress(db->p
a660: 50 72 6f 67 72 65 73 73 41 72 67 29 21 3d 30 0a  ProgressArg)!=0.
a670: 20 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51    ){.    rc = SQ
a680: 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 3b 0a  LITE_INTERRUPT;.
a690: 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
a6a0: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
a6b0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
a6c0: 20 74 68 69 73 20 73 74 61 74 65 6d 65 6e 74 20   this statement 
a6d0: 68 61 73 20 76 69 6f 6c 61 74 65 64 20 69 6d 6d  has violated imm
a6e0: 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e 20 6b  ediate foreign k
a6f0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 2c 20  ey constraints, 
a700: 64 6f 0a 20 20 2a 2a 20 6e 6f 74 20 72 65 74 75  do.  ** not retu
a710: 72 6e 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  rn the number of
a720: 20 72 6f 77 73 20 6d 6f 64 69 66 69 65 64 2e 20   rows modified. 
a730: 41 6e 64 20 64 6f 20 6e 6f 74 20 52 45 4c 45 41  And do not RELEA
a740: 53 45 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  SE the statement
a750: 0a 20 20 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f  .  ** transactio
a760: 6e 2e 20 49 74 20 6e 65 65 64 73 20 74 6f 20 62  n. It needs to b
a770: 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
a780: 2a 2f 0a 20 20 69 66 28 20 53 51 4c 49 54 45 5f  */.  if( SQLITE_
a790: 4f 4b 21 3d 28 72 63 20 3d 20 73 71 6c 69 74 65  OK!=(rc = sqlite
a7a0: 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
a7b0: 30 29 29 20 29 7b 0a 20 20 20 20 61 73 73 65 72  0)) ){.    asser
a7c0: 74 28 20 64 62 2d 3e 66 6c 61 67 73 26 53 51 4c  t( db->flags&SQL
a7d0: 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 29 3b  ITE_CountRows );
a7e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 2d 3e  .    assert( p->
a7f0: 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20  usesStmtJournal 
a800: 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
a810: 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
a820: 20 20 7d 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65    }..  /* If the
a830: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
a840: 73 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  s flag is set in
a850: 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 20 6d   sqlite3.flags m
a860: 61 73 6b 2c 20 74 68 65 6e 20 0a 20 20 2a 2a 20  ask, then .  ** 
a870: 44 4d 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 69  DML statements i
a880: 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63 6f 64  nvoke this opcod
a890: 65 20 74 6f 20 72 65 74 75 72 6e 20 74 68 65 20  e to return the 
a8a0: 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 0a  number of rows .
a8b0: 20 20 2a 2a 20 6d 6f 64 69 66 69 65 64 20 74 6f    ** modified to
a8c0: 20 74 68 65 20 75 73 65 72 2e 20 54 68 69 73 20   the user. This 
a8d0: 69 73 20 74 68 65 20 6f 6e 6c 79 20 77 61 79 20  is the only way 
a8e0: 74 68 61 74 20 61 20 56 4d 20 74 68 61 74 0a 20  that a VM that. 
a8f0: 20 2a 2a 20 6f 70 65 6e 73 20 61 20 73 74 61 74   ** opens a stat
a900: 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
a910: 6e 20 6d 61 79 20 69 6e 76 6f 6b 65 20 74 68 69  n may invoke thi
a920: 73 20 6f 70 63 6f 64 65 2e 0a 20 20 2a 2a 0a 20  s opcode..  **. 
a930: 20 2a 2a 20 49 6e 20 63 61 73 65 20 74 68 69 73   ** In case this
a940: 20 69 73 20 73 75 63 68 20 61 20 73 74 61 74 65   is such a state
a950: 6d 65 6e 74 2c 20 63 6c 6f 73 65 20 61 6e 79 20  ment, close any 
a960: 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
a970: 63 74 69 6f 6e 0a 20 20 2a 2a 20 6f 70 65 6e 65  ction.  ** opene
a980: 64 20 62 79 20 74 68 69 73 20 56 4d 20 62 65 66  d by this VM bef
a990: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 63 6f  ore returning co
a9a0: 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75 73 65  ntrol to the use
a9b0: 72 2e 20 54 68 69 73 20 69 73 20 74 6f 0a 20 20  r. This is to.  
a9c0: 2a 2a 20 65 6e 73 75 72 65 20 74 68 61 74 20 73  ** ensure that s
a9d0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
a9e0: 74 69 6f 6e 73 20 61 72 65 20 61 6c 77 61 79 73  tions are always
a9f0: 20 6e 65 73 74 65 64 2c 20 6e 6f 74 20 6f 76 65   nested, not ove
aa00: 72 6c 61 70 70 69 6e 67 2e 0a 20 20 2a 2a 20 49  rlapping..  ** I
aa10: 66 20 74 68 65 20 6f 70 65 6e 20 73 74 61 74 65  f the open state
aa20: 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e  ment-transaction
aa30: 20 69 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20 68   is not closed h
aa40: 65 72 65 2c 20 74 68 65 6e 20 74 68 65 20 75 73  ere, then the us
aa50: 65 72 0a 20 20 2a 2a 20 6d 61 79 20 73 74 65 70  er.  ** may step
aa60: 20 61 6e 6f 74 68 65 72 20 56 4d 20 74 68 61 74   another VM that
aa70: 20 6f 70 65 6e 73 20 69 74 73 20 6f 77 6e 20 73   opens its own s
aa80: 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63  tatement transac
aa90: 74 69 6f 6e 2e 20 54 68 69 73 0a 20 20 2a 2a 20  tion. This.  ** 
aaa0: 6d 61 79 20 6c 65 61 64 20 74 6f 20 6f 76 65 72  may lead to over
aab0: 6c 61 70 70 69 6e 67 20 73 74 61 74 65 6d 65 6e  lapping statemen
aac0: 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 2e 0a  t transactions..
aad0: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 74    **.  ** The st
aae0: 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
aaf0: 69 6f 6e 20 69 73 20 6e 65 76 65 72 20 61 20 74  ion is never a t
ab00: 6f 70 2d 6c 65 76 65 6c 20 74 72 61 6e 73 61 63  op-level transac
ab10: 74 69 6f 6e 2e 20 20 48 65 6e 63 65 0a 20 20 2a  tion.  Hence.  *
ab20: 2a 20 74 68 65 20 52 45 4c 45 41 53 45 20 63 61  * the RELEASE ca
ab30: 6c 6c 20 62 65 6c 6f 77 20 63 61 6e 20 6e 65 76  ll below can nev
ab40: 65 72 20 66 61 69 6c 2e 0a 20 20 2a 2f 0a 20 20  er fail..  */.  
ab50: 61 73 73 65 72 74 28 20 70 2d 3e 69 53 74 61 74  assert( p->iStat
ab60: 65 6d 65 6e 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ement==0 || db->
ab70: 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43 6f 75  flags&SQLITE_Cou
ab80: 6e 74 52 6f 77 73 20 29 3b 0a 20 20 72 63 20 3d  ntRows );.  rc =
ab90: 20 73 71 6c 69 74 65 33 56 64 62 65 43 6c 6f 73   sqlite3VdbeClos
aba0: 65 53 74 61 74 65 6d 65 6e 74 28 70 2c 20 53 41  eStatement(p, SA
abb0: 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 29  VEPOINT_RELEASE)
abc0: 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d  ;.  assert( rc==
abd0: 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 0a 20 20  SQLITE_OK );..  
abe0: 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c  /* Invalidate al
abf0: 6c 20 65 70 68 65 6d 65 72 61 6c 20 63 75 72 73  l ephemeral curs
ac00: 6f 72 20 72 6f 77 20 63 61 63 68 65 73 20 2a 2f  or row caches */
ac10: 0a 20 20 70 2d 3e 63 61 63 68 65 43 74 72 20 3d  .  p->cacheCtr =
ac20: 20 28 70 2d 3e 63 61 63 68 65 43 74 72 20 2b 20   (p->cacheCtr + 
ac30: 32 29 7c 31 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65  2)|1;..  /* Make
ac40: 20 73 75 72 65 20 74 68 65 20 72 65 73 75 6c 74   sure the result
ac50: 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
ac60: 20 72 6f 77 20 61 72 65 20 5c 30 30 30 20 74 65   row are \000 te
ac70: 72 6d 69 6e 61 74 65 64 0a 20 20 2a 2a 20 61 6e  rminated.  ** an
ac80: 64 20 68 61 76 65 20 61 6e 20 61 73 73 69 67 6e  d have an assign
ac90: 65 64 20 74 79 70 65 2e 20 20 54 68 65 20 72 65  ed type.  The re
aca0: 73 75 6c 74 73 20 61 72 65 20 64 65 2d 65 70 68  sults are de-eph
acb0: 65 6d 65 72 61 6c 69 7a 65 64 20 61 73 0a 20 20  emeralized as.  
acc0: 2a 2a 20 61 20 73 69 64 65 20 65 66 66 65 63 74  ** a side effect
acd0: 2e 0a 20 20 2a 2f 0a 20 20 70 4d 65 6d 20 3d 20  ..  */.  pMem = 
ace0: 70 2d 3e 70 52 65 73 75 6c 74 53 65 74 20 3d 20  p->pResultSet = 
acf0: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
ad00: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 4f 70    for(i=0; i<pOp
ad10: 2d 3e 70 32 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  ->p2; i++){.    
ad20: 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
ad30: 69 64 28 26 70 4d 65 6d 5b 69 5d 29 20 29 3b 0a  id(&pMem[i]) );.
ad40: 20 20 20 20 44 65 65 70 68 65 6d 65 72 61 6c 69      Deephemerali
ad50: 7a 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20  ze(&pMem[i]);.  
ad60: 20 20 61 73 73 65 72 74 28 20 28 70 4d 65 6d 5b    assert( (pMem[
ad70: 69 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 45  i].flags & MEM_E
ad80: 70 68 65 6d 29 3d 3d 30 0a 20 20 20 20 20 20 20  phem)==0.       
ad90: 20 20 20 20 20 7c 7c 20 28 70 4d 65 6d 5b 69 5d       || (pMem[i]
ada0: 2e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f 53 74  .flags & (MEM_St
adb0: 72 7c 4d 45 4d 5f 42 6c 6f 62 29 29 3d 3d 30 20  r|MEM_Blob))==0 
adc0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
add0: 62 65 4d 65 6d 4e 75 6c 54 65 72 6d 69 6e 61 74  beMemNulTerminat
ade0: 65 28 26 70 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20  e(&pMem[i]);.   
adf0: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
ae00: 70 4f 70 2d 3e 70 31 2b 69 2c 20 26 70 4d 65 6d  pOp->p1+i, &pMem
ae10: 5b 69 5d 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20  [i]);.  }.  if( 
ae20: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
ae30: 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
ae40: 0a 20 20 69 66 28 20 64 62 2d 3e 6d 54 72 61 63  .  if( db->mTrac
ae50: 65 20 26 20 53 51 4c 49 54 45 5f 54 52 41 43 45  e & SQLITE_TRACE
ae60: 5f 52 4f 57 20 29 7b 0a 20 20 20 20 64 62 2d 3e  _ROW ){.    db->
ae70: 78 54 72 61 63 65 28 53 51 4c 49 54 45 5f 54 52  xTrace(SQLITE_TR
ae80: 41 43 45 5f 52 4f 57 2c 20 64 62 2d 3e 70 54 72  ACE_ROW, db->pTr
ae90: 61 63 65 41 72 67 2c 20 70 2c 20 30 29 3b 0a 20  aceArg, p, 0);. 
aea0: 20 7d 0a 0a 20 20 2f 2a 20 52 65 74 75 72 6e 20   }..  /* Return 
aeb0: 53 51 4c 49 54 45 5f 52 4f 57 0a 20 20 2a 2f 0a  SQLITE_ROW.  */.
aec0: 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
aed0: 70 4f 70 20 2d 20 61 4f 70 29 20 2b 20 31 3b 0a  pOp - aOp) + 1;.
aee0: 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 52 4f    rc = SQLITE_RO
aef0: 57 3b 0a 20 20 67 6f 74 6f 20 76 64 62 65 5f 72  W;.  goto vdbe_r
af00: 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  eturn;.}../* Opc
af10: 6f 64 65 3a 20 43 6f 6e 63 61 74 20 50 31 20 50  ode: Concat P1 P
af20: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
af30: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
af40: 5d 2b 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 41 64  ]+r[P1].**.** Ad
af50: 64 20 74 68 65 20 74 65 78 74 20 69 6e 20 72 65  d the text in re
af60: 67 69 73 74 65 72 20 50 31 20 6f 6e 74 6f 20 74  gister P1 onto t
af70: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 74 65  he end of the te
af80: 78 74 20 69 6e 0a 2a 2a 20 72 65 67 69 73 74 65  xt in.** registe
af90: 72 20 50 32 20 61 6e 64 20 73 74 6f 72 65 20 74  r P2 and store t
afa0: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
afb0: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
afc0: 65 69 74 68 65 72 20 74 68 65 20 50 31 20 6f 72  either the P1 or
afd0: 20 50 32 20 74 65 78 74 20 61 72 65 20 4e 55 4c   P2 text are NUL
afe0: 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 4e 55 4c  L then store NUL
aff0: 4c 20 69 6e 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 20  L in P3..**.**  
b000: 20 50 33 20 3d 20 50 32 20 7c 7c 20 50 31 0a 2a   P3 = P2 || P1.*
b010: 2a 0a 2a 2a 20 49 74 20 69 73 20 69 6c 6c 65 67  *.** It is illeg
b020: 61 6c 20 66 6f 72 20 50 31 20 61 6e 64 20 50 33  al for P1 and P3
b030: 20 74 6f 20 62 65 20 74 68 65 20 73 61 6d 65 20   to be the same 
b040: 72 65 67 69 73 74 65 72 2e 20 53 6f 6d 65 74 69  register. Someti
b050: 6d 65 73 2c 0a 2a 2a 20 69 66 20 50 33 20 69 73  mes,.** if P3 is
b060: 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73 74   the same regist
b070: 65 72 20 61 73 20 50 32 2c 20 74 68 65 20 69 6d  er as P2, the im
b080: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 69 73 20  plementation is 
b090: 61 62 6c 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64  able.** to avoid
b0a0: 20 61 20 6d 65 6d 63 70 79 28 29 2e 0a 2a 2f 0a   a memcpy()..*/.
b0b0: 63 61 73 65 20 4f 50 5f 43 6f 6e 63 61 74 3a 20  case OP_Concat: 
b0c0: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
b0d0: 61 6d 65 20 61 73 20 54 4b 5f 43 4f 4e 43 41 54  ame as TK_CONCAT
b0e0: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
b0f0: 20 2a 2f 0a 20 20 69 36 34 20 6e 42 79 74 65 3b   */.  i64 nByte;
b100: 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ..  pIn1 = &aMem
b110: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
b120: 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  2 = &aMem[pOp->p
b130: 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  2];.  pOut = &aM
b140: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
b150: 73 73 65 72 74 28 20 70 49 6e 31 21 3d 70 4f 75  ssert( pIn1!=pOu
b160: 74 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31  t );.  if( (pIn1
b170: 2d 3e 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e  ->flags | pIn2->
b180: 66 6c 61 67 73 29 20 26 20 4d 45 4d 5f 4e 75 6c  flags) & MEM_Nul
b190: 6c 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  l ){.    sqlite3
b1a0: 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
b1b0: 4f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  Out);.    break;
b1c0: 0a 20 20 7d 0a 20 20 69 66 28 20 45 78 70 61 6e  .  }.  if( Expan
b1d0: 64 42 6c 6f 62 28 70 49 6e 31 29 20 7c 7c 20 45  dBlob(pIn1) || E
b1e0: 78 70 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 20  xpandBlob(pIn2) 
b1f0: 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
b200: 20 53 74 72 69 6e 67 69 66 79 28 70 49 6e 31 2c   Stringify(pIn1,
b210: 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 53 74   encoding);.  St
b220: 72 69 6e 67 69 66 79 28 70 49 6e 32 2c 20 65 6e  ringify(pIn2, en
b230: 63 6f 64 69 6e 67 29 3b 0a 20 20 6e 42 79 74 65  coding);.  nByte
b240: 20 3d 20 70 49 6e 31 2d 3e 6e 20 2b 20 70 49 6e   = pIn1->n + pIn
b250: 32 2d 3e 6e 3b 0a 20 20 69 66 28 20 6e 42 79 74  2->n;.  if( nByt
b260: 65 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  e>db->aLimit[SQL
b270: 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
b280: 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
b290: 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69 66 28  o_big;.  }.  if(
b2a0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47   sqlite3VdbeMemG
b2b0: 72 6f 77 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e  row(pOut, (int)n
b2c0: 42 79 74 65 2b 32 2c 20 70 4f 75 74 3d 3d 70 49  Byte+2, pOut==pI
b2d0: 6e 32 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  n2) ){.    goto 
b2e0: 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 4d 65  no_mem;.  }.  Me
b2f0: 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75  mSetTypeFlag(pOu
b300: 74 2c 20 4d 45 4d 5f 53 74 72 29 3b 0a 20 20 69  t, MEM_Str);.  i
b310: 66 28 20 70 4f 75 74 21 3d 70 49 6e 32 20 29 7b  f( pOut!=pIn2 ){
b320: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 4f 75 74  .    memcpy(pOut
b330: 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 7a 2c 20 70 49  ->z, pIn2->z, pI
b340: 6e 32 2d 3e 6e 29 3b 0a 20 20 7d 0a 20 20 6d 65  n2->n);.  }.  me
b350: 6d 63 70 79 28 26 70 4f 75 74 2d 3e 7a 5b 70 49  mcpy(&pOut->z[pI
b360: 6e 32 2d 3e 6e 5d 2c 20 70 49 6e 31 2d 3e 7a 2c  n2->n], pIn1->z,
b370: 20 70 49 6e 31 2d 3e 6e 29 3b 0a 20 20 70 4f 75   pIn1->n);.  pOu
b380: 74 2d 3e 7a 5b 6e 42 79 74 65 5d 3d 30 3b 0a 20  t->z[nByte]=0;. 
b390: 20 70 4f 75 74 2d 3e 7a 5b 6e 42 79 74 65 2b 31   pOut->z[nByte+1
b3a0: 5d 20 3d 20 30 3b 0a 20 20 70 4f 75 74 2d 3e 66  ] = 0;.  pOut->f
b3b0: 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 54 65 72 6d  lags |= MEM_Term
b3c0: 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 28 69  ;.  pOut->n = (i
b3d0: 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f 75 74  nt)nByte;.  pOut
b3e0: 2d 3e 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67  ->enc = encoding
b3f0: 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  ;.  UPDATE_MAX_B
b400: 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20  LOBSIZE(pOut);. 
b410: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
b420: 63 6f 64 65 3a 20 41 64 64 20 50 31 20 50 32 20  code: Add P1 P2 
b430: 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  P3 * *.** Synops
b440: 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 2b  is: r[P3]=r[P1]+
b450: 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20  r[P2].**.** Add 
b460: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
b470: 69 73 74 65 72 20 50 31 20 74 6f 20 74 68 65 20  ister P1 to the 
b480: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b490: 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72  r P2.** and stor
b4a0: 65 20 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20  e the result in 
b4b0: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
b4c0: 49 66 20 65 69 74 68 65 72 20 69 6e 70 75 74 20  If either input 
b4d0: 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73  is NULL, the res
b4e0: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ult is NULL..*/.
b4f0: 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 75 6c 74 69  /* Opcode: Multi
b500: 70 6c 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a  ply P1 P2 P3 * *
b510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
b520: 50 33 5d 3d 72 5b 50 31 5d 2a 72 5b 50 32 5d 0a  P3]=r[P1]*r[P2].
b530: 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 75 6c 74 69 70 6c  **.**.** Multipl
b540: 79 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  y the value in r
b550: 65 67 69 73 74 65 72 20 50 31 20 62 79 20 74 68  egister P1 by th
b560: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b570: 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73 74  ter P2.** and st
b580: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
b590: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
b5a0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
b5b0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
b5c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b5d0: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 75 62  /./* Opcode: Sub
b5e0: 74 72 61 63 74 20 50 31 20 50 32 20 50 33 20 2a  tract P1 P2 P3 *
b5f0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
b600: 72 5b 50 33 5d 3d 72 5b 50 32 5d 2d 72 5b 50 31  r[P3]=r[P2]-r[P1
b610: 5d 0a 2a 2a 0a 2a 2a 20 53 75 62 74 72 61 63 74  ].**.** Subtract
b620: 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
b630: 67 69 73 74 65 72 20 50 31 20 66 72 6f 6d 20 74  gister P1 from t
b640: 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
b650: 73 74 65 72 20 50 32 0a 2a 2a 20 61 6e 64 20 73  ster P2.** and s
b660: 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20  tore the result 
b670: 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
b680: 2a 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  ** If either inp
b690: 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20  ut is NULL, the 
b6a0: 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a  result is NULL..
b6b0: 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 69  */./* Opcode: Di
b6c0: 76 69 64 65 20 50 31 20 50 32 20 50 33 20 2a 20  vide P1 P2 P3 * 
b6d0: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
b6e0: 5b 50 33 5d 3d 72 5b 50 32 5d 2f 72 5b 50 31 5d  [P3]=r[P2]/r[P1]
b6f0: 0a 2a 2a 0a 2a 2a 20 44 69 76 69 64 65 20 74 68  .**.** Divide th
b700: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
b710: 74 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61  ter P1 by the va
b720: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b730: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b740: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b750: 67 69 73 74 65 72 20 50 33 20 28 50 33 3d 50 32  gister P3 (P3=P2
b760: 2f 50 31 29 2e 20 49 66 20 74 68 65 20 76 61 6c  /P1). If the val
b770: 75 65 20 69 6e 20 0a 2a 2a 20 72 65 67 69 73 74  ue in .** regist
b780: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 2c 20 74  er P1 is zero, t
b790: 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20 69  hen the result i
b7a0: 73 20 4e 55 4c 4c 2e 20 49 66 20 65 69 74 68 65  s NULL. If eithe
b7b0: 72 20 69 6e 70 75 74 20 69 73 20 0a 2a 2a 20 4e  r input is .** N
b7c0: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
b7d0: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f  is NULL..*/./* O
b7e0: 70 63 6f 64 65 3a 20 52 65 6d 61 69 6e 64 65 72  pcode: Remainder
b7f0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b800: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b810: 3d 72 5b 50 32 5d 25 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]%r[P1].**.
b820: 2a 2a 20 43 6f 6d 70 75 74 65 20 74 68 65 20 72  ** Compute the r
b830: 65 6d 61 69 6e 64 65 72 20 61 66 74 65 72 20 69  emainder after i
b840: 6e 74 65 67 65 72 20 72 65 67 69 73 74 65 72 20  nteger register 
b850: 50 32 20 69 73 20 64 69 76 69 64 65 64 20 62 79  P2 is divided by
b860: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b870: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b880: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b890: 72 20 50 33 2e 20 0a 2a 2a 20 49 66 20 74 68 65  r P3. .** If the
b8a0: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b8b0: 65 72 20 50 31 20 69 73 20 7a 65 72 6f 20 74 68  er P1 is zero th
b8c0: 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c  e result is NULL
b8d0: 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20 6f  ..** If either o
b8e0: 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 20  perand is NULL, 
b8f0: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b900: 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  LL..*/.case OP_A
b910: 64 64 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  dd:             
b920: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
b930: 20 54 4b 5f 50 4c 55 53 2c 20 69 6e 31 2c 20 69   TK_PLUS, in1, i
b940: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65  n2, out3 */.case
b950: 20 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20   OP_Subtract:   
b960: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
b970: 6d 65 20 61 73 20 54 4b 5f 4d 49 4e 55 53 2c 20  me as TK_MINUS, 
b980: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
b990: 2f 0a 63 61 73 65 20 4f 50 5f 4d 75 6c 74 69 70  /.case OP_Multip
b9a0: 6c 79 3a 20 20 20 20 20 20 20 20 20 20 20 20 20  ly:             
b9b0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
b9c0: 54 41 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TAR, in1, in2, o
b9d0: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ut3 */.case OP_D
b9e0: 69 76 69 64 65 3a 20 20 20 20 20 20 20 20 20 20  ivide:          
b9f0: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba00: 20 54 4b 5f 53 4c 41 53 48 2c 20 69 6e 31 2c 20   TK_SLASH, in1, 
ba10: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba20: 65 20 4f 50 5f 52 65 6d 61 69 6e 64 65 72 3a 20  e OP_Remainder: 
ba30: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73  {           /* s
ba40: 61 6d 65 20 61 73 20 54 4b 5f 52 45 4d 2c 20 69  ame as TK_REM, i
ba50: 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f  n1, in2, out3 */
ba60: 0a 20 20 63 68 61 72 20 62 49 6e 74 69 6e 74 3b  .  char bIntint;
ba70: 20 20 20 2f 2a 20 53 74 61 72 74 65 64 20 6f 75     /* Started ou
ba80: 74 20 61 73 20 74 77 6f 20 69 6e 74 65 67 65 72  t as two integer
ba90: 20 6f 70 65 72 61 6e 64 73 20 2a 2f 0a 20 20 75   operands */.  u
baa0: 31 36 20 66 6c 61 67 73 3b 20 20 20 20 20 20 2f  16 flags;      /
bab0: 2a 20 43 6f 6d 62 69 6e 65 64 20 4d 45 4d 5f 2a  * Combined MEM_*
bac0: 20 66 6c 61 67 73 20 66 72 6f 6d 20 62 6f 74 68   flags from both
bad0: 20 69 6e 70 75 74 73 20 2a 2f 0a 20 20 75 31 36   inputs */.  u16
bae0: 20 74 79 70 65 31 3b 20 20 20 20 20 20 2f 2a 20   type1;      /* 
baf0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
bb00: 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a  left operand */.
bb10: 20 20 75 31 36 20 74 79 70 65 32 3b 20 20 20 20    u16 type2;    
bb20: 20 20 2f 2a 20 4e 75 6d 65 72 69 63 20 74 79 70    /* Numeric typ
bb30: 65 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61  e of right opera
bb40: 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b 20  nd */.  i64 iA; 
bb50: 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65 67          /* Integ
bb60: 65 72 20 76 61 6c 75 65 20 6f 66 20 6c 65 66 74  er value of left
bb70: 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 69 36   operand */.  i6
bb80: 34 20 69 42 3b 20 20 20 20 20 20 20 20 20 2f 2a  4 iB;         /*
bb90: 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65 20 6f   Integer value o
bba0: 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20  f right operand 
bbb0: 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72 41 3b 20  */.  double rA; 
bbc0: 20 20 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c       /* Real val
bbd0: 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72 61  ue of left opera
bbe0: 6e 64 20 2a 2f 0a 20 20 64 6f 75 62 6c 65 20 72  nd */.  double r
bbf0: 42 3b 20 20 20 20 20 20 2f 2a 20 52 65 61 6c 20  B;      /* Real 
bc00: 76 61 6c 75 65 20 6f 66 20 72 69 67 68 74 20 6f  value of right o
bc10: 70 65 72 61 6e 64 20 2a 2f 0a 0a 20 20 70 49 6e  perand */..  pIn
bc20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
bc30: 31 5d 3b 0a 20 20 74 79 70 65 31 20 3d 20 6e 75  1];.  type1 = nu
bc40: 6d 65 72 69 63 54 79 70 65 28 70 49 6e 31 29 3b  mericType(pIn1);
bc50: 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
bc60: 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 74 79 70 65  pOp->p2];.  type
bc70: 32 20 3d 20 6e 75 6d 65 72 69 63 54 79 70 65 28  2 = numericType(
bc80: 70 49 6e 32 29 3b 0a 20 20 70 4f 75 74 20 3d 20  pIn2);.  pOut = 
bc90: 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
bca0: 20 20 66 6c 61 67 73 20 3d 20 70 49 6e 31 2d 3e    flags = pIn1->
bcb0: 66 6c 61 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c  flags | pIn2->fl
bcc0: 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67  ags;.  if( (flag
bcd0: 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d 30  s & MEM_Null)!=0
bce0: 20 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74   ) goto arithmet
bcf0: 69 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c  ic_result_is_nul
bd00: 6c 3b 0a 20 20 69 66 28 20 28 74 79 70 65 31 20  l;.  if( (type1 
bd10: 26 20 74 79 70 65 32 20 26 20 4d 45 4d 5f 49 6e  & type2 & MEM_In
bd20: 74 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 41 20  t)!=0 ){.    iA 
bd30: 3d 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 20  = pIn1->u.i;.   
bd40: 20 69 42 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b   iB = pIn2->u.i;
bd50: 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d 20 31  .    bIntint = 1
bd60: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
bd70: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
bd80: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
bd90: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
bda0: 33 41 64 64 49 6e 74 36 34 28 26 69 42 2c 69 41  3AddInt64(&iB,iA
bdb0: 29 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68  ) ) goto fp_math
bdc0: 3b 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20  ;  break;.      
bdd0: 63 61 73 65 20 4f 50 5f 53 75 62 74 72 61 63 74  case OP_Subtract
bde0: 3a 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 75  :  if( sqlite3Su
bdf0: 62 49 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29  bInt64(&iB,iA) )
be00: 20 67 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20   goto fp_math;  
be10: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
be20: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
be30: 69 66 28 20 73 71 6c 69 74 65 33 4d 75 6c 49 6e  if( sqlite3MulIn
be40: 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f  t64(&iB,iA) ) go
be50: 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65  to fp_math;  bre
be60: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
be70: 50 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20  P_Divide: {.    
be80: 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20 29 20      if( iA==0 ) 
be90: 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f  goto arithmetic_
bea0: 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a  result_is_null;.
beb0: 20 20 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d          if( iA==
bec0: 2d 31 20 26 26 20 69 42 3d 3d 53 4d 41 4c 4c 45  -1 && iB==SMALLE
bed0: 53 54 5f 49 4e 54 36 34 20 29 20 67 6f 74 6f 20  ST_INT64 ) goto 
bee0: 66 70 5f 6d 61 74 68 3b 0a 20 20 20 20 20 20 20  fp_math;.       
bef0: 20 69 42 20 2f 3d 20 69 41 3b 0a 20 20 20 20 20   iB /= iA;.     
bf00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
bf10: 7d 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a  }.      default:
bf20: 20 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69   {.        if( i
bf30: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
bf40: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
bf50: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
bf60: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
bf70: 20 31 3b 0a 20 20 20 20 20 20 20 20 69 42 20 25   1;.        iB %
bf80: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bf90: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bfa0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69   }.    pOut->u.i
bfb0: 20 3d 20 69 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = iB;.    MemSe
bfc0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
bfd0: 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 7d 65 6c 73  MEM_Int);.  }els
bfe0: 65 7b 0a 20 20 20 20 62 49 6e 74 69 6e 74 20 3d  e{.    bIntint =
bff0: 20 30 3b 0a 66 70 5f 6d 61 74 68 3a 0a 20 20 20   0;.fp_math:.   
c000: 20 72 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rA = sqlite3Vdb
c010: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 31 29  eRealValue(pIn1)
c020: 3b 0a 20 20 20 20 72 42 20 3d 20 73 71 6c 69 74  ;.    rB = sqlit
c030: 65 33 56 64 62 65 52 65 61 6c 56 61 6c 75 65 28  e3VdbeRealValue(
c040: 70 49 6e 32 29 3b 0a 20 20 20 20 73 77 69 74 63  pIn2);.    switc
c050: 68 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 29  h( pOp->opcode )
c060: 7b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  {.      case OP_
c070: 41 64 64 3a 20 20 20 20 20 20 20 20 20 72 42 20  Add:         rB 
c080: 2b 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65  += rA;       bre
c090: 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f  ak;.      case O
c0a0: 50 5f 53 75 62 74 72 61 63 74 3a 20 20 20 20 72  P_Subtract:    r
c0b0: 42 20 2d 3d 20 72 41 3b 20 20 20 20 20 20 20 62  B -= rA;       b
c0c0: 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
c0d0: 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20 20   OP_Multiply:   
c0e0: 20 72 42 20 2a 3d 20 72 41 3b 20 20 20 20 20 20   rB *= rA;      
c0f0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
c100: 73 65 20 4f 50 5f 44 69 76 69 64 65 3a 20 7b 0a  se OP_Divide: {.
c110: 20 20 20 20 20 20 20 20 2f 2a 20 28 64 6f 75 62          /* (doub
c120: 6c 65 29 30 20 49 6e 20 63 61 73 65 20 6f 66 20  le)0 In case of 
c130: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
c140: 54 49 4e 47 5f 50 4f 49 4e 54 2e 2e 2e 20 2a 2f  TING_POINT... */
c150: 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 41 3d  .        if( rA=
c160: 3d 28 64 6f 75 62 6c 65 29 30 20 29 20 67 6f 74  =(double)0 ) got
c170: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c180: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c190: 20 20 20 20 20 72 42 20 2f 3d 20 72 41 3b 0a 20       rB /= rA;. 
c1a0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c1b0: 20 20 20 20 7d 0a 20 20 20 20 20 20 64 65 66 61      }.      defa
c1c0: 75 6c 74 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ult: {.        i
c1d0: 41 20 3d 20 28 69 36 34 29 72 41 3b 0a 20 20 20  A = (i64)rA;.   
c1e0: 20 20 20 20 20 69 42 20 3d 20 28 69 36 34 29 72       iB = (i64)r
c1f0: 42 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69  B;.        if( i
c200: 41 3d 3d 30 20 29 20 67 6f 74 6f 20 61 72 69 74  A==0 ) goto arit
c210: 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69 73  hmetic_result_is
c220: 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69  _null;.        i
c230: 66 28 20 69 41 3d 3d 2d 31 20 29 20 69 41 20 3d  f( iA==-1 ) iA =
c240: 20 31 3b 0a 20 20 20 20 20 20 20 20 72 42 20 3d   1;.        rB =
c250: 20 28 64 6f 75 62 6c 65 29 28 69 42 20 25 20 69   (double)(iB % i
c260: 41 29 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  A);.        brea
c270: 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  k;.      }.    }
c280: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
c290: 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
c2a0: 4e 54 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69  NT.    pOut->u.i
c2b0: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c2c0: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c2d0: 4d 45 4d 5f 49 6e 74 29 3b 0a 23 65 6c 73 65 0a  MEM_Int);.#else.
c2e0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 49      if( sqlite3I
c2f0: 73 4e 61 4e 28 72 42 29 20 29 7b 0a 20 20 20 20  sNaN(rB) ){.    
c300: 20 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69    goto arithmeti
c310: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c320: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 4f 75 74  ;.    }.    pOut
c330: 2d 3e 75 2e 72 20 3d 20 72 42 3b 0a 20 20 20 20  ->u.r = rB;.    
c340: 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
c350: 4f 75 74 2c 20 4d 45 4d 5f 52 65 61 6c 29 3b 0a  Out, MEM_Real);.
c360: 20 20 20 20 69 66 28 20 28 28 74 79 70 65 31 7c      if( ((type1|
c370: 74 79 70 65 32 29 26 4d 45 4d 5f 52 65 61 6c 29  type2)&MEM_Real)
c380: 3d 3d 30 20 26 26 20 21 62 49 6e 74 69 6e 74 20  ==0 && !bIntint 
c390: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
c3a0: 56 64 62 65 49 6e 74 65 67 65 72 41 66 66 69 6e  VdbeIntegerAffin
c3b0: 69 74 79 28 70 4f 75 74 29 3b 0a 20 20 20 20 7d  ity(pOut);.    }
c3c0: 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
c3d0: 65 61 6b 3b 0a 0a 61 72 69 74 68 6d 65 74 69 63  eak;..arithmetic
c3e0: 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3a  _result_is_null:
c3f0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  .  sqlite3VdbeMe
c400: 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a  mSetNull(pOut);.
c410: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
c420: 70 63 6f 64 65 3a 20 43 6f 6c 6c 53 65 71 20 50  pcode: CollSeq P
c430: 31 20 2a 20 2a 20 50 34 0a 2a 2a 0a 2a 2a 20 50  1 * * P4.**.** P
c440: 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
c450: 6f 20 61 20 43 6f 6c 6c 53 65 71 20 73 74 72 75  o a CollSeq stru
c460: 63 74 2e 20 49 66 20 74 68 65 20 6e 65 78 74 20  ct. If the next 
c470: 63 61 6c 6c 20 74 6f 20 61 20 75 73 65 72 20 66  call to a user f
c480: 75 6e 63 74 69 6f 6e 0a 2a 2a 20 6f 72 20 61 67  unction.** or ag
c490: 67 72 65 67 61 74 65 20 63 61 6c 6c 73 20 73 71  gregate calls sq
c4a0: 6c 69 74 65 33 47 65 74 46 75 6e 63 43 6f 6c 6c  lite3GetFuncColl
c4b0: 53 65 71 28 29 2c 20 74 68 69 73 20 63 6f 6c 6c  Seq(), this coll
c4c0: 61 74 69 6f 6e 20 73 65 71 75 65 6e 63 65 20 77  ation sequence w
c4d0: 69 6c 6c 0a 2a 2a 20 62 65 20 72 65 74 75 72 6e  ill.** be return
c4e0: 65 64 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  ed. This is used
c4f0: 20 62 79 20 74 68 65 20 62 75 69 6c 74 2d 69 6e   by the built-in
c500: 20 6d 69 6e 28 29 2c 20 6d 61 78 28 29 20 61 6e   min(), max() an
c510: 64 20 6e 75 6c 6c 69 66 28 29 0a 2a 2a 20 66 75  d nullif().** fu
c520: 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
c530: 66 20 50 31 20 69 73 20 6e 6f 74 20 7a 65 72 6f  f P1 is not zero
c540: 2c 20 74 68 65 6e 20 69 74 20 69 73 20 61 20 72  , then it is a r
c550: 65 67 69 73 74 65 72 20 74 68 61 74 20 61 20 73  egister that a s
c560: 75 62 73 65 71 75 65 6e 74 20 6d 69 6e 28 29 20  ubsequent min() 
c570: 6f 72 0a 2a 2a 20 6d 61 78 28 29 20 61 67 67 72  or.** max() aggr
c580: 65 67 61 74 65 20 77 69 6c 6c 20 73 65 74 20 74  egate will set t
c590: 6f 20 31 20 69 66 20 74 68 65 20 63 75 72 72 65  o 1 if the curre
c5a0: 6e 74 20 72 6f 77 20 69 73 20 6e 6f 74 20 74 68  nt row is not th
c5b0: 65 20 6d 69 6e 69 6d 75 6d 20 6f 72 0a 2a 2a 20  e minimum or.** 
c5c0: 6d 61 78 69 6d 75 6d 2e 20 20 54 68 65 20 50 31  maximum.  The P1
c5d0: 20 72 65 67 69 73 74 65 72 20 69 73 20 69 6e 69   register is ini
c5e0: 74 69 61 6c 69 7a 65 64 20 74 6f 20 30 20 62 79  tialized to 0 by
c5f0: 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
c600: 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69 6e 74  n..**.** The int
c610: 65 72 66 61 63 65 20 75 73 65 64 20 62 79 20 74  erface used by t
c620: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
c630: 6e 20 6f 66 20 74 68 65 20 61 66 6f 72 65 6d 65  n of the aforeme
c640: 6e 74 69 6f 6e 65 64 20 66 75 6e 63 74 69 6f 6e  ntioned function
c650: 73 0a 2a 2a 20 74 6f 20 72 65 74 72 69 65 76 65  s.** to retrieve
c660: 20 74 68 65 20 63 6f 6c 6c 61 74 69 6f 6e 20 73   the collation s
c670: 65 71 75 65 6e 63 65 20 73 65 74 20 62 79 20 74  equence set by t
c680: 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
c690: 74 20 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 70  t available.** p
c6a0: 75 62 6c 69 63 6c 79 2e 20 20 4f 6e 6c 79 20 62  ublicly.  Only b
c6b0: 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e  uilt-in function
c6c0: 73 20 68 61 76 65 20 61 63 63 65 73 73 20 74 6f  s have access to
c6d0: 20 74 68 69 73 20 66 65 61 74 75 72 65 2e 0a 2a   this feature..*
c6e0: 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 6c 53 65  /.case OP_CollSe
c6f0: 71 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70  q: {.  assert( p
c700: 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 43  Op->p4type==P4_C
c710: 4f 4c 4c 53 45 51 20 29 3b 0a 20 20 69 66 28 20  OLLSEQ );.  if( 
c720: 70 4f 70 2d 3e 70 31 20 29 7b 0a 20 20 20 20 73  pOp->p1 ){.    s
c730: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
c740: 49 6e 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d  Int64(&aMem[pOp-
c750: 3e 70 31 5d 2c 20 30 29 3b 0a 20 20 7d 0a 20 20  >p1], 0);.  }.  
c760: 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
c770: 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e 30 20 50  ode: Function0 P
c780: 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
c790: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
c7a0: 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d 29 0a  =func(r[P2@P5]).
c7b0: 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61 20 75  **.** Invoke a u
c7c0: 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28 50 34  ser function (P4
c7d0: 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f   is a pointer to
c7e0: 20 61 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63   a FuncDef objec
c7f0: 74 20 74 68 61 74 0a 2a 2a 20 64 65 66 69 6e 65  t that.** define
c800: 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 29 20  s the function) 
c810: 77 69 74 68 20 50 35 20 61 72 67 75 6d 65 6e 74  with P5 argument
c820: 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67  s taken from reg
c830: 69 73 74 65 72 20 50 32 20 61 6e 64 0a 2a 2a 20  ister P2 and.** 
c840: 73 75 63 63 65 73 73 6f 72 73 2e 20 20 54 68 65  successors.  The
c850: 20 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66   result of the f
c860: 75 6e 63 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  unction is store
c870: 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
c880: 2e 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50 33  ..** Register P3
c890: 20 6d 75 73 74 20 6e 6f 74 20 62 65 20 6f 6e 65   must not be one
c8a0: 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e   of the function
c8b0: 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a 2a 2a 20 50   inputs..**.** P
c8c0: 31 20 69 73 20 61 20 33 32 2d 62 69 74 20 62 69  1 is a 32-bit bi
c8d0: 74 6d 61 73 6b 20 69 6e 64 69 63 61 74 69 6e 67  tmask indicating
c8e0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
c8f0: 65 61 63 68 20 61 72 67 75 6d 65 6e 74 20 74 6f  each argument to
c900: 20 74 68 65 20 0a 2a 2a 20 66 75 6e 63 74 69 6f   the .** functio
c910: 6e 20 77 61 73 20 64 65 74 65 72 6d 69 6e 65 64  n was determined
c920: 20 74 6f 20 62 65 20 63 6f 6e 73 74 61 6e 74 20   to be constant 
c930: 61 74 20 63 6f 6d 70 69 6c 65 20 74 69 6d 65 2e  at compile time.
c940: 20 49 66 20 74 68 65 20 66 69 72 73 74 0a 2a 2a   If the first.**
c950: 20 61 72 67 75 6d 65 6e 74 20 77 61 73 20 63 6f   argument was co
c960: 6e 73 74 61 6e 74 20 74 68 65 6e 20 62 69 74 20  nstant then bit 
c970: 30 20 6f 66 20 50 31 20 69 73 20 73 65 74 2e 20  0 of P1 is set. 
c980: 54 68 69 73 20 69 73 20 75 73 65 64 20 74 6f 20  This is used to 
c990: 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20 77 68 65  determine.** whe
c9a0: 74 68 65 72 20 6d 65 74 61 20 64 61 74 61 20 61  ther meta data a
c9b0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
c9c0: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 61   user function a
c9d0: 72 67 75 6d 65 6e 74 20 75 73 69 6e 67 20 74 68  rgument using th
c9e0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 73 65 74  e.** sqlite3_set
c9f0: 5f 61 75 78 64 61 74 61 28 29 20 41 50 49 20 6d  _auxdata() API m
ca00: 61 79 20 62 65 20 73 61 66 65 6c 79 20 72 65 74  ay be safely ret
ca10: 61 69 6e 65 64 20 75 6e 74 69 6c 20 74 68 65 20  ained until the 
ca20: 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f 63 61 74 69  next.** invocati
ca30: 6f 6e 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64  on of this opcod
ca40: 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  e..**.** See als
ca50: 6f 3a 20 46 75 6e 63 74 69 6f 6e 2c 20 41 67 67  o: Function, Agg
ca60: 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c 0a 2a  Step, AggFinal.*
ca70: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 75 6e  /./* Opcode: Fun
ca80: 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33 20 50  ction P1 P2 P3 P
ca90: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
caa0: 3a 20 72 5b 50 33 5d 3d 66 75 6e 63 28 72 5b 50  : r[P3]=func(r[P
cab0: 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 49 6e 76  2@P5]).**.** Inv
cac0: 6f 6b 65 20 61 20 75 73 65 72 20 66 75 6e 63 74  oke a user funct
cad0: 69 6f 6e 20 28 50 34 20 69 73 20 61 20 70 6f 69  ion (P4 is a poi
cae0: 6e 74 65 72 20 74 6f 20 61 6e 20 73 71 6c 69 74  nter to an sqlit
caf0: 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65 63  e3_context objec
cb00: 74 20 74 68 61 74 0a 2a 2a 20 63 6f 6e 74 61 69  t that.** contai
cb10: 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ns a pointer to 
cb20: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
cb30: 62 65 20 72 75 6e 29 20 77 69 74 68 20 50 35 20  be run) with P5 
cb40: 61 72 67 75 6d 65 6e 74 73 20 74 61 6b 65 6e 0a  arguments taken.
cb50: 2a 2a 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  ** from register
cb60: 20 50 32 20 61 6e 64 20 73 75 63 63 65 73 73 6f   P2 and successo
cb70: 72 73 2e 20 20 54 68 65 20 72 65 73 75 6c 74 20  rs.  The result 
cb80: 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  of the function 
cb90: 69 73 20 73 74 6f 72 65 64 0a 2a 2a 20 69 6e 20  is stored.** in 
cba0: 72 65 67 69 73 74 65 72 20 50 33 2e 20 20 52 65  register P3.  Re
cbb0: 67 69 73 74 65 72 20 50 33 20 6d 75 73 74 20 6e  gister P3 must n
cbc0: 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65  ot be one of the
cbd0: 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75 74 73   function inputs
cbe0: 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
cbf0: 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b 20 69  32-bit bitmask i
cc00: 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74 68 65  ndicating whethe
cc10: 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20 61 72  r or not each ar
cc20: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 0a 2a  gument to the .*
cc30: 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 64  * function was d
cc40: 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62 65 20  etermined to be 
cc50: 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f 6d 70  constant at comp
cc60: 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74 68 65  ile time. If the
cc70: 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65   first.** argume
cc80: 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e 74 20  nt was constant 
cc90: 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20 50 31  then bit 0 of P1
cca0: 20 69 73 20 73 65 74 2e 20 54 68 69 73 20 69 73   is set. This is
ccb0: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ccc0: 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20 6d 65  ne.** whether me
ccd0: 74 61 20 64 61 74 61 20 61 73 73 6f 63 69 61 74  ta data associat
cce0: 65 64 20 77 69 74 68 20 61 20 75 73 65 72 20 66  ed with a user f
ccf0: 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74  unction argument
cd00: 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 73 71   using the.** sq
cd10: 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64 61 74  lite3_set_auxdat
cd20: 61 28 29 20 41 50 49 20 6d 61 79 20 62 65 20 73  a() API may be s
cd30: 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64 20 75  afely retained u
cd40: 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a 2a 2a  ntil the next.**
cd50: 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
cd60: 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  his opcode..**.*
cd70: 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 73 20  * SQL functions 
cd80: 61 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f  are initially co
cd90: 64 65 64 20 61 73 20 4f 50 5f 46 75 6e 63 74 69  ded as OP_Functi
cda0: 6f 6e 30 20 77 69 74 68 20 50 34 20 70 6f 69 6e  on0 with P4 poin
cdb0: 74 69 6e 67 0a 2a 2a 20 74 6f 20 61 20 46 75 6e  ting.** to a Fun
cdc0: 63 44 65 66 20 6f 62 6a 65 63 74 2e 20 20 42 75  cDef object.  Bu
cdd0: 74 20 6f 6e 20 66 69 72 73 74 20 65 76 61 6c 75  t on first evalu
cde0: 61 74 69 6f 6e 2c 20 74 68 65 20 50 34 20 6f 70  ation, the P4 op
cdf0: 65 72 61 6e 64 20 69 73 0a 2a 2a 20 61 75 74 6f  erand is.** auto
ce00: 6d 61 74 69 63 61 6c 6c 79 20 63 6f 6e 76 65 72  matically conver
ce10: 74 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69  ted into an sqli
ce20: 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f 62 6a 65  te3_context obje
ce30: 63 74 20 61 6e 64 20 74 68 65 20 6f 70 65 72 61  ct and the opera
ce40: 74 69 6f 6e 0a 2a 2a 20 63 68 61 6e 67 65 64 20  tion.** changed 
ce50: 74 6f 20 74 68 69 73 20 4f 50 5f 46 75 6e 63 74  to this OP_Funct
ce60: 69 6f 6e 20 6f 70 63 6f 64 65 2e 20 20 49 6e 20  ion opcode.  In 
ce70: 74 68 69 73 20 77 61 79 2c 20 74 68 65 20 69 6e  this way, the in
ce80: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 0a  itialization of.
ce90: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63  ** the sqlite3_c
cea0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 6f 63  ontext object oc
ceb0: 63 75 72 73 20 6f 6e 6c 79 20 6f 6e 63 65 2c 20  curs only once, 
cec0: 72 61 74 68 65 72 20 74 68 61 6e 20 6f 6e 63 65  rather than once
ced0: 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 65 76 61   for each.** eva
cee0: 6c 75 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 66  luation of the f
cef0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53  unction..**.** S
cf00: 65 65 20 61 6c 73 6f 3a 20 46 75 6e 63 74 69 6f  ee also: Functio
cf10: 6e 30 2c 20 41 67 67 53 74 65 70 2c 20 41 67 67  n0, AggStep, Agg
cf20: 46 69 6e 61 6c 0a 2a 2f 0a 63 61 73 65 20 4f 50  Final.*/.case OP
cf30: 5f 46 75 6e 63 74 69 6f 6e 30 3a 20 7b 0a 20 20  _Function0: {.  
cf40: 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33  int n;.  sqlite3
cf50: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
cf60: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
cf70: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 44  p4type==P4_FUNCD
cf80: 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d  EF );.  n = pOp-
cf90: 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p5;.  assert( p
cfa0: 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70 2d  Op->p3>0 && pOp-
cfb0: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
cfc0: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
cfd0: 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30 20  .  assert( n==0 
cfe0: 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26 26  || (pOp->p2>0 &&
cff0: 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d 3e   pOp->p2+n<=(p->
d000: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
d010: 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73 73  sor)+1) );.  ass
d020: 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70  ert( pOp->p3<pOp
d030: 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e  ->p2 || pOp->p3>
d040: 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20 20  =pOp->p2+n );.  
d050: 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44 62  pCtx = sqlite3Db
d060: 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20  MallocRawNN(db, 
d070: 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b 20  sizeof(*pCtx) + 
d080: 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71 6c  (n-1)*sizeof(sql
d090: 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a 20  ite3_value*));. 
d0a0: 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20 67   if( pCtx==0 ) g
d0b0: 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
d0c0: 74 78 2d 3e 70 4f 75 74 20 3d 20 30 3b 0a 20 20  tx->pOut = 0;.  
d0d0: 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70 4f  pCtx->pFunc = pO
d0e0: 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20 70  p->p4.pFunc;.  p
d0f0: 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74 29  Ctx->iOp = (int)
d100: 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 70  (pOp - aOp);.  p
d110: 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b 0a  Ctx->pVdbe = p;.
d120: 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20 6e    pCtx->argc = n
d130: 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65 20  ;.  pOp->p4type 
d140: 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20 20  = P4_FUNCCTX;.  
d150: 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20 70  pOp->p4.pCtx = p
d160: 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f  Ctx;.  pOp->opco
d170: 64 65 20 3d 20 4f 50 5f 46 75 6e 63 74 69 6f 6e  de = OP_Function
d180: 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
d190: 75 67 68 20 69 6e 74 6f 20 4f 50 5f 46 75 6e 63  ugh into OP_Func
d1a0: 74 69 6f 6e 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f  tion */.}.case O
d1b0: 50 5f 46 75 6e 63 74 69 6f 6e 3a 20 7b 0a 20 20  P_Function: {.  
d1c0: 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33  int i;.  sqlite3
d1d0: 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a  _context *pCtx;.
d1e0: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
d1f0: 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43 43  p4type==P4_FUNCC
d200: 54 58 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 70  TX );.  pCtx = p
d210: 4f 70 2d 3e 70 34 2e 70 43 74 78 3b 0a 0a 20 20  Op->p4.pCtx;..  
d220: 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e 63 74  /* If this funct
d230: 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20 6f 66  ion is inside of
d240: 20 61 20 74 72 69 67 67 65 72 2c 20 74 68 65 20   a trigger, the 
d250: 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 69  register array i
d260: 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69  n aMem[].  ** mi
d270: 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f 6d 20  ght change from 
d280: 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e 20 74  one evaluation t
d290: 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54 68 65  o the next.  The
d2a0: 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63   next block of c
d2b0: 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20  ode.  ** checks 
d2c0: 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 72 65  to see if the re
d2d0: 67 69 73 74 65 72 20 61 72 72 61 79 20 68 61 73  gister array has
d2e0: 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20 69 66   changed, and if
d2f0: 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e   so it.  ** rein
d300: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 72 65  itializes the re
d310: 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f 66 20  lavant parts of 
d320: 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  the sqlite3_cont
d330: 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20  ext object */.  
d340: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
d350: 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20 70 43 74  ->p3];.  if( pCt
d360: 78 2d 3e 70 4f 75 74 20 21 3d 20 70 4f 75 74 20  x->pOut != pOut 
d370: 29 7b 0a 20 20 20 20 70 43 74 78 2d 3e 70 4f 75  ){.    pCtx->pOu
d380: 74 20 3d 20 70 4f 75 74 3b 0a 20 20 20 20 66 6f  t = pOut;.    fo
d390: 72 28 69 3d 70 43 74 78 2d 3e 61 72 67 63 2d 31  r(i=pCtx->argc-1
d3a0: 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29 20 70 43 74  ; i>=0; i--) pCt
d3b0: 78 2d 3e 61 72 67 76 5b 69 5d 20 3d 20 26 61 4d  x->argv[i] = &aM
d3c0: 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69 5d 3b 0a 20  em[pOp->p2+i];. 
d3d0: 20 7d 0a 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f   }..  memAboutTo
d3e0: 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b  Change(p, pOut);
d3f0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
d400: 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b 20  EBUG.  for(i=0; 
d410: 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69 2b  i<pCtx->argc; i+
d420: 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
d430: 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78 2d  memIsValid(pCtx-
d440: 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20 20  >argv[i]) );.   
d450: 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
d460: 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78 2d  pOp->p2+i, pCtx-
d470: 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23  >argv[i]);.  }.#
d480: 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54 79  endif.  MemSetTy
d490: 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
d4a0: 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
d4b0: 66 45 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b  fErrorOrAux = 0;
d4c0: 0a 20 20 28 2a 70 43 74 78 2d 3e 70 46 75 6e 63  .  (*pCtx->pFunc
d4d0: 2d 3e 78 53 46 75 6e 63 29 28 70 43 74 78 2c 20  ->xSFunc)(pCtx, 
d4e0: 70 43 74 78 2d 3e 61 72 67 63 2c 20 70 43 74 78  pCtx->argc, pCtx
d4f0: 2d 3e 61 72 67 76 29 3b 2f 2a 20 49 4d 50 3a 20  ->argv);/* IMP: 
d500: 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20 2a 2f  R-24505-23230 */
d510: 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75  ..  /* If the fu
d520: 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20  nction returned 
d530: 61 6e 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20  an error, throw 
d540: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a  an exception */.
d550: 20 20 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72    if( pCtx->fErr
d560: 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69  orOrAux ){.    i
d570: 66 28 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72  f( pCtx->isError
d580: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
d590: 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25  3VdbeError(p, "%
d5a0: 73 22 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  s", sqlite3_valu
d5b0: 65 5f 74 65 78 74 28 70 4f 75 74 29 29 3b 0a 20  e_text(pOut));. 
d5c0: 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d 3e       rc = pCtx->
d5d0: 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  isError;.    }. 
d5e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 44 65     sqlite3VdbeDe
d5f0: 6c 65 74 65 41 75 78 44 61 74 61 28 64 62 2c 20  leteAuxData(db, 
d600: 26 70 2d 3e 70 41 75 78 44 61 74 61 2c 20 70 43  &p->pAuxData, pC
d610: 74 78 2d 3e 69 4f 70 2c 20 70 4f 70 2d 3e 70 31  tx->iOp, pOp->p1
d620: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29 20  );.    if( rc ) 
d630: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
d640: 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a 20 20  o_error;.  }..  
d650: 2f 2a 20 43 6f 70 79 20 74 68 65 20 72 65 73 75  /* Copy the resu
d660: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
d670: 6f 6e 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  on into register
d680: 20 50 33 20 2a 2f 0a 20 20 69 66 28 20 70 4f 75   P3 */.  if( pOu
d690: 74 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d 5f  t->flags & (MEM_
d6a0: 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62 29 20 29 7b  Str|MEM_Blob) ){
d6b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d6c0: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
d6d0: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a  Out, encoding);.
d6e0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 56      if( sqlite3V
d6f0: 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4f 75  dbeMemTooBig(pOu
d700: 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  t) ) goto too_bi
d710: 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54  g;.  }..  REGIST
d720: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
d730: 2c 20 70 4f 75 74 29 3b 0a 20 20 55 50 44 41 54  , pOut);.  UPDAT
d740: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
d750: 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
d760: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74  ../* Opcode: Bit
d770: 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a 20 2a  And P1 P2 P3 * *
d780: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
d790: 50 33 5d 3d 72 5b 50 31 5d 26 72 5b 50 32 5d 0a  P3]=r[P1]&r[P2].
d7a0: 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 62  **.** Take the b
d7b0: 69 74 2d 77 69 73 65 20 41 4e 44 20 6f 66 20 74  it-wise AND of t
d7c0: 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67  he values in reg
d7d0: 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 32 20  ister P1 and P2 
d7e0: 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65  and.** store the
d7f0: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
d800: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
d810: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
d820: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
d830: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
d840: 63 6f 64 65 3a 20 42 69 74 4f 72 20 50 31 20 50  code: BitOr P1 P
d850: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
d860: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 31  psis: r[P3]=r[P1
d870: 5d 7c 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61  ]|r[P2].**.** Ta
d880: 6b 65 20 74 68 65 20 62 69 74 2d 77 69 73 65 20  ke the bit-wise 
d890: 4f 52 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73  OR of the values
d8a0: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
d8b0: 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74  and P2 and.** st
d8c0: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
d8d0: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
d8e0: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
d8f0: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
d900: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
d910: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
d920: 66 74 4c 65 66 74 20 50 31 20 50 32 20 50 33 20  ftLeft P1 P2 P3 
d930: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
d940: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b   r[P3]=r[P2]<<r[
d950: 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74 20  P1].**.** Shift 
d960: 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  the integer valu
d970: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  e in register P2
d980: 20 74 6f 20 74 68 65 20 6c 65 66 74 20 62 79 20   to the left by 
d990: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
d9a0: 20 62 69 74 73 20 73 70 65 63 69 66 69 65 64 20   bits specified 
d9b0: 62 79 20 74 68 65 20 69 6e 74 65 67 65 72 20 69  by the integer i
d9c0: 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a  n register P1..*
d9d0: 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65 73 75  * Store the resu
d9e0: 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  lt in register P
d9f0: 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72 20  3..** If either 
da00: 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20 74  input is NULL, t
da10: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
da20: 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  L..*/./* Opcode:
da30: 20 53 68 69 66 74 52 69 67 68 74 20 50 31 20 50   ShiftRight P1 P
da40: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
da50: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
da60: 5d 3e 3e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53  ]>>r[P1].**.** S
da70: 68 69 66 74 20 74 68 65 20 69 6e 74 65 67 65 72  hift the integer
da80: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
da90: 65 72 20 50 32 20 74 6f 20 74 68 65 20 72 69 67  er P2 to the rig
daa0: 68 74 20 62 79 20 74 68 65 0a 2a 2a 20 6e 75 6d  ht by the.** num
dab0: 62 65 72 20 6f 66 20 62 69 74 73 20 73 70 65 63  ber of bits spec
dac0: 69 66 69 65 64 20 62 79 20 74 68 65 20 69 6e 74  ified by the int
dad0: 65 67 65 72 20 69 6e 20 72 65 67 69 73 74 65 72  eger in register
dae0: 20 50 31 2e 0a 2a 2a 20 53 74 6f 72 65 20 74 68   P1..** Store th
daf0: 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69  e result in regi
db00: 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65  ster P3..** If e
db10: 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e  ither input is N
db20: 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20  ULL, the result 
db30: 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65  is NULL..*/.case
db40: 20 4f 50 5f 42 69 74 41 6e 64 3a 20 20 20 20 20   OP_BitAnd:     
db50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
db60: 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 41 4e 44  ame as TK_BITAND
db70: 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33  , in1, in2, out3
db80: 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69 74 4f   */.case OP_BitO
db90: 72 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r:              
dba0: 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
dbb0: 4b 5f 42 49 54 4f 52 2c 20 69 6e 31 2c 20 69 6e  K_BITOR, in1, in
dbc0: 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20  2, out3 */.case 
dbd0: 4f 50 5f 53 68 69 66 74 4c 65 66 74 3a 20 20 20  OP_ShiftLeft:   
dbe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
dbf0: 6d 65 20 61 73 20 54 4b 5f 4c 53 48 49 46 54 2c  me as TK_LSHIFT,
dc00: 20 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20   in1, in2, out3 
dc10: 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 68 69 66 74  */.case OP_Shift
dc20: 52 69 67 68 74 3a 20 7b 20 20 20 20 20 20 20 20  Right: {        
dc30: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
dc40: 5f 52 53 48 49 46 54 2c 20 69 6e 31 2c 20 69 6e  _RSHIFT, in1, in
dc50: 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34  2, out3 */.  i64
dc60: 20 69 41 3b 0a 20 20 75 36 34 20 75 41 3b 0a 20   iA;.  u64 uA;. 
dc70: 20 69 36 34 20 69 42 3b 0a 20 20 75 38 20 6f 70   i64 iB;.  u8 op
dc80: 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
dc90: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
dca0: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
dcb0: 70 32 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p2];.  pOut = &a
dcc0: 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
dcd0: 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
dce0: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 29 20   | pIn2->flags) 
dcf0: 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20  & MEM_Null ){.  
dd00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
dd10: 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20  SetNull(pOut);. 
dd20: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20     break;.  }.  
dd30: 69 41 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iA = sqlite3Vdbe
dd40: 49 6e 74 56 61 6c 75 65 28 70 49 6e 32 29 3b 0a  IntValue(pIn2);.
dd50: 20 20 69 42 20 3d 20 73 71 6c 69 74 65 33 56 64    iB = sqlite3Vd
dd60: 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29  beIntValue(pIn1)
dd70: 3b 0a 20 20 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70  ;.  op = pOp->op
dd80: 63 6f 64 65 3b 0a 20 20 69 66 28 20 6f 70 3d 3d  code;.  if( op==
dd90: 4f 50 5f 42 69 74 41 6e 64 20 29 7b 0a 20 20 20  OP_BitAnd ){.   
dda0: 20 69 41 20 26 3d 20 69 42 3b 0a 20 20 7d 65 6c   iA &= iB;.  }el
ddb0: 73 65 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42 69  se if( op==OP_Bi
ddc0: 74 4f 72 20 29 7b 0a 20 20 20 20 69 41 20 7c 3d  tOr ){.    iA |=
ddd0: 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28   iB;.  }else if(
dde0: 20 69 42 21 3d 30 20 29 7b 0a 20 20 20 20 61 73   iB!=0 ){.    as
ddf0: 73 65 72 74 28 20 6f 70 3d 3d 4f 50 5f 53 68 69  sert( op==OP_Shi
de00: 66 74 52 69 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f  ftRight || op==O
de10: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 3b 0a 0a  P_ShiftLeft );..
de20: 20 20 20 20 2f 2a 20 49 66 20 73 68 69 66 74 69      /* If shifti
de30: 6e 67 20 62 79 20 61 20 6e 65 67 61 74 69 76 65  ng by a negative
de40: 20 61 6d 6f 75 6e 74 2c 20 73 68 69 66 74 20 69   amount, shift i
de50: 6e 20 74 68 65 20 6f 74 68 65 72 20 64 69 72 65  n the other dire
de60: 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 66 28  ction */.    if(
de70: 20 69 42 3c 30 20 29 7b 0a 20 20 20 20 20 20 61   iB<0 ){.      a
de80: 73 73 65 72 74 28 20 4f 50 5f 53 68 69 66 74 52  ssert( OP_ShiftR
de90: 69 67 68 74 3d 3d 4f 50 5f 53 68 69 66 74 4c 65  ight==OP_ShiftLe
dea0: 66 74 2b 31 20 29 3b 0a 20 20 20 20 20 20 6f 70  ft+1 );.      op
deb0: 20 3d 20 32 2a 4f 50 5f 53 68 69 66 74 4c 65 66   = 2*OP_ShiftLef
dec0: 74 20 2b 20 31 20 2d 20 6f 70 3b 0a 20 20 20 20  t + 1 - op;.    
ded0: 20 20 69 42 20 3d 20 69 42 3e 28 2d 36 34 29 20    iB = iB>(-64) 
dee0: 3f 20 2d 69 42 20 3a 20 36 34 3b 0a 20 20 20 20  ? -iB : 64;.    
def0: 7d 0a 0a 20 20 20 20 69 66 28 20 69 42 3e 3d 36  }..    if( iB>=6
df00: 34 20 29 7b 0a 20 20 20 20 20 20 69 41 20 3d 20  4 ){.      iA = 
df10: 28 69 41 3e 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50  (iA>=0 || op==OP
df20: 5f 53 68 69 66 74 4c 65 66 74 29 20 3f 20 30 20  _ShiftLeft) ? 0 
df30: 3a 20 2d 31 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  : -1;.    }else{
df40: 0a 20 20 20 20 20 20 6d 65 6d 63 70 79 28 26 75  .      memcpy(&u
df50: 41 2c 20 26 69 41 2c 20 73 69 7a 65 6f 66 28 75  A, &iA, sizeof(u
df60: 41 29 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6f  A));.      if( o
df70: 70 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 20  p==OP_ShiftLeft 
df80: 29 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3c 3c  ){.        uA <<
df90: 3d 20 69 42 3b 0a 20 20 20 20 20 20 7d 65 6c 73  = iB;.      }els
dfa0: 65 7b 0a 20 20 20 20 20 20 20 20 75 41 20 3e 3e  e{.        uA >>
dfb0: 3d 20 69 42 3b 0a 20 20 20 20 20 20 20 20 2f 2a  = iB;.        /*
dfc0: 20 53 69 67 6e 2d 65 78 74 65 6e 64 20 6f 6e 20   Sign-extend on 
dfd0: 61 20 72 69 67 68 74 20 73 68 69 66 74 20 6f 66  a right shift of
dfe0: 20 61 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62   a negative numb
dff0: 65 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66  er */.        if
e000: 28 20 69 41 3c 30 20 29 20 75 41 20 7c 3d 20 28  ( iA<0 ) uA |= (
e010: 28 28 28 75 36 34 29 30 78 66 66 66 66 66 66 66  (((u64)0xfffffff
e020: 66 29 3c 3c 33 32 29 7c 30 78 66 66 66 66 66 66  f)<<32)|0xffffff
e030: 66 66 29 20 3c 3c 20 28 36 34 2d 69 42 29 3b 0a  ff) << (64-iB);.
e040: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 6d 65        }.      me
e050: 6d 63 70 79 28 26 69 41 2c 20 26 75 41 2c 20 73  mcpy(&iA, &uA, s
e060: 69 7a 65 6f 66 28 69 41 29 29 3b 0a 20 20 20 20  izeof(iA));.    
e070: 7d 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e  }.  }.  pOut->u.
e080: 69 20 3d 20 69 41 3b 0a 20 20 4d 65 6d 53 65 74  i = iA;.  MemSet
e090: 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
e0a0: 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b  EM_Int);.  break
e0b0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
e0c0: 41 64 64 49 6d 6d 20 20 50 31 20 50 32 20 2a 20  AddImm  P1 P2 * 
e0d0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
e0e0: 20 72 5b 50 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a   r[P1]=r[P1]+P2.
e0f0: 2a 2a 20 0a 2a 2a 20 41 64 64 20 74 68 65 20 63  ** .** Add the c
e100: 6f 6e 73 74 61 6e 74 20 50 32 20 74 6f 20 74 68  onstant P2 to th
e110: 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
e120: 74 65 72 20 50 31 2e 0a 2a 2a 20 54 68 65 20 72  ter P1..** The r
e130: 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20  esult is always 
e140: 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a  an integer..**.*
e150: 2a 20 54 6f 20 66 6f 72 63 65 20 61 6e 79 20 72  * To force any r
e160: 65 67 69 73 74 65 72 20 74 6f 20 62 65 20 61 6e  egister to be an
e170: 20 69 6e 74 65 67 65 72 2c 20 6a 75 73 74 20 61   integer, just a
e180: 64 64 20 30 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  dd 0..*/.case OP
e190: 5f 41 64 64 49 6d 6d 3a 20 7b 20 20 20 20 20 20  _AddImm: {      
e1a0: 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a        /* in1 */.
e1b0: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
e1c0: 4f 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62  Op->p1];.  memAb
e1d0: 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
e1e0: 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  In1);.  sqlite3V
e1f0: 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
e200: 28 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d 3e  (pIn1);.  pIn1->
e210: 75 2e 69 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  u.i += pOp->p2;.
e220: 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
e230: 70 63 6f 64 65 3a 20 4d 75 73 74 42 65 49 6e 74  pcode: MustBeInt
e240: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
e250: 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20 76 61  .** Force the va
e260: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e270: 50 31 20 74 6f 20 62 65 20 61 6e 20 69 6e 74 65  P1 to be an inte
e280: 67 65 72 2e 20 20 49 66 20 74 68 65 20 76 61 6c  ger.  If the val
e290: 75 65 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 6e  ue.** in P1 is n
e2a0: 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 20 61 6e  ot an integer an
e2b0: 64 20 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76  d cannot be conv
e2c0: 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69 6e  erted into an in
e2d0: 74 65 67 65 72 0a 2a 2a 20 77 69 74 68 6f 75 74  teger.** without
e2e0: 20 64 61 74 61 20 6c 6f 73 73 2c 20 74 68 65 6e   data loss, then
e2f0: 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
e300: 79 20 74 6f 20 50 32 2c 20 6f 72 20 69 66 20 50  y to P2, or if P
e310: 32 3d 3d 30 0a 2a 2a 20 72 61 69 73 65 20 61 6e  2==0.** raise an
e320: 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48   SQLITE_MISMATCH
e330: 20 65 78 63 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63   exception..*/.c
e340: 61 73 65 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74  ase OP_MustBeInt
e350: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f  : {            /
e360: 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
e370: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e380: 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 28 70  p->p1];.  if( (p
e390: 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
e3a0: 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
e3b0: 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70 49  applyAffinity(pI
e3c0: 6e 31 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e  n1, SQLITE_AFF_N
e3d0: 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69 6e 67  UMERIC, encoding
e3e0: 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
e3f0: 68 54 61 6b 65 6e 28 28 70 49 6e 31 2d 3e 66 6c  hTaken((pIn1->fl
e400: 61 67 73 26 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c  ags&MEM_Int)==0,
e410: 20 32 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49   2);.    if( (pI
e420: 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
e430: 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
e440: 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20   if( pOp->p2==0 
e450: 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
e460: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 3b  SQLITE_MISMATCH;
e470: 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
e480: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
e490: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e4a0: 20 20 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70         goto jump
e4b0: 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 7d 0a  _to_p2;.      }.
e4c0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53      }.  }.  MemS
e4d0: 65 74 54 79 70 65 46 6c 61 67 28 70 49 6e 31 2c  etTypeFlag(pIn1,
e4e0: 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 62 72 65   MEM_Int);.  bre
e4f0: 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53  ak;.}..#ifndef S
e500: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
e510: 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63  ING_POINT./* Opc
e520: 6f 64 65 3a 20 52 65 61 6c 41 66 66 69 6e 69 74  ode: RealAffinit
e530: 79 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  y P1 * * * *.**.
e540: 2a 2a 20 49 66 20 72 65 67 69 73 74 65 72 20 50  ** If register P
e550: 31 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67  1 holds an integ
e560: 65 72 20 63 6f 6e 76 65 72 74 20 69 74 20 74 6f  er convert it to
e570: 20 61 20 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a   a real value..*
e580: 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
e590: 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 65 78   is used when ex
e5a0: 74 72 61 63 74 69 6e 67 20 69 6e 66 6f 72 6d 61  tracting informa
e5b0: 74 69 6f 6e 20 66 72 6f 6d 20 61 20 63 6f 6c 75  tion from a colu
e5c0: 6d 6e 20 74 68 61 74 0a 2a 2a 20 68 61 73 20 52  mn that.** has R
e5d0: 45 41 4c 20 61 66 66 69 6e 69 74 79 2e 20 20 53  EAL affinity.  S
e5e0: 75 63 68 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65  uch column value
e5f0: 73 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 73  s may still be s
e600: 74 6f 72 65 64 20 61 73 0a 2a 2a 20 69 6e 74 65  tored as.** inte
e610: 67 65 72 73 2c 20 66 6f 72 20 73 70 61 63 65 20  gers, for space 
e620: 65 66 66 69 63 69 65 6e 63 79 2c 20 62 75 74 20  efficiency, but 
e630: 61 66 74 65 72 20 65 78 74 72 61 63 74 69 6f 6e  after extraction
e640: 20 77 65 20 77 61 6e 74 20 74 68 65 6d 0a 2a 2a   we want them.**
e650: 20 74 6f 20 68 61 76 65 20 6f 6e 6c 79 20 61 20   to have only a 
e660: 72 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63  real value..*/.c
e670: 61 73 65 20 4f 50 5f 52 65 61 6c 41 66 66 69 6e  ase OP_RealAffin
e680: 69 74 79 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ity: {          
e690: 20 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a          /* in1 *
e6a0: 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
e6b0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28  [pOp->p1];.  if(
e6c0: 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d   pIn1->flags & M
e6d0: 45 4d 5f 49 6e 74 20 29 7b 0a 20 20 20 20 73 71  EM_Int ){.    sq
e6e0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 61 6c  lite3VdbeMemReal
e6f0: 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20  ify(pIn1);.  }. 
e700: 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
e710: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
e720: 5f 4f 4d 49 54 5f 43 41 53 54 0a 2f 2a 20 4f 70  _OMIT_CAST./* Op
e730: 63 6f 64 65 3a 20 43 61 73 74 20 50 31 20 50 32  code: Cast P1 P2
e740: 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
e750: 69 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50  is: affinity(r[P
e760: 31 5d 29 0a 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20  1]).**.** Force 
e770: 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67  the value in reg
e780: 69 73 74 65 72 20 50 31 20 74 6f 20 62 65 20 74  ister P1 to be t
e790: 68 65 20 74 79 70 65 20 64 65 66 69 6e 65 64 20  he type defined 
e7a0: 62 79 20 50 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75  by P2..** .** <u
e7b0: 6c 3e 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  l>.** <li value=
e7c0: 22 39 37 22 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c  "97"> TEXT.** <l
e7d0: 69 20 76 61 6c 75 65 3d 22 39 38 22 3e 20 42 4c  i value="98"> BL
e7e0: 4f 42 0a 2a 2a 20 3c 6c 69 20 76 61 6c 75 65 3d  OB.** <li value=
e7f0: 22 39 39 22 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a  "99"> NUMERIC.**
e800: 20 3c 6c 69 20 76 61 6c 75 65 3d 22 31 30 30 22   <li value="100"
e810: 3e 20 49 4e 54 45 47 45 52 0a 2a 2a 20 3c 6c 69  > INTEGER.** <li
e820: 20 76 61 6c 75 65 3d 22 31 30 31 22 3e 20 52 45   value="101"> RE
e830: 41 4c 0a 2a 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a  AL.** </ul>.**.*
e840: 2a 20 41 20 4e 55 4c 4c 20 76 61 6c 75 65 20 69  * A NULL value i
e850: 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 62 79  s not changed by
e860: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 2e 20 20   this routine.  
e870: 49 74 20 72 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e  It remains NULL.
e880: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 61 73 74  .*/.case OP_Cast
e890: 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
e8a0: 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20       /* in1 */. 
e8b0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32   assert( pOp->p2
e8c0: 3e 3d 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c 4f  >=SQLITE_AFF_BLO
e8d0: 42 20 26 26 20 70 4f 70 2d 3e 70 32 3c 3d 53 51  B && pOp->p2<=SQ
e8e0: 4c 49 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b  LITE_AFF_REAL );
e8f0: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e900: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e910: 5f 54 45 58 54 20 29 3b 0a 20 20 74 65 73 74 63  _TEXT );.  testc
e920: 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51  ase( pOp->p2==SQ
e930: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 29 3b  LITE_AFF_BLOB );
e940: 0a 20 20 74 65 73 74 63 61 73 65 28 20 70 4f 70  .  testcase( pOp
e950: 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41 46 46  ->p2==SQLITE_AFF
e960: 5f 4e 55 4d 45 52 49 43 20 29 3b 0a 20 20 74 65  _NUMERIC );.  te
e970: 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32 3d  stcase( pOp->p2=
e980: 3d 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45  =SQLITE_AFF_INTE
e990: 47 45 52 20 29 3b 0a 20 20 74 65 73 74 63 61 73  GER );.  testcas
e9a0: 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  e( pOp->p2==SQLI
e9b0: 54 45 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20  TE_AFF_REAL );. 
e9c0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
e9d0: 70 2d 3e 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f  p->p1];.  memAbo
e9e0: 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 49  utToChange(p, pI
e9f0: 6e 31 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61  n1);.  rc = Expa
ea00: 6e 64 42 6c 6f 62 28 70 49 6e 31 29 3b 0a 20 20  ndBlob(pIn1);.  
ea10: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 61  sqlite3VdbeMemCa
ea20: 73 74 28 70 49 6e 31 2c 20 70 4f 70 2d 3e 70 32  st(pIn1, pOp->p2
ea30: 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 55  , encoding);.  U
ea40: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
ea50: 5a 45 28 70 49 6e 31 29 3b 0a 20 20 69 66 28 20  ZE(pIn1);.  if( 
ea60: 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
ea70: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
ea80: 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
ea90: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  /* SQLITE_OMIT_C
eaa0: 41 53 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64  AST */../* Opcod
eab0: 65 3a 20 45 71 20 50 31 20 50 32 20 50 33 20 50  e: Eq P1 P2 P3 P
eac0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
ead0: 3a 20 49 46 20 72 5b 50 33 5d 3d 3d 72 5b 50 31  : IF r[P3]==r[P1
eae0: 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20  ].**.** Compare 
eaf0: 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65  the values in re
eb00: 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50 33  gister P1 and P3
eb10: 2e 20 20 49 66 20 72 65 67 28 50 33 29 3d 3d 72  .  If reg(P3)==r
eb20: 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a  eg(P1) then.** j
eb30: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
eb40: 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51  2.  Or if the SQ
eb50: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61  LITE_STOREP2 fla
eb60: 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 2c 20  g is set in P5, 
eb70: 74 68 65 6e 0a 2a 2a 20 73 74 6f 72 65 20 74 68  then.** store th
eb80: 65 20 72 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70  e result of comp
eb90: 61 72 69 73 6f 6e 20 69 6e 20 72 65 67 69 73 74  arison in regist
eba0: 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  er P2..**.** The
ebb0: 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b   SQLITE_AFF_MASK
ebc0: 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35 20 6d   portion of P5 m
ebd0: 75 73 74 20 62 65 20 61 6e 20 61 66 66 69 6e 69  ust be an affini
ebe0: 74 79 20 63 68 61 72 61 63 74 65 72 20 2d 0a 2a  ty character -.*
ebf0: 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  * SQLITE_AFF_TEX
ec00: 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  T, SQLITE_AFF_IN
ec10: 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20 66 6f  TEGER, and so fo
ec20: 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70 74 20  rth. An attempt 
ec30: 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f 20 63  is made .** to c
ec40: 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70 75 74  oerce both input
ec50: 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 74  s according to t
ec60: 68 69 73 20 61 66 66 69 6e 69 74 79 20 62 65 66  his affinity bef
ec70: 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61  ore the.** compa
ec80: 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e 20 49  rison is made. I
ec90: 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46  f the SQLITE_AFF
eca0: 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c 20 74  _MASK is 0x00, t
ecb0: 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a 20 61  hen numeric.** a
ecc0: 66 66 69 6e 69 74 79 20 69 73 20 75 73 65 64 2e  ffinity is used.
ecd0: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 61   Note that the a
ece0: 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72 73 69  ffinity conversi
ecf0: 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64 0a 2a  ons are stored.*
ed00: 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68 65 20  * back into the 
ed10: 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 20  input registers 
ed20: 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f 20 74  P1 and P3.  So t
ed30: 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e 20 63  his opcode can c
ed40: 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73 74 65  ause.** persiste
ed50: 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20 72 65  nt changes to re
ed60: 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20 50  gisters P1 and P
ed70: 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e  3..**.** Once an
ed80: 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 68 61  y conversions ha
ed90: 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65 2c 20  ve taken place, 
eda0: 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61 6c 75  and neither valu
edb0: 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74  e is NULL, .** t
edc0: 68 65 20 76 61 6c 75 65 73 20 61 72 65 20 63 6f  he values are co
edd0: 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74 68 20  mpared. If both 
ede0: 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f 62 73  values are blobs
edf0: 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29 20 69   then memcmp() i
ee00: 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64 65 74  s.** used to det
ee10: 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73 75 6c  ermine the resul
ee20: 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70 61 72  ts of the compar
ee30: 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68 20 76  ison.  If both v
ee40: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74 65 78  alues.** are tex
ee50: 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70 70 72  t, then the appr
ee60: 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74 69 6e  opriate collatin
ee70: 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65 63 69  g function speci
ee80: 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20 69 73  fied in.** P4 is
ee90: 20 75 73 65 64 20 74 6f 20 64 6f 20 74 68 65 20   used to do the 
eea0: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
eeb0: 50 34 20 69 73 20 6e 6f 74 20 73 70 65 63 69 66  P4 is not specif
eec0: 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63  ied then.** memc
eed0: 6d 70 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  mp() is used to 
eee0: 63 6f 6d 70 61 72 65 20 74 65 78 74 20 73 74 72  compare text str
eef0: 69 6e 67 2e 20 20 49 66 20 62 6f 74 68 20 76 61  ing.  If both va
ef00: 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e 75 6d 65  lues are.** nume
ef10: 72 69 63 2c 20 74 68 65 6e 20 61 20 6e 75 6d 65  ric, then a nume
ef20: 72 69 63 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69  ric comparison i
ef30: 73 20 75 73 65 64 2e 20 49 66 20 74 68 65 20 74  s used. If the t
ef40: 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65  wo values.** are
ef50: 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 74 79   of different ty
ef60: 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d 62 65 72  pes, then number
ef70: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
ef80: 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 73 74   less than.** st
ef90: 72 69 6e 67 73 20 61 6e 64 20 73 74 72 69 6e 67  rings and string
efa0: 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64  s are considered
efb0: 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
efc0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 53 51 4c 49 54  ..**.** If SQLIT
efd0: 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73 65 74 20  E_NULLEQ is set 
efe0: 69 6e 20 50 35 20 74 68 65 6e 20 74 68 65 20 72  in P5 then the r
eff0: 65 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69  esult of compari
f000: 73 6f 6e 20 69 73 20 61 6c 77 61 79 73 20 65 69  son is always ei
f010: 74 68 65 72 0a 2a 2a 20 74 72 75 65 20 6f 72 20  ther.** true or 
f020: 66 61 6c 73 65 20 61 6e 64 20 69 73 20 6e 65 76  false and is nev
f030: 65 72 20 4e 55 4c 4c 2e 20 20 49 66 20 62 6f 74  er NULL.  If bot
f040: 68 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20 4e  h operands are N
f050: 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65 73  ULL then the res
f060: 75 6c 74 0a 2a 2a 20 6f 66 20 63 6f 6d 70 61 72  ult.** of compar
f070: 69 73 6f 6e 20 69 73 20 74 72 75 65 2e 20 20 49  ison is true.  I
f080: 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
f090: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
f0a0: 65 20 72 65 73 75 6c 74 20 69 73 20 66 61 6c 73  e result is fals
f0b0: 65 2e 0a 2a 2a 20 49 66 20 6e 65 69 74 68 65 72  e..** If neither
f0c0: 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c   operand is NULL
f0d0: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 74   the result is t
f0e0: 68 65 20 73 61 6d 65 20 61 73 20 69 74 20 77 6f  he same as it wo
f0f0: 75 6c 64 20 62 65 20 69 66 0a 2a 2a 20 74 68 65  uld be if.** the
f100: 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 66   SQLITE_NULLEQ f
f110: 6c 61 67 20 77 65 72 65 20 6f 6d 69 74 74 65 64  lag were omitted
f120: 20 66 72 6f 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20   from P5..**.** 
f130: 49 66 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53  If both SQLITE_S
f140: 54 4f 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54  TOREP2 and SQLIT
f150: 45 5f 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73  E_KEEPNULL flags
f160: 20 61 72 65 20 73 65 74 20 74 68 65 6e 20 74 68   are set then th
f170: 65 0a 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20  e.** content of 
f180: 72 5b 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68  r[P2] is only ch
f190: 61 6e 67 65 64 20 69 66 20 74 68 65 20 6e 65 77  anged if the new
f1a0: 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f   value is NULL o
f1b0: 72 20 30 20 28 66 61 6c 73 65 29 2e 0a 2a 2a 20  r 0 (false)..** 
f1c0: 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
f1d0: 61 20 70 72 69 6f 72 20 72 5b 50 32 5d 20 76 61  a prior r[P2] va
f1e0: 6c 75 65 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20  lue will not be 
f1f0: 6f 76 65 72 77 72 69 74 74 65 6e 20 62 79 20 31  overwritten by 1
f200: 20 28 74 72 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f   (true)..*/./* O
f210: 70 63 6f 64 65 3a 20 4e 65 20 50 31 20 50 32 20  pcode: Ne P1 P2 
f220: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f230: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 21 3d  psis: IF r[P3]!=
f240: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P1].**.** This
f250: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
f260: 20 74 68 65 20 45 71 20 6f 70 63 6f 64 65 20 65   the Eq opcode e
f270: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
f280: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
f290: 2a 2a 20 74 68 65 20 6f 70 65 72 61 6e 64 73 20  ** the operands 
f2a0: 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
f2b0: 61 6e 64 20 50 33 20 61 72 65 20 6e 6f 74 20 65  and P3 are not e
f2c0: 71 75 61 6c 2e 20 20 53 65 65 20 74 68 65 20 45  qual.  See the E
f2d0: 71 20 6f 70 63 6f 64 65 20 66 6f 72 0a 2a 2a 20  q opcode for.** 
f2e0: 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72  additional infor
f2f0: 6d 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  mation..**.** If
f300: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f   both SQLITE_STO
f310: 52 45 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f  REP2 and SQLITE_
f320: 4b 45 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61  KEEPNULL flags a
f330: 72 65 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a  re set then the.
f340: 2a 2a 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b  ** content of r[
f350: 50 32 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e  P2] is only chan
f360: 67 65 64 20 69 66 20 74 68 65 20 6e 65 77 20 76  ged if the new v
f370: 61 6c 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20  alue is NULL or 
f380: 31 20 28 74 72 75 65 29 2e 0a 2a 2a 20 49 6e 20  1 (true)..** In 
f390: 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70  other words, a p
f3a0: 72 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65  rior r[P2] value
f3b0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65   will not be ove
f3c0: 72 77 72 69 74 74 65 6e 20 62 79 20 30 20 28 66  rwritten by 0 (f
f3d0: 61 6c 73 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  alse)..*/./* Opc
f3e0: 6f 64 65 3a 20 4c 74 20 50 31 20 50 32 20 50 33  ode: Lt P1 P2 P3
f3f0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
f400: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 72 5b 50  is: IF r[P3]<r[P
f410: 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65  1].**.** Compare
f420: 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20 72   the values in r
f430: 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20 50  egister P1 and P
f440: 33 2e 20 20 49 66 20 72 65 67 28 50 33 29 3c 72  3.  If reg(P3)<r
f450: 65 67 28 50 31 29 20 74 68 65 6e 0a 2a 2a 20 6a  eg(P1) then.** j
f460: 75 6d 70 20 74 6f 20 61 64 64 72 65 73 73 20 50  ump to address P
f470: 32 2e 20 20 4f 72 20 69 66 20 74 68 65 20 53 51  2.  Or if the SQ
f480: 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 66 6c 61  LITE_STOREP2 fla
f490: 67 20 69 73 20 73 65 74 20 69 6e 20 50 35 20 73  g is set in P5 s
f4a0: 74 6f 72 65 0a 2a 2a 20 74 68 65 20 72 65 73 75  tore.** the resu
f4b0: 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  lt of comparison
f4c0: 20 28 30 20 6f 72 20 31 20 6f 72 20 4e 55 4c 4c   (0 or 1 or NULL
f4d0: 29 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  ) into register 
f4e0: 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P2..**.** If the
f4f0: 20 53 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55   SQLITE_JUMPIFNU
f500: 4c 4c 20 62 69 74 20 6f 66 20 50 35 20 69 73 20  LL bit of P5 is 
f510: 73 65 74 20 61 6e 64 20 65 69 74 68 65 72 20 72  set and either r
f520: 65 67 28 50 31 29 20 6f 72 0a 2a 2a 20 72 65 67  eg(P1) or.** reg
f530: 28 50 33 29 20 69 73 20 4e 55 4c 4c 20 74 68 65  (P3) is NULL the
f540: 6e 20 74 68 65 20 74 61 6b 65 20 74 68 65 20 6a  n the take the j
f550: 75 6d 70 2e 20 20 49 66 20 74 68 65 20 53 51 4c  ump.  If the SQL
f560: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a  ITE_JUMPIFNULL .
f570: 2a 2a 20 62 69 74 20 69 73 20 63 6c 65 61 72 20  ** bit is clear 
f580: 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67  then fall throug
f590: 68 20 69 66 20 65 69 74 68 65 72 20 6f 70 65 72  h if either oper
f5a0: 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a  and is NULL..**.
f5b0: 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46  ** The SQLITE_AF
f5c0: 46 5f 4d 41 53 4b 20 70 6f 72 74 69 6f 6e 20 6f  F_MASK portion o
f5d0: 66 20 50 35 20 6d 75 73 74 20 62 65 20 61 6e 20  f P5 must be an 
f5e0: 61 66 66 69 6e 69 74 79 20 63 68 61 72 61 63 74  affinity charact
f5f0: 65 72 20 2d 0a 2a 2a 20 53 51 4c 49 54 45 5f 41  er -.** SQLITE_A
f600: 46 46 5f 54 45 58 54 2c 20 53 51 4c 49 54 45 5f  FF_TEXT, SQLITE_
f610: 41 46 46 5f 49 4e 54 45 47 45 52 2c 20 61 6e 64  AFF_INTEGER, and
f620: 20 73 6f 20 66 6f 72 74 68 2e 20 41 6e 20 61 74   so forth. An at
f630: 74 65 6d 70 74 20 69 73 20 6d 61 64 65 20 0a 2a  tempt is made .*
f640: 2a 20 74 6f 20 63 6f 65 72 63 65 20 62 6f 74 68  * to coerce both
f650: 20 69 6e 70 75 74 73 20 61 63 63 6f 72 64 69 6e   inputs accordin
f660: 67 20 74 6f 20 74 68 69 73 20 61 66 66 69 6e 69  g to this affini
f670: 74 79 20 62 65 66 6f 72 65 20 74 68 65 0a 2a 2a  ty before the.**
f680: 20 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 6d   comparison is m
f690: 61 64 65 2e 20 49 66 20 74 68 65 20 53 51 4c 49  ade. If the SQLI
f6a0: 54 45 5f 41 46 46 5f 4d 41 53 4b 20 69 73 20 30  TE_AFF_MASK is 0
f6b0: 78 30 30 2c 20 74 68 65 6e 20 6e 75 6d 65 72 69  x00, then numeri
f6c0: 63 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 69 73  c.** affinity is
f6d0: 20 75 73 65 64 2e 20 4e 6f 74 65 20 74 68 61 74   used. Note that
f6e0: 20 74 68 65 20 61 66 66 69 6e 69 74 79 20 63 6f   the affinity co
f6f0: 6e 76 65 72 73 69 6f 6e 73 20 61 72 65 20 73 74  nversions are st
f700: 6f 72 65 64 0a 2a 2a 20 62 61 63 6b 20 69 6e 74  ored.** back int
f710: 6f 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  o the input regi
f720: 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e  sters P1 and P3.
f730: 20 20 53 6f 20 74 68 69 73 20 6f 70 63 6f 64 65    So this opcode
f740: 20 63 61 6e 20 63 61 75 73 65 0a 2a 2a 20 70 65   can cause.** pe
f750: 72 73 69 73 74 65 6e 74 20 63 68 61 6e 67 65 73  rsistent changes
f760: 20 74 6f 20 72 65 67 69 73 74 65 72 73 20 50 31   to registers P1
f770: 20 61 6e 64 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f   and P3..**.** O
f780: 6e 63 65 20 61 6e 79 20 63 6f 6e 76 65 72 73 69  nce any conversi
f790: 6f 6e 73 20 68 61 76 65 20 74 61 6b 65 6e 20 70  ons have taken p
f7a0: 6c 61 63 65 2c 20 61 6e 64 20 6e 65 69 74 68 65  lace, and neithe
f7b0: 72 20 76 61 6c 75 65 20 69 73 20 4e 55 4c 4c 2c  r value is NULL,
f7c0: 20 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20   .** the values 
f7d0: 61 72 65 20 63 6f 6d 70 61 72 65 64 2e 20 49 66  are compared. If
f7e0: 20 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65   both values are
f7f0: 20 62 6c 6f 62 73 20 74 68 65 6e 20 6d 65 6d 63   blobs then memc
f800: 6d 70 28 29 20 69 73 0a 2a 2a 20 75 73 65 64 20  mp() is.** used 
f810: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
f820: 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20   results of the 
f830: 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 49 66 20  comparison.  If 
f840: 62 6f 74 68 20 76 61 6c 75 65 73 0a 2a 2a 20 61  both values.** a
f850: 72 65 20 74 65 78 74 2c 20 74 68 65 6e 20 74 68  re text, then th
f860: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63 6f  e appropriate co
f870: 6c 6c 61 74 69 6e 67 20 66 75 6e 63 74 69 6f 6e  llating function
f880: 20 73 70 65 63 69 66 69 65 64 20 69 6e 0a 2a 2a   specified in.**
f890: 20 50 34 20 69 73 20 20 75 73 65 64 20 74 6f 20   P4 is  used to 
f8a0: 64 6f 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f  do the compariso
f8b0: 6e 2e 20 20 49 66 20 50 34 20 69 73 20 6e 6f 74  n.  If P4 is not
f8c0: 20 73 70 65 63 69 66 69 65 64 20 74 68 65 6e 0a   specified then.
f8d0: 2a 2a 20 6d 65 6d 63 6d 70 28 29 20 69 73 20 75  ** memcmp() is u
f8e0: 73 65 64 20 74 6f 20 63 6f 6d 70 61 72 65 20 74  sed to compare t
f8f0: 65 78 74 20 73 74 72 69 6e 67 2e 20 20 49 66 20  ext string.  If 
f900: 62 6f 74 68 20 76 61 6c 75 65 73 20 61 72 65 0a  both values are.
f910: 2a 2a 20 6e 75 6d 65 72 69 63 2c 20 74 68 65 6e  ** numeric, then
f920: 20 61 20 6e 75 6d 65 72 69 63 20 63 6f 6d 70 61   a numeric compa
f930: 72 69 73 6f 6e 20 69 73 20 75 73 65 64 2e 20 49  rison is used. I
f940: 66 20 74 68 65 20 74 77 6f 20 76 61 6c 75 65 73  f the two values
f950: 0a 2a 2a 20 61 72 65 20 6f 66 20 64 69 66 66 65  .** are of diffe
f960: 72 65 6e 74 20 74 79 70 65 73 2c 20 74 68 65 6e  rent types, then
f970: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 63 6f 6e   numbers are con
f980: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
f990: 6e 0a 2a 2a 20 73 74 72 69 6e 67 73 20 61 6e 64  n.** strings and
f9a0: 20 73 74 72 69 6e 67 73 20 61 72 65 20 63 6f 6e   strings are con
f9b0: 73 69 64 65 72 65 64 20 6c 65 73 73 20 74 68 61  sidered less tha
f9c0: 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f  n blobs..*/./* O
f9d0: 70 63 6f 64 65 3a 20 4c 65 20 50 31 20 50 32 20  pcode: Le P1 P2 
f9e0: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
f9f0: 70 73 69 73 3a 20 49 46 20 72 5b 50 33 5d 3c 3d  psis: IF r[P3]<=
fa00: 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r[P1].**.** This
fa10: 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65   works just like
fa20: 20 74 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65   the Lt opcode e
fa30: 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20 6a  xcept that the j
fa40: 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a  ump is taken if.
fa50: 2a 2a 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ** the content o
fa60: 66 20 72 65 67 69 73 74 65 72 20 50 33 20 69 73  f register P3 is
fa70: 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
fa80: 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74 65  ual to the conte
fa90: 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65  nt of.** registe
faa0: 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c  r P1.  See the L
fab0: 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64  t opcode for add
fac0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
fad0: 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ion..*/./* Opcod
fae0: 65 3a 20 47 74 20 50 31 20 50 32 20 50 33 20 50  e: Gt P1 P2 P3 P
faf0: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
fb00: 3a 20 49 46 20 72 5b 50 33 5d 3e 72 5b 50 31 5d  : IF r[P3]>r[P1]
fb10: 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b  .**.** This work
fb20: 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20  s just like the 
fb30: 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74  Lt opcode except
fb40: 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69   that the jump i
fb50: 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68  s taken if.** th
fb60: 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67  e content of reg
fb70: 69 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61  ister P3 is grea
fb80: 74 65 72 20 74 68 61 6e 20 74 68 65 20 63 6f 6e  ter than the con
fb90: 74 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73  tent of.** regis
fba0: 74 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65  ter P1.  See the
fbb0: 20 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61   Lt opcode for a
fbc0: 64 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d  dditional inform
fbd0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  ation..*/./* Opc
fbe0: 6f 64 65 3a 20 47 65 20 50 31 20 50 32 20 50 33  ode: Ge P1 P2 P3
fbf0: 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73   P4 P5.** Synops
fc00: 69 73 3a 20 49 46 20 72 5b 50 33 5d 3e 3d 72 5b  is: IF r[P3]>=r[
fc10: 50 31 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P1].**.** This w
fc20: 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74  orks just like t
fc30: 68 65 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63  he Lt opcode exc
fc40: 65 70 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d  ept that the jum
fc50: 70 20 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a  p is taken if.**
fc60: 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20   the content of 
fc70: 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 67  register P3 is g
fc80: 72 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65  reater than or e
fc90: 71 75 61 6c 20 74 6f 20 74 68 65 20 63 6f 6e 74  qual to the cont
fca0: 65 6e 74 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74  ent of.** regist
fcb0: 65 72 20 50 31 2e 20 20 53 65 65 20 74 68 65 20  er P1.  See the 
fcc0: 4c 74 20 6f 70 63 6f 64 65 20 66 6f 72 20 61 64  Lt opcode for ad
fcd0: 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
fce0: 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  tion..*/.case OP
fcf0: 5f 45 71 3a 20 20 20 20 20 20 20 20 20 20 20 20  _Eq:            
fd00: 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
fd10: 5f 45 51 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20  _EQ, jump, in1, 
fd20: 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e  in3 */.case OP_N
fd30: 65 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e:              
fd40: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
fd50: 45 2c 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e  E, jump, in1, in
fd60: 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 74 3a  3 */.case OP_Lt:
fd70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fd80: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4c 54 2c  * same as TK_LT,
fd90: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
fda0: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20  */.case OP_Le:  
fdb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fdc0: 73 61 6d 65 20 61 73 20 54 4b 5f 4c 45 2c 20 6a  same as TK_LE, j
fdd0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
fde0: 0a 63 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20  .case OP_Gt:    
fdf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fe00: 6d 65 20 61 73 20 54 4b 5f 47 54 2c 20 6a 75 6d  me as TK_GT, jum
fe10: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
fe20: 61 73 65 20 4f 50 5f 47 65 3a 20 7b 20 20 20 20  ase OP_Ge: {    
fe30: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
fe40: 20 61 73 20 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c   as TK_GE, jump,
fe50: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69   in1, in3 */.  i
fe60: 6e 74 20 72 65 73 2c 20 72 65 73 32 3b 20 20 20  nt res, res2;   
fe70: 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20     /* Result of 
fe80: 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f  the comparison o
fe90: 66 20 70 49 6e 31 20 61 67 61 69 6e 73 74 20 70  f pIn1 against p
fea0: 49 6e 33 20 2a 2f 0a 20 20 63 68 61 72 20 61 66  In3 */.  char af
feb0: 66 69 6e 69 74 79 3b 20 20 20 20 20 20 2f 2a 20  finity;      /* 
fec0: 41 66 66 69 6e 69 74 79 20 74 6f 20 75 73 65 20  Affinity to use 
fed0: 66 6f 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 2a  for comparison *
fee0: 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 31 3b 20  /.  u16 flags1; 
fef0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79 20          /* Copy 
ff00: 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75 65  of initial value
ff10: 20 6f 66 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20   of pIn1->flags 
ff20: 2a 2f 0a 20 20 75 31 36 20 66 6c 61 67 73 33 3b  */.  u16 flags3;
ff30: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 70 79           /* Copy
ff40: 20 6f 66 20 69 6e 69 74 69 61 6c 20 76 61 6c 75   of initial valu
ff50: 65 20 6f 66 20 70 49 6e 33 2d 3e 66 6c 61 67 73  e of pIn3->flags
ff60: 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61   */..  pIn1 = &a
ff70: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
ff80: 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn3 = &aMem[pOp
ff90: 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61 67 73 31 20  ->p3];.  flags1 
ffa0: 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20  = pIn1->flags;. 
ffb0: 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e   flags3 = pIn3->
ffc0: 66 6c 61 67 73 3b 0a 20 20 69 66 28 20 28 66 6c  flags;.  if( (fl
ffd0: 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26 4d  ags1 | flags3)&M
ffe0: 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 2f  EM_Null ){.    /
fff0: 2a 20 4f 6e 65 20 6f 72 20 62 6f 74 68 20 6f 70  * One or both op
10000 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
10010 2a 2f 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  */.    if( pOp->
10020 70 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  p5 & SQLITE_NULL
10030 45 51 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  EQ ){.      /* I
10040 66 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  f SQLITE_NULLEQ 
10050 69 73 20 73 65 74 20 28 77 68 69 63 68 20 77 69  is set (which wi
10060 6c 6c 20 6f 6e 6c 79 20 68 61 70 70 65 6e 20 69  ll only happen i
10070 66 20 74 68 65 20 6f 70 65 72 61 74 6f 72 20 69  f the operator i
10080 73 0a 20 20 20 20 20 20 2a 2a 20 4f 50 5f 45 71  s.      ** OP_Eq
10090 20 6f 72 20 4f 50 5f 4e 65 29 20 74 68 65 6e 20   or OP_Ne) then 
100a0 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 6f 72  take the jump or
100b0 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f   not depending o
100c0 6e 20 77 68 65 74 68 65 72 0a 20 20 20 20 20 20  n whether.      
100d0 2a 2a 20 6f 72 20 6e 6f 74 20 62 6f 74 68 20 6f  ** or not both o
100e0 70 65 72 61 6e 64 73 20 61 72 65 20 6e 75 6c 6c  perands are null
100f0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
10100 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
10110 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70  code==OP_Eq || p
10120 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
10130 65 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  e );.      asser
10140 74 28 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d  t( (flags1 & MEM
10150 5f 43 6c 65 61 72 65 64 29 3d 3d 30 20 29 3b 0a  _Cleared)==0 );.
10160 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70        assert( (p
10170 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f  Op->p5 & SQLITE_
10180 4a 55 4d 50 49 46 4e 55 4c 4c 29 3d 3d 30 20 29  JUMPIFNULL)==0 )
10190 3b 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  ;.      if( (fla
101a0 67 73 31 26 66 6c 61 67 73 33 26 4d 45 4d 5f 4e  gs1&flags3&MEM_N
101b0 75 6c 6c 29 21 3d 30 0a 20 20 20 20 20 20 20 26  ull)!=0.       &
101c0 26 20 28 66 6c 61 67 73 33 26 4d 45 4d 5f 43 6c  & (flags3&MEM_Cl
101d0 65 61 72 65 64 29 3d 3d 30 0a 20 20 20 20 20 20  eared)==0.      
101e0 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 20 3d  ){.        res =
101f0 20 30 3b 20 20 2f 2a 20 4f 70 65 72 61 6e 64 73   0;  /* Operands
10200 20 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20   are equal */.  
10210 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10220 20 20 20 72 65 73 20 3d 20 31 3b 20 20 2f 2a 20     res = 1;  /* 
10230 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74  Operands are not
10240 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10250 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
10260 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 55 4c     /* SQLITE_NUL
10270 4c 45 51 20 69 73 20 63 6c 65 61 72 20 61 6e 64  LEQ is clear and
10280 20 61 74 20 6c 65 61 73 74 20 6f 6e 65 20 6f 70   at least one op
10290 65 72 61 6e 64 20 69 73 20 4e 55 4c 4c 2c 0a 20  erand is NULL,. 
102a0 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68 65       ** then the
102b0 20 72 65 73 75 6c 74 20 69 73 20 61 6c 77 61 79   result is alway
102c0 73 20 4e 55 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a  s NULL..      **
102d0 20 54 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   The jump is tak
102e0 65 6e 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  en if the SQLITE
102f0 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62 69 74 20  _JUMPIFNULL bit 
10300 69 73 20 73 65 74 2e 0a 20 20 20 20 20 20 2a 2f  is set..      */
10310 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  .      if( pOp->
10320 70 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52  p5 & SQLITE_STOR
10330 45 50 32 20 29 7b 0a 20 20 20 20 20 20 20 20 70  EP2 ){.        p
10340 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
10350 3e 70 32 5d 3b 0a 20 20 20 20 20 20 20 20 69 43  >p2];.        iC
10360 6f 6d 70 61 72 65 20 3d 20 31 3b 20 20 20 20 2f  ompare = 1;    /
10370 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65 20 6e  * Operands are n
10380 6f 74 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20  ot equal */.    
10390 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68      memAboutToCh
103a0 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a 20  ange(p, pOut);. 
103b0 20 20 20 20 20 20 20 4d 65 6d 53 65 74 54 79 70         MemSetTyp
103c0 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
103d0 4e 75 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 52  Null);.        R
103e0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
103f0 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a 20 20  p->p2, pOut);.  
10400 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
10410 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
10420 65 6e 28 32 2c 33 29 3b 0a 20 20 20 20 20 20 20  en(2,3);.       
10430 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53   if( pOp->p5 & S
10440 51 4c 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c  QLITE_JUMPIFNULL
10450 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f   ){.          go
10460 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
10470 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
10480 0a 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  .      break;.  
10490 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
104a0 20 2f 2a 20 4e 65 69 74 68 65 72 20 6f 70 65 72   /* Neither oper
104b0 61 6e 64 20 69 73 20 4e 55 4c 4c 2e 20 20 44 6f  and is NULL.  Do
104c0 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a   a comparison. *
104d0 2f 0a 20 20 20 20 61 66 66 69 6e 69 74 79 20 3d  /.    affinity =
104e0 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
104f0 45 5f 41 46 46 5f 4d 41 53 4b 3b 0a 20 20 20 20  E_AFF_MASK;.    
10500 69 66 28 20 61 66 66 69 6e 69 74 79 3e 3d 53 51  if( affinity>=SQ
10510 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43  LITE_AFF_NUMERIC
10520 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 66   ){.      if( (f
10530 6c 61 67 73 31 20 7c 20 66 6c 61 67 73 33 29 26  lags1 | flags3)&
10540 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20  MEM_Str ){.     
10550 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 20 26     if( (flags1 &
10560 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65   (MEM_Int|MEM_Re
10570 61 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45  al|MEM_Str))==ME
10580 4d 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20  M_Str ){.       
10590 20 20 20 61 70 70 6c 79 4e 75 6d 65 72 69 63 41     applyNumericA
105a0 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 30 29 3b  ffinity(pIn1,0);
105b0 0a 20 20 20 20 20 20 20 20 20 20 74 65 73 74 63  .          testc
105c0 61 73 65 28 20 66 6c 61 67 73 33 21 3d 70 49 6e  ase( flags3!=pIn
105d0 33 2d 3e 66 6c 61 67 73 20 29 3b 20 2f 2a 20 50  3->flags ); /* P
105e0 6f 73 73 69 62 6c 65 20 69 66 20 70 49 6e 31 3d  ossible if pIn1=
105f0 3d 70 49 6e 33 20 2a 2f 0a 20 20 20 20 20 20 20  =pIn3 */.       
10600 20 20 20 66 6c 61 67 73 33 20 3d 20 70 49 6e 33     flags3 = pIn3
10610 2d 3e 66 6c 61 67 73 3b 0a 20 20 20 20 20 20 20  ->flags;.       
10620 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
10630 66 6c 61 67 73 33 20 26 20 28 4d 45 4d 5f 49 6e  flags3 & (MEM_In
10640 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53  t|MEM_Real|MEM_S
10650 74 72 29 29 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b  tr))==MEM_Str ){
10660 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 6c 79  .          apply
10670 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28  NumericAffinity(
10680 70 49 6e 33 2c 30 29 3b 0a 20 20 20 20 20 20 20  pIn3,0);.       
10690 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
106a0 20 2f 2a 20 48 61 6e 64 6c 65 20 74 68 65 20 63   /* Handle the c
106b0 6f 6d 6d 6f 6e 20 63 61 73 65 20 6f 66 20 69 6e  ommon case of in
106c0 74 65 67 65 72 20 63 6f 6d 70 61 72 69 73 6f 6e  teger comparison
106d0 20 68 65 72 65 2c 20 61 73 20 61 6e 0a 20 20 20   here, as an.   
106e0 20 20 20 2a 2a 20 6f 70 74 69 6d 69 7a 61 74 69     ** optimizati
106f0 6f 6e 2c 20 74 6f 20 61 76 6f 69 64 20 61 20 63  on, to avoid a c
10700 61 6c 6c 20 74 6f 20 73 71 6c 69 74 65 33 4d 65  all to sqlite3Me
10710 6d 43 6f 6d 70 61 72 65 28 29 20 2a 2f 0a 20 20  mCompare() */.  
10720 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
10730 6c 61 67 73 20 26 20 70 49 6e 33 2d 3e 66 6c 61  lags & pIn3->fla
10740 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  gs & MEM_Int)!=0
10750 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
10760 70 49 6e 33 2d 3e 75 2e 69 20 3e 20 70 49 6e 31  pIn3->u.i > pIn1
10770 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2b  ->u.i ){ res = +
10780 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f  1; goto compare_
10790 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20 69 66  op; }.        if
107a0 28 20 70 49 6e 33 2d 3e 75 2e 69 20 3c 20 70 49  ( pIn3->u.i < pI
107b0 6e 31 2d 3e 75 2e 69 20 29 7b 20 72 65 73 20 3d  n1->u.i ){ res =
107c0 20 2d 31 3b 20 67 6f 74 6f 20 63 6f 6d 70 61 72   -1; goto compar
107d0 65 5f 6f 70 3b 20 7d 0a 20 20 20 20 20 20 20 20  e_op; }.        
107e0 72 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  res = 0;.       
107f0 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
10800 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
10810 6c 73 65 20 69 66 28 20 61 66 66 69 6e 69 74 79  lse if( affinity
10820 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
10830 54 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28  T ){.      if( (
10840 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 53 74 72  flags1 & MEM_Str
10850 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 31 20  )==0 && (flags1 
10860 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52  & (MEM_Int|MEM_R
10870 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  eal))!=0 ){.    
10880 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70 49      testcase( pI
10890 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
108a0 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 74  Int );.        t
108b0 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e 66  estcase( pIn1->f
108c0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20  lags & MEM_Real 
108d0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
108e0 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67 69  e3VdbeMemStringi
108f0 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f 64 69 6e  fy(pIn1, encodin
10900 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 74  g, 1);.        t
10910 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73 31  estcase( (flags1
10920 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49  &MEM_Dyn) != (pI
10930 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79  n1->flags&MEM_Dy
10940 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c  n) );.        fl
10950 61 67 73 31 20 3d 20 28 70 49 6e 31 2d 3e 66 6c  ags1 = (pIn1->fl
10960 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d  ags & ~MEM_TypeM
10970 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 31 20 26  ask) | (flags1 &
10980 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a   MEM_TypeMask);.
10990 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
109a0 70 49 6e 31 21 3d 70 49 6e 33 20 29 3b 0a 20 20  pIn1!=pIn3 );.  
109b0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
109c0 28 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 53 74  (flags3 & MEM_St
109d0 72 29 3d 3d 30 20 26 26 20 28 66 6c 61 67 73 33  r)==0 && (flags3
109e0 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f   & (MEM_Int|MEM_
109f0 52 65 61 6c 29 29 21 3d 30 20 29 7b 0a 20 20 20  Real))!=0 ){.   
10a00 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 70       testcase( p
10a10 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
10a20 5f 49 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20  _Int );.        
10a30 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d 3e  testcase( pIn3->
10a40 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c  flags & MEM_Real
10a50 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
10a60 74 65 33 56 64 62 65 4d 65 6d 53 74 72 69 6e 67  te3VdbeMemString
10a70 69 66 79 28 70 49 6e 33 2c 20 65 6e 63 6f 64 69  ify(pIn3, encodi
10a80 6e 67 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  ng, 1);.        
10a90 74 65 73 74 63 61 73 65 28 20 28 66 6c 61 67 73  testcase( (flags
10aa0 33 26 4d 45 4d 5f 44 79 6e 29 20 21 3d 20 28 70  3&MEM_Dyn) != (p
10ab0 49 6e 33 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 44  In3->flags&MEM_D
10ac0 79 6e 29 20 29 3b 0a 20 20 20 20 20 20 20 20 66  yn) );.        f
10ad0 6c 61 67 73 33 20 3d 20 28 70 49 6e 33 2d 3e 66  lags3 = (pIn3->f
10ae0 6c 61 67 73 20 26 20 7e 4d 45 4d 5f 54 79 70 65  lags & ~MEM_Type
10af0 4d 61 73 6b 29 20 7c 20 28 66 6c 61 67 73 33 20  Mask) | (flags3 
10b00 26 20 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29 3b  & MEM_TypeMask);
10b10 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
10b20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
10b30 70 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53  p4type==P4_COLLS
10b40 45 51 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 70 43  EQ || pOp->p4.pC
10b50 6f 6c 6c 3d 3d 30 20 29 3b 0a 20 20 20 20 72 65  oll==0 );.    re
10b60 73 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f  s = sqlite3MemCo
10b70 6d 70 61 72 65 28 70 49 6e 33 2c 20 70 49 6e 31  mpare(pIn3, pIn1
10b80 2c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29  , pOp->p4.pColl)
10b90 3b 0a 20 20 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70  ;.  }.compare_op
10ba0 3a 0a 20 20 73 77 69 74 63 68 28 20 70 4f 70 2d  :.  switch( pOp-
10bb0 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20 20 63  >opcode ){.    c
10bc0 61 73 65 20 4f 50 5f 45 71 3a 20 20 20 20 72 65  ase OP_Eq:    re
10bd0 73 32 20 3d 20 72 65 73 3d 3d 30 3b 20 20 20 20  s2 = res==0;    
10be0 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
10bf0 20 4f 50 5f 4e 65 3a 20 20 20 20 72 65 73 32 20   OP_Ne:    res2 
10c00 3d 20 72 65 73 3b 20 20 20 20 20 20 20 20 62 72  = res;        br
10c10 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50  eak;.    case OP
10c20 5f 4c 74 3a 20 20 20 20 72 65 73 32 20 3d 20 72  _Lt:    res2 = r
10c30 65 73 3c 30 3b 20 20 20 20 20 20 62 72 65 61 6b  es<0;      break
10c40 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 65  ;.    case OP_Le
10c50 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c  :    res2 = res<
10c60 3d 30 3b 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  =0;     break;. 
10c70 20 20 20 63 61 73 65 20 4f 50 5f 47 74 3a 20 20     case OP_Gt:  
10c80 20 20 72 65 73 32 20 3d 20 72 65 73 3e 30 3b 20    res2 = res>0; 
10c90 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
10ca0 64 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 72  default:       r
10cb0 65 73 32 20 3d 20 72 65 73 3e 3d 30 3b 20 20 20  es2 = res>=0;   
10cc0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
10cd0 2f 2a 20 55 6e 64 6f 20 61 6e 79 20 63 68 61 6e  /* Undo any chan
10ce0 67 65 73 20 6d 61 64 65 20 62 79 20 61 70 70 6c  ges made by appl
10cf0 79 41 66 66 69 6e 69 74 79 28 29 20 74 6f 20 74  yAffinity() to t
10d00 68 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65  he input registe
10d10 72 73 2e 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  rs. */.  assert(
10d20 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
10d30 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61  MEM_Dyn) == (fla
10d40 67 73 31 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29  gs1 & MEM_Dyn) )
10d50 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20  ;.  pIn1->flags 
10d60 3d 20 66 6c 61 67 73 31 3b 0a 20 20 61 73 73 65  = flags1;.  asse
10d70 72 74 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  rt( (pIn3->flags
10d80 20 26 20 4d 45 4d 5f 44 79 6e 29 20 3d 3d 20 28   & MEM_Dyn) == (
10d90 66 6c 61 67 73 33 20 26 20 4d 45 4d 5f 44 79 6e  flags3 & MEM_Dyn
10da0 29 20 29 3b 0a 20 20 70 49 6e 33 2d 3e 66 6c 61  ) );.  pIn3->fla
10db0 67 73 20 3d 20 66 6c 61 67 73 33 3b 0a 0a 20 20  gs = flags3;..  
10dc0 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 53 51  if( pOp->p5 & SQ
10dd0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 29 7b 0a  LITE_STOREP2 ){.
10de0 20 20 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d      pOut = &aMem
10df0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 20 20 69  [pOp->p2];.    i
10e00 43 6f 6d 70 61 72 65 20 3d 20 72 65 73 3b 0a 20  Compare = res;. 
10e10 20 20 20 72 65 73 32 20 3d 20 72 65 73 32 21 3d     res2 = res2!=
10e20 30 3b 20 20 2f 2a 20 46 6f 72 20 74 68 69 73 20  0;  /* For this 
10e30 70 61 74 68 20 72 65 73 32 20 6d 75 73 74 20 62  path res2 must b
10e40 65 20 65 78 61 63 74 6c 79 20 30 20 6f 72 20 31  e exactly 0 or 1
10e50 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 4f 70   */.    if( (pOp
10e60 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 4b 45  ->p5 & SQLITE_KE
10e70 45 50 4e 55 4c 4c 29 21 3d 30 20 29 7b 0a 20 20  EPNULL)!=0 ){.  
10e80 20 20 20 20 2f 2a 20 54 68 65 20 4b 45 45 50 4e      /* The KEEPN
10e90 55 4c 4c 20 66 6c 61 67 20 70 72 65 76 65 6e 74  ULL flag prevent
10ea0 73 20 4f 50 5f 45 71 20 66 72 6f 6d 20 6f 76 65  s OP_Eq from ove
10eb0 72 77 72 69 74 69 6e 67 20 61 20 4e 55 4c 4c 20  rwriting a NULL 
10ec0 77 69 74 68 20 31 0a 20 20 20 20 20 20 2a 2a 20  with 1.      ** 
10ed0 61 6e 64 20 70 72 65 76 65 6e 74 73 20 4f 50 5f  and prevents OP_
10ee0 4e 65 20 66 72 6f 6d 20 6f 76 65 72 77 72 69 74  Ne from overwrit
10ef0 69 6e 67 20 4e 55 4c 4c 20 77 69 74 68 20 30 2e  ing NULL with 0.
10f00 20 20 54 68 69 73 20 66 6c 61 67 0a 20 20 20 20    This flag.    
10f10 20 20 2a 2a 20 69 73 20 6f 6e 6c 79 20 75 73 65    ** is only use
10f20 64 20 69 6e 20 63 6f 6e 74 65 78 74 73 20 77 68  d in contexts wh
10f30 65 72 65 20 65 69 74 68 65 72 3a 0a 20 20 20 20  ere either:.    
10f40 20 20 2a 2a 20 20 20 28 31 29 20 6f 70 3d 3d 4f    **   (1) op==O
10f50 50 5f 45 71 20 26 26 20 28 72 5b 50 32 5d 3d 3d  P_Eq && (r[P2]==
10f60 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30  NULL || r[P2]==0
10f70 29 0a 20 20 20 20 20 20 2a 2a 20 20 20 28 32 29  ).      **   (2)
10f80 20 6f 70 3d 3d 4f 50 5f 4e 65 20 26 26 20 28 72   op==OP_Ne && (r
10f90 5b 50 32 5d 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b  [P2]==NULL || r[
10fa0 50 32 5d 3d 3d 31 29 0a 20 20 20 20 20 20 2a 2a  P2]==1).      **
10fb0 20 54 68 65 72 65 66 6f 72 65 20 69 74 20 69 73   Therefore it is
10fc0 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 20 74   not necessary t
10fd0 6f 20 63 68 65 63 6b 20 74 68 65 20 63 6f 6e 74  o check the cont
10fe0 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20 66 6f 72  ent of r[P2] for
10ff0 0a 20 20 20 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20  .      ** NULL. 
11000 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
11010 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
11020 5f 4e 65 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  _Ne || pOp->opco
11030 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20 20  de==OP_Eq );.   
11040 20 20 20 61 73 73 65 72 74 28 20 72 65 73 32 3d     assert( res2=
11050 3d 30 20 7c 7c 20 72 65 73 32 3d 3d 31 20 29 3b  =0 || res2==1 );
11060 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28  .      testcase(
11070 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d   res2==0 && pOp-
11080 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29  >opcode==OP_Eq )
11090 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73 65  ;.      testcase
110a0 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70  ( res2==1 && pOp
110b0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 20  ->opcode==OP_Eq 
110c0 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
110d0 65 28 20 72 65 73 32 3d 3d 30 20 26 26 20 70 4f  e( res2==0 && pO
110e0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65  p->opcode==OP_Ne
110f0 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61   );.      testca
11100 73 65 28 20 72 65 73 32 3d 3d 31 20 26 26 20 70  se( res2==1 && p
11110 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e  Op->opcode==OP_N
11120 65 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 28  e );.      if( (
11130 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
11140 45 71 29 3d 3d 72 65 73 32 20 29 20 62 72 65 61  Eq)==res2 ) brea
11150 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 6d 65 6d  k;.    }.    mem
11160 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
11170 20 70 4f 75 74 29 3b 0a 20 20 20 20 4d 65 6d 53   pOut);.    MemS
11180 65 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c  etTypeFlag(pOut,
11190 20 4d 45 4d 5f 49 6e 74 29 3b 0a 20 20 20 20 70   MEM_Int);.    p
111a0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 65 73 32 3b  Out->u.i = res2;
111b0 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52  .    REGISTER_TR
111c0 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70 4f 75  ACE(pOp->p2, pOu
111d0 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  t);.  }else{.   
111e0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
111f0 28 72 65 73 21 3d 30 2c 20 28 70 4f 70 2d 3e 70  (res!=0, (pOp->p
11200 35 20 26 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45  5 & SQLITE_NULLE
11210 51 29 3f 32 3a 33 29 3b 0a 20 20 20 20 69 66 28  Q)?2:3);.    if(
11220 20 72 65 73 32 20 29 7b 0a 20 20 20 20 20 20 67   res2 ){.      g
11230 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
11240 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
11250 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
11260 20 45 6c 73 65 4e 6f 74 45 71 20 2a 20 50 32 20   ElseNotEq * P2 
11270 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73  * * *.**.** This
11280 20 6f 70 63 6f 64 65 20 6d 75 73 74 20 69 6d 6d   opcode must imm
11290 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
112a0 61 6e 20 4f 50 5f 4c 74 20 6f 72 20 4f 50 5f 47  an OP_Lt or OP_G
112b0 74 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70 65  t comparison ope
112c0 72 61 74 6f 72 2e 0a 2a 2a 20 49 66 20 72 65 73  rator..** If res
112d0 75 6c 74 20 6f 66 20 61 6e 20 4f 50 5f 45 71 20  ult of an OP_Eq 
112e0 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 6e 20 74 68  comparison on th
112f0 65 20 73 61 6d 65 20 74 77 6f 20 6f 70 65 72 61  e same two opera
11300 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11310 65 20 62 65 20 4e 55 4c 4c 20 6f 72 20 66 61 6c  e be NULL or fal
11320 73 65 20 28 30 29 2c 20 74 68 65 6e 20 74 68 65  se (0), then the
11330 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20 0a 2a  n jump to P2. .*
11340 2a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20  * If the result 
11350 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
11360 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 74 77  arison on the tw
11370 6f 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  o previous opera
11380 6e 64 73 0a 2a 2a 20 77 6f 75 6c 64 20 68 61 76  nds.** would hav
11390 65 20 62 65 65 6e 20 74 72 75 65 20 28 31 29 2c  e been true (1),
113a0 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72 6f 75   then fall throu
113b0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45  gh..*/.case OP_E
113c0 6c 73 65 4e 6f 74 45 71 3a 20 7b 20 20 20 20 20  lseNotEq: {     
113d0 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f    /* same as TK_
113e0 45 53 43 41 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a  ESCAPE, jump */.
113f0 20 20 61 73 73 65 72 74 28 20 70 4f 70 3e 61 4f    assert( pOp>aO
11400 70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p );.  assert( p
11410 4f 70 5b 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f  Op[-1].opcode==O
11420 50 5f 4c 74 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e  P_Lt || pOp[-1].
11430 6f 70 63 6f 64 65 3d 3d 4f 50 5f 47 74 20 29 3b  opcode==OP_Gt );
11440 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
11450 31 5d 2e 70 35 20 26 20 53 51 4c 49 54 45 5f 53  1].p5 & SQLITE_S
11460 54 4f 52 45 50 32 20 29 3b 0a 20 20 56 64 62 65  TOREP2 );.  Vdbe
11470 42 72 61 6e 63 68 54 61 6b 65 6e 28 69 43 6f 6d  BranchTaken(iCom
11480 70 61 72 65 21 3d 30 2c 20 32 29 3b 0a 20 20 69  pare!=0, 2);.  i
11490 66 28 20 69 43 6f 6d 70 61 72 65 21 3d 30 20 29  f( iCompare!=0 )
114a0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
114b0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f  ;.  break;.}.../
114c0 2a 20 4f 70 63 6f 64 65 3a 20 50 65 72 6d 75 74  * Opcode: Permut
114d0 61 74 69 6f 6e 20 2a 20 2a 20 2a 20 50 34 20 2a  ation * * * P4 *
114e0 0a 2a 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 70  .**.** Set the p
114f0 65 72 6d 75 74 61 74 69 6f 6e 20 75 73 65 64 20  ermutation used 
11500 62 79 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61 72  by the OP_Compar
11510 65 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74 68  e operator in th
11520 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75  e next.** instru
11530 63 74 69 6f 6e 2e 20 20 54 68 65 20 70 65 72 6d  ction.  The perm
11540 75 74 61 74 69 6f 6e 20 69 73 20 73 74 6f 72 65  utation is store
11550 64 20 69 6e 20 74 68 65 20 50 34 20 6f 70 65 72  d in the P4 oper
11560 61 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70  and..**.** The p
11570 65 72 6d 75 74 61 74 69 6f 6e 20 69 73 20 6f 6e  ermutation is on
11580 6c 79 20 76 61 6c 69 64 20 75 6e 74 69 6c 20 74  ly valid until t
11590 68 65 20 6e 65 78 74 20 4f 50 5f 43 6f 6d 70 61  he next OP_Compa
115a0 72 65 20 74 68 61 74 20 68 61 73 0a 2a 2a 20 74  re that has.** t
115b0 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54  he OPFLAG_PERMUT
115c0 45 20 62 69 74 20 73 65 74 20 69 6e 20 50 35 2e  E bit set in P5.
115d0 20 54 79 70 69 63 61 6c 6c 79 20 74 68 65 20 4f   Typically the O
115e0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 73 68  P_Permutation sh
115f0 6f 75 6c 64 20 0a 2a 2a 20 6f 63 63 75 72 20 69  ould .** occur i
11600 6d 6d 65 64 69 61 74 65 6c 79 20 70 72 69 6f 72  mmediately prior
11610 20 74 6f 20 74 68 65 20 4f 50 5f 43 6f 6d 70 61   to the OP_Compa
11620 72 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 69  re..**.** The fi
11630 72 73 74 20 69 6e 74 65 67 65 72 20 69 6e 20 74  rst integer in t
11640 68 65 20 50 34 20 69 6e 74 65 67 65 72 20 61 72  he P4 integer ar
11650 72 61 79 20 69 73 20 74 68 65 20 6c 65 6e 67 74  ray is the lengt
11660 68 20 6f 66 20 74 68 65 20 61 72 72 61 79 0a 2a  h of the array.*
11670 2a 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 62  * and does not b
11680 65 63 6f 6d 65 20 70 61 72 74 20 6f 66 20 74 68  ecome part of th
11690 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 2e 0a 2a  e permutation..*
116a0 2f 0a 63 61 73 65 20 4f 50 5f 50 65 72 6d 75 74  /.case OP_Permut
116b0 61 74 69 6f 6e 3a 20 7b 0a 20 20 61 73 73 65 72  ation: {.  asser
116c0 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
116d0 50 34 5f 49 4e 54 41 52 52 41 59 20 29 3b 0a 20  P4_INTARRAY );. 
116e0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34   assert( pOp->p4
116f0 2e 61 69 20 29 3b 0a 20 20 61 73 73 65 72 74 28  .ai );.  assert(
11700 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d 3d   pOp[1].opcode==
11710 4f 50 5f 43 6f 6d 70 61 72 65 20 29 3b 0a 20 20  OP_Compare );.  
11720 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
11730 35 20 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55  5 & OPFLAG_PERMU
11740 54 45 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  TE );.  break;.}
11750 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6d  ../* Opcode: Com
11760 70 61 72 65 20 50 31 20 50 32 20 50 33 20 50 34  pare P1 P2 P3 P4
11770 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
11780 20 72 5b 50 31 40 50 33 5d 20 3c 2d 3e 20 72 5b   r[P1@P3] <-> r[
11790 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20 43 6f 6d  P2@P3].**.** Com
117a0 70 61 72 65 20 74 77 6f 20 76 65 63 74 6f 72 73  pare two vectors
117b0 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 69 6e   of registers in
117c0 20 72 65 67 28 50 31 29 2e 2e 72 65 67 28 50 31   reg(P1)..reg(P1
117d0 2b 50 33 2d 31 29 20 28 63 61 6c 6c 20 74 68 69  +P3-1) (call thi
117e0 73 0a 2a 2a 20 76 65 63 74 6f 72 20 22 41 22 29  s.** vector "A")
117f0 20 61 6e 64 20 69 6e 20 72 65 67 28 50 32 29 2e   and in reg(P2).
11800 2e 72 65 67 28 50 32 2b 50 33 2d 31 29 20 28 22  .reg(P2+P3-1) ("
11810 42 22 29 2e 20 20 53 61 76 65 20 74 68 65 20 72  B").  Save the r
11820 65 73 75 6c 74 20 6f 66 0a 2a 2a 20 74 68 65 20  esult of.** the 
11830 63 6f 6d 70 61 72 69 73 6f 6e 20 66 6f 72 20 75  comparison for u
11840 73 65 20 62 79 20 74 68 65 20 6e 65 78 74 20 4f  se by the next O
11850 50 5f 4a 75 6d 70 20 69 6e 73 74 72 75 63 74 2e  P_Jump instruct.
11860 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61 73  .**.** If P5 has
11870 20 74 68 65 20 4f 50 46 4c 41 47 5f 50 45 52 4d   the OPFLAG_PERM
11880 55 54 45 20 62 69 74 20 73 65 74 2c 20 74 68 65  UTE bit set, the
11890 6e 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20 63  n the order of c
118a0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 0a 2a 2a 20  omparison is.** 
118b0 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
118c0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f 50  e most recent OP
118d0 5f 50 65 72 6d 75 74 61 74 69 6f 6e 20 6f 70 65  _Permutation ope
118e0 72 61 74 6f 72 2e 20 20 49 66 20 74 68 65 0a 2a  rator.  If the.*
118f0 2a 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  * OPFLAG_PERMUTE
11900 20 62 69 74 20 69 73 20 63 6c 65 61 72 2c 20 74   bit is clear, t
11910 68 65 6e 20 72 65 67 69 73 74 65 72 20 61 72 65  hen register are
11920 20 63 6f 6d 70 61 72 65 64 20 69 6e 20 73 65 71   compared in seq
11930 75 65 6e 74 69 61 6c 0a 2a 2a 20 6f 72 64 65 72  uential.** order
11940 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  ..**.** P4 is a 
11950 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75 72  KeyInfo structur
11960 65 20 74 68 61 74 20 64 65 66 69 6e 65 73 20 63  e that defines c
11970 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63  ollating sequenc
11980 65 73 20 61 6e 64 20 73 6f 72 74 0a 2a 2a 20 6f  es and sort.** o
11990 72 64 65 72 73 20 66 6f 72 20 74 68 65 20 63 6f  rders for the co
119a0 6d 70 61 72 69 73 6f 6e 2e 20 20 54 68 65 20 70  mparison.  The p
119b0 65 72 6d 75 74 61 74 69 6f 6e 20 61 70 70 6c 69  ermutation appli
119c0 65 73 20 74 6f 20 72 65 67 69 73 74 65 72 73 0a  es to registers.
119d0 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 20 4b 65  ** only.  The Ke
119e0 79 49 6e 66 6f 20 65 6c 65 6d 65 6e 74 73 20 61  yInfo elements a
119f0 72 65 20 75 73 65 64 20 73 65 71 75 65 6e 74 69  re used sequenti
11a00 61 6c 6c 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ally..**.** The 
11a10 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 20  comparison is a 
11a20 73 6f 72 74 20 63 6f 6d 70 61 72 69 73 6f 6e 2c  sort comparison,
11a30 20 73 6f 20 4e 55 4c 4c 73 20 63 6f 6d 70 61 72   so NULLs compar
11a40 65 20 65 71 75 61 6c 2c 0a 2a 2a 20 4e 55 4c 4c  e equal,.** NULL
11a50 73 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20  s are less than 
11a60 6e 75 6d 62 65 72 73 2c 20 6e 75 6d 62 65 72 73  numbers, numbers
11a70 20 61 72 65 20 6c 65 73 73 20 74 68 61 6e 20 73   are less than s
11a80 74 72 69 6e 67 73 2c 0a 2a 2a 20 61 6e 64 20 73  trings,.** and s
11a90 74 72 69 6e 67 73 20 61 72 65 20 6c 65 73 73 20  trings are less 
11aa0 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2f 0a 63  than blobs..*/.c
11ab0 61 73 65 20 4f 50 5f 43 6f 6d 70 61 72 65 3a 20  ase OP_Compare: 
11ac0 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 69 6e 74  {.  int n;.  int
11ad0 20 69 3b 0a 20 20 69 6e 74 20 70 31 3b 0a 20 20   i;.  int p1;.  
11ae0 69 6e 74 20 70 32 3b 0a 20 20 63 6f 6e 73 74 20  int p2;.  const 
11af0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
11b00 6f 3b 0a 20 20 69 6e 74 20 69 64 78 3b 0a 20 20  o;.  int idx;.  
11b10 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 3b 20  CollSeq *pColl; 
11b20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20     /* Collating 
11b30 73 65 71 75 65 6e 63 65 20 74 6f 20 75 73 65 20  sequence to use 
11b40 6f 6e 20 74 68 69 73 20 74 65 72 6d 20 2a 2f 0a  on this term */.
11b50 20 20 69 6e 74 20 62 52 65 76 3b 20 20 20 20 20    int bRev;     
11b60 20 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72       /* True for
11b70 20 44 45 53 43 45 4e 44 49 4e 47 20 73 6f 72 74   DESCENDING sort
11b80 20 6f 72 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20   order */.  int 
11b90 2a 61 50 65 72 6d 75 74 65 3b 20 20 20 20 20 2f  *aPermute;     /
11ba0 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f  * The permutatio
11bb0 6e 20 2a 2f 0a 0a 20 20 69 66 28 20 28 70 4f 70  n */..  if( (pOp
11bc0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 45  ->p5 & OPFLAG_PE
11bd0 52 4d 55 54 45 29 3d 3d 30 20 29 7b 0a 20 20 20  RMUTE)==0 ){.   
11be0 20 61 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20   aPermute = 0;. 
11bf0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
11c00 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b 0a 20  rt( pOp>aOp );. 
11c10 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d     assert( pOp[-
11c20 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 50 65  1].opcode==OP_Pe
11c30 72 6d 75 74 61 74 69 6f 6e 20 29 3b 0a 20 20 20  rmutation );.   
11c40 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d   assert( pOp[-1]
11c50 2e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41  .p4type==P4_INTA
11c60 52 52 41 59 20 29 3b 0a 20 20 20 20 61 50 65 72  RRAY );.    aPer
11c70 6d 75 74 65 20 3d 20 70 4f 70 5b 2d 31 5d 2e 70  mute = pOp[-1].p
11c80 34 2e 61 69 20 2b 20 31 3b 0a 20 20 20 20 61 73  4.ai + 1;.    as
11c90 73 65 72 74 28 20 61 50 65 72 6d 75 74 65 21 3d  sert( aPermute!=
11ca0 30 20 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 70  0 );.  }.  n = p
11cb0 4f 70 2d 3e 70 33 3b 0a 20 20 70 4b 65 79 49 6e  Op->p3;.  pKeyIn
11cc0 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
11cd0 79 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28  yInfo;.  assert(
11ce0 20 6e 3e 30 20 29 3b 0a 20 20 61 73 73 65 72 74   n>0 );.  assert
11cf0 28 20 70 4b 65 79 49 6e 66 6f 21 3d 30 20 29 3b  ( pKeyInfo!=0 );
11d00 0a 20 20 70 31 20 3d 20 70 4f 70 2d 3e 70 31 3b  .  p1 = pOp->p1;
11d10 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b  .  p2 = pOp->p2;
11d20 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
11d30 45 42 55 47 0a 20 20 69 66 28 20 61 50 65 72 6d  EBUG.  if( aPerm
11d40 75 74 65 20 29 7b 0a 20 20 20 20 69 6e 74 20 6b  ute ){.    int k
11d50 2c 20 6d 78 20 3d 20 30 3b 0a 20 20 20 20 66 6f  , mx = 0;.    fo
11d60 72 28 6b 3d 30 3b 20 6b 3c 6e 3b 20 6b 2b 2b 29  r(k=0; k<n; k++)
11d70 20 69 66 28 20 61 50 65 72 6d 75 74 65 5b 6b 5d   if( aPermute[k]
11d80 3e 6d 78 20 29 20 6d 78 20 3d 20 61 50 65 72 6d  >mx ) mx = aPerm
11d90 75 74 65 5b 6b 5d 3b 0a 20 20 20 20 61 73 73 65  ute[k];.    asse
11da0 72 74 28 20 70 31 3e 30 20 26 26 20 70 31 2b 6d  rt( p1>0 && p1+m
11db0 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  x<=(p->nMem+1 - 
11dc0 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b  p->nCursor)+1 );
11dd0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32 3e  .    assert( p2>
11de0 30 20 26 26 20 70 32 2b 6d 78 3c 3d 28 70 2d 3e  0 && p2+mx<=(p->
11df0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11e00 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 65 6c 73  sor)+1 );.  }els
11e10 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  e{.    assert( p
11e20 31 3e 30 20 26 26 20 70 31 2b 6e 3c 3d 28 70 2d  1>0 && p1+n<=(p-
11e30 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
11e40 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61  rsor)+1 );.    a
11e50 73 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70  ssert( p2>0 && p
11e60 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  2+n<=(p->nMem+1 
11e70 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11e80 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  );.  }.#endif /*
11e90 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
11ea0 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 6e 3b  .  for(i=0; i<n;
11eb0 20 69 2b 2b 29 7b 0a 20 20 20 20 69 64 78 20 3d   i++){.    idx =
11ec0 20 61 50 65 72 6d 75 74 65 20 3f 20 61 50 65 72   aPermute ? aPer
11ed0 6d 75 74 65 5b 69 5d 20 3a 20 69 3b 0a 20 20 20  mute[i] : i;.   
11ee0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
11ef0 6c 69 64 28 26 61 4d 65 6d 5b 70 31 2b 69 64 78  lid(&aMem[p1+idx
11f00 5d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  ]) );.    assert
11f10 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11f20 65 6d 5b 70 32 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p2+idx]) );. 
11f30 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
11f40 45 28 70 31 2b 69 64 78 2c 20 26 61 4d 65 6d 5b  E(p1+idx, &aMem[
11f50 70 31 2b 69 64 78 5d 29 3b 0a 20 20 20 20 52 45  p1+idx]);.    RE
11f60 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 32 2b  GISTER_TRACE(p2+
11f70 69 64 78 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64  idx, &aMem[p2+id
11f80 78 5d 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  x]);.    assert(
11f90 20 69 3c 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69   i<pKeyInfo->nFi
11fa0 65 6c 64 20 29 3b 0a 20 20 20 20 70 43 6f 6c 6c  eld );.    pColl
11fb0 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 43 6f   = pKeyInfo->aCo
11fc0 6c 6c 5b 69 5d 3b 0a 20 20 20 20 62 52 65 76 20  ll[i];.    bRev 
11fd0 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 61 53 6f 72  = pKeyInfo->aSor
11fe0 74 4f 72 64 65 72 5b 69 5d 3b 0a 20 20 20 20 69  tOrder[i];.    i
11ff0 43 6f 6d 70 61 72 65 20 3d 20 73 71 6c 69 74 65  Compare = sqlite
12000 33 4d 65 6d 43 6f 6d 70 61 72 65 28 26 61 4d 65  3MemCompare(&aMe
12010 6d 5b 70 31 2b 69 64 78 5d 2c 20 26 61 4d 65 6d  m[p1+idx], &aMem
12020 5b 70 32 2b 69 64 78 5d 2c 20 70 43 6f 6c 6c 29  [p2+idx], pColl)
12030 3b 0a 20 20 20 20 69 66 28 20 69 43 6f 6d 70 61  ;.    if( iCompa
12040 72 65 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  re ){.      if( 
12050 62 52 65 76 20 29 20 69 43 6f 6d 70 61 72 65 20  bRev ) iCompare 
12060 3d 20 2d 69 43 6f 6d 70 61 72 65 3b 0a 20 20 20  = -iCompare;.   
12070 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
12080 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12090 2f 2a 20 4f 70 63 6f 64 65 3a 20 4a 75 6d 70 20  /* Opcode: Jump 
120a0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
120b0 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65 20 69  ** Jump to the i
120c0 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 20 61 64  nstruction at ad
120d0 64 72 65 73 73 20 50 31 2c 20 50 32 2c 20 6f 72  dress P1, P2, or
120e0 20 50 33 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e   P3 depending on
120f0 20 77 68 65 74 68 65 72 0a 2a 2a 20 69 6e 20 74   whether.** in t
12100 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 4f  he most recent O
12110 50 5f 43 6f 6d 70 61 72 65 20 69 6e 73 74 72 75  P_Compare instru
12120 63 74 69 6f 6e 20 74 68 65 20 50 31 20 76 65 63  ction the P1 vec
12130 74 6f 72 20 77 61 73 20 6c 65 73 73 20 74 68 61  tor was less tha
12140 6e 0a 2a 2a 20 65 71 75 61 6c 20 74 6f 2c 20 6f  n.** equal to, o
12150 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74  r greater than t
12160 68 65 20 50 32 20 76 65 63 74 6f 72 2c 20 72 65  he P2 vector, re
12170 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 63  spectively..*/.c
12180 61 73 65 20 4f 50 5f 4a 75 6d 70 3a 20 7b 20 20  ase OP_Jump: {  
12190 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
121a0 6d 70 20 2a 2f 0a 20 20 69 66 28 20 69 43 6f 6d  mp */.  if( iCom
121b0 70 61 72 65 3c 30 20 29 7b 0a 20 20 20 20 56 64  pare<0 ){.    Vd
121c0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 30 2c  beBranchTaken(0,
121d0 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70  3); pOp = &aOp[p
121e0 4f 70 2d 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 7d  Op->p1 - 1];.  }
121f0 65 6c 73 65 20 69 66 28 20 69 43 6f 6d 70 61 72  else if( iCompar
12200 65 3d 3d 30 20 29 7b 0a 20 20 20 20 56 64 62 65  e==0 ){.    Vdbe
12210 42 72 61 6e 63 68 54 61 6b 65 6e 28 31 2c 33 29  BranchTaken(1,3)
12220 3b 20 70 4f 70 20 3d 20 26 61 4f 70 5b 70 4f 70  ; pOp = &aOp[pOp
12230 2d 3e 70 32 20 2d 20 31 5d 3b 0a 20 20 7d 65 6c  ->p2 - 1];.  }el
12240 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e  se{.    VdbeBran
12250 63 68 54 61 6b 65 6e 28 32 2c 33 29 3b 20 70 4f  chTaken(2,3); pO
12260 70 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 33  p = &aOp[pOp->p3
12270 20 2d 20 31 5d 3b 0a 20 20 7d 0a 20 20 62 72 65   - 1];.  }.  bre
12280 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
12290 3a 20 41 6e 64 20 50 31 20 50 32 20 50 33 20 2a  : And P1 P2 P3 *
122a0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
122b0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 26 26 20  r[P3]=(r[P1] && 
122c0 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
122d0 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 41 4e  e the logical AN
122e0 44 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20  D of the values 
122f0 69 6e 20 72 65 67 69 73 74 65 72 73 20 50 31 20  in registers P1 
12300 61 6e 64 20 50 32 20 61 6e 64 0a 2a 2a 20 77 72  and P2 and.** wr
12310 69 74 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ite the result i
12320 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e  nto register P3.
12330 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  .**.** If either
12340 20 50 31 20 6f 72 20 50 32 20 69 73 20 30 20 28   P1 or P2 is 0 (
12350 66 61 6c 73 65 29 20 74 68 65 6e 20 74 68 65 20  false) then the 
12360 72 65 73 75 6c 74 20 69 73 20 30 20 65 76 65 6e  result is 0 even
12370 20 69 66 0a 2a 2a 20 74 68 65 20 6f 74 68 65 72   if.** the other
12380 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 20   input is NULL. 
12390 20 41 20 4e 55 4c 4c 20 61 6e 64 20 74 72 75 65   A NULL and true
123a0 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 20 67 69   or two NULLs gi
123b0 76 65 0a 2a 2a 20 61 20 4e 55 4c 4c 20 6f 75 74  ve.** a NULL out
123c0 70 75 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  put..*/./* Opcod
123d0 65 3a 20 4f 72 20 50 31 20 50 32 20 50 33 20 2a  e: Or P1 P2 P3 *
123e0 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
123f0 72 5b 50 33 5d 3d 28 72 5b 50 31 5d 20 7c 7c 20  r[P3]=(r[P1] || 
12400 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 54 61 6b  r[P2]).**.** Tak
12410 65 20 74 68 65 20 6c 6f 67 69 63 61 6c 20 4f 52  e the logical OR
12420 20 6f 66 20 74 68 65 20 76 61 6c 75 65 73 20 69   of the values i
12430 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61 6e  n register P1 an
12440 64 20 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72  d P2 and.** stor
12450 65 20 74 68 65 20 61 6e 73 77 65 72 20 69 6e 20  e the answer in 
12460 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
12470 2a 2a 20 49 66 20 65 69 74 68 65 72 20 50 31 20  ** If either P1 
12480 6f 72 20 50 32 20 69 73 20 6e 6f 6e 7a 65 72 6f  or P2 is nonzero
12490 20 28 74 72 75 65 29 20 74 68 65 6e 20 74 68 65   (true) then the
124a0 20 72 65 73 75 6c 74 20 69 73 20 31 20 28 74 72   result is 1 (tr
124b0 75 65 29 0a 2a 2a 20 65 76 65 6e 20 69 66 20 74  ue).** even if t
124c0 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20 69  he other input i
124d0 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c 20  s NULL.  A NULL 
124e0 61 6e 64 20 66 61 6c 73 65 20 6f 72 20 74 77 6f  and false or two
124f0 20 4e 55 4c 4c 73 0a 2a 2a 20 67 69 76 65 20 61   NULLs.** give a
12500 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
12510 0a 63 61 73 65 20 4f 50 5f 41 6e 64 3a 20 20 20  .case OP_And:   
12520 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
12530 6d 65 20 61 73 20 54 4b 5f 41 4e 44 2c 20 69 6e  me as TK_AND, in
12540 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
12550 63 61 73 65 20 4f 50 5f 4f 72 3a 20 7b 20 20 20  case OP_Or: {   
12560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
12570 65 20 61 73 20 54 4b 5f 4f 52 2c 20 69 6e 31 2c  e as TK_OR, in1,
12580 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20   in2, out3 */.  
12590 69 6e 74 20 76 31 3b 20 20 20 20 2f 2a 20 4c 65  int v1;    /* Le
125a0 66 74 20 6f 70 65 72 61 6e 64 3a 20 20 30 3d 3d  ft operand:  0==
125b0 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c 20  FALSE, 1==TRUE, 
125c0 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e 55  2==UNKNOWN or NU
125d0 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20 76 32 3b 20  LL */.  int v2; 
125e0 20 20 20 2f 2a 20 52 69 67 68 74 20 6f 70 65 72     /* Right oper
125f0 61 6e 64 3a 20 30 3d 3d 46 41 4c 53 45 2c 20 31  and: 0==FALSE, 1
12600 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e 4f  ==TRUE, 2==UNKNO
12610 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 20  WN or NULL */.. 
12620 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
12630 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
12640 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
12650 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 31 20 3d  Null ){.    v1 =
12660 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   2;.  }else{.   
12670 20 76 31 20 3d 20 73 71 6c 69 74 65 33 56 64 62   v1 = sqlite3Vdb
12680 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 21  eIntValue(pIn1)!
12690 3d 30 3b 0a 20 20 7d 0a 20 20 70 49 6e 32 20 3d  =0;.  }.  pIn2 =
126a0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
126b0 0a 20 20 69 66 28 20 70 49 6e 32 2d 3e 66 6c 61  .  if( pIn2->fla
126c0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
126d0 0a 20 20 20 20 76 32 20 3d 20 32 3b 0a 20 20 7d  .    v2 = 2;.  }
126e0 65 6c 73 65 7b 0a 20 20 20 20 76 32 20 3d 20 73  else{.    v2 = s
126f0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
12700 75 65 28 70 49 6e 32 29 21 3d 30 3b 0a 20 20 7d  ue(pIn2)!=0;.  }
12710 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
12720 64 65 3d 3d 4f 50 5f 41 6e 64 20 29 7b 0a 20 20  de==OP_And ){.  
12730 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75    static const u
12740 6e 73 69 67 6e 65 64 20 63 68 61 72 20 61 6e 64  nsigned char and
12750 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c 20  _logic[] = { 0, 
12760 30 2c 20 30 2c 20 30 2c 20 31 2c 20 32 2c 20 30  0, 0, 0, 1, 2, 0
12770 2c 20 32 2c 20 32 20 7d 3b 0a 20 20 20 20 76 31  , 2, 2 };.    v1
12780 20 3d 20 61 6e 64 5f 6c 6f 67 69 63 5b 76 31 2a   = and_logic[v1*
12790 33 2b 76 32 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a  3+v2];.  }else{.
127a0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
127b0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 6f   unsigned char o
127c0 72 5f 6c 6f 67 69 63 5b 5d 20 3d 20 7b 20 30 2c  r_logic[] = { 0,
127d0 20 31 2c 20 32 2c 20 31 2c 20 31 2c 20 31 2c 20   1, 2, 1, 1, 1, 
127e0 32 2c 20 31 2c 20 32 20 7d 3b 0a 20 20 20 20 76  2, 1, 2 };.    v
127f0 31 20 3d 20 6f 72 5f 6c 6f 67 69 63 5b 76 31 2a  1 = or_logic[v1*
12800 33 2b 76 32 5d 3b 0a 20 20 7d 0a 20 20 70 4f 75  3+v2];.  }.  pOu
12810 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
12820 33 5d 3b 0a 20 20 69 66 28 20 76 31 3d 3d 32 20  3];.  if( v1==2 
12830 29 7b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70  ){.    MemSetTyp
12840 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f  eFlag(pOut, MEM_
12850 4e 75 6c 6c 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  Null);.  }else{.
12860 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20      pOut->u.i = 
12870 76 31 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  v1;.    MemSetTy
12880 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
12890 5f 49 6e 74 29 3b 0a 20 20 7d 0a 20 20 62 72 65  _Int);.  }.  bre
128a0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
128b0 3a 20 4e 6f 74 20 50 31 20 50 32 20 2a 20 2a 20  : Not P1 P2 * * 
128c0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
128d0 5b 50 32 5d 3d 20 21 72 5b 50 31 5d 0a 2a 2a 0a  [P2]= !r[P1].**.
128e0 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
128f0 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
12900 65 72 20 50 31 20 61 73 20 61 20 62 6f 6f 6c 65  er P1 as a boole
12910 61 6e 20 76 61 6c 75 65 2e 20 20 53 74 6f 72 65  an value.  Store
12920 20 74 68 65 0a 2a 2a 20 62 6f 6f 6c 65 61 6e 20   the.** boolean 
12930 63 6f 6d 70 6c 65 6d 65 6e 74 20 69 6e 20 72 65  complement in re
12940 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20 74  gister P2.  If t
12950 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69  he value in regi
12960 73 74 65 72 20 50 31 20 69 73 20 0a 2a 2a 20 4e  ster P1 is .** N
12970 55 4c 4c 2c 20 74 68 65 6e 20 61 20 4e 55 4c 4c  ULL, then a NULL
12980 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50 32   is stored in P2
12990 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74  ..*/.case OP_Not
129a0 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
129b0 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
129c0 5f 4e 4f 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20  _NOT, in1, out2 
129d0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
129e0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f  m[pOp->p1];.  pO
129f0 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ut = &aMem[pOp->
12a00 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  p2];.  sqlite3Vd
12a10 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75  beMemSetNull(pOu
12a20 74 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  t);.  if( (pIn1-
12a30 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
12a40 6c 29 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75  l)==0 ){.    pOu
12a50 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49  t->flags = MEM_I
12a60 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e  nt;.    pOut->u.
12a70 69 20 3d 20 21 73 71 6c 69 74 65 33 56 64 62 65  i = !sqlite3Vdbe
12a80 49 6e 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a  IntValue(pIn1);.
12a90 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
12aa0 2f 2a 20 4f 70 63 6f 64 65 3a 20 42 69 74 4e 6f  /* Opcode: BitNo
12ab0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
12ac0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d   Synopsis: r[P1]
12ad0 3d 20 7e 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49  = ~r[P1].**.** I
12ae0 6e 74 65 72 70 72 65 74 20 74 68 65 20 63 6f 6e  nterpret the con
12af0 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72  tent of register
12b00 20 50 31 20 61 73 20 61 6e 20 69 6e 74 65 67 65   P1 as an intege
12b10 72 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  r.  Store the.**
12b20 20 6f 6e 65 73 2d 63 6f 6d 70 6c 65 6d 65 6e 74   ones-complement
12b30 20 6f 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   of the P1 value
12b40 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
12b50 32 2e 20 20 49 66 20 50 31 20 68 6f 6c 64 73 0a  2.  If P1 holds.
12b60 2a 2a 20 61 20 4e 55 4c 4c 20 74 68 65 6e 20 73  ** a NULL then s
12b70 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 50  tore a NULL in P
12b80 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 42 69  2..*/.case OP_Bi
12b90 74 4e 6f 74 3a 20 7b 20 20 20 20 20 20 20 20 20  tNot: {         
12ba0 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12bb0 4b 5f 42 49 54 4e 4f 54 2c 20 69 6e 31 2c 20 6f  K_BITNOT, in1, o
12bc0 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20  ut2 */.  pIn1 = 
12bd0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
12be0 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70    pOut = &aMem[p
12bf0 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74  Op->p2];.  sqlit
12c00 65 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c  e3VdbeMemSetNull
12c10 28 70 4f 75 74 29 3b 0a 20 20 69 66 28 20 28 70  (pOut);.  if( (p
12c20 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
12c30 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a 20 20 20  _Null)==0 ){.   
12c40 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
12c50 45 4d 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74  EM_Int;.    pOut
12c60 2d 3e 75 2e 69 20 3d 20 7e 73 71 6c 69 74 65 33  ->u.i = ~sqlite3
12c70 56 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e  VdbeIntValue(pIn
12c80 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  1);.  }.  break;
12c90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
12ca0 6e 63 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  nce P1 P2 * * *.
12cb0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20  **.** If the P1 
12cc0 76 61 6c 75 65 20 69 73 20 65 71 75 61 6c 20 74  value is equal t
12cd0 6f 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 6f  o the P1 value o
12ce0 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 20 6f 70  n the OP_Init op
12cf0 63 6f 64 65 20 61 74 0a 2a 2a 20 69 6e 73 74 72  code at.** instr
12d00 75 63 74 69 6f 6e 20 30 2c 20 74 68 65 6e 20 6a  uction 0, then j
12d10 75 6d 70 20 74 6f 20 50 32 2e 20 20 49 66 20 74  ump to P2.  If t
12d20 68 65 20 74 77 6f 20 50 31 20 76 61 6c 75 65 73  he two P1 values
12d30 20 64 69 66 66 65 72 2c 20 74 68 65 6e 0a 2a 2a   differ, then.**
12d40 20 73 65 74 20 74 68 65 20 50 31 20 76 61 6c 75   set the P1 valu
12d50 65 20 6f 6e 20 74 68 69 73 20 6f 70 63 6f 64 65  e on this opcode
12d60 20 74 6f 20 65 71 75 61 6c 20 74 68 65 20 50 31   to equal the P1
12d70 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 4f 50   value on the OP
12d80 5f 49 6e 69 74 0a 2a 2a 20 61 6e 64 20 66 61 6c  _Init.** and fal
12d90 6c 20 74 68 72 6f 75 67 68 2e 0a 2a 2f 0a 63 61  l through..*/.ca
12da0 73 65 20 4f 50 5f 4f 6e 63 65 3a 20 7b 20 20 20  se OP_Once: {   
12db0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
12dc0 70 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  p */.  assert( p
12dd0 2d 3e 61 4f 70 5b 30 5d 2e 6f 70 63 6f 64 65 3d  ->aOp[0].opcode=
12de0 3d 4f 50 5f 49 6e 69 74 20 29 3b 0a 20 20 56 64  =OP_Init );.  Vd
12df0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 2d  beBranchTaken(p-
12e00 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70 2d  >aOp[0].p1==pOp-
12e10 3e 70 31 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  >p1, 2);.  if( p
12e20 2d 3e 61 4f 70 5b 30 5d 2e 70 31 3d 3d 70 4f 70  ->aOp[0].p1==pOp
12e30 2d 3e 70 31 20 29 7b 0a 20 20 20 20 67 6f 74 6f  ->p1 ){.    goto
12e40 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
12e50 65 6c 73 65 7b 0a 20 20 20 20 70 4f 70 2d 3e 70  else{.    pOp->p
12e60 31 20 3d 20 70 2d 3e 61 4f 70 5b 30 5d 2e 70 31  1 = p->aOp[0].p1
12e70 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
12e80 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 20  ../* Opcode: If 
12e90 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a  P1 P2 P3 * *.**.
12ea0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
12eb0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
12ec0 67 69 73 74 65 72 20 50 31 20 69 73 20 74 72 75  gister P1 is tru
12ed0 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  e.  The value.**
12ee0 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64 20 74   is considered t
12ef0 72 75 65 20 69 66 20 69 74 20 69 73 20 6e 75 6d  rue if it is num
12f00 65 72 69 63 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  eric and non-zer
12f10 6f 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75 65  o.  If the value
12f20 0a 2a 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c  .** in P1 is NUL
12f30 4c 20 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20  L then take the 
12f40 6a 75 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79  jump if and only
12f50 20 69 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65   if P3 is non-ze
12f60 72 6f 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ro..*/./* Opcode
12f70 3a 20 49 66 4e 6f 74 20 50 31 20 50 32 20 50 33  : IfNot P1 P2 P3
12f80 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20   * *.**.** Jump 
12f90 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c  to P2 if the val
12fa0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
12fb0 31 20 69 73 20 46 61 6c 73 65 2e 20 20 54 68 65  1 is False.  The
12fc0 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12fd0 73 69 64 65 72 65 64 20 66 61 6c 73 65 20 69 66  sidered false if
12fe0 20 69 74 20 68 61 73 20 61 20 6e 75 6d 65 72 69   it has a numeri
12ff0 63 20 76 61 6c 75 65 20 6f 66 20 7a 65 72 6f 2e  c value of zero.
13000 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
13010 2a 20 69 6e 20 50 31 20 69 73 20 4e 55 4c 4c 20  * in P1 is NULL 
13020 74 68 65 6e 20 74 61 6b 65 20 74 68 65 20 6a 75  then take the ju
13030 6d 70 20 69 66 20 61 6e 64 20 6f 6e 6c 79 20 69  mp if and only i
13040 66 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  f P3 is non-zero
13050 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 3a  ..*/.case OP_If:
13060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13070 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f   /* jump, in1 */
13080 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74 3a 20  .case OP_IfNot: 
13090 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  {            /* 
130a0 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 69  jump, in1 */.  i
130b0 6e 74 20 63 3b 0a 20 20 70 49 6e 31 20 3d 20 26  nt c;.  pIn1 = &
130c0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
130d0 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73   if( pIn1->flags
130e0 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20   & MEM_Null ){. 
130f0 20 20 20 63 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a     c = pOp->p3;.
13100 20 20 7d 65 6c 73 65 7b 0a 23 69 66 64 65 66 20    }else{.#ifdef 
13110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41  SQLITE_OMIT_FLOA
13120 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20 20 20 63  TING_POINT.    c
13130 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
13140 74 56 61 6c 75 65 28 70 49 6e 31 29 21 3d 30 3b  tValue(pIn1)!=0;
13150 0a 23 65 6c 73 65 0a 20 20 20 20 63 20 3d 20 73  .#else.    c = s
13160 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c 56 61  qlite3VdbeRealVa
13170 6c 75 65 28 70 49 6e 31 29 21 3d 30 2e 30 3b 0a  lue(pIn1)!=0.0;.
13180 23 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 70  #endif.    if( p
13190 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
131a0 66 4e 6f 74 20 29 20 63 20 3d 20 21 63 3b 0a 20  fNot ) c = !c;. 
131b0 20 7d 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54   }.  VdbeBranchT
131c0 61 6b 65 6e 28 63 21 3d 30 2c 20 32 29 3b 0a 20  aken(c!=0, 2);. 
131d0 20 69 66 28 20 63 20 29 7b 0a 20 20 20 20 67 6f   if( c ){.    go
131e0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
131f0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
13200 2a 20 4f 70 63 6f 64 65 3a 20 49 73 4e 75 6c 6c  * Opcode: IsNull
13210 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
13220 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50  Synopsis: if r[P
13230 31 5d 3d 3d 4e 55 4c 4c 20 67 6f 74 6f 20 50 32  1]==NULL goto P2
13240 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50  .**.** Jump to P
13250 32 20 69 66 20 74 68 65 20 76 61 6c 75 65 20 69  2 if the value i
13260 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  n register P1 is
13270 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
13280 50 5f 49 73 4e 75 6c 6c 3a 20 7b 20 20 20 20 20  P_IsNull: {     
13290 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
132a0 73 20 54 4b 5f 49 53 4e 55 4c 4c 2c 20 6a 75 6d  s TK_ISNULL, jum
132b0 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31  p, in1 */.  pIn1
132c0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
132d0 5d 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  ];.  VdbeBranchT
132e0 61 6b 65 6e 28 20 28 70 49 6e 31 2d 3e 66 6c 61  aken( (pIn1->fla
132f0 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13300 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 28 70 49  0, 2);.  if( (pI
13310 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13320 4e 75 6c 6c 29 21 3d 30 20 29 7b 0a 20 20 20 20  Null)!=0 ){.    
13330 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
13340 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
13350 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 4e  ./* Opcode: NotN
13360 75 6c 6c 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  ull P1 P2 * * *.
13370 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20  ** Synopsis: if 
13380 72 5b 50 31 5d 21 3d 4e 55 4c 4c 20 67 6f 74 6f  r[P1]!=NULL goto
13390 20 50 32 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74   P2.**.** Jump t
133a0 6f 20 50 32 20 69 66 20 74 68 65 20 76 61 6c 75  o P2 if the valu
133b0 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
133c0 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2e 20 20 0a   is not NULL.  .
133d0 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 74 4e 75  */.case OP_NotNu
133e0 6c 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ll: {           
133f0 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 4e   /* same as TK_N
13400 4f 54 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e  OTNULL, jump, in
13410 31 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61  1 */.  pIn1 = &a
13420 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
13430 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
13440 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
13450 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 2c 20 32 29  MEM_Null)==0, 2)
13460 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  ;.  if( (pIn1->f
13470 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29  lags & MEM_Null)
13480 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  ==0 ){.    goto 
13490 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a  jump_to_p2;.  }.
134a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
134b0 70 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 20 50 31  pcode: Column P1
134c0 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
134d0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
134e0 50 58 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  PX.**.** Interpr
134f0 65 74 20 74 68 65 20 64 61 74 61 20 74 68 61 74  et the data that
13500 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e 74   cursor P1 point
13510 73 20 74 6f 20 61 73 20 61 20 73 74 72 75 63 74  s to as a struct
13520 75 72 65 20 62 75 69 6c 74 20 75 73 69 6e 67 0a  ure built using.
13530 2a 2a 20 74 68 65 20 4d 61 6b 65 52 65 63 6f 72  ** the MakeRecor
13540 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20  d instruction.  
13550 28 53 65 65 20 74 68 65 20 4d 61 6b 65 52 65 63  (See the MakeRec
13560 6f 72 64 20 6f 70 63 6f 64 65 20 66 6f 72 20 61  ord opcode for a
13570 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 69 6e 66  dditional.** inf
13580 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
13590 68 65 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  he format of the
135a0 20 64 61 74 61 2e 29 20 20 45 78 74 72 61 63 74   data.)  Extract
135b0 20 74 68 65 20 50 32 2d 74 68 20 63 6f 6c 75 6d   the P2-th colum
135c0 6e 0a 2a 2a 20 66 72 6f 6d 20 74 68 69 73 20 72  n.** from this r
135d0 65 63 6f 72 64 2e 20 20 49 66 20 74 68 65 72 65  ecord.  If there
135e0 20 61 72 65 20 6c 65 73 73 20 74 68 61 74 20 28   are less that (
135f0 50 32 2b 31 29 20 0a 2a 2a 20 76 61 6c 75 65 73  P2+1) .** values
13600 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 2c 20   in the record, 
13610 65 78 74 72 61 63 74 20 61 20 4e 55 4c 4c 2e 0a  extract a NULL..
13620 2a 2a 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  **.** The value 
13630 65 78 74 72 61 63 74 65 64 20 69 73 20 73 74 6f  extracted is sto
13640 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
13650 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  P3..**.** If the
13660 20 63 6f 6c 75 6d 6e 20 63 6f 6e 74 61 69 6e 73   column contains
13670 20 66 65 77 65 72 20 74 68 61 6e 20 50 32 20 66   fewer than P2 f
13680 69 65 6c 64 73 2c 20 74 68 65 6e 20 65 78 74 72  ields, then extr
13690 61 63 74 20 61 20 4e 55 4c 4c 2e 20 20 4f 72 2c  act a NULL.  Or,
136a0 0a 2a 2a 20 69 66 20 74 68 65 20 50 34 20 61 72  .** if the P4 ar
136b0 67 75 6d 65 6e 74 20 69 73 20 61 20 50 34 5f 4d  gument is a P4_M
136c0 45 4d 20 75 73 65 20 74 68 65 20 76 61 6c 75 65  EM use the value
136d0 20 6f 66 20 74 68 65 20 50 34 20 61 72 67 75 6d   of the P4 argum
136e0 65 6e 74 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ent as.** the re
136f0 73 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sult..**.** If t
13700 68 65 20 4f 50 46 4c 41 47 5f 43 4c 45 41 52 43  he OPFLAG_CLEARC
13710 41 43 48 45 20 62 69 74 20 69 73 20 73 65 74 20  ACHE bit is set 
13720 6f 6e 20 50 35 20 61 6e 64 20 50 31 20 69 73 20  on P5 and P1 is 
13730 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 63  a pseudo-table c
13740 75 72 73 6f 72 2c 0a 2a 2a 20 74 68 65 6e 20 74  ursor,.** then t
13750 68 65 20 63 61 63 68 65 20 6f 66 20 74 68 65 20  he cache of the 
13760 63 75 72 73 6f 72 20 69 73 20 72 65 73 65 74 20  cursor is reset 
13770 70 72 69 6f 72 20 74 6f 20 65 78 74 72 61 63 74  prior to extract
13780 69 6e 67 20 74 68 65 20 63 6f 6c 75 6d 6e 2e 0a  ing the column..
13790 2a 2a 20 54 68 65 20 66 69 72 73 74 20 4f 50 5f  ** The first OP_
137a0 43 6f 6c 75 6d 6e 20 61 67 61 69 6e 73 74 20 61  Column against a
137b0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 61 66   pseudo-table af
137c0 74 65 72 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ter the value of
137d0 20 74 68 65 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20   the content.** 
137e0 72 65 67 69 73 74 65 72 20 68 61 73 20 63 68 61  register has cha
137f0 6e 67 65 64 20 73 68 6f 75 6c 64 20 68 61 76 65  nged should have
13800 20 74 68 69 73 20 62 69 74 20 73 65 74 2e 0a 2a   this bit set..*
13810 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
13820 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
13830 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
13840 47 20 62 69 74 73 20 61 72 65 20 73 65 74 20 6f  G bits are set o
13850 6e 20 50 35 20 77 68 65 6e 0a 2a 2a 20 74 68 65  n P5 when.** the
13860 20 72 65 73 75 6c 74 20 69 73 20 67 75 61 72 61   result is guara
13870 6e 74 65 65 64 20 74 6f 20 6f 6e 6c 79 20 62 65  nteed to only be
13880 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72 67   used as the arg
13890 75 6d 65 6e 74 20 6f 66 20 61 20 6c 65 6e 67 74  ument of a lengt
138a0 68 28 29 0a 2a 2a 20 6f 72 20 74 79 70 65 6f 66  h().** or typeof
138b0 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 72 65 73  () function, res
138c0 70 65 63 74 69 76 65 6c 79 2e 20 20 54 68 65 20  pectively.  The 
138d0 6c 6f 61 64 69 6e 67 20 6f 66 20 6c 61 72 67 65  loading of large
138e0 20 62 6c 6f 62 73 20 63 61 6e 20 62 65 0a 2a 2a   blobs can be.**
138f0 20 73 6b 69 70 70 65 64 20 66 6f 72 20 6c 65 6e   skipped for len
13900 67 74 68 28 29 20 61 6e 64 20 61 6c 6c 20 63 6f  gth() and all co
13910 6e 74 65 6e 74 20 6c 6f 61 64 69 6e 67 20 63 61  ntent loading ca
13920 6e 20 62 65 20 73 6b 69 70 70 65 64 20 66 6f 72  n be skipped for
13930 20 74 79 70 65 6f 66 28 29 2e 0a 2a 2f 0a 63 61   typeof()..*/.ca
13940 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 7b 0a  se OP_Column: {.
13950 20 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20    int p2;       
13960 20 20 20 20 20 2f 2a 20 63 6f 6c 75 6d 6e 20 6e       /* column n
13970 75 6d 62 65 72 20 74 6f 20 72 65 74 72 69 65 76  umber to retriev
13980 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  e */.  VdbeCurso
13990 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68 65  r *pC;    /* The
139a0 20 56 44 42 45 20 63 75 72 73 6f 72 20 2a 2f 0a   VDBE cursor */.
139b0 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
139c0 72 3b 20 20 20 2f 2a 20 54 68 65 20 42 54 72 65  r;   /* The BTre
139d0 65 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 75 33  e cursor */.  u3
139e0 32 20 2a 61 4f 66 66 73 65 74 3b 20 20 20 20 20  2 *aOffset;     
139f0 20 2f 2a 20 61 4f 66 66 73 65 74 5b 69 5d 20 69   /* aOffset[i] i
13a00 73 20 6f 66 66 73 65 74 20 74 6f 20 73 74 61 72  s offset to star
13a10 74 20 6f 66 20 64 61 74 61 20 66 6f 72 20 69 2d  t of data for i-
13a20 74 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69  th column */.  i
13a30 6e 74 20 6c 65 6e 3b 20 20 20 20 20 20 20 20 20  nt len;         
13a40 20 20 2f 2a 20 54 68 65 20 6c 65 6e 67 74 68 20    /* The length 
13a50 6f 66 20 74 68 65 20 73 65 72 69 61 6c 69 7a 65  of the serialize
13a60 64 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 63  d data for the c
13a70 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 69  olumn */.  int i
13a80 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
13a90 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f   Loop counter */
13aa0 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b 20 20  .  Mem *pDest;  
13ab0 20 20 20 20 20 20 2f 2a 20 57 68 65 72 65 20 74        /* Where t
13ac0 6f 20 77 72 69 74 65 20 74 68 65 20 65 78 74 72  o write the extr
13ad0 61 63 74 65 64 20 76 61 6c 75 65 20 2a 2f 0a 20  acted value */. 
13ae0 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
13af0 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
13b00 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
13b10 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
13b20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 44 61 74 61   const u8 *zData
13b30 3b 20 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 74  ;   /* Part of t
13b40 68 65 20 72 65 63 6f 72 64 20 62 65 69 6e 67 20  he record being 
13b50 64 65 63 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e  decoded */.  con
13b60 73 74 20 75 38 20 2a 7a 48 64 72 3b 20 20 20 20  st u8 *zHdr;    
13b70 2f 2a 20 4e 65 78 74 20 75 6e 70 61 72 73 65 64  /* Next unparsed
13b80 20 62 79 74 65 20 6f 66 20 74 68 65 20 68 65 61   byte of the hea
13b90 64 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75  der */.  const u
13ba0 38 20 2a 7a 45 6e 64 48 64 72 3b 20 2f 2a 20 50  8 *zEndHdr; /* P
13bb0 6f 69 6e 74 65 72 20 74 6f 20 66 69 72 73 74 20  ointer to first 
13bc0 62 79 74 65 20 61 66 74 65 72 20 74 68 65 20 68  byte after the h
13bd0 65 61 64 65 72 20 2a 2f 0a 20 20 75 33 32 20 6f  eader */.  u32 o
13be0 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 2f 2a  ffset;        /*
13bf0 20 4f 66 66 73 65 74 20 69 6e 74 6f 20 74 68 65   Offset into the
13c00 20 64 61 74 61 20 2a 2f 0a 20 20 75 36 34 20 6f   data */.  u64 o
13c10 66 66 73 65 74 36 34 3b 20 20 20 20 20 20 2f 2a  ffset64;      /*
13c20 20 36 34 2d 62 69 74 20 6f 66 66 73 65 74 20 2a   64-bit offset *
13c30 2f 0a 20 20 75 33 32 20 61 76 61 69 6c 3b 20 20  /.  u32 avail;  
13c40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13c50 20 6f 66 20 62 79 74 65 73 20 6f 66 20 61 76 61   of bytes of ava
13c60 69 6c 61 62 6c 65 20 64 61 74 61 20 2a 2f 0a 20  ilable data */. 
13c70 20 75 33 32 20 74 3b 20 20 20 20 20 20 20 20 20   u32 t;         
13c80 20 20 20 20 2f 2a 20 41 20 74 79 70 65 20 63 6f      /* A type co
13c90 64 65 20 66 72 6f 6d 20 74 68 65 20 72 65 63 6f  de from the reco
13ca0 72 64 20 68 65 61 64 65 72 20 2a 2f 0a 20 20 4d  rd header */.  M
13cb0 65 6d 20 2a 70 52 65 67 3b 20 20 20 20 20 20 20  em *pReg;       
13cc0 20 20 2f 2a 20 50 73 65 75 64 6f 54 61 62 6c 65    /* PseudoTable
13cd0 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72 20   input register 
13ce0 2a 2f 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70  */..  pC = p->ap
13cf0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
13d00 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 0a 20  p2 = pOp->p2;.. 
13d10 20 2f 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f   /* If the curso
13d20 72 20 63 61 63 68 65 20 69 73 20 73 74 61 6c 65  r cache is stale
13d30 2c 20 62 72 69 6e 67 20 69 74 20 75 70 2d 74 6f  , bring it up-to
13d40 2d 64 61 74 65 20 2a 2f 0a 20 20 72 63 20 3d 20  -date */.  rc = 
13d50 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f  sqlite3VdbeCurso
13d60 72 4d 6f 76 65 74 6f 28 26 70 43 2c 20 26 70 32  rMoveto(&pC, &p2
13d70 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
13d80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
13d90 65 72 72 6f 72 3b 0a 0a 20 20 61 73 73 65 72 74  error;..  assert
13da0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
13db0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
13dc0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
13dd0 20 29 3b 0a 20 20 70 44 65 73 74 20 3d 20 26 61   );.  pDest = &a
13de0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
13df0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
13e00 28 70 2c 20 70 44 65 73 74 29 3b 0a 20 20 61 73  (p, pDest);.  as
13e10 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
13e20 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e   && pOp->p1<p->n
13e30 43 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65  Cursor );.  asse
13e40 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
13e50 73 73 65 72 74 28 20 70 32 3c 70 43 2d 3e 6e 46  ssert( p2<pC->nF
13e60 69 65 6c 64 20 29 3b 0a 20 20 61 4f 66 66 73 65  ield );.  aOffse
13e70 74 20 3d 20 70 43 2d 3e 61 4f 66 66 73 65 74 3b  t = pC->aOffset;
13e80 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
13e90 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45  CurType!=CURTYPE
13ea0 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73 65 72  _VTAB );.  asser
13eb0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21  t( pC->eCurType!
13ec0 3d 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20  =CURTYPE_PSEUDO 
13ed0 7c 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29  || pC->nullRow )
13ee0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
13ef0 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13f00 45 5f 53 4f 52 54 45 52 20 29 3b 0a 0a 20 20 69  E_SORTER );..  i
13f10 66 28 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  f( pC->cacheStat
13f20 75 73 21 3d 70 2d 3e 63 61 63 68 65 43 74 72 20  us!=p->cacheCtr 
13f30 29 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ){              
13f40 20 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e    /*OPTIMIZATION
13f50 2d 49 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20  -IF-FALSE*/.    
13f60 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
13f70 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  ){.      if( pC-
13f80 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
13f90 50 45 5f 50 53 45 55 44 4f 20 29 7b 0a 20 20 20  PE_PSEUDO ){.   
13fa0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d       assert( pC-
13fb0 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52  >uc.pseudoTableR
13fc0 65 67 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20  eg>0 );.        
13fd0 70 52 65 67 20 3d 20 26 61 4d 65 6d 5b 70 43 2d  pReg = &aMem[pC-
13fe0 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65 52  >uc.pseudoTableR
13ff0 65 67 5d 3b 0a 20 20 20 20 20 20 20 20 61 73 73  eg];.        ass
14000 65 72 74 28 20 70 52 65 67 2d 3e 66 6c 61 67 73  ert( pReg->flags
14010 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
14020 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d         assert( m
14030 65 6d 49 73 56 61 6c 69 64 28 70 52 65 67 29 20  emIsValid(pReg) 
14040 29 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 70  );.        pC->p
14050 61 79 6c 6f 61 64 53 69 7a 65 20 3d 20 70 43 2d  ayloadSize = pC-
14060 3e 73 7a 52 6f 77 20 3d 20 61 76 61 69 6c 20 3d  >szRow = avail =
14070 20 70 52 65 67 2d 3e 6e 3b 0a 20 20 20 20 20 20   pReg->n;.      
14080 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 28 75 38    pC->aRow = (u8
14090 2a 29 70 52 65 67 2d 3e 7a 3b 0a 20 20 20 20 20  *)pReg->z;.     
140a0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
140b0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
140c0 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20  tNull(pDest);.  
140d0 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
140e0 6c 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 20 20  lumn_out;.      
140f0 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  }.    }else{.   
14100 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
14110 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 20  c.pCursor;.     
14120 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
14130 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
14140 54 52 45 45 20 29 3b 0a 20 20 20 20 20 20 61 73  TREE );.      as
14150 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20  sert( pCrsr );. 
14160 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
14170 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 49  ite3BtreeCursorI
14180 73 56 61 6c 69 64 28 70 43 72 73 72 29 20 29 3b  sValid(pCrsr) );
14190 0a 20 20 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f  .      pC->paylo
141a0 61 64 53 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  adSize = sqlite3
141b0 42 74 72 65 65 50 61 79 6c 6f 61 64 53 69 7a 65  BtreePayloadSize
141c0 28 70 43 72 73 72 29 3b 0a 20 20 20 20 20 20 70  (pCrsr);.      p
141d0 43 2d 3e 61 52 6f 77 20 3d 20 73 71 6c 69 74 65  C->aRow = sqlite
141e0 33 42 74 72 65 65 50 61 79 6c 6f 61 64 46 65 74  3BtreePayloadFet
141f0 63 68 28 70 43 72 73 72 2c 20 26 61 76 61 69 6c  ch(pCrsr, &avail
14200 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
14210 20 61 76 61 69 6c 3c 3d 36 35 35 33 36 20 29 3b   avail<=65536 );
14220 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 70 61 67    /* Maximum pag
14230 65 20 73 69 7a 65 20 69 73 20 36 34 4b 69 42 20  e size is 64KiB 
14240 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70 43 2d  */.      if( pC-
14250 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20 3c 3d 20  >payloadSize <= 
14260 28 75 33 32 29 61 76 61 69 6c 20 29 7b 0a 20 20  (u32)avail ){.  
14270 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f 77 20        pC->szRow 
14280 3d 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  = pC->payloadSiz
14290 65 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  e;.      }else i
142a0 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69  f( pC->payloadSi
142b0 7a 65 20 3e 20 28 75 33 32 29 64 62 2d 3e 61 4c  ze > (u32)db->aL
142c0 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d 49  imit[SQLITE_LIMI
142d0 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20 20  T_LENGTH] ){.   
142e0 20 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69       goto too_bi
142f0 67 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  g;.      }else{.
14300 20 20 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f          pC->szRo
14310 77 20 3d 20 61 76 61 69 6c 3b 0a 20 20 20 20 20  w = avail;.     
14320 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 70 43 2d   }.    }.    pC-
14330 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 70  >cacheStatus = p
14340 2d 3e 63 61 63 68 65 43 74 72 3b 0a 20 20 20 20  ->cacheCtr;.    
14350 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d  pC->iHdrOffset =
14360 20 67 65 74 56 61 72 69 6e 74 33 32 28 70 43 2d   getVarint32(pC-
14370 3e 61 52 6f 77 2c 20 6f 66 66 73 65 74 29 3b 0a  >aRow, offset);.
14380 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72 73      pC->nHdrPars
14390 65 64 20 3d 20 30 3b 0a 20 20 20 20 61 4f 66 66  ed = 0;.    aOff
143a0 73 65 74 5b 30 5d 20 3d 20 6f 66 66 73 65 74 3b  set[0] = offset;
143b0 0a 0a 0a 20 20 20 20 69 66 28 20 61 76 61 69 6c  ...    if( avail
143c0 3c 6f 66 66 73 65 74 20 29 7b 20 20 20 20 20 20  <offset ){      
143d0 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e 2d 49  /*OPTIMIZATION-I
143e0 46 2d 46 41 4c 53 45 2a 2f 0a 20 20 20 20 20 20  F-FALSE*/.      
143f0 2f 2a 20 70 43 2d 3e 61 52 6f 77 20 64 6f 65 73  /* pC->aRow does
14400 20 6e 6f 74 20 68 61 76 65 20 74 6f 20 68 6f 6c   not have to hol
14410 64 20 74 68 65 20 65 6e 74 69 72 65 20 72 6f 77  d the entire row
14420 2c 20 62 75 74 20 69 74 20 64 6f 65 73 20 61 74  , but it does at
14430 20 6c 65 61 73 74 0a 20 20 20 20 20 20 2a 2a 20   least.      ** 
14440 6e 65 65 64 20 74 6f 20 63 6f 76 65 72 20 74 68  need to cover th
14450 65 20 68 65 61 64 65 72 20 6f 66 20 74 68 65 20  e header of the 
14460 72 65 63 6f 72 64 2e 20 20 49 66 20 70 43 2d 3e  record.  If pC->
14470 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 63 6f  aRow does not co
14480 6e 74 61 69 6e 0a 20 20 20 20 20 20 2a 2a 20 74  ntain.      ** t
14490 68 65 20 63 6f 6d 70 6c 65 74 65 20 68 65 61 64  he complete head
144a0 65 72 2c 20 74 68 65 6e 20 73 65 74 20 69 74 20  er, then set it 
144b0 74 6f 20 7a 65 72 6f 2c 20 66 6f 72 63 69 6e 67  to zero, forcing
144c0 20 74 68 65 20 68 65 61 64 65 72 20 74 6f 20 62   the header to b
144d0 65 0a 20 20 20 20 20 20 2a 2a 20 64 79 6e 61 6d  e.      ** dynam
144e0 69 63 61 6c 6c 79 20 61 6c 6c 6f 63 61 74 65 64  ically allocated
144f0 2e 20 2a 2f 0a 20 20 20 20 20 20 70 43 2d 3e 61  . */.      pC->a
14500 52 6f 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70  Row = 0;.      p
14510 43 2d 3e 73 7a 52 6f 77 20 3d 20 30 3b 0a 0a 20  C->szRow = 0;.. 
14520 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72       /* Make sur
14530 65 20 61 20 63 6f 72 72 75 70 74 20 64 61 74 61  e a corrupt data
14540 62 61 73 65 20 68 61 73 20 6e 6f 74 20 67 69 76  base has not giv
14550 65 6e 20 75 73 20 61 6e 20 6f 76 65 72 73 69 7a  en us an oversiz
14560 65 20 68 65 61 64 65 72 2e 0a 20 20 20 20 20 20  e header..      
14570 2a 2a 20 44 6f 20 74 68 69 73 20 6e 6f 77 20 74  ** Do this now t
14580 6f 20 61 76 6f 69 64 20 61 6e 20 6f 76 65 72 73  o avoid an overs
14590 69 7a 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ize memory alloc
145a0 61 74 69 6f 6e 2e 0a 20 20 20 20 20 20 2a 2a 0a  ation..      **.
145b0 20 20 20 20 20 20 2a 2a 20 54 79 70 65 20 65 6e        ** Type en
145c0 74 72 69 65 73 20 63 61 6e 20 62 65 20 62 65 74  tries can be bet
145d0 77 65 65 6e 20 31 20 61 6e 64 20 35 20 62 79 74  ween 1 and 5 byt
145e0 65 73 20 65 61 63 68 2e 20 20 42 75 74 20 34 20  es each.  But 4 
145f0 61 6e 64 20 35 20 62 79 74 65 0a 20 20 20 20 20  and 5 byte.     
14600 20 2a 2a 20 74 79 70 65 73 20 75 73 65 20 73 6f   ** types use so
14610 20 6d 75 63 68 20 64 61 74 61 20 73 70 61 63 65   much data space
14620 20 74 68 61 74 20 74 68 65 72 65 20 63 61 6e 20   that there can 
14630 6f 6e 6c 79 20 62 65 20 34 30 39 36 20 61 6e 64  only be 4096 and
14640 20 33 32 20 6f 66 0a 20 20 20 20 20 20 2a 2a 20   32 of.      ** 
14650 74 68 65 6d 2c 20 72 65 73 70 65 63 74 69 76 65  them, respective
14660 6c 79 2e 20 20 53 6f 20 74 68 65 20 6d 61 78 69  ly.  So the maxi
14670 6d 75 6d 20 68 65 61 64 65 72 20 6c 65 6e 67 74  mum header lengt
14680 68 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 61  h results from a
14690 0a 20 20 20 20 20 20 2a 2a 20 33 2d 62 79 74 65  .      ** 3-byte
146a0 20 74 79 70 65 20 66 6f 72 20 65 61 63 68 20 6f   type for each o
146b0 66 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f 66  f the maximum of
146c0 20 33 32 37 36 38 20 63 6f 6c 75 6d 6e 73 20 70   32768 columns p
146d0 6c 75 73 20 74 68 72 65 65 0a 20 20 20 20 20 20  lus three.      
146e0 2a 2a 20 65 78 74 72 61 20 62 79 74 65 73 20 66  ** extra bytes f
146f0 6f 72 20 74 68 65 20 68 65 61 64 65 72 20 6c 65  or the header le
14700 6e 67 74 68 20 69 74 73 65 6c 66 2e 20 20 33 32  ngth itself.  32
14710 37 36 38 2a 33 20 2b 20 33 20 3d 20 39 38 33 30  768*3 + 3 = 9830
14720 37 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  7..      */.    
14730 20 20 69 66 28 20 6f 66 66 73 65 74 20 3e 20 39    if( offset > 9
14740 38 33 30 37 20 7c 7c 20 6f 66 66 73 65 74 20 3e  8307 || offset >
14750 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14760 20 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d   ){.        rc =
14770 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f   SQLITE_CORRUPT_
14780 42 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f  BKPT;.        go
14790 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
147a0 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20  error;.      }. 
147b0 20 20 20 7d 65 6c 73 65 20 69 66 28 20 6f 66 66     }else if( off
147c0 73 65 74 3e 30 20 29 7b 20 2f 2a 4f 50 54 49 4d  set>0 ){ /*OPTIM
147d0 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 2a  IZATION-IF-TRUE*
147e0 2f 0a 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  /.      /* The f
147f0 6f 6c 6c 6f 77 69 6e 67 20 67 6f 74 6f 20 69 73  ollowing goto is
14800 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   an optimization
14810 2e 20 20 49 74 20 63 61 6e 20 62 65 20 6f 6d 69  .  It can be omi
14820 74 74 65 64 20 61 6e 64 0a 20 20 20 20 20 20 2a  tted and.      *
14830 2a 20 65 76 65 72 79 74 68 69 6e 67 20 77 69 6c  * everything wil
14840 6c 20 73 74 69 6c 6c 20 77 6f 72 6b 2e 20 20 42  l still work.  B
14850 75 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20 69 73 20  ut OP_Column is 
14860 6d 65 61 73 75 72 61 62 6c 79 20 66 61 73 74 65  measurably faste
14870 72 0a 20 20 20 20 20 20 2a 2a 20 62 79 20 73 6b  r.      ** by sk
14880 69 70 70 69 6e 67 20 74 68 65 20 73 75 62 73 65  ipping the subse
14890 71 75 65 6e 74 20 63 6f 6e 64 69 74 69 6f 6e 61  quent conditiona
148a0 6c 2c 20 77 68 69 63 68 20 69 73 20 61 6c 77 61  l, which is alwa
148b0 79 73 20 74 72 75 65 2e 0a 20 20 20 20 20 20 2a  ys true..      *
148c0 2f 0a 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20  /.      zData = 
148d0 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20 20 20 20  pC->aRow;.      
148e0 61 73 73 65 72 74 28 20 70 43 2d 3e 6e 48 64 72  assert( pC->nHdr
148f0 50 61 72 73 65 64 3c 3d 70 32 20 29 3b 20 20 20  Parsed<=p2 );   
14900 20 20 20 20 20 20 2f 2a 20 43 6f 6e 64 69 74 69        /* Conditi
14910 6f 6e 61 6c 20 73 6b 69 70 70 65 64 20 2a 2f 0a  onal skipped */.
14920 20 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f        goto op_co
14930 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65 72  lumn_read_header
14940 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 2f  ;.    }.  }..  /
14950 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 74 20 6c  * Make sure at l
14960 65 61 73 74 20 74 68 65 20 66 69 72 73 74 20 70  east the first p
14970 32 2b 31 20 65 6e 74 72 69 65 73 20 6f 66 20 74  2+1 entries of t
14980 68 65 20 68 65 61 64 65 72 20 68 61 76 65 20 62  he header have b
14990 65 65 6e 0a 20 20 2a 2a 20 70 61 72 73 65 64 20  een.  ** parsed 
149a0 61 6e 64 20 76 61 6c 69 64 20 69 6e 66 6f 72 6d  and valid inform
149b0 61 74 69 6f 6e 20 69 73 20 69 6e 20 61 4f 66 66  ation is in aOff
149c0 73 65 74 5b 5d 20 61 6e 64 20 70 43 2d 3e 61 54  set[] and pC->aT
149d0 79 70 65 5b 5d 2e 0a 20 20 2a 2f 0a 20 20 69 66  ype[]..  */.  if
149e0 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
149f0 3c 3d 70 32 20 29 7b 0a 20 20 20 20 2f 2a 20 49  <=p2 ){.    /* I
14a00 66 20 74 68 65 72 65 20 69 73 20 6d 6f 72 65 20  f there is more 
14a10 68 65 61 64 65 72 20 61 76 61 69 6c 61 62 6c 65  header available
14a20 20 66 6f 72 20 70 61 72 73 69 6e 67 20 69 6e 20   for parsing in 
14a30 74 68 65 20 72 65 63 6f 72 64 2c 20 74 72 79 0a  the record, try.
14a40 20 20 20 20 2a 2a 20 74 6f 20 65 78 74 72 61 63      ** to extrac
14a50 74 20 61 64 64 69 74 69 6f 6e 61 6c 20 66 69 65  t additional fie
14a60 6c 64 73 20 75 70 20 74 68 72 6f 75 67 68 20 74  lds up through t
14a70 68 65 20 70 32 2b 31 2d 74 68 20 66 69 65 6c 64  he p2+1-th field
14a80 20 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66 28   .    */.    if(
14a90 20 70 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3c   pC->iHdrOffset<
14aa0 61 4f 66 66 73 65 74 5b 30 5d 20 29 7b 0a 20 20  aOffset[0] ){.  
14ab0 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
14ac0 20 7a 44 61 74 61 20 70 6f 69 6e 74 73 20 74 6f   zData points to
14ad0 20 65 6e 6f 75 67 68 20 6f 66 20 74 68 65 20 72   enough of the r
14ae0 65 63 6f 72 64 20 74 6f 20 63 6f 76 65 72 20 74  ecord to cover t
14af0 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20 20  he header. */.  
14b00 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
14b10 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  ==0 ){.        m
14b20 65 6d 73 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20  emset(&sMem, 0, 
14b30 73 69 7a 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20  sizeof(sMem));. 
14b40 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
14b50 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42 74  te3VdbeMemFromBt
14b60 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  ree(pC->uc.pCurs
14b70 6f 72 2c 20 30 2c 20 61 4f 66 66 73 65 74 5b 30  or, 0, aOffset[0
14b80 5d 2c 20 26 73 4d 65 6d 29 3b 0a 20 20 20 20 20  ], &sMem);.     
14b90 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
14ba0 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72  E_OK ) goto abor
14bb0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
14bc0 20 20 20 20 20 20 20 20 7a 44 61 74 61 20 3d 20          zData = 
14bd0 28 75 38 2a 29 73 4d 65 6d 2e 7a 3b 0a 20 20 20  (u8*)sMem.z;.   
14be0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14bf0 20 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52    zData = pC->aR
14c00 6f 77 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20  ow;.      }.  . 
14c10 20 20 20 20 20 2f 2a 20 46 69 6c 6c 20 69 6e 20       /* Fill in 
14c20 70 43 2d 3e 61 54 79 70 65 5b 69 5d 20 61 6e 64  pC->aType[i] and
14c30 20 61 4f 66 66 73 65 74 5b 69 5d 20 76 61 6c 75   aOffset[i] valu
14c40 65 73 20 74 68 72 6f 75 67 68 20 74 68 65 20 70  es through the p
14c50 32 2d 74 68 20 66 69 65 6c 64 2e 20 2a 2f 0a 20  2-th field. */. 
14c60 20 20 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65 61     op_column_rea
14c70 64 5f 68 65 61 64 65 72 3a 0a 20 20 20 20 20 20  d_header:.      
14c80 69 20 3d 20 70 43 2d 3e 6e 48 64 72 50 61 72 73  i = pC->nHdrPars
14c90 65 64 3b 0a 20 20 20 20 20 20 6f 66 66 73 65 74  ed;.      offset
14ca0 36 34 20 3d 20 61 4f 66 66 73 65 74 5b 69 5d 3b  64 = aOffset[i];
14cb0 0a 20 20 20 20 20 20 7a 48 64 72 20 3d 20 7a 44  .      zHdr = zD
14cc0 61 74 61 20 2b 20 70 43 2d 3e 69 48 64 72 4f 66  ata + pC->iHdrOf
14cd0 66 73 65 74 3b 0a 20 20 20 20 20 20 7a 45 6e 64  fset;.      zEnd
14ce0 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 61 4f  Hdr = zData + aO
14cf0 66 66 73 65 74 5b 30 5d 3b 0a 20 20 20 20 20 20  ffset[0];.      
14d00 64 6f 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  do{.        if( 
14d10 28 74 20 3d 20 7a 48 64 72 5b 30 5d 29 3c 30 78  (t = zHdr[0])<0x
14d20 38 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  80 ){.          
14d30 7a 48 64 72 2b 2b 3b 0a 20 20 20 20 20 20 20 20  zHdr++;.        
14d40 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20 73 71    offset64 += sq
14d50 6c 69 74 65 33 56 64 62 65 4f 6e 65 42 79 74 65  lite3VdbeOneByte
14d60 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
14d70 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b  ;.        }else{
14d80 0a 20 20 20 20 20 20 20 20 20 20 7a 48 64 72 20  .          zHdr 
14d90 2b 3d 20 73 71 6c 69 74 65 33 47 65 74 56 61 72  += sqlite3GetVar
14da0 69 6e 74 33 32 28 7a 48 64 72 2c 20 26 74 29 3b  int32(zHdr, &t);
14db0 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14dc0 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14dd0 62 65 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28  beSerialTypeLen(
14de0 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
14df0 20 20 20 20 20 20 70 43 2d 3e 61 54 79 70 65 5b        pC->aType[
14e00 69 2b 2b 5d 20 3d 20 74 3b 0a 20 20 20 20 20 20  i++] = t;.      
14e10 20 20 61 4f 66 66 73 65 74 5b 69 5d 20 3d 20 28    aOffset[i] = (
14e20 75 33 32 29 28 6f 66 66 73 65 74 36 34 20 26 20  u32)(offset64 & 
14e30 30 78 66 66 66 66 66 66 66 66 29 3b 0a 20 20 20  0xffffffff);.   
14e40 20 20 20 7d 77 68 69 6c 65 28 20 69 3c 3d 70 32     }while( i<=p2
14e50 20 26 26 20 7a 48 64 72 3c 7a 45 6e 64 48 64 72   && zHdr<zEndHdr
14e60 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 54 68   );..      /* Th
14e70 65 20 72 65 63 6f 72 64 20 69 73 20 63 6f 72 72  e record is corr
14e80 75 70 74 20 69 66 20 61 6e 79 20 6f 66 20 74 68  upt if any of th
14e90 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
14ea0 74 72 75 65 3a 0a 20 20 20 20 20 20 2a 2a 20 28  true:.      ** (
14eb0 31 29 20 74 68 65 20 62 79 74 65 73 20 6f 66 20  1) the bytes of 
14ec0 74 68 65 20 68 65 61 64 65 72 20 65 78 74 65 6e  the header exten
14ed0 64 20 70 61 73 74 20 74 68 65 20 64 65 63 6c 61  d past the decla
14ee0 72 65 64 20 68 65 61 64 65 72 20 73 69 7a 65 0a  red header size.
14ef0 20 20 20 20 20 20 2a 2a 20 28 32 29 20 74 68 65        ** (2) the
14f00 20 65 6e 74 69 72 65 20 68 65 61 64 65 72 20 77   entire header w
14f10 61 73 20 75 73 65 64 20 62 75 74 20 6e 6f 74 20  as used but not 
14f20 61 6c 6c 20 64 61 74 61 20 77 61 73 20 75 73 65  all data was use
14f30 64 0a 20 20 20 20 20 20 2a 2a 20 28 33 29 20 74  d.      ** (3) t
14f40 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 64 61  he end of the da
14f50 74 61 20 65 78 74 65 6e 64 73 20 62 65 79 6f 6e  ta extends beyon
14f60 64 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  d the end of the
14f70 20 72 65 63 6f 72 64 2e 0a 20 20 20 20 20 20 2a   record..      *
14f80 2f 0a 20 20 20 20 20 20 69 66 28 20 28 7a 48 64  /.      if( (zHd
14f90 72 3e 3d 7a 45 6e 64 48 64 72 20 26 26 20 28 7a  r>=zEndHdr && (z
14fa0 48 64 72 3e 7a 45 6e 64 48 64 72 20 7c 7c 20 6f  Hdr>zEndHdr || o
14fb0 66 66 73 65 74 36 34 21 3d 70 43 2d 3e 70 61 79  ffset64!=pC->pay
14fc0 6c 6f 61 64 53 69 7a 65 29 29 0a 20 20 20 20 20  loadSize)).     
14fd0 20 20 7c 7c 20 28 6f 66 66 73 65 74 36 34 20 3e    || (offset64 >
14fe0 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65   pC->payloadSize
14ff0 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
15000 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77 3d     if( pC->aRow=
15010 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62 65  =0 ) sqlite3Vdbe
15020 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65 6d  MemRelease(&sMem
15030 29 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  );.        rc = 
15040 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
15050 4b 50 54 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  KPT;.        got
15060 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
15070 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  rror;.      }.. 
15080 20 20 20 20 20 70 43 2d 3e 6e 48 64 72 50 61 72       pC->nHdrPar
15090 73 65 64 20 3d 20 69 3b 0a 20 20 20 20 20 20 70  sed = i;.      p
150a0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 20 3d 20  C->iHdrOffset = 
150b0 28 75 33 32 29 28 7a 48 64 72 20 2d 20 7a 44 61  (u32)(zHdr - zDa
150c0 74 61 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ta);.      if( p
150d0 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71 6c  C->aRow==0 ) sql
150e0 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61  ite3VdbeMemRelea
150f0 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20 7d  se(&sMem);.    }
15100 65 6c 73 65 7b 0a 20 20 20 20 20 20 74 20 3d 20  else{.      t = 
15110 30 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2a  0;.    }..    /*
15120 20 49 66 20 61 66 74 65 72 20 74 72 79 69 6e 67   If after trying
15130 20 74 6f 20 65 78 74 72 61 63 74 20 6e 65 77 20   to extract new 
15140 65 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65  entries from the
15150 20 68 65 61 64 65 72 2c 20 6e 48 64 72 50 61 72   header, nHdrPar
15160 73 65 64 20 69 73 0a 20 20 20 20 2a 2a 20 73 74  sed is.    ** st
15170 69 6c 6c 20 6e 6f 74 20 75 70 20 74 6f 20 70 32  ill not up to p2
15180 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61  , that means tha
15190 74 20 74 68 65 20 72 65 63 6f 72 64 20 68 61 73  t the record has
151a0 20 66 65 77 65 72 20 74 68 61 6e 20 70 32 0a 20   fewer than p2. 
151b0 20 20 20 2a 2a 20 63 6f 6c 75 6d 6e 73 2e 20 20     ** columns.  
151c0 53 6f 20 74 68 65 20 72 65 73 75 6c 74 20 77 69  So the result wi
151d0 6c 6c 20 62 65 20 65 69 74 68 65 72 20 74 68 65  ll be either the
151e0 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   default value o
151f0 72 20 61 20 4e 55 4c 4c 2e 0a 20 20 20 20 2a 2f  r a NULL..    */
15200 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 48 64  .    if( pC->nHd
15210 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b 0a 20  rParsed<=p2 ){. 
15220 20 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 34       if( pOp->p4
15230 74 79 70 65 3d 3d 50 34 5f 4d 45 4d 20 29 7b 0a  type==P4_MEM ){.
15240 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
15250 64 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70  dbeMemShallowCop
15260 79 28 70 44 65 73 74 2c 20 70 4f 70 2d 3e 70 34  y(pDest, pOp->p4
15270 2e 70 4d 65 6d 2c 20 4d 45 4d 5f 53 74 61 74 69  .pMem, MEM_Stati
15280 63 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  c);.      }else{
15290 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
152a0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
152b0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Dest);.      }. 
152c0 20 20 20 20 20 67 6f 74 6f 20 6f 70 5f 63 6f 6c       goto op_col
152d0 75 6d 6e 5f 6f 75 74 3b 0a 20 20 20 20 7d 0a 20  umn_out;.    }. 
152e0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 74 20 3d 20   }else{.    t = 
152f0 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 3b 0a 20  pC->aType[p2];. 
15300 20 7d 0a 0a 20 20 2f 2a 20 45 78 74 72 61 63 74   }..  /* Extract
15310 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 66 6f 72   the content for
15320 20 74 68 65 20 70 32 2b 31 2d 74 68 20 63 6f 6c   the p2+1-th col
15330 75 6d 6e 2e 20 20 43 6f 6e 74 72 6f 6c 20 63 61  umn.  Control ca
15340 6e 20 6f 6e 6c 79 0a 20 20 2a 2a 20 72 65 61 63  n only.  ** reac
15350 68 20 74 68 69 73 20 70 6f 69 6e 74 20 69 66 20  h this point if 
15360 61 4f 66 66 73 65 74 5b 70 32 5d 2c 20 61 4f 66  aOffset[p2], aOf
15370 66 73 65 74 5b 70 32 2b 31 5d 2c 20 61 6e 64 20  fset[p2+1], and 
15380 70 43 2d 3e 61 54 79 70 65 5b 70 32 5d 20 61 72  pC->aType[p2] ar
15390 65 0a 20 20 2a 2a 20 61 6c 6c 20 76 61 6c 69 64  e.  ** all valid
153a0 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28  ..  */.  assert(
153b0 20 70 32 3c 70 43 2d 3e 6e 48 64 72 50 61 72 73   p2<pC->nHdrPars
153c0 65 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ed );.  assert( 
153d0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b  rc==SQLITE_OK );
153e0 0a 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74  .  assert( sqlit
153f0 65 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e  e3VdbeCheckMemIn
15400 76 61 72 69 61 6e 74 73 28 70 44 65 73 74 29 20  variants(pDest) 
15410 29 3b 0a 20 20 69 66 28 20 56 64 62 65 4d 65 6d  );.  if( VdbeMem
15420 44 79 6e 61 6d 69 63 28 70 44 65 73 74 29 20 29  Dynamic(pDest) )
15430 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
15440 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 44 65 73  eMemSetNull(pDes
15450 74 29 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74  t);.  }.  assert
15460 28 20 74 3d 3d 70 43 2d 3e 61 54 79 70 65 5b 70  ( t==pC->aType[p
15470 32 5d 20 29 3b 0a 20 20 69 66 28 20 70 43 2d 3e  2] );.  if( pC->
15480 73 7a 52 6f 77 3e 3d 61 4f 66 66 73 65 74 5b 70  szRow>=aOffset[p
15490 32 2b 31 5d 20 29 7b 0a 20 20 20 20 2f 2a 20 54  2+1] ){.    /* T
154a0 68 69 73 20 69 73 20 74 68 65 20 63 6f 6d 6d 6f  his is the commo
154b0 6e 20 63 61 73 65 20 77 68 65 72 65 20 74 68 65  n case where the
154c0 20 64 65 73 69 72 65 64 20 63 6f 6e 74 65 6e 74   desired content
154d0 20 66 69 74 73 20 6f 6e 20 74 68 65 20 6f 72 69   fits on the ori
154e0 67 69 6e 61 6c 0a 20 20 20 20 2a 2a 20 70 61 67  ginal.    ** pag
154f0 65 20 2d 20 77 68 65 72 65 20 74 68 65 20 63 6f  e - where the co
15500 6e 74 65 6e 74 20 69 73 20 6e 6f 74 20 6f 6e 20  ntent is not on 
15510 61 6e 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65  an overflow page
15520 20 2a 2f 0a 20 20 20 20 7a 44 61 74 61 20 3d 20   */.    zData = 
15530 70 43 2d 3e 61 52 6f 77 20 2b 20 61 4f 66 66 73  pC->aRow + aOffs
15540 65 74 5b 70 32 5d 3b 0a 20 20 20 20 69 66 28 20  et[p2];.    if( 
15550 74 3c 31 32 20 29 7b 0a 20 20 20 20 20 20 73 71  t<12 ){.      sq
15560 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
15570 65 74 28 7a 44 61 74 61 2c 20 74 2c 20 70 44 65  et(zData, t, pDe
15580 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  st);.    }else{.
15590 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
155a0 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 20 69 73 20  column value is 
155b0 61 20 73 74 72 69 6e 67 2c 20 77 65 20 6e 65 65  a string, we nee
155c0 64 20 61 20 70 65 72 73 69 73 74 65 6e 74 20 76  d a persistent v
155d0 61 6c 75 65 2c 20 6e 6f 74 0a 20 20 20 20 20 20  alue, not.      
155e0 2a 2a 20 61 20 4d 45 4d 5f 45 70 68 65 6d 20 76  ** a MEM_Ephem v
155f0 61 6c 75 65 2e 20 20 54 68 69 73 20 62 72 61 6e  alue.  This bran
15600 63 68 20 69 73 20 61 20 66 61 73 74 20 73 68 6f  ch is a fast sho
15610 72 74 2d 63 75 74 20 74 68 61 74 20 69 73 20 65  rt-cut that is e
15620 71 75 69 76 61 6c 65 6e 74 0a 20 20 20 20 20 20  quivalent.      
15630 2a 2a 20 74 6f 20 63 61 6c 6c 69 6e 67 20 73 71  ** to calling sq
15640 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 47  lite3VdbeSerialG
15650 65 74 28 29 20 61 6e 64 20 73 71 6c 69 74 65 33  et() and sqlite3
15660 56 64 62 65 44 65 65 70 68 65 6d 65 72 61 6c 69  VdbeDeephemerali
15670 7a 65 28 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ze()..      */. 
15680 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
15690 74 20 75 31 36 20 61 46 6c 61 67 5b 5d 20 3d 20  t u16 aFlag[] = 
156a0 7b 20 4d 45 4d 5f 42 6c 6f 62 2c 20 4d 45 4d 5f  { MEM_Blob, MEM_
156b0 53 74 72 7c 4d 45 4d 5f 54 65 72 6d 20 7d 3b 0a  Str|MEM_Term };.
156c0 20 20 20 20 20 20 70 44 65 73 74 2d 3e 6e 20 3d        pDest->n =
156d0 20 6c 65 6e 20 3d 20 28 74 2d 31 32 29 2f 32 3b   len = (t-12)/2;
156e0 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  .      pDest->en
156f0 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
15700 20 20 20 20 69 66 28 20 70 44 65 73 74 2d 3e 73      if( pDest->s
15710 7a 4d 61 6c 6c 6f 63 20 3c 20 6c 65 6e 2b 32 20  zMalloc < len+2 
15720 29 7b 0a 20 20 20 20 20 20 20 20 70 44 65 73 74  ){.        pDest
15730 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
15740 6c 6c 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ll;.        if( 
15750 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 47 72  sqlite3VdbeMemGr
15760 6f 77 28 70 44 65 73 74 2c 20 6c 65 6e 2b 32 2c  ow(pDest, len+2,
15770 20 30 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65   0) ) goto no_me
15780 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  m;.      }else{.
15790 20 20 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a          pDest->z
157a0 20 3d 20 70 44 65 73 74 2d 3e 7a 4d 61 6c 6c 6f   = pDest->zMallo
157b0 63 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  c;.      }.     
157c0 20 6d 65 6d 63 70 79 28 70 44 65 73 74 2d 3e 7a   memcpy(pDest->z
157d0 2c 20 7a 44 61 74 61 2c 20 6c 65 6e 29 3b 0a 20  , zData, len);. 
157e0 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b 6c 65       pDest->z[le
157f0 6e 5d 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 44  n] = 0;.      pD
15800 65 73 74 2d 3e 7a 5b 6c 65 6e 2b 31 5d 20 3d 20  est->z[len+1] = 
15810 30 3b 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e  0;.      pDest->
15820 66 6c 61 67 73 20 3d 20 61 46 6c 61 67 5b 74 26  flags = aFlag[t&
15830 31 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73  1];.    }.  }els
15840 65 7b 0a 20 20 20 20 70 44 65 73 74 2d 3e 65 6e  e{.    pDest->en
15850 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20  c = encoding;.  
15860 20 20 2f 2a 20 54 68 69 73 20 62 72 61 6e 63 68    /* This branch
15870 20 68 61 70 70 65 6e 73 20 6f 6e 6c 79 20 77 68   happens only wh
15880 65 6e 20 63 6f 6e 74 65 6e 74 20 69 73 20 6f 6e  en content is on
15890 20 6f 76 65 72 66 6c 6f 77 20 70 61 67 65 73 20   overflow pages 
158a0 2a 2f 0a 20 20 20 20 69 66 28 20 28 28 70 4f 70  */.    if( ((pOp
158b0 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 4c  ->p5 & (OPFLAG_L
158c0 45 4e 47 54 48 41 52 47 7c 4f 50 46 4c 41 47 5f  ENGTHARG|OPFLAG_
158d0 54 59 50 45 4f 46 41 52 47 29 29 21 3d 30 0a 20  TYPEOFARG))!=0. 
158e0 20 20 20 20 20 20 20 20 20 26 26 20 28 28 74 3e           && ((t>
158f0 3d 31 32 20 26 26 20 28 74 26 31 29 3d 3d 30 29  =12 && (t&1)==0)
15900 20 7c 7c 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f   || (pOp->p5 & O
15910 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29  PFLAG_TYPEOFARG)
15920 21 3d 30 29 29 0a 20 20 20 20 20 7c 7c 20 28 6c  !=0)).     || (l
15930 65 6e 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  en = sqlite3Vdbe
15940 53 65 72 69 61 6c 54 79 70 65 4c 65 6e 28 74 29  SerialTypeLen(t)
15950 29 3d 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20  )==0.    ){.    
15960 20 20 2f 2a 20 43 6f 6e 74 65 6e 74 20 69 73 20    /* Content is 
15970 69 72 72 65 6c 65 76 61 6e 74 20 66 6f 72 0a 20  irrelevant for. 
15980 20 20 20 20 20 2a 2a 20 20 20 20 31 2e 20 74 68       **    1. th
15990 65 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74  e typeof() funct
159a0 69 6f 6e 2c 0a 20 20 20 20 20 20 2a 2a 20 20 20  ion,.      **   
159b0 20 32 2e 20 74 68 65 20 6c 65 6e 67 74 68 28 58   2. the length(X
159c0 29 20 66 75 6e 63 74 69 6f 6e 20 69 66 20 58 20  ) function if X 
159d0 69 73 20 61 20 62 6c 6f 62 2c 20 61 6e 64 0a 20  is a blob, and. 
159e0 20 20 20 20 20 2a 2a 20 20 20 20 33 2e 20 69 66       **    3. if
159f0 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6c 65 6e   the content len
15a00 67 74 68 20 69 73 20 7a 65 72 6f 2e 0a 20 20 20  gth is zero..   
15a10 20 20 20 2a 2a 20 53 6f 20 77 65 20 6d 69 67 68     ** So we migh
15a20 74 20 61 73 20 77 65 6c 6c 20 75 73 65 20 62 6f  t as well use bo
15a30 67 75 73 20 63 6f 6e 74 65 6e 74 20 72 61 74 68  gus content rath
15a40 65 72 20 74 68 61 6e 20 72 65 61 64 69 6e 67 0a  er than reading.
15a50 20 20 20 20 20 20 2a 2a 20 63 6f 6e 74 65 6e 74        ** content
15a60 20 66 72 6f 6d 20 64 69 73 6b 2e 20 2a 2f 0a 20   from disk. */. 
15a70 20 20 20 20 20 73 74 61 74 69 63 20 75 38 20 61       static u8 a
15a80 5a 65 72 6f 5b 38 5d 3b 20 20 2f 2a 20 54 68 69  Zero[8];  /* Thi
15a90 73 20 69 73 20 74 68 65 20 62 6f 67 75 73 20 63  s is the bogus c
15aa0 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 20 20 20 20  ontent */.      
15ab0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
15ac0 6c 47 65 74 28 61 5a 65 72 6f 2c 20 74 2c 20 70  lGet(aZero, t, p
15ad0 44 65 73 74 29 3b 0a 20 20 20 20 7d 65 6c 73 65  Dest);.    }else
15ae0 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  {.      rc = sql
15af0 69 74 65 33 56 64 62 65 4d 65 6d 46 72 6f 6d 42  ite3VdbeMemFromB
15b00 74 72 65 65 28 70 43 2d 3e 75 63 2e 70 43 75 72  tree(pC->uc.pCur
15b10 73 6f 72 2c 20 61 4f 66 66 73 65 74 5b 70 32 5d  sor, aOffset[p2]
15b20 2c 20 6c 65 6e 2c 20 70 44 65 73 74 29 3b 0a 20  , len, pDest);. 
15b30 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
15b40 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
15b50 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
15b60 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
15b70 64 62 65 53 65 72 69 61 6c 47 65 74 28 28 63 6f  dbeSerialGet((co
15b80 6e 73 74 20 75 38 2a 29 70 44 65 73 74 2d 3e 7a  nst u8*)pDest->z
15b90 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20 20  , t, pDest);.   
15ba0 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20     pDest->flags 
15bb0 26 3d 20 7e 4d 45 4d 5f 45 70 68 65 6d 3b 0a 20  &= ~MEM_Ephem;. 
15bc0 20 20 20 7d 0a 20 20 7d 0a 0a 6f 70 5f 63 6f 6c     }.  }..op_col
15bd0 75 6d 6e 5f 6f 75 74 3a 0a 20 20 55 50 44 41 54  umn_out:.  UPDAT
15be0 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
15bf0 44 65 73 74 29 3b 0a 20 20 52 45 47 49 53 54 45  Dest);.  REGISTE
15c00 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c  R_TRACE(pOp->p3,
15c10 20 70 44 65 73 74 29 3b 0a 20 20 62 72 65 61 6b   pDest);.  break
15c20 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
15c30 41 66 66 69 6e 69 74 79 20 50 31 20 50 32 20 2a  Affinity P1 P2 *
15c40 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15c50 73 3a 20 61 66 66 69 6e 69 74 79 28 72 5b 50 31  s: affinity(r[P1
15c60 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 41 70 70 6c  @P2]).**.** Appl
15c70 79 20 61 66 66 69 6e 69 74 69 65 73 20 74 6f 20  y affinities to 
15c80 61 20 72 61 6e 67 65 20 6f 66 20 50 32 20 72 65  a range of P2 re
15c90 67 69 73 74 65 72 73 20 73 74 61 72 74 69 6e 67  gisters starting
15ca0 20 77 69 74 68 20 50 31 2e 0a 2a 2a 0a 2a 2a 20   with P1..**.** 
15cb0 50 34 20 69 73 20 61 20 73 74 72 69 6e 67 20 74  P4 is a string t
15cc0 68 61 74 20 69 73 20 50 32 20 63 68 61 72 61 63  hat is P2 charac
15cd0 74 65 72 73 20 6c 6f 6e 67 2e 20 54 68 65 20 6e  ters long. The n
15ce0 74 68 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  th character of 
15cf0 74 68 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e  the.** string in
15d00 64 69 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75  dicates the colu
15d10 6d 6e 20 61 66 66 69 6e 69 74 79 20 74 68 61 74  mn affinity that
15d20 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
15d30 66 6f 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 6d  for the nth.** m
15d40 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e 20 74 68  emory cell in th
15d50 65 20 72 61 6e 67 65 2e 0a 2a 2f 0a 63 61 73 65  e range..*/.case
15d60 20 4f 50 5f 41 66 66 69 6e 69 74 79 3a 20 7b 0a   OP_Affinity: {.
15d70 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
15d80 66 66 69 6e 69 74 79 3b 20 20 20 2f 2a 20 54 68  ffinity;   /* Th
15d90 65 20 61 66 66 69 6e 69 74 79 20 74 6f 20 62 65  e affinity to be
15da0 20 61 70 70 6c 69 65 64 20 2a 2f 0a 20 20 63 68   applied */.  ch
15db0 61 72 20 63 41 66 66 3b 20 20 20 20 20 20 20 20  ar cAff;        
15dc0 20 20 20 20 20 20 20 2f 2a 20 41 20 73 69 6e 67         /* A sing
15dd0 6c 65 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  le character of 
15de0 61 66 66 69 6e 69 74 79 20 2a 2f 0a 0a 20 20 7a  affinity */..  z
15df0 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70 2d 3e  Affinity = pOp->
15e00 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74 28 20  p4.z;.  assert( 
15e10 7a 41 66 66 69 6e 69 74 79 21 3d 30 20 29 3b 0a  zAffinity!=0 );.
15e20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e    assert( zAffin
15e30 69 74 79 5b 70 4f 70 2d 3e 70 32 5d 3d 3d 30 20  ity[pOp->p2]==0 
15e40 29 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  );.  pIn1 = &aMe
15e50 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 77 68  m[pOp->p1];.  wh
15e60 69 6c 65 28 20 28 63 41 66 66 20 3d 20 2a 28 7a  ile( (cAff = *(z
15e70 41 66 66 69 6e 69 74 79 2b 2b 29 29 21 3d 30 20  Affinity++))!=0 
15e80 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
15e90 49 6e 31 20 3c 3d 20 26 70 2d 3e 61 4d 65 6d 5b  In1 <= &p->aMem[
15ea0 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
15eb0 6e 43 75 72 73 6f 72 29 5d 20 29 3b 0a 20 20 20  nCursor)] );.   
15ec0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
15ed0 6c 69 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 20  lid(pIn1) );.   
15ee0 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28 70   applyAffinity(p
15ef0 49 6e 31 2c 20 63 41 66 66 2c 20 65 6e 63 6f 64  In1, cAff, encod
15f00 69 6e 67 29 3b 0a 20 20 20 20 70 49 6e 31 2b 2b  ing);.    pIn1++
15f10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
15f20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 61 6b  ../* Opcode: Mak
15f30 65 52 65 63 6f 72 64 20 50 31 20 50 32 20 50 33  eRecord P1 P2 P3
15f40 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69   P4 *.** Synopsi
15f50 73 3a 20 72 5b 50 33 5d 3d 6d 6b 72 65 63 28 72  s: r[P3]=mkrec(r
15f60 5b 50 31 40 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 43  [P1@P2]).**.** C
15f70 6f 6e 76 65 72 74 20 50 32 20 72 65 67 69 73 74  onvert P2 regist
15f80 65 72 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69  ers beginning wi
15f90 74 68 20 50 31 20 69 6e 74 6f 20 74 68 65 20 5b  th P1 into the [
15fa0 72 65 63 6f 72 64 20 66 6f 72 6d 61 74 5d 0a 2a  record format].*
15fb0 2a 20 75 73 65 20 61 73 20 61 20 64 61 74 61 20  * use as a data 
15fc0 72 65 63 6f 72 64 20 69 6e 20 61 20 64 61 74 61  record in a data
15fd0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 61 73  base table or as
15fe0 20 61 20 6b 65 79 0a 2a 2a 20 69 6e 20 61 6e 20   a key.** in an 
15ff0 69 6e 64 65 78 2e 20 20 54 68 65 20 4f 50 5f 43  index.  The OP_C
16000 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 20 63 61 6e  olumn opcode can
16010 20 64 65 63 6f 64 65 20 74 68 65 20 72 65 63 6f   decode the reco
16020 72 64 20 6c 61 74 65 72 2e 0a 2a 2a 0a 2a 2a 20  rd later..**.** 
16030 50 34 20 6d 61 79 20 62 65 20 61 20 73 74 72 69  P4 may be a stri
16040 6e 67 20 74 68 61 74 20 69 73 20 50 32 20 63 68  ng that is P2 ch
16050 61 72 61 63 74 65 72 73 20 6c 6f 6e 67 2e 20 20  aracters long.  
16060 54 68 65 20 6e 74 68 20 63 68 61 72 61 63 74 65  The nth characte
16070 72 20 6f 66 20 74 68 65 0a 2a 2a 20 73 74 72 69  r of the.** stri
16080 6e 67 20 69 6e 64 69 63 61 74 65 73 20 74 68 65  ng indicates the
16090 20 63 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79   column affinity
160a0 20 74 68 61 74 20 73 68 6f 75 6c 64 20 62 65 20   that should be 
160b0 75 73 65 64 20 66 6f 72 20 74 68 65 20 6e 74 68  used for the nth
160c0 0a 2a 2a 20 66 69 65 6c 64 20 6f 66 20 74 68 65  .** field of the
160d0 20 69 6e 64 65 78 20 6b 65 79 2e 0a 2a 2a 0a 2a   index key..**.*
160e0 2a 20 54 68 65 20 6d 61 70 70 69 6e 67 20 66 72  * The mapping fr
160f0 6f 6d 20 63 68 61 72 61 63 74 65 72 20 74 6f 20  om character to 
16100 61 66 66 69 6e 69 74 79 20 69 73 20 67 69 76 65  affinity is give
16110 6e 20 62 79 20 74 68 65 20 53 51 4c 49 54 45 5f  n by the SQLITE_
16120 41 46 46 5f 0a 2a 2a 20 6d 61 63 72 6f 73 20 64  AFF_.** macros d
16130 65 66 69 6e 65 64 20 69 6e 20 73 71 6c 69 74 65  efined in sqlite
16140 49 6e 74 2e 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  Int.h..**.** If 
16150 50 34 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P4 is NULL then 
16160 61 6c 6c 20 69 6e 64 65 78 20 66 69 65 6c 64 73  all index fields
16170 20 68 61 76 65 20 74 68 65 20 61 66 66 69 6e 69   have the affini
16180 74 79 20 42 4c 4f 42 2e 0a 2a 2f 0a 63 61 73 65  ty BLOB..*/.case
16190 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 3a 20   OP_MakeRecord: 
161a0 7b 0a 20 20 75 38 20 2a 7a 4e 65 77 52 65 63 6f  {.  u8 *zNewReco
161b0 72 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 20  rd;        /* A 
161c0 62 75 66 66 65 72 20 74 6f 20 68 6f 6c 64 20 74  buffer to hold t
161d0 68 65 20 64 61 74 61 20 66 6f 72 20 74 68 65 20  he data for the 
161e0 6e 65 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  new record */.  
161f0 4d 65 6d 20 2a 70 52 65 63 3b 20 20 20 20 20 20  Mem *pRec;      
16200 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65         /* The ne
16210 77 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 75 36  w record */.  u6
16220 34 20 6e 44 61 74 61 3b 20 20 20 20 20 20 20 20  4 nData;        
16230 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
16240 66 20 62 79 74 65 73 20 6f 66 20 64 61 74 61 20  f bytes of data 
16250 73 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  space */.  int n
16260 48 64 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  Hdr;            
16270 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
16280 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20 73  ytes of header s
16290 70 61 63 65 20 2a 2f 0a 20 20 69 36 34 20 6e 42  pace */.  i64 nB
162a0 79 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  yte;            
162b0 20 2f 2a 20 44 61 74 61 20 73 70 61 63 65 20 72   /* Data space r
162c0 65 71 75 69 72 65 64 20 66 6f 72 20 74 68 69 73  equired for this
162d0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 36 34   record */.  i64
162e0 20 6e 5a 65 72 6f 3b 20 20 20 20 20 20 20 20 20   nZero;         
162f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
16300 20 7a 65 72 6f 20 62 79 74 65 73 20 61 74 20 74   zero bytes at t
16310 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 72 65  he end of the re
16320 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 56  cord */.  int nV
16330 61 72 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  arint;          
16340 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79   /* Number of by
16350 74 65 73 20 69 6e 20 61 20 76 61 72 69 6e 74 20  tes in a varint 
16360 2a 2f 0a 20 20 75 33 32 20 73 65 72 69 61 6c 5f  */.  u32 serial_
16370 74 79 70 65 3b 20 20 20 20 20 20 20 2f 2a 20 54  type;       /* T
16380 79 70 65 20 66 69 65 6c 64 20 2a 2f 0a 20 20 4d  ype field */.  M
16390 65 6d 20 2a 70 44 61 74 61 30 3b 20 20 20 20 20  em *pData0;     
163a0 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 66        /* First f
163b0 69 65 6c 64 20 74 6f 20 62 65 20 63 6f 6d 62 69  ield to be combi
163c0 6e 65 64 20 69 6e 74 6f 20 74 68 65 20 72 65 63  ned into the rec
163d0 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4c  ord */.  Mem *pL
163e0 61 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ast;            
163f0 2f 2a 20 4c 61 73 74 20 66 69 65 6c 64 20 6f 66  /* Last field of
16400 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16410 20 69 6e 74 20 6e 46 69 65 6c 64 3b 20 20 20 20   int nField;    
16420 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
16430 72 20 6f 66 20 66 69 65 6c 64 73 20 69 6e 20 74  r of fields in t
16440 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 63  he record */.  c
16450 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79 3b 20  har *zAffinity; 
16460 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 66 66        /* The aff
16470 69 6e 69 74 79 20 73 74 72 69 6e 67 20 66 6f 72  inity string for
16480 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
16490 20 69 6e 74 20 66 69 6c 65 5f 66 6f 72 6d 61 74   int file_format
164a0 3b 20 20 20 20 20 20 20 2f 2a 20 46 69 6c 65 20  ;       /* File 
164b0 66 6f 72 6d 61 74 20 74 6f 20 75 73 65 20 66 6f  format to use fo
164c0 72 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20 20  r encoding */.  
164d0 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
164e0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
164f0 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63 6f  used in zNewReco
16500 72 64 5b 5d 20 68 65 61 64 65 72 20 2a 2f 0a 20  rd[] header */. 
16510 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20 20 20   int j;         
16520 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
16530 20 75 73 65 64 20 69 6e 20 7a 4e 65 77 52 65 63   used in zNewRec
16540 6f 72 64 5b 5d 20 63 6f 6e 74 65 6e 74 20 2a 2f  ord[] content */
16550 0a 20 20 75 33 32 20 6c 65 6e 3b 20 20 20 20 20  .  u32 len;     
16560 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e            /* Len
16570 67 74 68 20 6f 66 20 61 20 66 69 65 6c 64 20 2a  gth of a field *
16580 2f 0a 0a 20 20 2f 2a 20 41 73 73 75 6d 69 6e 67  /..  /* Assuming
16590 20 74 68 65 20 72 65 63 6f 72 64 20 63 6f 6e 74   the record cont
165a0 61 69 6e 73 20 4e 20 66 69 65 6c 64 73 2c 20 74  ains N fields, t
165b0 68 65 20 72 65 63 6f 72 64 20 66 6f 72 6d 61 74  he record format
165c0 20 6c 6f 6f 6b 73 0a 20 20 2a 2a 20 6c 69 6b 65   looks.  ** like
165d0 20 74 68 69 73 3a 0a 20 20 2a 2a 0a 20 20 2a 2a   this:.  **.  **
165e0 20 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d   ---------------
165f0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16600 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16610 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16620 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 20 7c  ---------.  ** |
16630 20 68 64 72 2d 73 69 7a 65 20 7c 20 74 79 70 65   hdr-size | type
16640 20 30 20 7c 20 74 79 70 65 20 31 20 7c 20 2e 2e   0 | type 1 | ..
16650 2e 20 7c 20 74 79 70 65 20 4e 2d 31 20 7c 20 64  . | type N-1 | d
16660 61 74 61 30 20 7c 20 2e 2e 2e 20 7c 20 64 61 74  ata0 | ... | dat
16670 61 20 4e 2d 31 20 7c 20 0a 20 20 2a 2a 20 2d 2d  a N-1 | .  ** --
16680 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16690 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166a0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166b0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166c0 2d 2d 2d 2d 2d 2d 0a 20 20 2a 2a 0a 20 20 2a 2a  ------.  **.  **
166d0 20 44 61 74 61 28 30 29 20 69 73 20 74 61 6b 65   Data(0) is take
166e0 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
166f0 50 31 2e 20 20 44 61 74 61 28 31 29 20 63 6f 6d  P1.  Data(1) com
16700 65 73 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  es from register
16710 20 50 31 2b 31 0a 20 20 2a 2a 20 61 6e 64 20 73   P1+1.  ** and s
16720 6f 20 66 6f 72 74 68 2e 0a 20 20 2a 2a 0a 20 20  o forth..  **.  
16730 2a 2a 20 45 61 63 68 20 74 79 70 65 20 66 69 65  ** Each type fie
16740 6c 64 20 69 73 20 61 20 76 61 72 69 6e 74 20 72  ld is a varint r
16750 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
16760 73 65 72 69 61 6c 20 74 79 70 65 20 6f 66 20 74  serial type of t
16770 68 65 20 0a 20 20 2a 2a 20 63 6f 72 72 65 73 70  he .  ** corresp
16780 6f 6e 64 69 6e 67 20 64 61 74 61 20 65 6c 65 6d  onding data elem
16790 65 6e 74 20 28 73 65 65 20 73 71 6c 69 74 65 33  ent (see sqlite3
167a0 56 64 62 65 53 65 72 69 61 6c 54 79 70 65 28 29  VdbeSerialType()
167b0 29 2e 20 54 68 65 0a 20 20 2a 2a 20 68 64 72 2d  ). The.  ** hdr-
167c0 73 69 7a 65 20 66 69 65 6c 64 20 69 73 20 61 6c  size field is al
167d0 73 6f 20 61 20 76 61 72 69 6e 74 20 77 68 69 63  so a varint whic
167e0 68 20 69 73 20 74 68 65 20 6f 66 66 73 65 74 20  h is the offset 
167f0 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e 69  from the beginni
16800 6e 67 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 72  ng.  ** of the r
16810 65 63 6f 72 64 20 74 6f 20 64 61 74 61 30 2e 0a  ecord to data0..
16820 20 20 2a 2f 0a 20 20 6e 44 61 74 61 20 3d 20 30    */.  nData = 0
16830 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
16840 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66 20  ber of bytes of 
16850 64 61 74 61 20 73 70 61 63 65 20 2a 2f 0a 20 20  data space */.  
16860 6e 48 64 72 20 3d 20 30 3b 20 20 20 20 20 20 20  nHdr = 0;       
16870 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16880 62 79 74 65 73 20 6f 66 20 68 65 61 64 65 72 20  bytes of header 
16890 73 70 61 63 65 20 2a 2f 0a 20 20 6e 5a 65 72 6f  space */.  nZero
168a0 20 3d 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a   = 0;         /*
168b0 20 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20   Number of zero 
168c0 62 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64  bytes at the end
168d0 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a   of the record *
168e0 2f 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70  /.  nField = pOp
168f0 2d 3e 70 31 3b 0a 20 20 7a 41 66 66 69 6e 69 74  ->p1;.  zAffinit
16900 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
16910 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
16920 30 20 26 26 20 70 4f 70 2d 3e 70 32 3e 30 20 26  0 && pOp->p2>0 &
16930 26 20 70 4f 70 2d 3e 70 32 2b 6e 46 69 65 6c 64  & pOp->p2+nField
16940 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
16950 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20 29 3b 0a  ->nCursor)+1 );.
16960 20 20 70 44 61 74 61 30 20 3d 20 26 61 4d 65 6d    pData0 = &aMem
16970 5b 6e 46 69 65 6c 64 5d 3b 0a 20 20 6e 46 69 65  [nField];.  nFie
16980 6c 64 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  ld = pOp->p2;.  
16990 70 4c 61 73 74 20 3d 20 26 70 44 61 74 61 30 5b  pLast = &pData0[
169a0 6e 46 69 65 6c 64 2d 31 5d 3b 0a 20 20 66 69 6c  nField-1];.  fil
169b0 65 5f 66 6f 72 6d 61 74 20 3d 20 70 2d 3e 6d 69  e_format = p->mi
169c0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
169d0 3b 0a 0a 20 20 2f 2a 20 49 64 65 6e 74 69 66 79  ;..  /* Identify
169e0 20 74 68 65 20 6f 75 74 70 75 74 20 72 65 67 69   the output regi
169f0 73 74 65 72 20 2a 2f 0a 20 20 61 73 73 65 72 74  ster */.  assert
16a00 28 20 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70  ( pOp->p3<pOp->p
16a10 31 20 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f  1 || pOp->p3>=pO
16a20 70 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 20 29 3b  p->p1+pOp->p2 );
16a30 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
16a40 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41  pOp->p3];.  memA
16a50 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
16a60 70 4f 75 74 29 3b 0a 0a 20 20 2f 2a 20 41 70 70  pOut);..  /* App
16a70 6c 79 20 74 68 65 20 72 65 71 75 65 73 74 65 64  ly the requested
16a80 20 61 66 66 69 6e 69 74 79 20 74 6f 20 61 6c 6c   affinity to all
16a90 20 69 6e 70 75 74 73 0a 20 20 2a 2f 0a 20 20 61   inputs.  */.  a
16aa0 73 73 65 72 74 28 20 70 44 61 74 61 30 3c 3d 70  ssert( pData0<=p
16ab0 4c 61 73 74 20 29 3b 0a 20 20 69 66 28 20 7a 41  Last );.  if( zA
16ac0 66 66 69 6e 69 74 79 20 29 7b 0a 20 20 20 20 70  ffinity ){.    p
16ad0 52 65 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20  Rec = pData0;.  
16ae0 20 20 64 6f 7b 0a 20 20 20 20 20 20 61 70 70 6c    do{.      appl
16af0 79 41 66 66 69 6e 69 74 79 28 70 52 65 63 2b 2b  yAffinity(pRec++
16b00 2c 20 2a 28 7a 41 66 66 69 6e 69 74 79 2b 2b 29  , *(zAffinity++)
16b10 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20  , encoding);.   
16b20 20 20 20 61 73 73 65 72 74 28 20 7a 41 66 66 69     assert( zAffi
16b30 6e 69 74 79 5b 30 5d 3d 3d 30 20 7c 7c 20 70 52  nity[0]==0 || pR
16b40 65 63 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 20  ec<=pLast );.   
16b50 20 7d 77 68 69 6c 65 28 20 7a 41 66 66 69 6e 69   }while( zAffini
16b60 74 79 5b 30 5d 20 29 3b 0a 20 20 7d 0a 0a 23 69  ty[0] );.  }..#i
16b70 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
16b80 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 2f  LE_NULL_TRIM.  /
16b90 2a 20 4e 55 4c 4c 73 20 63 61 6e 20 62 65 20 73  * NULLs can be s
16ba0 61 66 65 6c 79 20 74 72 69 6d 6d 65 64 20 66 72  afely trimmed fr
16bb0 6f 6d 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  om the end of th
16bc0 65 20 72 65 63 6f 72 64 2c 20 61 73 20 6c 6f 6e  e record, as lon
16bd0 67 20 61 73 0a 20 20 2a 2a 20 61 73 20 74 68 65  g as.  ** as the
16be0 20 73 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 69   schema format i
16bf0 73 20 32 20 6f 72 20 6d 6f 72 65 20 61 6e 64 20  s 2 or more and 
16c00 6e 6f 6e 65 20 6f 66 20 74 68 65 20 6f 6d 69 74  none of the omit
16c10 74 65 64 20 63 6f 6c 75 6d 6e 73 0a 20 20 2a 2a  ted columns.  **
16c20 20 68 61 76 65 20 61 20 6e 6f 6e 2d 4e 55 4c 4c   have a non-NULL
16c30 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20   default value. 
16c40 20 41 6c 73 6f 2c 20 74 68 65 20 72 65 63 6f 72   Also, the recor
16c50 64 20 6d 75 73 74 20 62 65 20 6c 65 66 74 20 77  d must be left w
16c60 69 74 68 0a 20 20 2a 2a 20 61 74 20 6c 65 61 73  ith.  ** at leas
16c70 74 20 6f 6e 65 20 66 69 65 6c 64 2e 20 20 49 66  t one field.  If
16c80 20 50 35 3e 30 20 74 68 65 6e 20 69 74 20 77 69   P5>0 then it wi
16c90 6c 6c 20 62 65 20 6f 6e 65 20 6d 6f 72 65 20 74  ll be one more t
16ca0 68 61 6e 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64  han the.  ** ind
16cb0 65 78 20 6f 66 20 74 68 65 20 72 69 67 68 74 2d  ex of the right-
16cc0 6d 6f 73 74 20 63 6f 6c 75 6d 6e 20 77 69 74 68  most column with
16cd0 20 61 20 6e 6f 6e 2d 4e 55 4c 4c 20 64 65 66 61   a non-NULL defa
16ce0 75 6c 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 69  ult value */.  i
16cf0 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
16d00 20 20 77 68 69 6c 65 28 20 28 70 4c 61 73 74 2d    while( (pLast-
16d10 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
16d20 6c 29 21 3d 30 20 26 26 20 6e 46 69 65 6c 64 3e  l)!=0 && nField>
16d30 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 20  pOp->p5 ){.     
16d40 20 70 4c 61 73 74 2d 2d 3b 0a 20 20 20 20 20 20   pLast--;.      
16d50 6e 46 69 65 6c 64 2d 2d 3b 0a 20 20 20 20 7d 0a  nField--;.    }.
16d60 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
16d70 20 4c 6f 6f 70 20 74 68 72 6f 75 67 68 20 74 68   Loop through th
16d80 65 20 65 6c 65 6d 65 6e 74 73 20 74 68 61 74 20  e elements that 
16d90 77 69 6c 6c 20 6d 61 6b 65 20 75 70 20 74 68 65  will make up the
16da0 20 72 65 63 6f 72 64 20 74 6f 20 66 69 67 75 72   record to figur
16db0 65 0a 20 20 2a 2a 20 6f 75 74 20 68 6f 77 20 6d  e.  ** out how m
16dc0 75 63 68 20 73 70 61 63 65 20 69 73 20 72 65 71  uch space is req
16dd0 75 69 72 65 64 20 66 6f 72 20 74 68 65 20 6e 65  uired for the ne
16de0 77 20 72 65 63 6f 72 64 2e 0a 20 20 2a 2f 0a 20  w record..  */. 
16df0 20 70 52 65 63 20 3d 20 70 4c 61 73 74 3b 0a 20   pRec = pLast;. 
16e00 20 64 6f 7b 0a 20 20 20 20 61 73 73 65 72 74 28   do{.    assert(
16e10 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 52 65 63   memIsValid(pRec
16e20 29 20 29 3b 0a 20 20 20 20 70 52 65 63 2d 3e 75  ) );.    pRec->u
16e30 54 65 6d 70 20 3d 20 73 65 72 69 61 6c 5f 74 79  Temp = serial_ty
16e40 70 65 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  pe = sqlite3Vdbe
16e50 53 65 72 69 61 6c 54 79 70 65 28 70 52 65 63 2c  SerialType(pRec,
16e60 20 66 69 6c 65 5f 66 6f 72 6d 61 74 2c 20 26 6c   file_format, &l
16e70 65 6e 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  en);.    if( pRe
16e80 63 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a  c->flags & MEM_Z
16e90 65 72 6f 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ero ){.      if(
16ea0 20 6e 44 61 74 61 20 29 7b 0a 20 20 20 20 20 20   nData ){.      
16eb0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
16ec0 65 4d 65 6d 45 78 70 61 6e 64 42 6c 6f 62 28 70  eMemExpandBlob(p
16ed0 52 65 63 29 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  Rec) ) goto no_m
16ee0 65 6d 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  em;.      }else{
16ef0 0a 20 20 20 20 20 20 20 20 6e 5a 65 72 6f 20 2b  .        nZero +
16f00 3d 20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b  = pRec->u.nZero;
16f10 0a 20 20 20 20 20 20 20 20 6c 65 6e 20 2d 3d 20  .        len -= 
16f20 70 52 65 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20  pRec->u.nZero;. 
16f30 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
16f40 20 6e 44 61 74 61 20 2b 3d 20 6c 65 6e 3b 0a 20   nData += len;. 
16f50 20 20 20 74 65 73 74 63 61 73 65 28 20 73 65 72     testcase( ser
16f60 69 61 6c 5f 74 79 70 65 3d 3d 31 32 37 20 29 3b  ial_type==127 );
16f70 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 73  .    testcase( s
16f80 65 72 69 61 6c 5f 74 79 70 65 3d 3d 31 32 38 20  erial_type==128 
16f90 29 3b 0a 20 20 20 20 6e 48 64 72 20 2b 3d 20 73  );.    nHdr += s
16fa0 65 72 69 61 6c 5f 74 79 70 65 3c 3d 31 32 37 20  erial_type<=127 
16fb0 3f 20 31 20 3a 20 73 71 6c 69 74 65 33 56 61 72  ? 1 : sqlite3Var
16fc0 69 6e 74 4c 65 6e 28 73 65 72 69 61 6c 5f 74 79  intLen(serial_ty
16fd0 70 65 29 3b 0a 20 20 20 20 69 66 28 20 70 52 65  pe);.    if( pRe
16fe0 63 3d 3d 70 44 61 74 61 30 20 29 20 62 72 65 61  c==pData0 ) brea
16ff0 6b 3b 0a 20 20 20 20 70 52 65 63 2d 2d 3b 0a 20  k;.    pRec--;. 
17000 20 7d 77 68 69 6c 65 28 31 29 3b 0a 0a 20 20 2f   }while(1);..  /
17010 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
17020 2d 32 32 35 36 34 2d 31 31 36 34 37 20 54 68 65  -22564-11647 The
17030 20 68 65 61 64 65 72 20 62 65 67 69 6e 73 20 77   header begins w
17040 69 74 68 20 61 20 73 69 6e 67 6c 65 20 76 61 72  ith a single var
17050 69 6e 74 0a 20 20 2a 2a 20 77 68 69 63 68 20 64  int.  ** which d
17060 65 74 65 72 6d 69 6e 65 73 20 74 68 65 20 74 6f  etermines the to
17070 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 62 79  tal number of by
17080 74 65 73 20 69 6e 20 74 68 65 20 68 65 61 64 65  tes in the heade
17090 72 2e 20 54 68 65 20 76 61 72 69 6e 74 0a 20 20  r. The varint.  
170a0 2a 2a 20 76 61 6c 75 65 20 69 73 20 74 68 65 20  ** value is the 
170b0 73 69 7a 65 20 6f 66 20 74 68 65 20 68 65 61 64  size of the head
170c0 65 72 20 69 6e 20 62 79 74 65 73 20 69 6e 63 6c  er in bytes incl
170d0 75 64 69 6e 67 20 74 68 65 20 73 69 7a 65 20 76  uding the size v
170e0 61 72 69 6e 74 0a 20 20 2a 2a 20 69 74 73 65 6c  arint.  ** itsel
170f0 66 2e 20 2a 2f 0a 20 20 74 65 73 74 63 61 73 65  f. */.  testcase
17100 28 20 6e 48 64 72 3d 3d 31 32 36 20 29 3b 0a 20  ( nHdr==126 );. 
17110 20 74 65 73 74 63 61 73 65 28 20 6e 48 64 72 3d   testcase( nHdr=
17120 3d 31 32 37 20 29 3b 0a 20 20 69 66 28 20 6e 48  =127 );.  if( nH
17130 64 72 3c 3d 31 32 36 20 29 7b 0a 20 20 20 20 2f  dr<=126 ){.    /
17140 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73  * The common cas
17150 65 20 2a 2f 0a 20 20 20 20 6e 48 64 72 20 2b 3d  e */.    nHdr +=
17160 20 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20   1;.  }else{.   
17170 20 2f 2a 20 52 61 72 65 20 63 61 73 65 20 6f 66   /* Rare case of
17180 20 61 20 72 65 61 6c 6c 79 20 6c 61 72 67 65 20   a really large 
17190 68 65 61 64 65 72 20 2a 2f 0a 20 20 20 20 6e 56  header */.    nV
171a0 61 72 69 6e 74 20 3d 20 73 71 6c 69 74 65 33 56  arint = sqlite3V
171b0 61 72 69 6e 74 4c 65 6e 28 6e 48 64 72 29 3b 0a  arintLen(nHdr);.
171c0 20 20 20 20 6e 48 64 72 20 2b 3d 20 6e 56 61 72      nHdr += nVar
171d0 69 6e 74 3b 0a 20 20 20 20 69 66 28 20 6e 56 61  int;.    if( nVa
171e0 72 69 6e 74 3c 73 71 6c 69 74 65 33 56 61 72 69  rint<sqlite3Vari
171f0 6e 74 4c 65 6e 28 6e 48 64 72 29 20 29 20 6e 48  ntLen(nHdr) ) nH
17200 64 72 2b 2b 3b 0a 20 20 7d 0a 20 20 6e 42 79 74  dr++;.  }.  nByt
17210 65 20 3d 20 6e 48 64 72 2b 6e 44 61 74 61 3b 0a  e = nHdr+nData;.
17220 20 20 69 66 28 20 6e 42 79 74 65 2b 6e 5a 65 72    if( nByte+nZer
17230 6f 3e 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c  o>db->aLimit[SQL
17240 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48  ITE_LIMIT_LENGTH
17250 5d 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f  ] ){.    goto to
17260 6f 5f 62 69 67 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  o_big;.  }..  /*
17270 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 6f   Make sure the o
17280 75 74 70 75 74 20 72 65 67 69 73 74 65 72 20 68  utput register h
17290 61 73 20 61 20 62 75 66 66 65 72 20 6c 61 72 67  as a buffer larg
172a0 65 20 65 6e 6f 75 67 68 20 74 6f 20 73 74 6f 72  e enough to stor
172b0 65 20 0a 20 20 2a 2a 20 74 68 65 20 6e 65 77 20  e .  ** the new 
172c0 72 65 63 6f 72 64 2e 20 54 68 65 20 6f 75 74 70  record. The outp
172d0 75 74 20 72 65 67 69 73 74 65 72 20 28 70 4f 70  ut register (pOp
172e0 2d 3e 70 33 29 20 69 73 20 6e 6f 74 20 61 6c 6c  ->p3) is not all
172f0 6f 77 65 64 20 74 6f 0a 20 20 2a 2a 20 62 65 20  owed to.  ** be 
17300 6f 6e 65 20 6f 66 20 74 68 65 20 69 6e 70 75 74  one of the input
17310 20 72 65 67 69 73 74 65 72 73 20 28 62 65 63 61   registers (beca
17320 75 73 65 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  use the followin
17330 67 20 63 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73  g call to.  ** s
17340 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c 65  qlite3VdbeMemCle
17350 61 72 41 6e 64 52 65 73 69 7a 65 28 29 20 63 6f  arAndResize() co
17360 75 6c 64 20 63 6c 6f 62 62 65 72 20 74 68 65 20  uld clobber the 
17370 76 61 6c 75 65 20 62 65 66 6f 72 65 20 69 74 20  value before it 
17380 69 73 20 75 73 65 64 29 2e 0a 20 20 2a 2f 0a 20  is used)..  */. 
17390 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
173a0 4d 65 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a  MemClearAndResiz
173b0 65 28 70 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79  e(pOut, (int)nBy
173c0 74 65 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  te) ){.    goto 
173d0 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 7a 4e  no_mem;.  }.  zN
173e0 65 77 52 65 63 6f 72 64 20 3d 20 28 75 38 20 2a  ewRecord = (u8 *
173f0 29 70 4f 75 74 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20  )pOut->z;..  /* 
17400 57 72 69 74 65 20 74 68 65 20 72 65 63 6f 72 64  Write the record
17410 20 2a 2f 0a 20 20 69 20 3d 20 70 75 74 56 61 72   */.  i = putVar
17420 69 6e 74 33 32 28 7a 4e 65 77 52 65 63 6f 72 64  int32(zNewRecord
17430 2c 20 6e 48 64 72 29 3b 0a 20 20 6a 20 3d 20 6e  , nHdr);.  j = n
17440 48 64 72 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Hdr;.  assert( p
17450 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b 0a  Data0<=pLast );.
17460 20 20 70 52 65 63 20 3d 20 70 44 61 74 61 30 3b    pRec = pData0;
17470 0a 20 20 64 6f 7b 0a 20 20 20 20 73 65 72 69 61  .  do{.    seria
17480 6c 5f 74 79 70 65 20 3d 20 70 52 65 63 2d 3e 75  l_type = pRec->u
17490 54 65 6d 70 3b 0a 20 20 20 20 2f 2a 20 45 56 49  Temp;.    /* EVI
174a0 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 30 36 35 32  DENCE-OF: R-0652
174b0 39 2d 34 37 33 36 32 20 46 6f 6c 6c 6f 77 69 6e  9-47362 Followin
174c0 67 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e  g the size varin
174d0 74 20 61 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  t are one or mor
174e0 65 0a 20 20 20 20 2a 2a 20 61 64 64 69 74 69 6f  e.    ** additio
174f0 6e 61 6c 20 76 61 72 69 6e 74 73 2c 20 6f 6e 65  nal varints, one
17500 20 70 65 72 20 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a   per column. */.
17510 20 20 20 20 69 20 2b 3d 20 70 75 74 56 61 72 69      i += putVari
17520 6e 74 33 32 28 26 7a 4e 65 77 52 65 63 6f 72 64  nt32(&zNewRecord
17530 5b 69 5d 2c 20 73 65 72 69 61 6c 5f 74 79 70 65  [i], serial_type
17540 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  );            /*
17550 20 73 65 72 69 61 6c 20 74 79 70 65 20 2a 2f 0a   serial type */.
17560 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45 2d      /* EVIDENCE-
17570 4f 46 3a 20 52 2d 36 34 35 33 36 2d 35 31 37 32  OF: R-64536-5172
17580 38 20 54 68 65 20 76 61 6c 75 65 73 20 66 6f 72  8 The values for
17590 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 69 6e 20   each column in 
175a0 74 68 65 20 72 65 63 6f 72 64 0a 20 20 20 20 2a  the record.    *
175b0 2a 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f  * immediately fo
175c0 6c 6c 6f 77 20 74 68 65 20 68 65 61 64 65 72 2e  llow the header.
175d0 20 2a 2f 0a 20 20 20 20 6a 20 2b 3d 20 73 71 6c   */.    j += sql
175e0 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 50 75  ite3VdbeSerialPu
175f0 74 28 26 7a 4e 65 77 52 65 63 6f 72 64 5b 6a 5d  t(&zNewRecord[j]
17600 2c 20 70 52 65 63 2c 20 73 65 72 69 61 6c 5f 74  , pRec, serial_t
17610 79 70 65 29 3b 20 2f 2a 20 63 6f 6e 74 65 6e 74  ype); /* content
17620 20 2a 2f 0a 20 20 7d 77 68 69 6c 65 28 20 28 2b   */.  }while( (+
17630 2b 70 52 65 63 29 3c 3d 70 4c 61 73 74 20 29 3b  +pRec)<=pLast );
17640 0a 20 20 61 73 73 65 72 74 28 20 69 3d 3d 6e 48  .  assert( i==nH
17650 64 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  dr );.  assert( 
17660 6a 3d 3d 6e 42 79 74 65 20 29 3b 0a 0a 20 20 61  j==nByte );..  a
17670 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
17680 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d   && pOp->p3<=(p-
17690 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
176a0 72 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 2d  rsor) );.  pOut-
176b0 3e 6e 20 3d 20 28 69 6e 74 29 6e 42 79 74 65 3b  >n = (int)nByte;
176c0 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
176d0 20 4d 45 4d 5f 42 6c 6f 62 3b 0a 20 20 69 66 28   MEM_Blob;.  if(
176e0 20 6e 5a 65 72 6f 20 29 7b 0a 20 20 20 20 70 4f   nZero ){.    pO
176f0 75 74 2d 3e 75 2e 6e 5a 65 72 6f 20 3d 20 6e 5a  ut->u.nZero = nZ
17700 65 72 6f 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66  ero;.    pOut->f
17710 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 5a 65 72 6f  lags |= MEM_Zero
17720 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e 65 6e  ;.  }.  pOut->en
17730 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
17740 20 20 2f 2a 20 49 6e 20 63 61 73 65 20 74 68 65    /* In case the
17750 20 62 6c 6f 62 20 69 73 20 65 76 65 72 20 63 6f   blob is ever co
17760 6e 76 65 72 74 65 64 20 74 6f 20 74 65 78 74 20  nverted to text 
17770 2a 2f 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52  */.  REGISTER_TR
17780 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4f 75  ACE(pOp->p3, pOu
17790 74 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58  t);.  UPDATE_MAX
177a0 5f 42 4c 4f 42 53 49 5a 45 28 70 4f 75 74 29 3b  _BLOBSIZE(pOut);
177b0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
177c0 4f 70 63 6f 64 65 3a 20 43 6f 75 6e 74 20 50 31  Opcode: Count P1
177d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
177e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 63 6f 75  opsis: r[P2]=cou
177f0 6e 74 28 29 0a 2a 2a 0a 2a 2a 20 53 74 6f 72 65  nt().**.** Store
17800 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65   the number of e
17810 6e 74 72 69 65 73 20 28 61 6e 20 69 6e 74 65 67  ntries (an integ
17820 65 72 20 76 61 6c 75 65 29 20 69 6e 20 74 68 65  er value) in the
17830 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
17840 0a 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20 63 75  .** opened by cu
17850 72 73 6f 72 20 50 31 20 69 6e 20 72 65 67 69 73  rsor P1 in regis
17860 74 65 72 20 50 32 0a 2a 2f 0a 23 69 66 6e 64 65  ter P2.*/.#ifnde
17870 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54  f SQLITE_OMIT_BT
17880 52 45 45 43 4f 55 4e 54 0a 63 61 73 65 20 4f 50  REECOUNT.case OP
17890 5f 43 6f 75 6e 74 3a 20 7b 20 20 20 20 20 20 20  _Count: {       
178a0 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69    /* out2 */.  i
178b0 36 34 20 6e 45 6e 74 72 79 3b 0a 20 20 42 74 43  64 nEntry;.  BtC
178c0 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 0a 20  ursor *pCrsr;.. 
178d0 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
178e0 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43 75 72  r[pOp->p1]->eCur
178f0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
17900 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20 3d  REE );.  pCrsr =
17910 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
17920 31 5d 2d 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a  1]->uc.pCursor;.
17930 20 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20    assert( pCrsr 
17940 29 3b 0a 20 20 6e 45 6e 74 72 79 20 3d 20 30 3b  );.  nEntry = 0;
17950 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e    /* Not needed.
17960 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73    Only used to s
17970 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67  ilence a warning
17980 2e 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69  . */.  rc = sqli
17990 74 65 33 42 74 72 65 65 43 6f 75 6e 74 28 70 43  te3BtreeCount(pC
179a0 72 73 72 2c 20 26 6e 45 6e 74 72 79 29 3b 0a 20  rsr, &nEntry);. 
179b0 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
179c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
179d0 72 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  r;.  pOut = out2
179e0 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
179f0 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
17a00 3d 20 6e 45 6e 74 72 79 3b 0a 20 20 62 72 65 61  = nEntry;.  brea
17a10 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  k;.}.#endif../* 
17a20 4f 70 63 6f 64 65 3a 20 53 61 76 65 70 6f 69 6e  Opcode: Savepoin
17a30 74 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  t P1 * * P4 *.**
17a40 0a 2a 2a 20 4f 70 65 6e 2c 20 72 65 6c 65 61 73  .** Open, releas
17a50 65 20 6f 72 20 72 6f 6c 6c 62 61 63 6b 20 74 68  e or rollback th
17a60 65 20 73 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  e savepoint name
17a70 64 20 62 79 20 70 61 72 61 6d 65 74 65 72 20 50  d by parameter P
17a80 34 2c 20 64 65 70 65 6e 64 69 6e 67 0a 2a 2a 20  4, depending.** 
17a90 6f 6e 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  on the value of 
17aa0 50 31 2e 20 54 6f 20 6f 70 65 6e 20 61 20 6e 65  P1. To open a ne
17ab0 77 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  w savepoint, P1=
17ac0 3d 30 2e 20 54 6f 20 72 65 6c 65 61 73 65 20 28  =0. To release (
17ad0 63 6f 6d 6d 69 74 29 20 61 6e 0a 2a 2a 20 65 78  commit) an.** ex
17ae0 69 73 74 69 6e 67 20 73 61 76 65 70 6f 69 6e 74  isting savepoint
17af0 2c 20 50 31 3d 3d 31 2c 20 6f 72 20 74 6f 20 72  , P1==1, or to r
17b00 6f 6c 6c 62 61 63 6b 20 61 6e 20 65 78 69 73 74  ollback an exist
17b10 69 6e 67 20 73 61 76 65 70 6f 69 6e 74 20 50 31  ing savepoint P1
17b20 3d 3d 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ==2..*/.case OP_
17b30 53 61 76 65 70 6f 69 6e 74 3a 20 7b 0a 20 20 69  Savepoint: {.  i
17b40 6e 74 20 70 31 3b 20 20 20 20 20 20 20 20 20 20  nt p1;          
17b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
17b60 2a 20 56 61 6c 75 65 20 6f 66 20 50 31 20 6f 70  * Value of P1 op
17b70 65 72 61 6e 64 20 2a 2f 0a 20 20 63 68 61 72 20  erand */.  char 
17b80 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
17b90 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
17ba0 6d 65 20 6f 66 20 73 61 76 65 70 6f 69 6e 74 20  me of savepoint 
17bb0 2a 2f 0a 20 20 69 6e 74 20 6e 4e 61 6d 65 3b 0a  */.  int nName;.
17bc0 20 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 4e 65    Savepoint *pNe
17bd0 77 3b 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  w;.  Savepoint *
17be0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 53 61  pSavepoint;.  Sa
17bf0 76 65 70 6f 69 6e 74 20 2a 70 54 6d 70 3b 0a 20  vepoint *pTmp;. 
17c00 20 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b   int iSavepoint;
17c10 0a 20 20 69 6e 74 20 69 69 3b 0a 0a 20 20 70 31  .  int ii;..  p1
17c20 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 7a 4e   = pOp->p1;.  zN
17c30 61 6d 65 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b  ame = pOp->p4.z;
17c40 0a 0a 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68  ..  /* Assert th
17c50 61 74 20 74 68 65 20 70 31 20 70 61 72 61 6d 65  at the p1 parame
17c60 74 65 72 20 69 73 20 76 61 6c 69 64 2e 20 41 6c  ter is valid. Al
17c70 73 6f 20 74 68 61 74 20 69 66 20 74 68 65 72 65  so that if there
17c80 20 69 73 20 6e 6f 20 6f 70 65 6e 0a 20 20 2a 2a   is no open.  **
17c90 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74 68   transaction, th
17ca0 65 6e 20 74 68 65 72 65 20 63 61 6e 6e 6f 74 20  en there cannot 
17cb0 62 65 20 61 6e 79 20 73 61 76 65 70 6f 69 6e 74  be any savepoint
17cc0 73 2e 20 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  s. .  */.  asser
17cd0 74 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e  t( db->pSavepoin
17ce0 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 61 75 74 6f  t==0 || db->auto
17cf0 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20 61  Commit==0 );.  a
17d00 73 73 65 72 74 28 20 70 31 3d 3d 53 41 56 45 50  ssert( p1==SAVEP
17d10 4f 49 4e 54 5f 42 45 47 49 4e 7c 7c 70 31 3d 3d  OINT_BEGIN||p1==
17d20 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
17d30 45 7c 7c 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54  E||p1==SAVEPOINT
17d40 5f 52 4f 4c 4c 42 41 43 4b 20 29 3b 0a 20 20 61  _ROLLBACK );.  a
17d50 73 73 65 72 74 28 20 64 62 2d 3e 70 53 61 76 65  ssert( db->pSave
17d60 70 6f 69 6e 74 20 7c 7c 20 64 62 2d 3e 69 73 54  point || db->isT
17d70 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f  ransactionSavepo
17d80 69 6e 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  int==0 );.  asse
17d90 72 74 28 20 63 68 65 63 6b 53 61 76 65 70 6f 69  rt( checkSavepoi
17da0 6e 74 43 6f 75 6e 74 28 64 62 29 20 29 3b 0a 20  ntCount(db) );. 
17db0 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52   assert( p->bIsR
17dc0 65 61 64 65 72 20 29 3b 0a 0a 20 20 69 66 28 20  eader );..  if( 
17dd0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 42 45  p1==SAVEPOINT_BE
17de0 47 49 4e 20 29 7b 0a 20 20 20 20 69 66 28 20 64  GIN ){.    if( d
17df0 62 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20  b->nVdbeWrite>0 
17e00 29 7b 0a 20 20 20 20 20 20 2f 2a 20 41 20 6e 65  ){.      /* A ne
17e10 77 20 73 61 76 65 70 6f 69 6e 74 20 63 61 6e 6e  w savepoint cann
17e20 6f 74 20 62 65 20 63 72 65 61 74 65 64 20 69 66  ot be created if
17e30 20 74 68 65 72 65 20 61 72 65 20 61 63 74 69 76   there are activ
17e40 65 20 77 72 69 74 65 20 0a 20 20 20 20 20 20 2a  e write .      *
17e50 2a 20 73 74 61 74 65 6d 65 6e 74 73 20 28 69 2e  * statements (i.
17e60 65 2e 20 6f 70 65 6e 20 72 65 61 64 2f 77 72 69  e. open read/wri
17e70 74 65 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 62  te incremental b
17e80 6c 6f 62 20 68 61 6e 64 6c 65 73 29 2e 0a 20 20  lob handles)..  
17e90 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c      */.      sql
17ea0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
17eb0 20 22 63 61 6e 6e 6f 74 20 6f 70 65 6e 20 73 61   "cannot open sa
17ec0 76 65 70 6f 69 6e 74 20 2d 20 53 51 4c 20 73 74  vepoint - SQL st
17ed0 61 74 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67  atements in prog
17ee0 72 65 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63  ress");.      rc
17ef0 20 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a   = SQLITE_BUSY;.
17f00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
17f10 20 6e 4e 61 6d 65 20 3d 20 73 71 6c 69 74 65 33   nName = sqlite3
17f20 53 74 72 6c 65 6e 33 30 28 7a 4e 61 6d 65 29 3b  Strlen30(zName);
17f30 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
17f40 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
17f50 4c 45 0a 20 20 20 20 20 20 2f 2a 20 54 68 69 73  LE.      /* This
17f60 20 63 61 6c 6c 20 69 73 20 4f 6b 20 65 76 65 6e   call is Ok even
17f70 20 69 66 20 74 68 69 73 20 73 61 76 65 70 6f 69   if this savepoi
17f80 6e 74 20 69 73 20 61 63 74 75 61 6c 6c 79 20 61  nt is actually a
17f90 20 74 72 61 6e 73 61 63 74 69 6f 6e 0a 20 20 20   transaction.   
17fa0 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e 74 20     ** savepoint 
17fb0 28 61 6e 64 20 74 68 65 72 65 66 6f 72 65 20 73  (and therefore s
17fc0 68 6f 75 6c 64 20 6e 6f 74 20 70 72 6f 6d 70 74  hould not prompt
17fd0 20 78 53 61 76 65 70 6f 69 6e 74 28 29 29 20 63   xSavepoint()) c
17fe0 61 6c 6c 62 61 63 6b 73 2e 0a 20 20 20 20 20 20  allbacks..      
17ff0 2a 2a 20 49 66 20 74 68 69 73 20 69 73 20 61 20  ** If this is a 
18000 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65  transaction save
18010 70 6f 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 6e  point being open
18020 65 64 2c 20 69 74 20 69 73 20 67 75 61 72 61 6e  ed, it is guaran
18030 74 65 65 64 0a 20 20 20 20 20 20 2a 2a 20 74 68  teed.      ** th
18040 61 74 20 74 68 65 20 64 62 2d 3e 61 56 54 72 61  at the db->aVTra
18050 6e 73 5b 5d 20 61 72 72 61 79 20 69 73 20 65 6d  ns[] array is em
18060 70 74 79 2e 20 20 2a 2f 0a 20 20 20 20 20 20 61  pty.  */.      a
18070 73 73 65 72 74 28 20 64 62 2d 3e 61 75 74 6f 43  ssert( db->autoC
18080 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e  ommit==0 || db->
18090 6e 56 54 72 61 6e 73 3d 3d 30 20 29 3b 0a 20 20  nVTrans==0 );.  
180a0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
180b0 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 64 62  VtabSavepoint(db
180c0 2c 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49  , SAVEPOINT_BEGI
180d0 4e 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N,.             
180e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
180f0 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e     db->nStatemen
18100 74 2b 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74  t+db->nSavepoint
18110 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 21  );.      if( rc!
18120 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74  =SQLITE_OK ) got
18130 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
18140 72 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  rror;.#endif..  
18150 20 20 20 20 2f 2a 20 43 72 65 61 74 65 20 61 20      /* Create a 
18160 6e 65 77 20 73 61 76 65 70 6f 69 6e 74 20 73 74  new savepoint st
18170 72 75 63 74 75 72 65 2e 20 2a 2f 0a 20 20 20 20  ructure. */.    
18180 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
18190 44 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62  DbMallocRawNN(db
181a0 2c 20 73 69 7a 65 6f 66 28 53 61 76 65 70 6f 69  , sizeof(Savepoi
181b0 6e 74 29 2b 6e 4e 61 6d 65 2b 31 29 3b 0a 20 20  nt)+nName+1);.  
181c0 20 20 20 20 69 66 28 20 70 4e 65 77 20 29 7b 0a      if( pNew ){.
181d0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 7a 4e          pNew->zN
181e0 61 6d 65 20 3d 20 28 63 68 61 72 20 2a 29 26 70  ame = (char *)&p
181f0 4e 65 77 5b 31 5d 3b 0a 20 20 20 20 20 20 20 20  New[1];.        
18200 6d 65 6d 63 70 79 28 70 4e 65 77 2d 3e 7a 4e 61  memcpy(pNew->zNa
18210 6d 65 2c 20 7a 4e 61 6d 65 2c 20 6e 4e 61 6d 65  me, zName, nName
18220 2b 31 29 3b 0a 20 20 20 20 0a 20 20 20 20 20 20  +1);.    .      
18230 20 20 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73    /* If there is
18240 20 6e 6f 20 6f 70 65 6e 20 74 72 61 6e 73 61 63   no open transac
18250 74 69 6f 6e 2c 20 74 68 65 6e 20 6d 61 72 6b 20  tion, then mark 
18260 74 68 69 73 20 61 73 20 61 20 73 70 65 63 69 61  this as a specia
18270 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 74 72  l.        ** "tr
18280 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70 6f  ansaction savepo
18290 69 6e 74 22 2e 20 2a 2f 0a 20 20 20 20 20 20 20  int". */.       
182a0 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d   if( db->autoCom
182b0 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  mit ){.         
182c0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
182d0 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 64  = 0;.          d
182e0 62 2d 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  b->isTransaction
182f0 53 61 76 65 70 6f 69 6e 74 20 3d 20 31 3b 0a 20  Savepoint = 1;. 
18300 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
18310 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 53 61 76          db->nSav
18320 65 70 6f 69 6e 74 2b 2b 3b 0a 20 20 20 20 20 20  epoint++;.      
18330 20 20 7d 0a 0a 20 20 20 20 20 20 20 20 2f 2a 20    }..        /* 
18340 4c 69 6e 6b 20 74 68 65 20 6e 65 77 20 73 61 76  Link the new sav
18350 65 70 6f 69 6e 74 20 69 6e 74 6f 20 74 68 65 20  epoint into the 
18360 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 27  database handle'
18370 73 20 6c 69 73 74 2e 20 2a 2f 0a 20 20 20 20 20  s list. */.     
18380 20 20 20 70 4e 65 77 2d 3e 70 4e 65 78 74 20 3d     pNew->pNext =
18390 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b   db->pSavepoint;
183a0 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53 61  .        db->pSa
183b0 76 65 70 6f 69 6e 74 20 3d 20 70 4e 65 77 3b 0a  vepoint = pNew;.
183c0 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e 44          pNew->nD
183d0 65 66 65 72 72 65 64 43 6f 6e 73 20 3d 20 64 62  eferredCons = db
183e0 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b  ->nDeferredCons;
183f0 0a 20 20 20 20 20 20 20 20 70 4e 65 77 2d 3e 6e  .        pNew->n
18400 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
18410 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49  = db->nDeferredI
18420 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20 7d 0a  mmCons;.      }.
18430 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20      }.  }else{. 
18440 20 20 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20     iSavepoint = 
18450 30 3b 0a 0a 20 20 20 20 2f 2a 20 46 69 6e 64 20  0;..    /* Find 
18460 74 68 65 20 6e 61 6d 65 64 20 73 61 76 65 70 6f  the named savepo
18470 69 6e 74 2e 20 49 66 20 74 68 65 72 65 20 69 73  int. If there is
18480 20 6e 6f 20 73 75 63 68 20 73 61 76 65 70 6f 69   no such savepoi
18490 6e 74 2c 20 74 68 65 6e 20 61 6e 0a 20 20 20 20  nt, then an.    
184a0 2a 2a 20 61 6e 20 65 72 72 6f 72 20 69 73 20 72  ** an error is r
184b0 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20 75  eturned to the u
184c0 73 65 72 2e 20 20 2a 2f 0a 20 20 20 20 66 6f 72  ser.  */.    for
184d0 28 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69  (.      pSavepoi
184e0 6e 74 20 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f  nt = db->pSavepo
184f0 69 6e 74 3b 20 0a 20 20 20 20 20 20 70 53 61 76  int; .      pSav
18500 65 70 6f 69 6e 74 20 26 26 20 73 71 6c 69 74 65  epoint && sqlite
18510 33 53 74 72 49 43 6d 70 28 70 53 61 76 65 70 6f  3StrICmp(pSavepo
18520 69 6e 74 2d 3e 7a 4e 61 6d 65 2c 20 7a 4e 61 6d  int->zName, zNam
18530 65 29 3b 0a 20 20 20 20 20 20 70 53 61 76 65 70  e);.      pSavep
18540 6f 69 6e 74 20 3d 20 70 53 61 76 65 70 6f 69 6e  oint = pSavepoin
18550 74 2d 3e 70 4e 65 78 74 0a 20 20 20 20 29 7b 0a  t->pNext.    ){.
18560 20 20 20 20 20 20 69 53 61 76 65 70 6f 69 6e 74        iSavepoint
18570 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  ++;.    }.    if
18580 28 20 21 70 53 61 76 65 70 6f 69 6e 74 20 29 7b  ( !pSavepoint ){
18590 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
185a0 62 65 45 72 72 6f 72 28 70 2c 20 22 6e 6f 20 73  beError(p, "no s
185b0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 3a 20 25  uch savepoint: %
185c0 73 22 2c 20 7a 4e 61 6d 65 29 3b 0a 20 20 20 20  s", zName);.    
185d0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
185e0 52 4f 52 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  ROR;.    }else i
185f0 66 28 20 64 62 2d 3e 6e 56 64 62 65 57 72 69 74  f( db->nVdbeWrit
18600 65 3e 30 20 26 26 20 70 31 3d 3d 53 41 56 45 50  e>0 && p1==SAVEP
18610 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a  OINT_RELEASE ){.
18620 20 20 20 20 20 20 2f 2a 20 49 74 20 69 73 20 6e        /* It is n
18630 6f 74 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 72  ot possible to r
18640 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69 74 29 20  elease (commit) 
18650 61 20 73 61 76 65 70 6f 69 6e 74 20 69 66 20 74  a savepoint if t
18660 68 65 72 65 20 61 72 65 20 0a 20 20 20 20 20 20  here are .      
18670 2a 2a 20 61 63 74 69 76 65 20 77 72 69 74 65 20  ** active write 
18680 73 74 61 74 65 6d 65 6e 74 73 2e 0a 20 20 20 20  statements..    
18690 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74    */.      sqlit
186a0 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22  e3VdbeError(p, "
186b0 63 61 6e 6e 6f 74 20 72 65 6c 65 61 73 65 20 73  cannot release s
186c0 61 76 65 70 6f 69 6e 74 20 2d 20 22 0a 20 20 20  avepoint - ".   
186d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
186e0 20 20 20 20 20 20 20 22 53 51 4c 20 73 74 61 74         "SQL stat
186f0 65 6d 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65  ements in progre
18700 73 73 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d  ss");.      rc =
18710 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18720 20 20 7d 65 6c 73 65 7b 0a 0a 20 20 20 20 20 20    }else{..      
18730 2f 2a 20 44 65 74 65 72 6d 69 6e 65 20 77 68 65  /* Determine whe
18740 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 69 73  ther or not this
18750 20 69 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f   is a transactio
18760 6e 20 73 61 76 65 70 6f 69 6e 74 2e 20 49 66 20  n savepoint. If 
18770 73 6f 2c 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64  so,.      ** and
18780 20 74 68 69 73 20 69 73 20 61 20 52 45 4c 45 41   this is a RELEA
18790 53 45 20 63 6f 6d 6d 61 6e 64 2c 20 74 68 65 6e  SE command, then
187a0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
187b0 6e 73 61 63 74 69 6f 6e 20 0a 20 20 20 20 20 20  nsaction .      
187c0 2a 2a 20 69 73 20 63 6f 6d 6d 69 74 74 65 64 2e  ** is committed.
187d0 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20   .      */.     
187e0 20 69 6e 74 20 69 73 54 72 61 6e 73 61 63 74 69   int isTransacti
187f0 6f 6e 20 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d  on = pSavepoint-
18800 3e 70 4e 65 78 74 3d 3d 30 20 26 26 20 64 62 2d  >pNext==0 && db-
18810 3e 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61  >isTransactionSa
18820 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20 20 20 69  vepoint;.      i
18830 66 28 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  f( isTransaction
18840 20 26 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   && p1==SAVEPOIN
18850 54 5f 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20  T_RELEASE ){.   
18860 20 20 20 20 20 69 66 28 20 28 72 63 20 3d 20 73       if( (rc = s
18870 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
18880 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
18890 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
188a0 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
188b0 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  n;.        }.   
188c0 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f 6d       db->autoCom
188d0 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 20 20 20  mit = 1;.       
188e0 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62 65   if( sqlite3Vdbe
188f0 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45 5f  Halt(p)==SQLITE_
18900 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
18910 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28    p->pc = (int)(
18920 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20  pOp - aOp);.    
18930 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
18940 6d 6d 69 74 20 3d 20 30 3b 0a 20 20 20 20 20 20  mmit = 0;.      
18950 20 20 20 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d      p->rc = rc =
18960 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20   SQLITE_BUSY;.  
18970 20 20 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62          goto vdb
18980 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20  e_return;.      
18990 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d 3e    }.        db->
189a0 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76  isTransactionSav
189b0 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 20 20 20 20  epoint = 0;.    
189c0 20 20 20 20 72 63 20 3d 20 70 2d 3e 72 63 3b 0a      rc = p->rc;.
189d0 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
189e0 20 20 20 20 20 69 6e 74 20 69 73 53 63 68 65 6d       int isSchem
189f0 61 43 68 61 6e 67 65 3b 0a 20 20 20 20 20 20 20  aChange;.       
18a00 20 69 53 61 76 65 70 6f 69 6e 74 20 3d 20 64 62   iSavepoint = db
18a10 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2d 20 69  ->nSavepoint - i
18a20 53 61 76 65 70 6f 69 6e 74 20 2d 20 31 3b 0a 20  Savepoint - 1;. 
18a30 20 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53         if( p1==S
18a40 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
18a50 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  K ){.          i
18a60 73 53 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20  sSchemaChange = 
18a70 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  (db->flags & SQL
18a80 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
18a90 73 29 21 3d 30 3b 0a 20 20 20 20 20 20 20 20 20  s)!=0;.         
18aa0 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
18ab0 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
18ac0 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
18ad0 71 6c 69 74 65 33 42 74 72 65 65 54 72 69 70 41  qlite3BtreeTripA
18ae0 6c 6c 43 75 72 73 6f 72 73 28 64 62 2d 3e 61 44  llCursors(db->aD
18af0 62 5b 69 69 5d 2e 70 42 74 2c 0a 20 20 20 20 20  b[ii].pBt,.     
18b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b20 20 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f 52    SQLITE_ABORT_R
18b30 4f 4c 4c 42 41 43 4b 2c 0a 20 20 20 20 20 20 20  OLLBACK,.       
18b40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18b60 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65 3d 3d  isSchemaChange==
18b70 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
18b80 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
18b90 4b 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  K ) goto abort_d
18ba0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20  ue_to_error;.   
18bb0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
18bc0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18bd0 20 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65    isSchemaChange
18be0 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a   = 0;.        }.
18bf0 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30          for(ii=0
18c00 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
18c10 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 72  ++){.          r
18c20 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
18c30 53 61 76 65 70 6f 69 6e 74 28 64 62 2d 3e 61 44  Savepoint(db->aD
18c40 62 5b 69 69 5d 2e 70 42 74 2c 20 70 31 2c 20 69  b[ii].pBt, p1, i
18c50 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20  Savepoint);.    
18c60 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
18c70 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
18c80 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
18c90 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
18ca0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
18cb0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
18cc0 28 20 69 73 53 63 68 65 6d 61 43 68 61 6e 67 65  ( isSchemaChange
18cd0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
18ce0 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
18cf0 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
18d00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
18d10 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
18d20 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
18d30 64 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20 64  db);.          d
18d40 62 2d 3e 66 6c 61 67 73 20 3d 20 28 64 62 2d 3e  b->flags = (db->
18d50 66 6c 61 67 73 20 7c 20 53 51 4c 49 54 45 5f 49  flags | SQLITE_I
18d60 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 3b 0a 20  nternChanges);. 
18d70 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
18d80 0a 20 20 0a 20 20 20 20 20 20 2f 2a 20 52 65 67  .  .      /* Reg
18d90 61 72 64 6c 65 73 73 20 6f 66 20 77 68 65 74 68  ardless of wheth
18da0 65 72 20 74 68 69 73 20 69 73 20 61 20 52 45 4c  er this is a REL
18db0 45 41 53 45 20 6f 72 20 52 4f 4c 4c 42 41 43 4b  EASE or ROLLBACK
18dc0 2c 20 64 65 73 74 72 6f 79 20 61 6c 6c 20 0a 20  , destroy all . 
18dd0 20 20 20 20 20 2a 2a 20 73 61 76 65 70 6f 69 6e       ** savepoin
18de0 74 73 20 6e 65 73 74 65 64 20 69 6e 73 69 64 65  ts nested inside
18df0 20 6f 66 20 74 68 65 20 73 61 76 65 70 6f 69 6e   of the savepoin
18e00 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65 64  t being operated
18e10 20 6f 6e 2e 20 2a 2f 0a 20 20 20 20 20 20 77 68   on. */.      wh
18e20 69 6c 65 28 20 64 62 2d 3e 70 53 61 76 65 70 6f  ile( db->pSavepo
18e30 69 6e 74 21 3d 70 53 61 76 65 70 6f 69 6e 74 20  int!=pSavepoint 
18e40 29 7b 0a 20 20 20 20 20 20 20 20 70 54 6d 70 20  ){.        pTmp 
18e50 3d 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  = db->pSavepoint
18e60 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
18e70 61 76 65 70 6f 69 6e 74 20 3d 20 70 54 6d 70 2d  avepoint = pTmp-
18e80 3e 70 4e 65 78 74 3b 0a 20 20 20 20 20 20 20 20  >pNext;.        
18e90 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
18ea0 2c 20 70 54 6d 70 29 3b 0a 20 20 20 20 20 20 20  , pTmp);.       
18eb0 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 2d   db->nSavepoint-
18ec0 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
18ed0 20 20 2f 2a 20 49 66 20 69 74 20 69 73 20 61 20    /* If it is a 
18ee0 52 45 4c 45 41 53 45 2c 20 74 68 65 6e 20 64 65  RELEASE, then de
18ef0 73 74 72 6f 79 20 74 68 65 20 73 61 76 65 70 6f  stroy the savepo
18f00 69 6e 74 20 62 65 69 6e 67 20 6f 70 65 72 61 74  int being operat
18f10 65 64 20 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20  ed on .      ** 
18f20 74 6f 6f 2e 20 49 66 20 69 74 20 69 73 20 61 20  too. If it is a 
18f30 52 4f 4c 4c 42 41 43 4b 20 54 4f 2c 20 74 68 65  ROLLBACK TO, the
18f40 6e 20 73 65 74 20 74 68 65 20 6e 75 6d 62 65 72  n set the number
18f50 20 6f 66 20 64 65 66 65 72 72 65 64 20 0a 20 20   of deferred .  
18f60 20 20 20 20 2a 2a 20 63 6f 6e 73 74 72 61 69 6e      ** constrain
18f70 74 20 76 69 6f 6c 61 74 69 6f 6e 73 20 70 72 65  t violations pre
18f80 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61  sent in the data
18f90 62 61 73 65 20 74 6f 20 74 68 65 20 76 61 6c 75  base to the valu
18fa0 65 20 73 74 6f 72 65 64 0a 20 20 20 20 20 20 2a  e stored.      *
18fb0 2a 20 77 68 65 6e 20 74 68 65 20 73 61 76 65 70  * when the savep
18fc0 6f 69 6e 74 20 77 61 73 20 63 72 65 61 74 65 64  oint was created
18fd0 2e 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  .  */.      if( 
18fe0 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45  p1==SAVEPOINT_RE
18ff0 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20  LEASE ){.       
19000 20 61 73 73 65 72 74 28 20 70 53 61 76 65 70 6f   assert( pSavepo
19010 69 6e 74 3d 3d 64 62 2d 3e 70 53 61 76 65 70 6f  int==db->pSavepo
19020 69 6e 74 20 29 3b 0a 20 20 20 20 20 20 20 20 64  int );.        d
19030 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 3d 20  b->pSavepoint = 
19040 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
19050 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
19060 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 53 61  e3DbFree(db, pSa
19070 76 65 70 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20  vepoint);.      
19080 20 20 69 66 28 20 21 69 73 54 72 61 6e 73 61 63    if( !isTransac
19090 74 69 6f 6e 20 29 7b 0a 20 20 20 20 20 20 20 20  tion ){.        
190a0 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74    db->nSavepoint
190b0 2d 2d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  --;.        }.  
190c0 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
190d0 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64     db->nDeferred
190e0 43 6f 6e 73 20 3d 20 70 53 61 76 65 70 6f 69 6e  Cons = pSavepoin
190f0 74 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  t->nDeferredCons
19100 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6e 44  ;.        db->nD
19110 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d  eferredImmCons =
19120 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44 65   pSavepoint->nDe
19130 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
19140 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 69 66       }..      if
19150 28 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e  ( !isTransaction
19160 20 7c 7c 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e   || p1==SAVEPOIN
19170 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a 20 20  T_ROLLBACK ){.  
19180 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
19190 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28  e3VtabSavepoint(
191a0 64 62 2c 20 70 31 2c 20 69 53 61 76 65 70 6f 69  db, p1, iSavepoi
191b0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
191c0 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc!=SQLITE_OK )
191d0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
191e0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20  to_error;.      
191f0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  }.    }.  }.  if
19200 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
19210 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
19220 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
19230 4f 70 63 6f 64 65 3a 20 41 75 74 6f 43 6f 6d 6d  Opcode: AutoComm
19240 69 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  it P1 P2 * * *.*
19250 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 64 61 74  *.** Set the dat
19260 61 62 61 73 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  abase auto-commi
19270 74 20 66 6c 61 67 20 74 6f 20 50 31 20 28 31 20  t flag to P1 (1 
19280 6f 72 20 30 29 2e 20 49 66 20 50 32 20 69 73 20  or 0). If P2 is 
19290 74 72 75 65 2c 20 72 6f 6c 6c 0a 2a 2a 20 62 61  true, roll.** ba
192a0 63 6b 20 61 6e 79 20 63 75 72 72 65 6e 74 6c 79  ck any currently
192b0 20 61 63 74 69 76 65 20 62 74 72 65 65 20 74 72   active btree tr
192c0 61 6e 73 61 63 74 69 6f 6e 73 2e 20 49 66 20 74  ansactions. If t
192d0 68 65 72 65 20 61 72 65 20 61 6e 79 20 61 63 74  here are any act
192e0 69 76 65 0a 2a 2a 20 56 4d 73 20 28 61 70 61 72  ive.** VMs (apar
192f0 74 20 66 72 6f 6d 20 74 68 69 73 20 6f 6e 65 29  t from this one)
19300 2c 20 74 68 65 6e 20 61 20 52 4f 4c 4c 42 41 43  , then a ROLLBAC
19310 4b 20 66 61 69 6c 73 2e 20 20 41 20 43 4f 4d 4d  K fails.  A COMM
19320 49 54 20 66 61 69 6c 73 20 69 66 0a 2a 2a 20 74  IT fails if.** t
19330 68 65 72 65 20 61 72 65 20 61 63 74 69 76 65 20  here are active 
19340 77 72 69 74 69 6e 67 20 56 4d 73 20 6f 72 20 61  writing VMs or a
19350 63 74 69 76 65 20 56 4d 73 20 74 68 61 74 20 75  ctive VMs that u
19360 73 65 20 73 68 61 72 65 64 20 63 61 63 68 65 2e  se shared cache.
19370 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74  .**.** This inst
19380 72 75 63 74 69 6f 6e 20 63 61 75 73 65 73 20 74  ruction causes t
19390 68 65 20 56 4d 20 74 6f 20 68 61 6c 74 2e 0a 2a  he VM to halt..*
193a0 2f 0a 63 61 73 65 20 4f 50 5f 41 75 74 6f 43 6f  /.case OP_AutoCo
193b0 6d 6d 69 74 3a 20 7b 0a 20 20 69 6e 74 20 64 65  mmit: {.  int de
193c0 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3b  siredAutoCommit;
193d0 0a 20 20 69 6e 74 20 69 52 6f 6c 6c 62 61 63 6b  .  int iRollback
193e0 3b 0a 0a 20 20 64 65 73 69 72 65 64 41 75 74 6f  ;..  desiredAuto
193f0 43 6f 6d 6d 69 74 20 3d 20 70 4f 70 2d 3e 70 31  Commit = pOp->p1
19400 3b 0a 20 20 69 52 6f 6c 6c 62 61 63 6b 20 3d 20  ;.  iRollback = 
19410 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72  pOp->p2;.  asser
19420 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
19430 6d 6d 69 74 3d 3d 31 20 7c 7c 20 64 65 73 69 72  mmit==1 || desir
19440 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  edAutoCommit==0 
19450 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65 73  );.  assert( des
19460 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d 3d  iredAutoCommit==
19470 31 20 7c 7c 20 69 52 6f 6c 6c 62 61 63 6b 3d 3d  1 || iRollback==
19480 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  0 );.  assert( d
19490 62 2d 3e 6e 56 64 62 65 41 63 74 69 76 65 3e 30  b->nVdbeActive>0
194a0 20 29 3b 20 20 2f 2a 20 41 74 20 6c 65 61 73 74   );  /* At least
194b0 20 74 68 69 73 20 6f 6e 65 20 56 4d 20 69 73 20   this one VM is 
194c0 61 63 74 69 76 65 20 2a 2f 0a 20 20 61 73 73 65  active */.  asse
194d0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
194e0 20 29 3b 0a 0a 20 20 69 66 28 20 64 65 73 69 72   );..  if( desir
194f0 65 64 41 75 74 6f 43 6f 6d 6d 69 74 21 3d 64 62  edAutoCommit!=db
19500 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
19510 20 20 20 20 69 66 28 20 69 52 6f 6c 6c 62 61 63      if( iRollbac
19520 6b 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  k ){.      asser
19530 74 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  t( desiredAutoCo
19540 6d 6d 69 74 3d 3d 31 20 29 3b 0a 20 20 20 20 20  mmit==1 );.     
19550 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
19560 41 6c 6c 28 64 62 2c 20 53 51 4c 49 54 45 5f 41  All(db, SQLITE_A
19570 42 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 29 3b 0a  BORT_ROLLBACK);.
19580 20 20 20 20 20 20 64 62 2d 3e 61 75 74 6f 43 6f        db->autoCo
19590 6d 6d 69 74 20 3d 20 31 3b 0a 20 20 20 20 7d 65  mmit = 1;.    }e
195a0 6c 73 65 20 69 66 28 20 64 65 73 69 72 65 64 41  lse if( desiredA
195b0 75 74 6f 43 6f 6d 6d 69 74 20 26 26 20 64 62 2d  utoCommit && db-
195c0 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 29 7b  >nVdbeWrite>0 ){
195d0 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 69  .      /* If thi
195e0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 6d  s instruction im
195f0 70 6c 65 6d 65 6e 74 73 20 61 20 43 4f 4d 4d 49  plements a COMMI
19600 54 20 61 6e 64 20 6f 74 68 65 72 20 56 4d 73 20  T and other VMs 
19610 61 72 65 20 77 72 69 74 69 6e 67 0a 20 20 20 20  are writing.    
19620 20 20 2a 2a 20 72 65 74 75 72 6e 20 61 6e 20 65    ** return an e
19630 72 72 6f 72 20 69 6e 64 69 63 61 74 69 6e 67 20  rror indicating 
19640 74 68 61 74 20 74 68 65 20 6f 74 68 65 72 20 56  that the other V
19650 4d 73 20 6d 75 73 74 20 63 6f 6d 70 6c 65 74 65  Ms must complete
19660 20 66 69 72 73 74 2e 20 0a 20 20 20 20 20 20 2a   first. .      *
19670 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
19680 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
19690 6e 6f 74 20 63 6f 6d 6d 69 74 20 74 72 61 6e 73  not commit trans
196a0 61 63 74 69 6f 6e 20 2d 20 22 0a 20 20 20 20 20  action - ".     
196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196c0 20 20 20 20 20 22 53 51 4c 20 73 74 61 74 65 6d       "SQL statem
196d0 65 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ents in progress
196e0 22 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  ");.      rc = S
196f0 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20  QLITE_BUSY;.    
19700 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
19710 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
19720 65 6c 73 65 20 69 66 28 20 28 72 63 20 3d 20 73  else if( (rc = s
19730 71 6c 69 74 65 33 56 64 62 65 43 68 65 63 6b 46  qlite3VdbeCheckF
19740 6b 28 70 2c 20 31 29 29 21 3d 53 51 4c 49 54 45  k(p, 1))!=SQLITE
19750 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  _OK ){.      got
19760 6f 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20  o vdbe_return;. 
19770 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
19780 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
19790 20 28 75 38 29 64 65 73 69 72 65 64 41 75 74 6f   (u8)desiredAuto
197a0 43 6f 6d 6d 69 74 3b 0a 20 20 20 20 7d 0a 20 20  Commit;.    }.  
197b0 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
197c0 65 48 61 6c 74 28 70 29 3d 3d 53 51 4c 49 54 45  eHalt(p)==SQLITE
197d0 5f 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 70  _BUSY ){.      p
197e0 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70  ->pc = (int)(pOp
197f0 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 64   - aOp);.      d
19800 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20  b->autoCommit = 
19810 28 75 38 29 28 31 2d 64 65 73 69 72 65 64 41 75  (u8)(1-desiredAu
19820 74 6f 43 6f 6d 6d 69 74 29 3b 0a 20 20 20 20 20  toCommit);.     
19830 20 70 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51   p->rc = rc = SQ
19840 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20  LITE_BUSY;.     
19850 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72   goto vdbe_retur
19860 6e 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61 73 73  n;.    }.    ass
19870 65 72 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d  ert( db->nStatem
19880 65 6e 74 3d 3d 30 20 29 3b 0a 20 20 20 20 73 71  ent==0 );.    sq
19890 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f  lite3CloseSavepo
198a0 69 6e 74 73 28 64 62 29 3b 0a 20 20 20 20 69 66  ints(db);.    if
198b0 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
198c0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d  OK ){.      rc =
198d0 20 53 51 4c 49 54 45 5f 44 4f 4e 45 3b 0a 20 20   SQLITE_DONE;.  
198e0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 72    }else{.      r
198f0 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
19900 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
19910 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19920 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74  }else{.    sqlit
19930 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c 0a 20  e3VdbeError(p,. 
19940 20 20 20 20 20 20 20 28 21 64 65 73 69 72 65 64         (!desired
19950 41 75 74 6f 43 6f 6d 6d 69 74 29 3f 22 63 61 6e  AutoCommit)?"can
19960 6e 6f 74 20 73 74 61 72 74 20 61 20 74 72 61 6e  not start a tran
19970 73 61 63 74 69 6f 6e 20 77 69 74 68 69 6e 20 61  saction within a
19980 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 3a 28 0a   transaction":(.
19990 20 20 20 20 20 20 20 20 28 69 52 6f 6c 6c 62 61          (iRollba
199a0 63 6b 29 3f 22 63 61 6e 6e 6f 74 20 72 6f 6c 6c  ck)?"cannot roll
199b0 62 61 63 6b 20 2d 20 6e 6f 20 74 72 61 6e 73 61  back - no transa
199c0 63 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22  ction is active"
199d0 3a 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :.              
199e0 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 6f 6d       "cannot com
199f0 6d 69 74 20 2d 20 6e 6f 20 74 72 61 6e 73 61 63  mit - no transac
19a00 74 69 6f 6e 20 69 73 20 61 63 74 69 76 65 22 29  tion is active")
19a10 29 3b 0a 20 20 20 20 20 20 20 20 20 0a 20 20 20  );.         .   
19a20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52   rc = SQLITE_ERR
19a30 4f 52 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f  OR;.    goto abo
19a40 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
19a50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
19a60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 54 72 61 6e  ./* Opcode: Tran
19a70 73 61 63 74 69 6f 6e 20 50 31 20 50 32 20 50 33  saction P1 P2 P3
19a80 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 42 65 67   P4 P5.**.** Beg
19a90 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
19aa0 20 6f 6e 20 64 61 74 61 62 61 73 65 20 50 31 20   on database P1 
19ab0 69 66 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  if a transaction
19ac0 20 69 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 0a   is not already.
19ad0 2a 2a 20 61 63 74 69 76 65 2e 0a 2a 2a 20 49 66  ** active..** If
19ae0 20 50 32 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c   P2 is non-zero,
19af0 20 74 68 65 6e 20 61 20 77 72 69 74 65 2d 74 72   then a write-tr
19b00 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 73 74 61  ansaction is sta
19b10 72 74 65 64 2c 20 6f 72 20 69 66 20 61 20 0a 2a  rted, or if a .*
19b20 2a 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  * read-transacti
19b30 6f 6e 20 69 73 20 61 6c 72 65 61 64 79 20 61 63  on is already ac
19b40 74 69 76 65 2c 20 69 74 20 69 73 20 75 70 67 72  tive, it is upgr
19b50 61 64 65 64 20 74 6f 20 61 20 77 72 69 74 65 2d  aded to a write-
19b60 74 72 61 6e 73 61 63 74 69 6f 6e 2e 0a 2a 2a 20  transaction..** 
19b70 49 66 20 50 32 20 69 73 20 7a 65 72 6f 2c 20 74  If P2 is zero, t
19b80 68 65 6e 20 61 20 72 65 61 64 2d 74 72 61 6e 73  hen a read-trans
19b90 61 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65  action is starte
19ba0 64 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 74  d..**.** P1 is t
19bb0 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20  he index of the 
19bc0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6f 6e  database file on
19bd0 20 77 68 69 63 68 20 74 68 65 20 74 72 61 6e 73   which the trans
19be0 61 63 74 69 6f 6e 20 69 73 0a 2a 2a 20 73 74 61  action is.** sta
19bf0 72 74 65 64 2e 20 20 49 6e 64 65 78 20 30 20 69  rted.  Index 0 i
19c00 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  s the main datab
19c10 61 73 65 20 66 69 6c 65 20 61 6e 64 20 69 6e 64  ase file and ind
19c20 65 78 20 31 20 69 73 20 74 68 65 0a 2a 2a 20 66  ex 1 is the.** f
19c30 69 6c 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d  ile used for tem
19c40 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
19c50 49 6e 64 69 63 65 73 20 6f 66 20 32 20 6f 72 20  Indices of 2 or 
19c60 6d 6f 72 65 20 61 72 65 20 75 73 65 64 20 66 6f  more are used fo
19c70 72 0a 2a 2a 20 61 74 74 61 63 68 65 64 20 64 61  r.** attached da
19c80 74 61 62 61 73 65 73 2e 0a 2a 2a 0a 2a 2a 20 49  tabases..**.** I
19c90 66 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61  f a write-transa
19ca0 63 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64  ction is started
19cb0 20 61 6e 64 20 74 68 65 20 56 64 62 65 2e 75 73   and the Vdbe.us
19cc0 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 66 6c  esStmtJournal fl
19cd0 61 67 20 69 73 0a 2a 2a 20 74 72 75 65 20 28 74  ag is.** true (t
19ce0 68 69 73 20 66 6c 61 67 20 69 73 20 73 65 74 20  his flag is set 
19cf0 69 66 20 74 68 65 20 56 64 62 65 20 6d 61 79 20  if the Vdbe may 
19d00 6d 6f 64 69 66 79 20 6d 6f 72 65 20 74 68 61 6e  modify more than
19d10 20 6f 6e 65 20 72 6f 77 20 61 6e 64 20 6d 61 79   one row and may
19d20 0a 2a 2a 20 74 68 72 6f 77 20 61 6e 20 41 42 4f  .** throw an ABO
19d30 52 54 20 65 78 63 65 70 74 69 6f 6e 29 2c 20 61  RT exception), a
19d40 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73   statement trans
19d50 61 63 74 69 6f 6e 20 6d 61 79 20 61 6c 73 6f 20  action may also 
19d60 62 65 20 6f 70 65 6e 65 64 2e 0a 2a 2a 20 4d 6f  be opened..** Mo
19d70 72 65 20 73 70 65 63 69 66 69 63 61 6c 6c 79 2c  re specifically,
19d80 20 61 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61   a statement tra
19d90 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e  nsaction is open
19da0 65 64 20 69 66 66 20 74 68 65 20 64 61 74 61 62  ed iff the datab
19db0 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
19dc0 6e 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 6e  n is currently n
19dd0 6f 74 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69 74  ot in autocommit
19de0 20 6d 6f 64 65 2c 20 6f 72 20 69 66 20 74 68 65   mode, or if the
19df0 72 65 20 61 72 65 20 6f 74 68 65 72 0a 2a 2a 20  re are other.** 
19e00 61 63 74 69 76 65 20 73 74 61 74 65 6d 65 6e 74  active statement
19e10 73 2e 20 41 20 73 74 61 74 65 6d 65 6e 74 20 74  s. A statement t
19e20 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 6c 6f 77  ransaction allow
19e30 73 20 74 68 65 20 63 68 61 6e 67 65 73 20 6d 61  s the changes ma
19e40 64 65 20 62 79 20 74 68 69 73 0a 2a 2a 20 56 44  de by this.** VD
19e50 42 45 20 74 6f 20 62 65 20 72 6f 6c 6c 65 64 20  BE to be rolled 
19e60 62 61 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72  back after an er
19e70 72 6f 72 20 77 69 74 68 6f 75 74 20 68 61 76 69  ror without havi
19e80 6e 67 20 74 6f 20 72 6f 6c 6c 20 62 61 63 6b 20  ng to roll back 
19e90 74 68 65 0a 2a 2a 20 65 6e 74 69 72 65 20 74 72  the.** entire tr
19ea0 61 6e 73 61 63 74 69 6f 6e 2e 20 49 66 20 6e 6f  ansaction. If no
19eb0 20 65 72 72 6f 72 20 69 73 20 65 6e 63 6f 75 6e   error is encoun
19ec0 74 65 72 65 64 2c 20 74 68 65 20 73 74 61 74 65  tered, the state
19ed0 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
19ee0 0a 2a 2a 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  .** will automat
19ef0 69 63 61 6c 6c 79 20 63 6f 6d 6d 69 74 20 77 68  ically commit wh
19f00 65 6e 20 74 68 65 20 56 44 42 45 20 68 61 6c 74  en the VDBE halt
19f10 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  s..**.** If P5!=
19f20 30 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63 6f  0 then this opco
19f30 64 65 20 61 6c 73 6f 20 63 68 65 63 6b 73 20 74  de also checks t
19f40 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69 65  he schema cookie
19f50 20 61 67 61 69 6e 73 74 20 50 33 0a 2a 2a 20 61   against P3.** a
19f60 6e 64 20 74 68 65 20 73 63 68 65 6d 61 20 67 65  nd the schema ge
19f70 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
19f80 20 61 67 61 69 6e 73 74 20 50 34 2e 0a 2a 2a 20   against P4..** 
19f90 54 68 65 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67  The cookie chang
19fa0 65 73 20 69 74 73 20 76 61 6c 75 65 20 77 68 65  es its value whe
19fb0 6e 65 76 65 72 20 74 68 65 20 64 61 74 61 62 61  never the databa
19fc0 73 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  se schema change
19fd0 73 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  s..** This opera
19fe0 74 69 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20  tion is used to 
19ff0 64 65 74 65 63 74 20 77 68 65 6e 20 74 68 61 74  detect when that
1a000 20 74 68 65 20 63 6f 6f 6b 69 65 20 68 61 73 20   the cookie has 
1a010 63 68 61 6e 67 65 64 0a 2a 2a 20 61 6e 64 20 74  changed.** and t
1a020 68 61 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  hat the current 
1a030 70 72 6f 63 65 73 73 20 6e 65 65 64 73 20 74 6f  process needs to
1a040 20 72 65 72 65 61 64 20 74 68 65 20 73 63 68 65   reread the sche
1a050 6d 61 2e 20 20 49 66 20 74 68 65 20 73 63 68 65  ma.  If the sche
1a060 6d 61 0a 2a 2a 20 63 6f 6f 6b 69 65 20 69 6e 20  ma.** cookie in 
1a070 50 33 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20  P3 differs from 
1a080 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  the schema cooki
1a090 65 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  e in the databas
1a0a0 65 20 68 65 61 64 65 72 20 6f 72 0a 2a 2a 20 69  e header or.** i
1a0b0 66 20 74 68 65 20 73 63 68 65 6d 61 20 67 65 6e  f the schema gen
1a0c0 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  eration counter 
1a0d0 69 6e 20 50 34 20 64 69 66 66 65 72 73 20 66 72  in P4 differs fr
1a0e0 6f 6d 20 74 68 65 20 63 75 72 72 65 6e 74 0a 2a  om the current.*
1a0f0 2a 20 67 65 6e 65 72 61 74 69 6f 6e 20 63 6f 75  * generation cou
1a100 6e 74 65 72 2c 20 74 68 65 6e 20 61 6e 20 53 51  nter, then an SQ
1a110 4c 49 54 45 5f 53 43 48 45 4d 41 20 65 72 72 6f  LITE_SCHEMA erro
1a120 72 20 69 73 20 72 61 69 73 65 64 20 61 6e 64 20  r is raised and 
1a130 65 78 65 63 75 74 69 6f 6e 0a 2a 2a 20 68 61 6c  execution.** hal
1a140 74 73 2e 20 20 54 68 65 20 73 71 6c 69 74 65 33  ts.  The sqlite3
1a150 5f 73 74 65 70 28 29 20 77 72 61 70 70 65 72 20  _step() wrapper 
1a160 66 75 6e 63 74 69 6f 6e 20 6d 69 67 68 74 20 74  function might t
1a170 68 65 6e 20 72 65 70 72 65 70 61 72 65 20 74 68  hen reprepare th
1a180 65 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 20 61  e.** statement a
1a190 6e 64 20 72 65 72 75 6e 20 69 74 20 66 72 6f 6d  nd rerun it from
1a1a0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 0a   the beginning..
1a1b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 54 72 61 6e 73  */.case OP_Trans
1a1c0 61 63 74 69 6f 6e 3a 20 7b 0a 20 20 42 74 72 65  action: {.  Btre
1a1d0 65 20 2a 70 42 74 3b 0a 20 20 69 6e 74 20 69 4d  e *pBt;.  int iM
1a1e0 65 74 61 3b 0a 20 20 69 6e 74 20 69 47 65 6e 3b  eta;.  int iGen;
1a1f0 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
1a200 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73  IsReader );.  as
1a210 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c  sert( p->readOnl
1a220 79 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d  y==0 || pOp->p2=
1a230 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1a240 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1a250 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
1a260 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
1a270 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
1a280 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
1a290 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 20 26 26    if( pOp->p2 &&
1a2a0 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51   (db->flags & SQ
1a2b0 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 29 21  LITE_QueryOnly)!
1a2c0 3d 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53  =0 ){.    rc = S
1a2d0 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 3b 0a  QLITE_READONLY;.
1a2e0 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64      goto abort_d
1a2f0 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
1a300 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62  .  pBt = db->aDb
1a310 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a 0a  [pOp->p1].pBt;..
1a320 20 20 69 66 28 20 70 42 74 20 29 7b 0a 20 20 20    if( pBt ){.   
1a330 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
1a340 65 65 42 65 67 69 6e 54 72 61 6e 73 28 70 42 74  eeBeginTrans(pBt
1a350 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 20 20  , pOp->p2);.    
1a360 74 65 73 74 63 61 73 65 28 20 72 63 3d 3d 53 51  testcase( rc==SQ
1a370 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
1a380 4f 54 20 29 3b 0a 20 20 20 20 74 65 73 74 63 61  OT );.    testca
1a390 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42  se( rc==SQLITE_B
1a3a0 55 53 59 5f 52 45 43 4f 56 45 52 59 20 29 3b 0a  USY_RECOVERY );.
1a3b0 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
1a3c0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 69  TE_OK ){.      i
1a3d0 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d 53 51  f( (rc&0xff)==SQ
1a3e0 4c 49 54 45 5f 42 55 53 59 20 29 7b 0a 20 20 20  LITE_BUSY ){.   
1a3f0 20 20 20 20 20 70 2d 3e 70 63 20 3d 20 28 69 6e       p->pc = (in
1a400 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
1a410 20 20 20 20 20 20 20 70 2d 3e 72 63 20 3d 20 72         p->rc = r
1a420 63 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  c;.        goto 
1a430 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20  vdbe_return;.   
1a440 20 20 20 7d 0a 20 20 20 20 20 20 67 6f 74 6f 20     }.      goto 
1a450 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1a460 6f 72 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  or;.    }..    i
1a470 66 28 20 70 4f 70 2d 3e 70 32 20 26 26 20 70 2d  f( pOp->p2 && p-
1a480 3e 75 73 65 73 53 74 6d 74 4a 6f 75 72 6e 61 6c  >usesStmtJournal
1a490 20 0a 20 20 20 20 20 26 26 20 28 64 62 2d 3e 61   .     && (db->a
1a4a0 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 7c 7c 20  utoCommit==0 || 
1a4b0 64 62 2d 3e 6e 56 64 62 65 52 65 61 64 3e 31 29  db->nVdbeRead>1)
1a4c0 20 0a 20 20 20 20 29 7b 0a 20 20 20 20 20 20 61   .    ){.      a
1a4d0 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74  ssert( sqlite3Bt
1a4e0 72 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74  reeIsInTrans(pBt
1a4f0 29 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  ) );.      if( p
1a500 2d 3e 69 53 74 61 74 65 6d 65 6e 74 3d 3d 30 20  ->iStatement==0 
1a510 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72  ){.        asser
1a520 74 28 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e  t( db->nStatemen
1a530 74 3e 3d 30 20 26 26 20 64 62 2d 3e 6e 53 61 76  t>=0 && db->nSav
1a540 65 70 6f 69 6e 74 3e 3d 30 20 29 3b 0a 20 20 20  epoint>=0 );.   
1a550 20 20 20 20 20 64 62 2d 3e 6e 53 74 61 74 65 6d       db->nStatem
1a560 65 6e 74 2b 2b 3b 20 0a 20 20 20 20 20 20 20 20  ent++; .        
1a570 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74 20 3d 20  p->iStatement = 
1a580 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e 74 20 2b  db->nSavepoint +
1a590 20 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3b   db->nStatement;
1a5a0 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
1a5b0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
1a5c0 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41  Savepoint(db, SA
1a5d0 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 20 70  VEPOINT_BEGIN, p
1a5e0 2d 3e 69 53 74 61 74 65 6d 65 6e 74 2d 31 29 3b  ->iStatement-1);
1a5f0 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53  .      if( rc==S
1a600 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1a610 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
1a620 42 74 72 65 65 42 65 67 69 6e 53 74 6d 74 28 70  BtreeBeginStmt(p
1a630 42 74 2c 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e  Bt, p->iStatemen
1a640 74 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  t);.      }..   
1a650 20 20 20 2f 2a 20 53 74 6f 72 65 20 74 68 65 20     /* Store the 
1a660 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f 66  current value of
1a670 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
1a680 6e 64 6c 65 73 20 64 65 66 65 72 72 65 64 20 63  ndles deferred c
1a690 6f 6e 73 74 72 61 69 6e 74 0a 20 20 20 20 20 20  onstraint.      
1a6a0 2a 2a 20 63 6f 75 6e 74 65 72 2e 20 49 66 20 74  ** counter. If t
1a6b0 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  he statement tra
1a6c0 6e 73 61 63 74 69 6f 6e 20 6e 65 65 64 73 20 74  nsaction needs t
1a6d0 6f 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b  o be rolled back
1a6e0 2c 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 76  ,.      ** the v
1a6f0 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 75  alue of this cou
1a700 6e 74 65 72 20 6e 65 65 64 73 20 74 6f 20 62 65  nter needs to be
1a710 20 72 65 73 74 6f 72 65 64 20 74 6f 6f 2e 20 20   restored too.  
1a720 2a 2f 0a 20 20 20 20 20 20 70 2d 3e 6e 53 74 6d  */.      p->nStm
1a730 74 44 65 66 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e  tDefCons = db->n
1a740 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20  DeferredCons;.  
1a750 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 49      p->nStmtDefI
1a760 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  mmCons = db->nDe
1a770 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b 0a 20  ferredImmCons;. 
1a780 20 20 20 7d 0a 0a 20 20 20 20 2f 2a 20 47 61 74     }..    /* Gat
1a790 68 65 72 20 74 68 65 20 73 63 68 65 6d 61 20 76  her the schema v
1a7a0 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f  ersion number fo
1a7b0 72 20 63 68 65 63 6b 69 6e 67 3a 0a 20 20 20 20  r checking:.    
1a7c0 2a 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f  ** IMPLEMENTATIO
1a7d0 4e 2d 4f 46 3a 20 52 2d 30 33 31 38 39 2d 35 31  N-OF: R-03189-51
1a7e0 31 33 35 20 41 73 20 65 61 63 68 20 53 51 4c 20  135 As each SQL 
1a7f0 73 74 61 74 65 6d 65 6e 74 20 72 75 6e 73 2c 20  statement runs, 
1a800 74 68 65 20 73 63 68 65 6d 61 0a 20 20 20 20 2a  the schema.    *
1a810 2a 20 76 65 72 73 69 6f 6e 20 69 73 20 63 68 65  * version is che
1a820 63 6b 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  cked to ensure t
1a830 68 61 74 20 74 68 65 20 73 63 68 65 6d 61 20 68  hat the schema h
1a840 61 73 20 6e 6f 74 20 63 68 61 6e 67 65 64 20 73  as not changed s
1a850 69 6e 63 65 20 74 68 65 0a 20 20 20 20 2a 2a 20  ince the.    ** 
1a860 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 77 61  SQL statement wa
1a870 73 20 70 72 65 70 61 72 65 64 2e 0a 20 20 20 20  s prepared..    
1a880 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74  */.    sqlite3Bt
1a890 72 65 65 47 65 74 4d 65 74 61 28 70 42 74 2c 20  reeGetMeta(pBt, 
1a8a0 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
1a8b0 53 49 4f 4e 2c 20 28 75 33 32 20 2a 29 26 69 4d  SION, (u32 *)&iM
1a8c0 65 74 61 29 3b 0a 20 20 20 20 69 47 65 6e 20 3d  eta);.    iGen =
1a8d0 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31   db->aDb[pOp->p1
1a8e0 5d 2e 70 53 63 68 65 6d 61 2d 3e 69 47 65 6e 65  ].pSchema->iGene
1a8f0 72 61 74 69 6f 6e 3b 0a 20 20 7d 65 6c 73 65 7b  ration;.  }else{
1a900 0a 20 20 20 20 69 47 65 6e 20 3d 20 69 4d 65 74  .    iGen = iMet
1a910 61 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 61 73 73  a = 0;.  }.  ass
1a920 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20  ert( pOp->p5==0 
1a930 7c 7c 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  || pOp->p4type==
1a940 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 69 66  P4_INT32 );.  if
1a950 28 20 70 4f 70 2d 3e 70 35 20 26 26 20 28 69 4d  ( pOp->p5 && (iM
1a960 65 74 61 21 3d 70 4f 70 2d 3e 70 33 20 7c 7c 20  eta!=pOp->p3 || 
1a970 69 47 65 6e 21 3d 70 4f 70 2d 3e 70 34 2e 69 29  iGen!=pOp->p4.i)
1a980 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 44   ){.    sqlite3D
1a990 62 46 72 65 65 28 64 62 2c 20 70 2d 3e 7a 45 72  bFree(db, p->zEr
1a9a0 72 4d 73 67 29 3b 0a 20 20 20 20 70 2d 3e 7a 45  rMsg);.    p->zE
1a9b0 72 72 4d 73 67 20 3d 20 73 71 6c 69 74 65 33 44  rrMsg = sqlite3D
1a9c0 62 53 74 72 44 75 70 28 64 62 2c 20 22 64 61 74  bStrDup(db, "dat
1a9d0 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
1a9e0 20 63 68 61 6e 67 65 64 22 29 3b 0a 20 20 20 20   changed");.    
1a9f0 2f 2a 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  /* If the schema
1aa00 2d 63 6f 6f 6b 69 65 20 66 72 6f 6d 20 74 68 65  -cookie from the
1aa10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6d   database file m
1aa20 61 74 63 68 65 73 20 74 68 65 20 63 6f 6f 6b 69  atches the cooki
1aa30 65 20 0a 20 20 20 20 2a 2a 20 73 74 6f 72 65 64  e .    ** stored
1aa40 20 77 69 74 68 20 74 68 65 20 69 6e 2d 6d 65 6d   with the in-mem
1aa50 6f 72 79 20 72 65 70 72 65 73 65 6e 74 61 74 69  ory representati
1aa60 6f 6e 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61  on of the schema
1aa70 2c 20 64 6f 0a 20 20 20 20 2a 2a 20 6e 6f 74 20  , do.    ** not 
1aa80 72 65 6c 6f 61 64 20 74 68 65 20 73 63 68 65 6d  reload the schem
1aa90 61 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  a from the datab
1aaa0 61 73 65 20 66 69 6c 65 2e 0a 20 20 20 20 2a 2a  ase file..    **
1aab0 0a 20 20 20 20 2a 2a 20 49 66 20 76 69 72 74 75  .    ** If virtu
1aac0 61 6c 2d 74 61 62 6c 65 73 20 61 72 65 20 69 6e  al-tables are in
1aad0 20 75 73 65 2c 20 74 68 69 73 20 69 73 20 6e 6f   use, this is no
1aae0 74 20 6a 75 73 74 20 61 6e 20 6f 70 74 69 6d 69  t just an optimi
1aaf0 7a 61 74 69 6f 6e 2e 0a 20 20 20 20 2a 2a 20 4f  zation..    ** O
1ab00 66 74 65 6e 2c 20 76 2d 74 61 62 6c 65 73 20 73  ften, v-tables s
1ab10 74 6f 72 65 20 74 68 65 69 72 20 64 61 74 61 20  tore their data 
1ab20 69 6e 20 6f 74 68 65 72 20 53 51 4c 69 74 65 20  in other SQLite 
1ab30 74 61 62 6c 65 73 2c 20 77 68 69 63 68 0a 20 20  tables, which.  
1ab40 20 20 2a 2a 20 61 72 65 20 71 75 65 72 69 65 64    ** are queried
1ab50 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 78 4e 65   from within xNe
1ab60 78 74 28 29 20 61 6e 64 20 6f 74 68 65 72 20 76  xt() and other v
1ab70 2d 74 61 62 6c 65 20 6d 65 74 68 6f 64 73 20 75  -table methods u
1ab80 73 69 6e 67 0a 20 20 20 20 2a 2a 20 70 72 65 70  sing.    ** prep
1ab90 61 72 65 64 20 71 75 65 72 69 65 73 2e 20 49 66  ared queries. If
1aba0 20 73 75 63 68 20 61 20 71 75 65 72 79 20 69 73   such a query is
1abb0 20 6f 75 74 2d 6f 66 2d 64 61 74 65 2c 20 77 65   out-of-date, we
1abc0 20 64 6f 20 6e 6f 74 20 77 61 6e 74 20 74 6f 0a   do not want to.
1abd0 20 20 20 20 2a 2a 20 64 69 73 63 61 72 64 20 74      ** discard t
1abe0 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
1abf0 6d 61 2c 20 61 73 20 74 68 65 20 75 73 65 72 20  ma, as the user 
1ac00 63 6f 64 65 20 69 6d 70 6c 65 6d 65 6e 74 69 6e  code implementin
1ac10 67 20 74 68 65 0a 20 20 20 20 2a 2a 20 76 2d 74  g the.    ** v-t
1ac20 61 62 6c 65 20 77 6f 75 6c 64 20 68 61 76 65 20  able would have 
1ac30 74 6f 20 62 65 20 72 65 61 64 79 20 66 6f 72 20  to be ready for 
1ac40 74 68 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62  the sqlite3_vtab
1ac50 20 73 74 72 75 63 74 75 72 65 20 69 74 73 65 6c   structure itsel
1ac60 66 0a 20 20 20 20 2a 2a 20 74 6f 20 62 65 20 69  f.    ** to be i
1ac70 6e 76 61 6c 69 64 61 74 65 64 20 77 68 65 6e 65  nvalidated whene
1ac80 76 65 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ver sqlite3_step
1ac90 28 29 20 69 73 20 63 61 6c 6c 65 64 20 66 72 6f  () is called fro
1aca0 6d 20 77 69 74 68 69 6e 20 0a 20 20 20 20 2a 2a  m within .    **
1acb0 20 61 20 76 2d 74 61 62 6c 65 20 6d 65 74 68 6f   a v-table metho
1acc0 64 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  d..    */.    if
1acd0 28 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70  ( db->aDb[pOp->p
1ace0 31 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65  1].pSchema->sche
1acf0 6d 61 5f 63 6f 6f 6b 69 65 21 3d 69 4d 65 74 61  ma_cookie!=iMeta
1ad00 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
1ad10 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
1ad20 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  db, pOp->p1);.  
1ad30 20 20 7d 0a 20 20 20 20 70 2d 3e 65 78 70 69 72    }.    p->expir
1ad40 65 64 20 3d 20 31 3b 0a 20 20 20 20 72 63 20 3d  ed = 1;.    rc =
1ad50 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 3b 0a   SQLITE_SCHEMA;.
1ad60 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
1ad70 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1ad80 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
1ad90 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52  .}../* Opcode: R
1ada0 65 61 64 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  eadCookie P1 P2 
1adb0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61  P3 * *.**.** Rea
1adc0 64 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  d cookie number 
1add0 50 33 20 66 72 6f 6d 20 64 61 74 61 62 61 73 65  P3 from database
1ade0 20 50 31 20 61 6e 64 20 77 72 69 74 65 20 69 74   P1 and write it
1adf0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
1ae00 32 2e 0a 2a 2a 20 50 33 3d 3d 31 20 69 73 20 74  2..** P3==1 is t
1ae10 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1ae20 6e 2e 20 20 50 33 3d 3d 32 20 69 73 20 74 68 65  n.  P3==2 is the
1ae30 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1ae40 2e 0a 2a 2a 20 50 33 3d 3d 33 20 69 73 20 74 68  ..** P3==3 is th
1ae50 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1ae60 67 65 72 20 63 61 63 68 65 20 73 69 7a 65 2c 20  ger cache size, 
1ae70 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50  and so forth.  P
1ae80 31 3d 3d 30 20 69 73 0a 2a 2a 20 74 68 65 20 6d  1==0 is.** the m
1ae90 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
1aea0 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20 74  e and P1==1 is t
1aeb0 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
1aec0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 0a 2a   used to store.*
1aed0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1aee0 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20  es..**.** There 
1aef0 6d 75 73 74 20 62 65 20 61 20 72 65 61 64 2d 6c  must be a read-l
1af00 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61 62  ock on the datab
1af10 61 73 65 20 28 65 69 74 68 65 72 20 61 20 74 72  ase (either a tr
1af20 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 6d 75 73  ansaction.** mus
1af30 74 20 62 65 20 73 74 61 72 74 65 64 20 6f 72 20  t be started or 
1af40 74 68 65 72 65 20 6d 75 73 74 20 62 65 20 61 6e  there must be an
1af50 20 6f 70 65 6e 20 63 75 72 73 6f 72 29 20 62 65   open cursor) be
1af60 66 6f 72 65 0a 2a 2a 20 65 78 65 63 75 74 69 6e  fore.** executin
1af70 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1af80 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  on..*/.case OP_R
1af90 65 61 64 43 6f 6f 6b 69 65 3a 20 7b 20 20 20 20  eadCookie: {    
1afa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
1afb0 74 32 20 2a 2f 0a 20 20 69 6e 74 20 69 4d 65 74  t2 */.  int iMet
1afc0 61 3b 0a 20 20 69 6e 74 20 69 44 62 3b 0a 20 20  a;.  int iDb;.  
1afd0 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 0a 0a 20 20  int iCookie;..  
1afe0 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65  assert( p->bIsRe
1aff0 61 64 65 72 20 29 3b 0a 20 20 69 44 62 20 3d 20  ader );.  iDb = 
1b000 70 4f 70 2d 3e 70 31 3b 0a 20 20 69 43 6f 6f 6b  pOp->p1;.  iCook
1b010 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ie = pOp->p3;.  
1b020 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c  assert( pOp->p3<
1b030 53 51 4c 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d  SQLITE_N_BTREE_M
1b040 45 54 41 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ETA );.  assert(
1b050 20 69 44 62 3e 3d 30 20 26 26 20 69 44 62 3c 64   iDb>=0 && iDb<d
1b060 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b070 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 44 62 5d  rt( db->aDb[iDb]
1b080 2e 70 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73  .pBt!=0 );.  ass
1b090 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28  ert( DbMaskTest(
1b0a0 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 69 44  p->btreeMask, iD
1b0b0 62 29 20 29 3b 0a 0a 20 20 73 71 6c 69 74 65 33  b) );..  sqlite3
1b0c0 42 74 72 65 65 47 65 74 4d 65 74 61 28 64 62 2d  BtreeGetMeta(db-
1b0d0 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 69  >aDb[iDb].pBt, i
1b0e0 43 6f 6f 6b 69 65 2c 20 28 75 33 32 20 2a 29 26  Cookie, (u32 *)&
1b0f0 69 4d 65 74 61 29 3b 0a 20 20 70 4f 75 74 20 3d  iMeta);.  pOut =
1b100 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
1b110 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
1b120 3e 75 2e 69 20 3d 20 69 4d 65 74 61 3b 0a 20 20  >u.i = iMeta;.  
1b130 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1b140 6f 64 65 3a 20 53 65 74 43 6f 6f 6b 69 65 20 50  ode: SetCookie P
1b150 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a  1 P2 P3 * *.**.*
1b160 2a 20 57 72 69 74 65 20 74 68 65 20 69 6e 74 65  * Write the inte
1b170 67 65 72 20 76 61 6c 75 65 20 50 33 20 69 6e 74  ger value P3 int
1b180 6f 20 63 6f 6f 6b 69 65 20 6e 75 6d 62 65 72 20  o cookie number 
1b190 50 32 20 6f 66 20 64 61 74 61 62 61 73 65 20 50  P2 of database P
1b1a0 31 2e 0a 2a 2a 20 50 32 3d 3d 31 20 69 73 20 74  1..** P2==1 is t
1b1b0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1b1c0 6e 2e 20 20 50 32 3d 3d 32 20 69 73 20 74 68 65  n.  P2==2 is the
1b1d0 20 64 61 74 61 62 61 73 65 20 66 6f 72 6d 61 74   database format
1b1e0 2e 0a 2a 2a 20 50 32 3d 3d 33 20 69 73 20 74 68  ..** P2==3 is th
1b1f0 65 20 72 65 63 6f 6d 6d 65 6e 64 65 64 20 70 61  e recommended pa
1b200 67 65 72 20 63 61 63 68 65 20 0a 2a 2a 20 73 69  ger cache .** si
1b210 7a 65 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68  ze, and so forth
1b220 2e 20 20 50 31 3d 3d 30 20 69 73 20 74 68 65 20  .  P1==0 is the 
1b230 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
1b240 6c 65 20 61 6e 64 20 50 31 3d 3d 31 20 69 73 20  le and P1==1 is 
1b250 74 68 65 20 0a 2a 2a 20 64 61 74 61 62 61 73 65  the .** database
1b260 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 73 74   file used to st
1b270 6f 72 65 20 74 65 6d 70 6f 72 61 72 79 20 74 61  ore temporary ta
1b280 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 41 20 74 72  bles..**.** A tr
1b290 61 6e 73 61 63 74 69 6f 6e 20 6d 75 73 74 20 62  ansaction must b
1b2a0 65 20 73 74 61 72 74 65 64 20 62 65 66 6f 72 65  e started before
1b2b0 20 65 78 65 63 75 74 69 6e 67 20 74 68 69 73 20   executing this 
1b2c0 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61 73 65 20  opcode..*/.case 
1b2d0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 3a 20 7b 0a  OP_SetCookie: {.
1b2e0 20 20 44 62 20 2a 70 44 62 3b 0a 20 20 61 73 73    Db *pDb;.  ass
1b2f0 65 72 74 28 20 70 4f 70 2d 3e 70 32 3c 53 51 4c  ert( pOp->p2<SQL
1b300 49 54 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41  ITE_N_BTREE_META
1b310 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1b320 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
1b330 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  >p1<db->nDb );. 
1b340 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
1b350 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
1b360 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20  , pOp->p1) );.  
1b370 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f  assert( p->readO
1b380 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44 62 20  nly==0 );.  pDb 
1b390 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  = &db->aDb[pOp->
1b3a0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
1b3b0 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a 20 20  Db->pBt!=0 );.  
1b3c0 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
1b3d0 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
1b3e0 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 29 20 29  b, pOp->p1, 0) )
1b3f0 3b 0a 20 20 2f 2a 20 53 65 65 20 6e 6f 74 65 20  ;.  /* See note 
1b400 61 62 6f 75 74 20 69 6e 64 65 78 20 73 68 69 66  about index shif
1b410 74 69 6e 67 20 6f 6e 20 4f 50 5f 52 65 61 64 43  ting on OP_ReadC
1b420 6f 6f 6b 69 65 20 2a 2f 0a 20 20 72 63 20 3d 20  ookie */.  rc = 
1b430 73 71 6c 69 74 65 33 42 74 72 65 65 55 70 64 61  sqlite3BtreeUpda
1b440 74 65 4d 65 74 61 28 70 44 62 2d 3e 70 42 74 2c  teMeta(pDb->pBt,
1b450 20 70 4f 70 2d 3e 70 32 2c 20 70 4f 70 2d 3e 70   pOp->p2, pOp->p
1b460 33 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  3);.  if( pOp->p
1b470 32 3d 3d 42 54 52 45 45 5f 53 43 48 45 4d 41 5f  2==BTREE_SCHEMA_
1b480 56 45 52 53 49 4f 4e 20 29 7b 0a 20 20 20 20 2f  VERSION ){.    /
1b490 2a 20 57 68 65 6e 20 74 68 65 20 73 63 68 65 6d  * When the schem
1b4a0 61 20 63 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73  a cookie changes
1b4b0 2c 20 72 65 63 6f 72 64 20 74 68 65 20 6e 65 77  , record the new
1b4c0 20 63 6f 6f 6b 69 65 20 69 6e 74 65 72 6e 61 6c   cookie internal
1b4d0 6c 79 20 2a 2f 0a 20 20 20 20 70 44 62 2d 3e 70  ly */.    pDb->p
1b4e0 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63  Schema->schema_c
1b4f0 6f 6f 6b 69 65 20 3d 20 70 4f 70 2d 3e 70 33 3b  ookie = pOp->p3;
1b500 0a 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 7c  .    db->flags |
1b510 3d 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43  = SQLITE_InternC
1b520 68 61 6e 67 65 73 3b 0a 20 20 7d 65 6c 73 65 20  hanges;.  }else 
1b530 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54 52  if( pOp->p2==BTR
1b540 45 45 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 29  EE_FILE_FORMAT )
1b550 7b 0a 20 20 20 20 2f 2a 20 52 65 63 6f 72 64 20  {.    /* Record 
1b560 63 68 61 6e 67 65 73 20 69 6e 20 74 68 65 20 66  changes in the f
1b570 69 6c 65 20 66 6f 72 6d 61 74 20 2a 2f 0a 20 20  ile format */.  
1b580 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
1b590 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3d 20 70 4f  file_format = pO
1b5a0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20 20 69 66 28  p->p3;.  }.  if(
1b5b0 20 70 4f 70 2d 3e 70 31 3d 3d 31 20 29 7b 0a 20   pOp->p1==1 ){. 
1b5c0 20 20 20 2f 2a 20 49 6e 76 61 6c 69 64 61 74 65     /* Invalidate
1b5d0 20 61 6c 6c 20 70 72 65 70 61 72 65 64 20 73 74   all prepared st
1b5e0 61 74 65 6d 65 6e 74 73 20 77 68 65 6e 65 76 65  atements wheneve
1b5f0 72 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62  r the TEMP datab
1b600 61 73 65 0a 20 20 20 20 2a 2a 20 73 63 68 65 6d  ase.    ** schem
1b610 61 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 54  a is changed.  T
1b620 69 63 6b 65 74 20 23 31 36 34 34 20 2a 2f 0a 20  icket #1644 */. 
1b630 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72 65     sqlite3Expire
1b640 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
1b650 74 73 28 64 62 29 3b 0a 20 20 20 20 70 2d 3e 65  ts(db);.    p->e
1b660 78 70 69 72 65 64 20 3d 20 30 3b 0a 20 20 7d 0a  xpired = 0;.  }.
1b670 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
1b680 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
1b690 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
1b6a0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 52  /* Opcode: OpenR
1b6b0 65 61 64 20 50 31 20 50 32 20 50 33 20 50 34 20  ead P1 P2 P3 P4 
1b6c0 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
1b6d0 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a  root=P2 iDb=P3.*
1b6e0 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64  *.** Open a read
1b6f0 2d 6f 6e 6c 79 20 63 75 72 73 6f 72 20 66 6f 72  -only cursor for
1b700 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 61   the database ta
1b710 62 6c 65 20 77 68 6f 73 65 20 72 6f 6f 74 20 70  ble whose root p
1b720 61 67 65 20 69 73 0a 2a 2a 20 50 32 20 69 6e 20  age is.** P2 in 
1b730 61 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  a database file.
1b740 20 20 54 68 65 20 64 61 74 61 62 61 73 65 20 66    The database f
1b750 69 6c 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65  ile is determine
1b760 64 20 62 79 20 50 33 2e 20 0a 2a 2a 20 50 33 3d  d by P3. .** P3=
1b770 3d 30 20 6d 65 61 6e 73 20 74 68 65 20 6d 61 69  =0 means the mai
1b780 6e 20 64 61 74 61 62 61 73 65 2c 20 50 33 3d 3d  n database, P3==
1b790 31 20 6d 65 61 6e 73 20 74 68 65 20 64 61 74 61  1 means the data
1b7a0 62 61 73 65 20 75 73 65 64 20 66 6f 72 20 0a 2a  base used for .*
1b7b0 2a 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  * temporary tabl
1b7c0 65 73 2c 20 61 6e 64 20 50 33 3e 31 20 6d 65 61  es, and P3>1 mea
1b7d0 6e 73 20 75 73 65 64 20 74 68 65 20 63 6f 72 72  ns used the corr
1b7e0 65 73 70 6f 6e 64 69 6e 67 20 61 74 74 61 63 68  esponding attach
1b7f0 65 64 0a 2a 2a 20 64 61 74 61 62 61 73 65 2e 20  ed.** database. 
1b800 20 47 69 76 65 20 74 68 65 20 6e 65 77 20 63 75   Give the new cu
1b810 72 73 6f 72 20 61 6e 20 69 64 65 6e 74 69 66 69  rsor an identifi
1b820 65 72 20 6f 66 20 50 31 2e 20 20 54 68 65 20 50  er of P1.  The P
1b830 31 0a 2a 2a 20 76 61 6c 75 65 73 20 6e 65 65 64  1.** values need
1b840 20 6e 6f 74 20 62 65 20 63 6f 6e 74 69 67 75 6f   not be contiguo
1b850 75 73 20 62 75 74 20 61 6c 6c 20 50 31 20 76 61  us but all P1 va
1b860 6c 75 65 73 20 73 68 6f 75 6c 64 20 62 65 20 73  lues should be s
1b870 6d 61 6c 6c 20 69 6e 74 65 67 65 72 73 2e 0a 2a  mall integers..*
1b880 2a 20 49 74 20 69 73 20 61 6e 20 65 72 72 6f 72  * It is an error
1b890 20 66 6f 72 20 50 31 20 74 6f 20 62 65 20 6e 65   for P1 to be ne
1b8a0 67 61 74 69 76 65 2e 0a 2a 2a 0a 2a 2a 20 49 66  gative..**.** If
1b8b0 20 50 35 21 3d 30 20 74 68 65 6e 20 75 73 65 20   P5!=0 then use 
1b8c0 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72  the content of r
1b8d0 65 67 69 73 74 65 72 20 50 32 20 61 73 20 74 68  egister P2 as th
1b8e0 65 20 72 6f 6f 74 20 70 61 67 65 2c 20 6e 6f 74  e root page, not
1b8f0 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66  .** the value of
1b900 20 50 32 20 69 74 73 65 6c 66 2e 0a 2a 2a 0a 2a   P2 itself..**.*
1b910 2a 20 54 68 65 72 65 20 77 69 6c 6c 20 62 65 20  * There will be 
1b920 61 20 72 65 61 64 20 6c 6f 63 6b 20 6f 6e 20 74  a read lock on t
1b930 68 65 20 64 61 74 61 62 61 73 65 20 77 68 65 6e  he database when
1b940 65 76 65 72 20 74 68 65 72 65 20 69 73 20 61 6e  ever there is an
1b950 0a 2a 2a 20 6f 70 65 6e 20 63 75 72 73 6f 72 2e  .** open cursor.
1b960 20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73    If the databas
1b970 65 20 77 61 73 20 75 6e 6c 6f 63 6b 65 64 20 70  e was unlocked p
1b980 72 69 6f 72 20 74 6f 20 74 68 69 73 20 69 6e 73  rior to this ins
1b990 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 74 68 65 6e  truction.** then
1b9a0 20 61 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 20   a read lock is 
1b9b0 61 63 71 75 69 72 65 64 20 61 73 20 70 61 72 74  acquired as part
1b9c0 20 6f 66 20 74 68 69 73 20 69 6e 73 74 72 75 63   of this instruc
1b9d0 74 69 6f 6e 2e 20 20 41 20 72 65 61 64 0a 2a 2a  tion.  A read.**
1b9e0 20 6c 6f 63 6b 20 61 6c 6c 6f 77 73 20 6f 74 68   lock allows oth
1b9f0 65 72 20 70 72 6f 63 65 73 73 65 73 20 74 6f 20  er processes to 
1ba00 72 65 61 64 20 74 68 65 20 64 61 74 61 62 61 73  read the databas
1ba10 65 20 62 75 74 20 70 72 6f 68 69 62 69 74 73 0a  e but prohibits.
1ba20 2a 2a 20 61 6e 79 20 6f 74 68 65 72 20 70 72 6f  ** any other pro
1ba30 63 65 73 73 20 66 72 6f 6d 20 6d 6f 64 69 66 79  cess from modify
1ba40 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73 65  ing the database
1ba50 2e 20 20 54 68 65 20 72 65 61 64 20 6c 6f 63 6b  .  The read lock
1ba60 20 69 73 0a 2a 2a 20 72 65 6c 65 61 73 65 64 20   is.** released 
1ba70 77 68 65 6e 20 61 6c 6c 20 63 75 72 73 6f 72 73  when all cursors
1ba80 20 61 72 65 20 63 6c 6f 73 65 64 2e 20 20 49 66   are closed.  If
1ba90 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f   this instructio
1baa0 6e 20 61 74 74 65 6d 70 74 73 0a 2a 2a 20 74 6f  n attempts.** to
1bab0 20 67 65 74 20 61 20 72 65 61 64 20 6c 6f 63 6b   get a read lock
1bac0 20 62 75 74 20 66 61 69 6c 73 2c 20 74 68 65 20   but fails, the 
1bad0 73 63 72 69 70 74 20 74 65 72 6d 69 6e 61 74 65  script terminate
1bae0 73 20 77 69 74 68 20 61 6e 0a 2a 2a 20 53 51 4c  s with an.** SQL
1baf0 49 54 45 5f 42 55 53 59 20 65 72 72 6f 72 20 63  ITE_BUSY error c
1bb00 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ode..**.** The P
1bb10 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 65  4 value may be e
1bb20 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67 65 72  ither an integer
1bb30 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72 20 61   (P4_INT32) or a
1bb40 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a 20 61   pointer to.** a
1bb50 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63 74 75   KeyInfo structu
1bb60 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f 29 2e  re (P4_KEYINFO).
1bb70 20 49 66 20 69 74 20 69 73 20 61 20 70 6f 69 6e   If it is a poin
1bb80 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f  ter to a KeyInfo
1bb90 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2c 20   .** structure, 
1bba0 74 68 65 6e 20 73 61 69 64 20 73 74 72 75 63 74  then said struct
1bbb0 75 72 65 20 64 65 66 69 6e 65 73 20 74 68 65 20  ure defines the 
1bbc0 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f 6c 6c  content and coll
1bbd0 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75 65 6e  ating .** sequen
1bbe0 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ce of the index 
1bbf0 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20 4f 74  being opened. Ot
1bc00 68 65 72 77 69 73 65 2c 20 69 66 20 50 34 20 69  herwise, if P4 i
1bc10 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a 2a 2a  s an integer .**
1bc20 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 73 65   value, it is se
1bc30 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65 72 20  t to the number 
1bc40 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68  of columns in th
1bc50 65 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53  e table..**.** S
1bc60 65 65 20 61 6c 73 6f 3a 20 4f 70 65 6e 57 72 69  ee also: OpenWri
1bc70 74 65 2c 20 52 65 6f 70 65 6e 49 64 78 0a 2a 2f  te, ReopenIdx.*/
1bc80 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 6f 70  ./* Opcode: Reop
1bc90 65 6e 49 64 78 20 50 31 20 50 32 20 50 33 20 50  enIdx P1 P2 P3 P
1bca0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
1bcb0 3a 20 72 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33  : root=P2 iDb=P3
1bcc0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70 65  .**.** The Reope
1bcd0 6e 49 64 78 20 6f 70 63 6f 64 65 20 77 6f 72 6b  nIdx opcode work
1bce0 73 20 65 78 61 63 74 6c 79 20 6c 69 6b 65 20 52  s exactly like R
1bcf0 65 61 64 4f 70 65 6e 20 65 78 63 65 70 74 20 74  eadOpen except t
1bd00 68 61 74 20 69 74 20 66 69 72 73 74 0a 2a 2a 20  hat it first.** 
1bd10 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69 66  checks to see if
1bd20 20 74 68 65 20 63 75 72 73 6f 72 20 6f 6e 20 50   the cursor on P
1bd30 31 20 69 73 20 61 6c 72 65 61 64 79 20 6f 70 65  1 is already ope
1bd40 6e 20 77 69 74 68 20 61 20 72 6f 6f 74 20 70 61  n with a root pa
1bd50 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  ge.** number of 
1bd60 50 32 20 61 6e 64 20 69 66 20 69 74 20 69 73 20  P2 and if it is 
1bd70 74 68 69 73 20 6f 70 63 6f 64 65 20 62 65 63 6f  this opcode beco
1bd80 6d 65 73 20 61 20 6e 6f 2d 6f 70 2e 20 20 49 6e  mes a no-op.  In
1bd90 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 0a 2a 2a   other words,.**
1bda0 20 69 66 20 74 68 65 20 63 75 72 73 6f 72 20 69   if the cursor i
1bdb0 73 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20  s already open, 
1bdc0 64 6f 20 6e 6f 74 20 72 65 6f 70 65 6e 20 69 74  do not reopen it
1bdd0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 52 65 6f 70  ..**.** The Reop
1bde0 65 6e 49 64 78 20 6f 70 63 6f 64 65 20 6d 61 79  enIdx opcode may
1bdf0 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 77 69   only be used wi
1be00 74 68 20 50 35 3d 3d 30 20 61 6e 64 20 77 69 74  th P5==0 and wit
1be10 68 20 50 34 20 62 65 69 6e 67 0a 2a 2a 20 61 20  h P4 being.** a 
1be20 50 34 5f 4b 45 59 49 4e 46 4f 20 6f 62 6a 65 63  P4_KEYINFO objec
1be30 74 2e 20 20 46 75 72 74 68 65 72 6d 6f 72 65 2c  t.  Furthermore,
1be40 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 6d 75   the P3 value mu
1be50 73 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61  st be the same a
1be60 73 0a 2a 2a 20 65 76 65 72 79 20 6f 74 68 65 72  s.** every other
1be70 20 52 65 6f 70 65 6e 49 64 78 20 6f 72 20 4f 70   ReopenIdx or Op
1be80 65 6e 52 65 61 64 20 66 6f 72 20 74 68 65 20 73  enRead for the s
1be90 61 6d 65 20 63 75 72 73 6f 72 20 6e 75 6d 62 65  ame cursor numbe
1bea0 72 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 74 68 65  r..**.** See the
1beb0 20 4f 70 65 6e 52 65 61 64 20 6f 70 63 6f 64 65   OpenRead opcode
1bec0 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 66   documentation f
1bed0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
1bee0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a  formation..*/./*
1bef0 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 57 72 69   Opcode: OpenWri
1bf00 74 65 20 50 31 20 50 32 20 50 33 20 50 34 20 50  te P1 P2 P3 P4 P
1bf10 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  5.** Synopsis: r
1bf20 6f 6f 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a  oot=P2 iDb=P3.**
1bf30 0a 2a 2a 20 4f 70 65 6e 20 61 20 72 65 61 64 2f  .** Open a read/
1bf40 77 72 69 74 65 20 63 75 72 73 6f 72 20 6e 61 6d  write cursor nam
1bf50 65 64 20 50 31 20 6f 6e 20 74 68 65 20 74 61 62  ed P1 on the tab
1bf60 6c 65 20 6f 72 20 69 6e 64 65 78 20 77 68 6f 73  le or index whos
1bf70 65 20 72 6f 6f 74 0a 2a 2a 20 70 61 67 65 20 69  e root.** page i
1bf80 73 20 50 32 2e 20 20 4f 72 20 69 66 20 50 35 21  s P2.  Or if P5!
1bf90 3d 30 20 75 73 65 20 74 68 65 20 63 6f 6e 74 65  =0 use the conte
1bfa0 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
1bfb0 32 20 74 6f 20 66 69 6e 64 20 74 68 65 0a 2a 2a  2 to find the.**
1bfc0 20 72 6f 6f 74 20 70 61 67 65 2e 0a 2a 2a 0a 2a   root page..**.*
1bfd0 2a 20 54 68 65 20 50 34 20 76 61 6c 75 65 20 6d  * The P4 value m
1bfe0 61 79 20 62 65 20 65 69 74 68 65 72 20 61 6e 20  ay be either an 
1bff0 69 6e 74 65 67 65 72 20 28 50 34 5f 49 4e 54 33  integer (P4_INT3
1c000 32 29 20 6f 72 20 61 20 70 6f 69 6e 74 65 72 20  2) or a pointer 
1c010 74 6f 0a 2a 2a 20 61 20 4b 65 79 49 6e 66 6f 20  to.** a KeyInfo 
1c020 73 74 72 75 63 74 75 72 65 20 28 50 34 5f 4b 45  structure (P4_KE
1c030 59 49 4e 46 4f 29 2e 20 49 66 20 69 74 20 69 73  YINFO). If it is
1c040 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20   a pointer to a 
1c050 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20 73 74 72 75  KeyInfo .** stru
1c060 63 74 75 72 65 2c 20 74 68 65 6e 20 73 61 69 64  cture, then said
1c070 20 73 74 72 75 63 74 75 72 65 20 64 65 66 69 6e   structure defin
1c080 65 73 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 61  es the content a
1c090 6e 64 20 63 6f 6c 6c 61 74 69 6e 67 20 0a 2a 2a  nd collating .**
1c0a0 20 73 65 71 75 65 6e 63 65 20 6f 66 20 74 68 65   sequence of the
1c0b0 20 69 6e 64 65 78 20 62 65 69 6e 67 20 6f 70 65   index being ope
1c0c0 6e 65 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  ned. Otherwise, 
1c0d0 69 66 20 50 34 20 69 73 20 61 6e 20 69 6e 74 65  if P4 is an inte
1c0e0 67 65 72 20 0a 2a 2a 20 76 61 6c 75 65 2c 20 69  ger .** value, i
1c0f0 74 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20  t is set to the 
1c100 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1c110 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2c 20  s in the table, 
1c120 6f 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 61 72  or to the.** lar
1c130 67 65 73 74 20 69 6e 64 65 78 20 6f 66 20 61 6e  gest index of an
1c140 79 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  y column of the 
1c150 74 61 62 6c 65 20 74 68 61 74 20 69 73 20 61 63  table that is ac
1c160 74 75 61 6c 6c 79 20 75 73 65 64 2e 0a 2a 2a 0a  tually used..**.
1c170 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
1c180 69 6f 6e 20 77 6f 72 6b 73 20 6a 75 73 74 20 6c  ion works just l
1c190 69 6b 65 20 4f 70 65 6e 52 65 61 64 20 65 78 63  ike OpenRead exc
1c1a0 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1c1b0 73 20 74 68 65 20 63 75 72 73 6f 72 0a 2a 2a 20  s the cursor.** 
1c1c0 69 6e 20 72 65 61 64 2f 77 72 69 74 65 20 6d 6f  in read/write mo
1c1d0 64 65 2e 20 20 46 6f 72 20 61 20 67 69 76 65 6e  de.  For a given
1c1e0 20 74 61 62 6c 65 2c 20 74 68 65 72 65 20 63 61   table, there ca
1c1f0 6e 20 62 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  n be one or more
1c200 20 72 65 61 64 2d 6f 6e 6c 79 0a 2a 2a 20 63 75   read-only.** cu
1c210 72 73 6f 72 73 20 6f 72 20 61 20 73 69 6e 67 6c  rsors or a singl
1c220 65 20 72 65 61 64 2f 77 72 69 74 65 20 63 75 72  e read/write cur
1c230 73 6f 72 20 62 75 74 20 6e 6f 74 20 62 6f 74 68  sor but not both
1c240 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
1c250 20 4f 70 65 6e 52 65 61 64 2e 0a 2a 2f 0a 63 61   OpenRead..*/.ca
1c260 73 65 20 4f 50 5f 52 65 6f 70 65 6e 49 64 78 3a  se OP_ReopenIdx:
1c270 20 7b 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b   {.  int nField;
1c280 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1c290 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 70 32 3b 0a  Info;.  int p2;.
1c2a0 20 20 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74    int iDb;.  int
1c2b0 20 77 72 46 6c 61 67 3b 0a 20 20 42 74 72 65 65   wrFlag;.  Btree
1c2c0 20 2a 70 58 3b 0a 20 20 56 64 62 65 43 75 72 73   *pX;.  VdbeCurs
1c2d0 6f 72 20 2a 70 43 75 72 3b 0a 20 20 44 62 20 2a  or *pCur;.  Db *
1c2e0 70 44 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  pDb;..  assert( 
1c2f0 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1c300 70 2d 3e 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45  p->p5==OPFLAG_SE
1c310 45 4b 45 51 20 29 3b 0a 20 20 61 73 73 65 72 74  EKEQ );.  assert
1c320 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
1c330 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20 20 70  4_KEYINFO );.  p
1c340 43 75 72 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70  Cur = p->apCsr[p
1c350 4f 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70  Op->p1];.  if( p
1c360 43 75 72 20 26 26 20 70 43 75 72 2d 3e 70 67 6e  Cur && pCur->pgn
1c370 6f 52 6f 6f 74 3d 3d 28 75 33 32 29 70 4f 70 2d  oRoot==(u32)pOp-
1c380 3e 70 32 20 29 7b 0a 20 20 20 20 61 73 73 65 72  >p2 ){.    asser
1c390 74 28 20 70 43 75 72 2d 3e 69 44 62 3d 3d 70 4f  t( pCur->iDb==pO
1c3a0 70 2d 3e 70 33 20 29 3b 20 20 20 20 20 20 2f 2a  p->p3 );      /*
1c3b0 20 47 75 61 72 61 6e 74 65 65 64 20 62 79 20 74   Guaranteed by t
1c3c0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1c3d0 72 20 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6f 70  r */.    goto op
1c3e0 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69  en_cursor_set_hi
1c3f0 6e 74 73 3b 0a 20 20 7d 0a 20 20 2f 2a 20 49 66  nts;.  }.  /* If
1c400 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20 6e   the cursor is n
1c410 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65  ot currently ope
1c420 6e 20 6f 72 20 69 73 20 6f 70 65 6e 20 6f 6e 20  n or is open on 
1c430 61 20 64 69 66 66 65 72 65 6e 74 0a 20 20 2a 2a  a different.  **
1c440 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 66 61 6c   index, then fal
1c450 6c 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f  l through into O
1c460 50 5f 4f 70 65 6e 52 65 61 64 20 74 6f 20 66 6f  P_OpenRead to fo
1c470 72 63 65 20 61 20 72 65 6f 70 65 6e 20 2a 2f 0a  rce a reopen */.
1c480 63 61 73 65 20 4f 50 5f 4f 70 65 6e 52 65 61 64  case OP_OpenRead
1c490 3a 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 57 72  :.case OP_OpenWr
1c4a0 69 74 65 3a 0a 0a 20 20 61 73 73 65 72 74 28 20  ite:..  assert( 
1c4b0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c4c0 4f 70 65 6e 57 72 69 74 65 20 7c 7c 20 70 4f 70  OpenWrite || pOp
1c4d0 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e  ->p5==0 || pOp->
1c4e0 70 35 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45  p5==OPFLAG_SEEKE
1c4f0 51 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Q );.  assert( p
1c500 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
1c510 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
1c520 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 52 65 61  code==OP_OpenRea
1c530 64 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  d || pOp->opcode
1c540 3d 3d 4f 50 5f 52 65 6f 70 65 6e 49 64 78 0a 20  ==OP_ReopenIdx. 
1c550 20 20 20 20 20 20 20 20 20 7c 7c 20 70 2d 3e 72           || p->r
1c560 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20  eadOnly==0 );.. 
1c570 20 69 66 28 20 70 2d 3e 65 78 70 69 72 65 64 20   if( p->expired 
1c580 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  ){.    rc = SQLI
1c590 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41 43  TE_ABORT_ROLLBAC
1c5a0 4b 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  K;.    goto abor
1c5b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1c5c0 20 20 7d 0a 0a 20 20 6e 46 69 65 6c 64 20 3d 20    }..  nField = 
1c5d0 30 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  0;.  pKeyInfo = 
1c5e0 30 3b 0a 20 20 70 32 20 3d 20 70 4f 70 2d 3e 70  0;.  p2 = pOp->p
1c5f0 32 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  2;.  iDb = pOp->
1c600 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44  p3;.  assert( iD
1c610 62 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e  b>=0 && iDb<db->
1c620 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
1c630 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
1c640 74 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29  treeMask, iDb) )
1c650 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61  ;.  pDb = &db->a
1c660 44 62 5b 69 44 62 5d 3b 0a 20 20 70 58 20 3d 20  Db[iDb];.  pX = 
1c670 70 44 62 2d 3e 70 42 74 3b 0a 20 20 61 73 73 65  pDb->pBt;.  asse
1c680 72 74 28 20 70 58 21 3d 30 20 29 3b 0a 20 20 69  rt( pX!=0 );.  i
1c690 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  f( pOp->opcode==
1c6a0 4f 50 5f 4f 70 65 6e 57 72 69 74 65 20 29 7b 0a  OP_OpenWrite ){.
1c6b0 20 20 20 20 61 73 73 65 72 74 28 20 4f 50 46 4c      assert( OPFL
1c6c0 41 47 5f 46 4f 52 44 45 4c 45 54 45 3d 3d 42 54  AG_FORDELETE==BT
1c6d0 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 29 3b  REE_FORDELETE );
1c6e0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 42 54  .    wrFlag = BT
1c6f0 52 45 45 5f 57 52 43 53 52 20 7c 20 28 70 4f 70  REE_WRCSR | (pOp
1c700 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 46 4f  ->p5 & OPFLAG_FO
1c710 52 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 61 73  RDELETE);.    as
1c720 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
1c730 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
1c740 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
1c750 69 66 28 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  if( pDb->pSchema
1c760 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74 20 3c 20  ->file_format < 
1c770 70 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46  p->minWriteFileF
1c780 6f 72 6d 61 74 20 29 7b 0a 20 20 20 20 20 20 70  ormat ){.      p
1c790 2d 3e 6d 69 6e 57 72 69 74 65 46 69 6c 65 46 6f  ->minWriteFileFo
1c7a0 72 6d 61 74 20 3d 20 70 44 62 2d 3e 70 53 63 68  rmat = pDb->pSch
1c7b0 65 6d 61 2d 3e 66 69 6c 65 5f 66 6f 72 6d 61 74  ema->file_format
1c7c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
1c7d0 0a 20 20 20 20 77 72 46 6c 61 67 20 3d 20 30 3b  .    wrFlag = 0;
1c7e0 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1c7f0 70 35 20 26 20 4f 50 46 4c 41 47 5f 50 32 49 53  p5 & OPFLAG_P2IS
1c800 52 45 47 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REG ){.    asser
1c810 74 28 20 70 32 3e 30 20 29 3b 0a 20 20 20 20 61  t( p2>0 );.    a
1c820 73 73 65 72 74 28 20 70 32 3c 3d 28 70 2d 3e 6e  ssert( p2<=(p->n
1c830 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
1c840 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 32 20  or) );.    pIn2 
1c850 3d 20 26 61 4d 65 6d 5b 70 32 5d 3b 0a 20 20 20  = &aMem[p2];.   
1c860 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
1c870 6c 69 64 28 70 49 6e 32 29 20 29 3b 0a 20 20 20  lid(pIn2) );.   
1c880 20 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e   assert( (pIn2->
1c890 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
1c8a0 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74  !=0 );.    sqlit
1c8b0 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72  e3VdbeMemInteger
1c8c0 69 66 79 28 70 49 6e 32 29 3b 0a 20 20 20 20 70  ify(pIn2);.    p
1c8d0 32 20 3d 20 28 69 6e 74 29 70 49 6e 32 2d 3e 75  2 = (int)pIn2->u
1c8e0 2e 69 3b 0a 20 20 20 20 2f 2a 20 54 68 65 20 70  .i;.    /* The p
1c8f0 32 20 76 61 6c 75 65 20 61 6c 77 61 79 73 20 63  2 value always c
1c900 6f 6d 65 73 20 66 72 6f 6d 20 61 20 70 72 69 6f  omes from a prio
1c910 72 20 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65  r OP_CreateTable
1c920 20 6f 70 63 6f 64 65 20 61 6e 64 0a 20 20 20 20   opcode and.    
1c930 2a 2a 20 74 68 61 74 20 6f 70 63 6f 64 65 20 77  ** that opcode w
1c940 69 6c 6c 20 61 6c 77 61 79 73 20 73 65 74 20 74  ill always set t
1c950 68 65 20 70 32 20 76 61 6c 75 65 20 74 6f 20 32  he p2 value to 2
1c960 20 6f 72 20 6d 6f 72 65 20 6f 72 20 65 6c 73 65   or more or else
1c970 20 66 61 69 6c 2e 0a 20 20 20 20 2a 2a 20 49 66   fail..    ** If
1c980 20 74 68 65 72 65 20 77 65 72 65 20 61 20 66 61   there were a fa
1c990 69 6c 75 72 65 2c 20 74 68 65 20 70 72 65 70 61  ilure, the prepa
1c9a0 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 77 6f  red statement wo
1c9b0 75 6c 64 20 68 61 76 65 20 68 61 6c 74 65 64 0a  uld have halted.
1c9c0 20 20 20 20 2a 2a 20 62 65 66 6f 72 65 20 72 65      ** before re
1c9d0 61 63 68 69 6e 67 20 74 68 69 73 20 69 6e 73 74  aching this inst
1c9e0 72 75 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20  ruction. */.    
1c9f0 61 73 73 65 72 74 28 20 70 32 3e 3d 32 20 29 3b  assert( p2>=2 );
1ca00 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d 3e  .  }.  if( pOp->
1ca10 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59 49 4e  p4type==P4_KEYIN
1ca20 46 4f 20 29 7b 0a 20 20 20 20 70 4b 65 79 49 6e  FO ){.    pKeyIn
1ca30 66 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65  fo = pOp->p4.pKe
1ca40 79 49 6e 66 6f 3b 0a 20 20 20 20 61 73 73 65 72  yInfo;.    asser
1ca50 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  t( pKeyInfo->enc
1ca60 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 20  ==ENC(db) );.   
1ca70 20 61 73 73 65 72 74 28 20 70 4b 65 79 49 6e 66   assert( pKeyInf
1ca80 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a 20 20 20  o->db==db );.   
1ca90 20 6e 46 69 65 6c 64 20 3d 20 70 4b 65 79 49 6e   nField = pKeyIn
1caa0 66 6f 2d 3e 6e 46 69 65 6c 64 2b 70 4b 65 79 49  fo->nField+pKeyI
1cab0 6e 66 6f 2d 3e 6e 58 46 69 65 6c 64 3b 0a 20 20  nfo->nXField;.  
1cac0 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d 3e 70  }else if( pOp->p
1cad0 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20  4type==P4_INT32 
1cae0 29 7b 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20  ){.    nField = 
1caf0 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 7d 0a 20  pOp->p4.i;.  }. 
1cb00 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1cb10 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1cb20 20 6e 46 69 65 6c 64 3e 3d 30 20 29 3b 0a 20 20   nField>=0 );.  
1cb30 74 65 73 74 63 61 73 65 28 20 6e 46 69 65 6c 64  testcase( nField
1cb40 3d 3d 30 20 29 3b 20 20 2f 2a 20 54 61 62 6c 65  ==0 );  /* Table
1cb50 20 77 69 74 68 20 49 4e 54 45 47 45 52 20 50 52   with INTEGER PR
1cb60 49 4d 41 52 59 20 4b 45 59 20 61 6e 64 20 6e 6f  IMARY KEY and no
1cb70 74 68 69 6e 67 20 65 6c 73 65 20 2a 2f 0a 20 20  thing else */.  
1cb80 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65 43  pCur = allocateC
1cb90 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1cba0 2c 20 6e 46 69 65 6c 64 2c 20 69 44 62 2c 20 43  , nField, iDb, C
1cbb0 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1cbc0 20 69 66 28 20 70 43 75 72 3d 3d 30 20 29 20 67   if( pCur==0 ) g
1cbd0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1cbe0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  ur->nullRow = 1;
1cbf0 0a 20 20 70 43 75 72 2d 3e 69 73 4f 72 64 65 72  .  pCur->isOrder
1cc00 65 64 20 3d 20 31 3b 0a 20 20 70 43 75 72 2d 3e  ed = 1;.  pCur->
1cc10 70 67 6e 6f 52 6f 6f 74 20 3d 20 70 32 3b 0a 23  pgnoRoot = p2;.#
1cc20 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
1cc30 55 47 0a 20 20 70 43 75 72 2d 3e 77 72 46 6c 61  UG.  pCur->wrFla
1cc40 67 20 3d 20 77 72 46 6c 61 67 3b 0a 23 65 6e 64  g = wrFlag;.#end
1cc50 69 66 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  if.  rc = sqlite
1cc60 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 58 2c  3BtreeCursor(pX,
1cc70 20 70 32 2c 20 77 72 46 6c 61 67 2c 20 70 4b 65   p2, wrFlag, pKe
1cc80 79 49 6e 66 6f 2c 20 70 43 75 72 2d 3e 75 63 2e  yInfo, pCur->uc.
1cc90 70 43 75 72 73 6f 72 29 3b 0a 20 20 70 43 75 72  pCursor);.  pCur
1cca0 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b 65  ->pKeyInfo = pKe
1ccb0 79 49 6e 66 6f 3b 0a 20 20 2f 2a 20 53 65 74 20  yInfo;.  /* Set 
1ccc0 74 68 65 20 56 64 62 65 43 75 72 73 6f 72 2e 69  the VdbeCursor.i
1ccd0 73 54 61 62 6c 65 20 76 61 72 69 61 62 6c 65 2e  sTable variable.
1cce0 20 50 72 65 76 69 6f 75 73 20 76 65 72 73 69 6f   Previous versio
1ccf0 6e 73 20 6f 66 0a 20 20 2a 2a 20 53 51 4c 69 74  ns of.  ** SQLit
1cd00 65 20 75 73 65 64 20 74 6f 20 63 68 65 63 6b 20  e used to check 
1cd10 69 66 20 74 68 65 20 72 6f 6f 74 2d 70 61 67 65  if the root-page
1cd20 20 66 6c 61 67 73 20 77 65 72 65 20 73 61 6e 65   flags were sane
1cd30 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 0a 20   at this point. 
1cd40 20 2a 2a 20 61 6e 64 20 72 65 70 6f 72 74 20 64   ** and report d
1cd50 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
1cd60 6f 6e 20 69 66 20 74 68 65 79 20 77 65 72 65 20  on if they were 
1cd70 6e 6f 74 2c 20 62 75 74 20 74 68 69 73 20 63 68  not, but this ch
1cd80 65 63 6b 20 68 61 73 0a 20 20 2a 2a 20 73 69 6e  eck has.  ** sin
1cd90 63 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20 74 68  ce moved into th
1cda0 65 20 62 74 72 65 65 20 6c 61 79 65 72 2e 20 20  e btree layer.  
1cdb0 2a 2f 20 20 0a 20 20 70 43 75 72 2d 3e 69 73 54  */  .  pCur->isT
1cdc0 61 62 6c 65 20 3d 20 70 4f 70 2d 3e 70 34 74 79  able = pOp->p4ty
1cdd0 70 65 21 3d 50 34 5f 4b 45 59 49 4e 46 4f 3b 0a  pe!=P4_KEYINFO;.
1cde0 0a 6f 70 65 6e 5f 63 75 72 73 6f 72 5f 73 65 74  .open_cursor_set
1cdf0 5f 68 69 6e 74 73 3a 0a 20 20 61 73 73 65 72 74  _hints:.  assert
1ce00 28 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52  ( OPFLAG_BULKCSR
1ce10 3d 3d 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44  ==BTREE_BULKLOAD
1ce20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50   );.  assert( OP
1ce30 46 4c 41 47 5f 53 45 45 4b 45 51 3d 3d 42 54 52  FLAG_SEEKEQ==BTR
1ce40 45 45 5f 53 45 45 4b 5f 45 51 20 29 3b 0a 20 20  EE_SEEK_EQ );.  
1ce50 74 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70  testcase( pOp->p
1ce60 35 20 26 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43  5 & OPFLAG_BULKC
1ce70 53 52 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  SR );.#ifdef SQL
1ce80 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
1ce90 52 5f 48 49 4e 54 53 0a 20 20 74 65 73 74 63 61  R_HINTS.  testca
1cea0 73 65 28 20 70 4f 70 2d 3e 70 32 20 26 20 4f 50  se( pOp->p2 & OP
1ceb0 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a 23  FLAG_SEEKEQ );.#
1cec0 65 6e 64 69 66 0a 20 20 73 71 6c 69 74 65 33 42  endif.  sqlite3B
1ced0 74 72 65 65 43 75 72 73 6f 72 48 69 6e 74 46 6c  treeCursorHintFl
1cee0 61 67 73 28 70 43 75 72 2d 3e 75 63 2e 70 43 75  ags(pCur->uc.pCu
1cef0 72 73 6f 72 2c 0a 20 20 20 20 20 20 20 20 20 20  rsor,.          
1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf10 20 20 20 20 20 28 70 4f 70 2d 3e 70 35 20 26 20       (pOp->p5 & 
1cf20 28 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 7c  (OPFLAG_BULKCSR|
1cf30 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 29 29 29  OPFLAG_SEEKEQ)))
1cf40 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1cf50 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1cf60 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1cf70 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65  ../* Opcode: Ope
1cf80 6e 45 70 68 65 6d 65 72 61 6c 20 50 31 20 50 32  nEphemeral P1 P2
1cf90 20 2a 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f   * P4 P5.** Syno
1cfa0 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50 32  psis: nColumn=P2
1cfb0 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65  .**.** Open a ne
1cfc0 77 20 63 75 72 73 6f 72 20 50 31 20 74 6f 20 61  w cursor P1 to a
1cfd0 20 74 72 61 6e 73 69 65 6e 74 20 74 61 62 6c 65   transient table
1cfe0 2e 0a 2a 2a 20 54 68 65 20 63 75 72 73 6f 72 20  ..** The cursor 
1cff0 69 73 20 61 6c 77 61 79 73 20 6f 70 65 6e 65 64  is always opened
1d000 20 72 65 61 64 2f 77 72 69 74 65 20 65 76 65 6e   read/write even
1d010 20 69 66 20 0a 2a 2a 20 74 68 65 20 6d 61 69 6e   if .** the main
1d020 20 64 61 74 61 62 61 73 65 20 69 73 20 72 65 61   database is rea
1d030 64 2d 6f 6e 6c 79 2e 20 20 54 68 65 20 65 70 68  d-only.  The eph
1d040 65 6d 65 72 61 6c 0a 2a 2a 20 74 61 62 6c 65 20  emeral.** table 
1d050 69 73 20 64 65 6c 65 74 65 64 20 61 75 74 6f 6d  is deleted autom
1d060 61 74 69 63 61 6c 6c 79 20 77 68 65 6e 20 74 68  atically when th
1d070 65 20 63 75 72 73 6f 72 20 69 73 20 63 6c 6f 73  e cursor is clos
1d080 65 64 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  ed..**.** P2 is 
1d090 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1d0a0 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 65 70 68  lumns in the eph
1d0b0 65 6d 65 72 61 6c 20 74 61 62 6c 65 2e 0a 2a 2a  emeral table..**
1d0c0 20 54 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e   The cursor poin
1d0d0 74 73 20 74 6f 20 61 20 42 54 72 65 65 20 74 61  ts to a BTree ta
1d0e0 62 6c 65 20 69 66 20 50 34 3d 3d 30 20 61 6e 64  ble if P4==0 and
1d0f0 20 74 6f 20 61 20 42 54 72 65 65 20 69 6e 64 65   to a BTree inde
1d100 78 0a 2a 2a 20 69 66 20 50 34 20 69 73 20 6e 6f  x.** if P4 is no
1d110 74 20 30 2e 20 20 49 66 20 50 34 20 69 73 20 6e  t 0.  If P4 is n
1d120 6f 74 20 4e 55 4c 4c 2c 20 69 74 20 70 6f 69 6e  ot NULL, it poin
1d130 74 73 20 74 6f 20 61 20 4b 65 79 49 6e 66 6f 20  ts to a KeyInfo 
1d140 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 74 68 61  structure.** tha
1d150 74 20 64 65 66 69 6e 65 73 20 74 68 65 20 66 6f  t defines the fo
1d160 72 6d 61 74 20 6f 66 20 6b 65 79 73 20 69 6e 20  rmat of keys in 
1d170 74 68 65 20 69 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a  the index..**.**
1d180 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74 65   The P5 paramete
1d190 72 20 63 61 6e 20 62 65 20 61 20 6d 61 73 6b 20  r can be a mask 
1d1a0 6f 66 20 74 68 65 20 42 54 52 45 45 5f 2a 20 66  of the BTREE_* f
1d1b0 6c 61 67 73 20 64 65 66 69 6e 65 64 0a 2a 2a 20  lags defined.** 
1d1c0 69 6e 20 62 74 72 65 65 2e 68 2e 20 20 54 68 65  in btree.h.  The
1d1d0 73 65 20 66 6c 61 67 73 20 63 6f 6e 74 72 6f 6c  se flags control
1d1e0 20 61 73 70 65 63 74 73 20 6f 66 20 74 68 65 20   aspects of the 
1d1f0 6f 70 65 72 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20  operation of.** 
1d200 74 68 65 20 62 74 72 65 65 2e 20 20 54 68 65 20  the btree.  The 
1d210 42 54 52 45 45 5f 4f 4d 49 54 5f 4a 4f 55 52 4e  BTREE_OMIT_JOURN
1d220 41 4c 20 61 6e 64 20 42 54 52 45 45 5f 53 49 4e  AL and BTREE_SIN
1d230 47 4c 45 20 66 6c 61 67 73 20 61 72 65 0a 2a 2a  GLE flags are.**
1d240 20 61 64 64 65 64 20 61 75 74 6f 6d 61 74 69 63   added automatic
1d250 61 6c 6c 79 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  ally..*/./* Opco
1d260 64 65 3a 20 4f 70 65 6e 41 75 74 6f 69 6e 64 65  de: OpenAutoinde
1d270 78 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  x P1 P2 * P4 *.*
1d280 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6e 43 6f 6c  * Synopsis: nCol
1d290 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a 2a 20 54 68 69  umn=P2.**.** Thi
1d2a0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 74  s opcode works t
1d2b0 68 65 20 73 61 6d 65 20 61 73 20 4f 50 5f 4f 70  he same as OP_Op
1d2c0 65 6e 45 70 68 65 6d 65 72 61 6c 2e 20 20 49 74  enEphemeral.  It
1d2d0 20 68 61 73 20 61 0a 2a 2a 20 64 69 66 66 65 72   has a.** differ
1d2e0 65 6e 74 20 6e 61 6d 65 20 74 6f 20 64 69 73 74  ent name to dist
1d2f0 69 6e 67 75 69 73 68 20 69 74 73 20 75 73 65 2e  inguish its use.
1d300 20 20 54 61 62 6c 65 73 20 63 72 65 61 74 65 64    Tables created
1d310 20 75 73 69 6e 67 0a 2a 2a 20 62 79 20 74 68 69   using.** by thi
1d320 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 62 65  s opcode will be
1d330 20 75 73 65 64 20 66 6f 72 20 61 75 74 6f 6d 61   used for automa
1d340 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20  tically created 
1d350 74 72 61 6e 73 69 65 6e 74 0a 2a 2a 20 69 6e 64  transient.** ind
1d360 69 63 65 73 20 69 6e 20 6a 6f 69 6e 73 2e 0a 2a  ices in joins..*
1d370 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65 6e 41 75  /.case OP_OpenAu
1d380 74 6f 69 6e 64 65 78 3a 20 0a 63 61 73 65 20 4f  toindex: .case O
1d390 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 3a  P_OpenEphemeral:
1d3a0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
1d3b0 2a 70 43 78 3b 0a 20 20 4b 65 79 49 6e 66 6f 20  *pCx;.  KeyInfo 
1d3c0 2a 70 4b 65 79 49 6e 66 6f 3b 0a 0a 20 20 73 74  *pKeyInfo;..  st
1d3d0 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 76  atic const int v
1d3e0 66 73 46 6c 61 67 73 20 3d 20 0a 20 20 20 20 20  fsFlags = .     
1d3f0 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 52 45 41   SQLITE_OPEN_REA
1d400 44 57 52 49 54 45 20 7c 0a 20 20 20 20 20 20 53  DWRITE |.      S
1d410 51 4c 49 54 45 5f 4f 50 45 4e 5f 43 52 45 41 54  QLITE_OPEN_CREAT
1d420 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d430 5f 4f 50 45 4e 5f 45 58 43 4c 55 53 49 56 45 20  _OPEN_EXCLUSIVE 
1d440 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f  |.      SQLITE_O
1d450 50 45 4e 5f 44 45 4c 45 54 45 4f 4e 43 4c 4f 53  PEN_DELETEONCLOS
1d460 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d470 5f 4f 50 45 4e 5f 54 52 41 4e 53 49 45 4e 54 5f  _OPEN_TRANSIENT_
1d480 44 42 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  DB;.  assert( pO
1d490 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61 73  p->p1>=0 );.  as
1d4a0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 30  sert( pOp->p2>=0
1d4b0 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c 6f   );.  pCx = allo
1d4c0 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70 4f  cateCursor(p, pO
1d4d0 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20  p->p1, pOp->p2, 
1d4e0 2d 31 2c 20 43 55 52 54 59 50 45 5f 42 54 52 45  -1, CURTYPE_BTRE
1d4f0 45 29 3b 0a 20 20 69 66 28 20 70 43 78 3d 3d 30  E);.  if( pCx==0
1d500 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a   ) goto no_mem;.
1d510 20 20 70 43 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d    pCx->nullRow =
1d520 20 31 3b 0a 20 20 70 43 78 2d 3e 69 73 45 70 68   1;.  pCx->isEph
1d530 65 6d 65 72 61 6c 20 3d 20 31 3b 0a 20 20 72 63  emeral = 1;.  rc
1d540 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4f   = sqlite3BtreeO
1d550 70 65 6e 28 64 62 2d 3e 70 56 66 73 2c 20 30 2c  pen(db->pVfs, 0,
1d560 20 64 62 2c 20 26 70 43 78 2d 3e 70 42 74 78 2c   db, &pCx->pBtx,
1d570 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
1d580 20 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f            BTREE_
1d590 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 7c 20 42  OMIT_JOURNAL | B
1d5a0 54 52 45 45 5f 53 49 4e 47 4c 45 20 7c 20 70 4f  TREE_SINGLE | pO
1d5b0 70 2d 3e 70 35 2c 20 76 66 73 46 6c 61 67 73 29  p->p5, vfsFlags)
1d5c0 3b 0a 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49  ;.  if( rc==SQLI
1d5d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 63 20  TE_OK ){.    rc 
1d5e0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65  = sqlite3BtreeBe
1d5f0 67 69 6e 54 72 61 6e 73 28 70 43 78 2d 3e 70 42  ginTrans(pCx->pB
1d600 74 78 2c 20 31 29 3b 0a 20 20 7d 0a 20 20 69 66  tx, 1);.  }.  if
1d610 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
1d620 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 61 20 74  ){.    /* If a t
1d630 72 61 6e 73 69 65 6e 74 20 69 6e 64 65 78 20 69  ransient index i
1d640 73 20 72 65 71 75 69 72 65 64 2c 20 63 72 65 61  s required, crea
1d650 74 65 20 69 74 20 62 79 20 63 61 6c 6c 69 6e 67  te it by calling
1d660 0a 20 20 20 20 2a 2a 20 73 71 6c 69 74 65 33 42  .    ** sqlite3B
1d670 74 72 65 65 43 72 65 61 74 65 54 61 62 6c 65 28  treeCreateTable(
1d680 29 20 77 69 74 68 20 74 68 65 20 42 54 52 45 45  ) with the BTREE
1d690 5f 42 4c 4f 42 4b 45 59 20 66 6c 61 67 20 62 65  _BLOBKEY flag be
1d6a0 66 6f 72 65 0a 20 20 20 20 2a 2a 20 6f 70 65 6e  fore.    ** open
1d6b0 69 6e 67 20 69 74 2e 20 49 66 20 61 20 74 72 61  ing it. If a tra
1d6c0 6e 73 69 65 6e 74 20 74 61 62 6c 65 20 69 73 20  nsient table is 
1d6d0 72 65 71 75 69 72 65 64 2c 20 6a 75 73 74 20 75  required, just u
1d6e0 73 65 20 74 68 65 0a 20 20 20 20 2a 2a 20 61 75  se the.    ** au
1d6f0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72 65 61  tomatically crea
1d700 74 65 64 20 74 61 62 6c 65 20 77 69 74 68 20 72  ted table with r
1d710 6f 6f 74 2d 70 61 67 65 20 31 20 28 61 6e 20 42  oot-page 1 (an B
1d720 4c 4f 42 5f 49 4e 54 4b 45 59 20 74 61 62 6c 65  LOB_INTKEY table
1d730 29 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  )..    */.    if
1d740 28 20 28 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  ( (pCx->pKeyInfo
1d750 20 3d 20 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4f   = pKeyInfo = pO
1d760 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 29 21  p->p4.pKeyInfo)!
1d770 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
1d780 70 67 6e 6f 3b 0a 20 20 20 20 20 20 61 73 73 65  pgno;.      asse
1d790 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
1d7a0 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 3b 0a 20  =P4_KEYINFO );. 
1d7b0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d7c0 33 42 74 72 65 65 43 72 65 61 74 65 54 61 62 6c  3BtreeCreateTabl
1d7d0 65 28 70 43 78 2d 3e 70 42 74 78 2c 20 26 70 67  e(pCx->pBtx, &pg
1d7e0 6e 6f 2c 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  no, BTREE_BLOBKE
1d7f0 59 20 7c 20 70 4f 70 2d 3e 70 35 29 3b 20 0a 20  Y | pOp->p5); . 
1d800 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c       if( rc==SQL
1d810 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
1d820 20 20 61 73 73 65 72 74 28 20 70 67 6e 6f 3d 3d    assert( pgno==
1d830 4d 41 53 54 45 52 5f 52 4f 4f 54 2b 31 20 29 3b  MASTER_ROOT+1 );
1d840 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1d850 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64   pKeyInfo->db==d
1d860 62 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73  b );.        ass
1d870 65 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 65  ert( pKeyInfo->e
1d880 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20  nc==ENC(db) );. 
1d890 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
1d8a0 74 65 33 42 74 72 65 65 43 75 72 73 6f 72 28 70  te3BtreeCursor(p
1d8b0 43 78 2d 3e 70 42 74 78 2c 20 70 67 6e 6f 2c 20  Cx->pBtx, pgno, 
1d8c0 42 54 52 45 45 5f 57 52 43 53 52 2c 0a 20 20 20  BTREE_WRCSR,.   
1d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 4b 65               pKe
1d8f0 79 49 6e 66 6f 2c 20 70 43 78 2d 3e 75 63 2e 70  yInfo, pCx->uc.p
1d900 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 7d  Cursor);.      }
1d910 0a 20 20 20 20 20 20 70 43 78 2d 3e 69 73 54 61  .      pCx->isTa
1d920 62 6c 65 20 3d 20 30 3b 0a 20 20 20 20 7d 65 6c  ble = 0;.    }el
1d930 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73  se{.      rc = s
1d940 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1d950 72 28 70 43 78 2d 3e 70 42 74 78 2c 20 4d 41 53  r(pCx->pBtx, MAS
1d960 54 45 52 5f 52 4f 4f 54 2c 20 42 54 52 45 45 5f  TER_ROOT, BTREE_
1d970 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20 20  WRCSR,.         
1d980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d990 20 20 20 20 20 30 2c 20 70 43 78 2d 3e 75 63 2e       0, pCx->uc.
1d9a0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20  pCursor);.      
1d9b0 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20 31  pCx->isTable = 1
1d9c0 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
1d9d0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
1d9e0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
1d9f0 20 20 70 43 78 2d 3e 69 73 4f 72 64 65 72 65 64    pCx->isOrdered
1da00 20 3d 20 28 70 4f 70 2d 3e 70 35 21 3d 42 54 52   = (pOp->p5!=BTR
1da10 45 45 5f 55 4e 4f 52 44 45 52 45 44 29 3b 0a 20  EE_UNORDERED);. 
1da20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1da30 63 6f 64 65 3a 20 53 6f 72 74 65 72 4f 70 65 6e  code: SorterOpen
1da40 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1da50 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
1da60 20 77 6f 72 6b 73 20 6c 69 6b 65 20 4f 50 5f 4f   works like OP_O
1da70 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 65 78 63  penEphemeral exc
1da80 65 70 74 20 74 68 61 74 20 69 74 20 6f 70 65 6e  ept that it open
1da90 73 0a 2a 2a 20 61 20 74 72 61 6e 73 69 65 6e 74  s.** a transient
1daa0 20 69 6e 64 65 78 20 74 68 61 74 20 69 73 20 73   index that is s
1dab0 70 65 63 69 66 69 63 61 6c 6c 79 20 64 65 73 69  pecifically desi
1dac0 67 6e 65 64 20 74 6f 20 73 6f 72 74 20 6c 61 72  gned to sort lar
1dad0 67 65 0a 2a 2a 20 74 61 62 6c 65 73 20 75 73 69  ge.** tables usi
1dae0 6e 67 20 61 6e 20 65 78 74 65 72 6e 61 6c 20 6d  ng an external m
1daf0 65 72 67 65 2d 73 6f 72 74 20 61 6c 67 6f 72 69  erge-sort algori
1db00 74 68 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 72  thm..**.** If ar
1db10 67 75 6d 65 6e 74 20 50 33 20 69 73 20 6e 6f 6e  gument P3 is non
1db20 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74 20 69  -zero, then it i
1db30 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 74 68  ndicates that th
1db40 65 20 73 6f 72 74 65 72 20 6d 61 79 0a 2a 2a 20  e sorter may.** 
1db50 61 73 73 75 6d 65 20 74 68 61 74 20 61 20 73 74  assume that a st
1db60 61 62 6c 65 20 73 6f 72 74 20 63 6f 6e 73 69 64  able sort consid
1db70 65 72 69 6e 67 20 74 68 65 20 66 69 72 73 74 20  ering the first 
1db80 50 33 20 66 69 65 6c 64 73 20 6f 66 20 65 61 63  P3 fields of eac
1db90 68 0a 2a 2a 20 6b 65 79 20 69 73 20 73 75 66 66  h.** key is suff
1dba0 69 63 69 65 6e 74 20 74 6f 20 70 72 6f 64 75 63  icient to produc
1dbb0 65 20 74 68 65 20 72 65 71 75 69 72 65 64 20 72  e the required r
1dbc0 65 73 75 6c 74 73 2e 0a 2a 2f 0a 63 61 73 65 20  esults..*/.case 
1dbd0 4f 50 5f 53 6f 72 74 65 72 4f 70 65 6e 3a 20 7b  OP_SorterOpen: {
1dbe0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1dbf0 43 78 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70  Cx;..  assert( p
1dc00 4f 70 2d 3e 70 31 3e 3d 30 20 29 3b 0a 20 20 61  Op->p1>=0 );.  a
1dc10 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d  ssert( pOp->p2>=
1dc20 30 20 29 3b 0a 20 20 70 43 78 20 3d 20 61 6c 6c  0 );.  pCx = all
1dc30 6f 63 61 74 65 43 75 72 73 6f 72 28 70 2c 20 70  ocateCursor(p, p
1dc40 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c  Op->p1, pOp->p2,
1dc50 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 53 4f 52   -1, CURTYPE_SOR
1dc60 54 45 52 29 3b 0a 20 20 69 66 28 20 70 43 78 3d  TER);.  if( pCx=
1dc70 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
1dc80 3b 0a 20 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66  ;.  pCx->pKeyInf
1dc90 6f 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79  o = pOp->p4.pKey
1dca0 49 6e 66 6f 3b 0a 20 20 61 73 73 65 72 74 28 20  Info;.  assert( 
1dcb0 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 64  pCx->pKeyInfo->d
1dcc0 62 3d 3d 64 62 20 29 3b 0a 20 20 61 73 73 65 72  b==db );.  asser
1dcd0 74 28 20 70 43 78 2d 3e 70 4b 65 79 49 6e 66 6f  t( pCx->pKeyInfo
1dce0 2d 3e 65 6e 63 3d 3d 45 4e 43 28 64 62 29 20 29  ->enc==ENC(db) )
1dcf0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
1dd00 56 64 62 65 53 6f 72 74 65 72 49 6e 69 74 28 64  VdbeSorterInit(d
1dd10 62 2c 20 70 4f 70 2d 3e 70 33 2c 20 70 43 78 29  b, pOp->p3, pCx)
1dd20 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  ;.  if( rc ) got
1dd30 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
1dd40 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
1dd50 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 71  ../* Opcode: Seq
1dd60 75 65 6e 63 65 54 65 73 74 20 50 31 20 50 32 20  uenceTest P1 P2 
1dd70 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
1dd80 73 3a 20 69 66 28 20 63 75 72 73 6f 72 5b 50 31  s: if( cursor[P1
1dd90 5d 2e 63 74 72 2b 2b 20 29 20 70 63 20 3d 20 50  ].ctr++ ) pc = P
1dda0 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  2.**.** P1 is a 
1ddb0 73 6f 72 74 65 72 20 63 75 72 73 6f 72 2e 20 49  sorter cursor. I
1ddc0 66 20 74 68 65 20 73 65 71 75 65 6e 63 65 20 63  f the sequence c
1ddd0 6f 75 6e 74 65 72 20 69 73 20 63 75 72 72 65 6e  ounter is curren
1dde0 74 6c 79 20 7a 65 72 6f 2c 20 6a 75 6d 70 0a 2a  tly zero, jump.*
1ddf0 2a 20 74 6f 20 50 32 2e 20 52 65 67 61 72 64 6c  * to P2. Regardl
1de00 65 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 6f  ess of whether o
1de10 72 20 6e 6f 74 20 74 68 65 20 6a 75 6d 70 20 69  r not the jump i
1de20 73 20 74 61 6b 65 6e 2c 20 69 6e 63 72 65 6d 65  s taken, increme
1de30 6e 74 20 74 68 65 0a 2a 2a 20 74 68 65 20 73 65  nt the.** the se
1de40 71 75 65 6e 63 65 20 76 61 6c 75 65 2e 0a 2a 2f  quence value..*/
1de50 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e 63  .case OP_Sequenc
1de60 65 54 65 73 74 3a 20 7b 0a 20 20 56 64 62 65 43  eTest: {.  VdbeC
1de70 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 61 73 73  ursor *pC;.  ass
1de80 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1de90 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1dea0 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
1deb0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
1dec0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  ];.  assert( isS
1ded0 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 69  orter(pC) );.  i
1dee0 66 28 20 28 70 43 2d 3e 73 65 71 43 6f 75 6e 74  f( (pC->seqCount
1def0 2b 2b 29 3d 3d 30 20 29 7b 0a 20 20 20 20 67 6f  ++)==0 ){.    go
1df00 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20  to jump_to_p2;. 
1df10 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
1df20 2a 20 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 50 73  * Opcode: OpenPs
1df30 65 75 64 6f 20 50 31 20 50 32 20 50 33 20 2a 20  eudo P1 P2 P3 * 
1df40 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 50  *.** Synopsis: P
1df50 33 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 72 5b 50  3 columns in r[P
1df60 32 5d 0a 2a 2a 0a 2a 2a 20 4f 70 65 6e 20 61 20  2].**.** Open a 
1df70 6e 65 77 20 63 75 72 73 6f 72 20 74 68 61 74 20  new cursor that 
1df80 70 6f 69 6e 74 73 20 74 6f 20 61 20 66 61 6b 65  points to a fake
1df90 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74   table that cont
1dfa0 61 69 6e 73 20 61 20 73 69 6e 67 6c 65 0a 2a 2a  ains a single.**
1dfb0 20 72 6f 77 20 6f 66 20 64 61 74 61 2e 20 20 54   row of data.  T
1dfc0 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68  he content of th
1dfd0 61 74 20 6f 6e 65 20 72 6f 77 20 69 73 20 74 68  at one row is th
1dfe0 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 6d 65 6d  e content of mem
1dff0 6f 72 79 0a 2a 2a 20 72 65 67 69 73 74 65 72 20  ory.** register 
1e000 50 32 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  P2.  In other wo
1e010 72 64 73 2c 20 63 75 72 73 6f 72 20 50 31 20 62  rds, cursor P1 b
1e020 65 63 6f 6d 65 73 20 61 6e 20 61 6c 69 61 73 20  ecomes an alias 
1e030 66 6f 72 20 74 68 65 20 0a 2a 2a 20 4d 45 4d 5f  for the .** MEM_
1e040 42 6c 6f 62 20 63 6f 6e 74 65 6e 74 20 63 6f 6e  Blob content con
1e050 74 61 69 6e 65 64 20 69 6e 20 72 65 67 69 73 74  tained in regist
1e060 65 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 41 20 70  er P2..**.** A p
1e070 73 65 75 64 6f 2d 74 61 62 6c 65 20 63 72 65 61  seudo-table crea
1e080 74 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f  ted by this opco
1e090 64 65 20 69 73 20 75 73 65 64 20 74 6f 20 68 6f  de is used to ho
1e0a0 6c 64 20 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72  ld a single.** r
1e0b0 6f 77 20 6f 75 74 70 75 74 20 66 72 6f 6d 20 74  ow output from t
1e0c0 68 65 20 73 6f 72 74 65 72 20 73 6f 20 74 68 61  he sorter so tha
1e0d0 74 20 74 68 65 20 72 6f 77 20 63 61 6e 20 62 65  t the row can be
1e0e0 20 64 65 63 6f 6d 70 6f 73 65 64 20 69 6e 74 6f   decomposed into
1e0f0 0a 2a 2a 20 69 6e 64 69 76 69 64 75 61 6c 20 63  .** individual c
1e100 6f 6c 75 6d 6e 73 20 75 73 69 6e 67 20 74 68 65  olumns using the
1e110 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
1e120 65 2e 20 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d  e.  The OP_Colum
1e130 6e 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20 74  n opcode.** is t
1e140 68 65 20 6f 6e 6c 79 20 63 75 72 73 6f 72 20 6f  he only cursor o
1e150 70 63 6f 64 65 20 74 68 61 74 20 77 6f 72 6b 73  pcode that works
1e160 20 77 69 74 68 20 61 20 70 73 65 75 64 6f 2d 74   with a pseudo-t
1e170 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 50 33 20 69  able..**.** P3 i
1e180 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
1e190 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65  fields in the re
1e1a0 63 6f 72 64 73 20 74 68 61 74 20 77 69 6c 6c 20  cords that will 
1e1b0 62 65 20 73 74 6f 72 65 64 20 62 79 0a 2a 2a 20  be stored by.** 
1e1c0 74 68 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65  the pseudo-table
1e1d0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ..*/.case OP_Ope
1e1e0 6e 50 73 65 75 64 6f 3a 20 7b 0a 20 20 56 64 62  nPseudo: {.  Vdb
1e1f0 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a 20  eCursor *pCx;.. 
1e200 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1e210 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1e220 20 70 4f 70 2d 3e 70 33 3e 3d 30 20 29 3b 0a 20   pOp->p3>=0 );. 
1e230 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1e240 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1e250 2c 20 70 4f 70 2d 3e 70 33 2c 20 2d 31 2c 20 43  , pOp->p3, -1, C
1e260 55 52 54 59 50 45 5f 50 53 45 55 44 4f 29 3b 0a  URTYPE_PSEUDO);.
1e270 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67    if( pCx==0 ) g
1e280 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43  oto no_mem;.  pC
1e290 78 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a  x->nullRow = 1;.
1e2a0 20 20 70 43 78 2d 3e 75 63 2e 70 73 65 75 64 6f    pCx->uc.pseudo
1e2b0 54 61 62 6c 65 52 65 67 20 3d 20 70 4f 70 2d 3e  TableReg = pOp->
1e2c0 70 32 3b 0a 20 20 70 43 78 2d 3e 69 73 54 61 62  p2;.  pCx->isTab
1e2d0 6c 65 20 3d 20 31 3b 0a 20 20 61 73 73 65 72 74  le = 1;.  assert
1e2e0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
1e2f0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
1e300 70 63 6f 64 65 3a 20 43 6c 6f 73 65 20 50 31 20  pcode: Close P1 
1e310 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c  * * * *.**.** Cl
1e320 6f 73 65 20 61 20 63 75 72 73 6f 72 20 70 72 65  ose a cursor pre
1e330 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 61  viously opened a
1e340 73 20 50 31 2e 20 20 49 66 20 50 31 20 69 73 20  s P1.  If P1 is 
1e350 6e 6f 74 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79  not.** currently
1e360 20 6f 70 65 6e 2c 20 74 68 69 73 20 69 6e 73 74   open, this inst
1e370 72 75 63 74 69 6f 6e 20 69 73 20 61 20 6e 6f 2d  ruction is a no-
1e380 6f 70 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  op..*/.case OP_C
1e390 6c 6f 73 65 3a 20 7b 0a 20 20 61 73 73 65 72 74  lose: {.  assert
1e3a0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
1e3b0 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
1e3c0 6f 72 20 29 3b 0a 20 20 73 71 6c 69 74 65 33 56  or );.  sqlite3V
1e3d0 64 62 65 46 72 65 65 43 75 72 73 6f 72 28 70 2c  dbeFreeCursor(p,
1e3e0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1e3f0 31 5d 29 3b 0a 20 20 70 2d 3e 61 70 43 73 72 5b  1]);.  p->apCsr[
1e400 70 4f 70 2d 3e 70 31 5d 20 3d 20 30 3b 0a 20 20  pOp->p1] = 0;.  
1e410 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 64 65 66  break;.}..#ifdef
1e420 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43   SQLITE_ENABLE_C
1e430 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b 0a  OLUMN_USED_MASK.
1e440 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f 6c 75 6d  /* Opcode: Colum
1e450 6e 73 55 73 65 64 20 50 31 20 2a 20 2a 20 50 34  nsUsed P1 * * P4
1e460 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70   *.**.** This op
1e470 63 6f 64 65 20 28 77 68 69 63 68 20 6f 6e 6c 79  code (which only
1e480 20 65 78 69 73 74 73 20 69 66 20 53 51 4c 69 74   exists if SQLit
1e490 65 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77  e was compiled w
1e4a0 69 74 68 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  ith.** SQLITE_EN
1e4b0 41 42 4c 45 5f 43 4f 4c 55 4d 4e 5f 55 53 45 44  ABLE_COLUMN_USED
1e4c0 5f 4d 41 53 4b 29 20 69 64 65 6e 74 69 66 69 65  _MASK) identifie
1e4d0 73 20 77 68 69 63 68 20 63 6f 6c 75 6d 6e 73 20  s which columns 
1e4e0 6f 66 20 74 68 65 0a 2a 2a 20 74 61 62 6c 65 20  of the.** table 
1e4f0 6f 72 20 69 6e 64 65 78 20 66 6f 72 20 63 75 72  or index for cur
1e500 73 6f 72 20 50 31 20 61 72 65 20 75 73 65 64 2e  sor P1 are used.
1e510 20 20 50 34 20 69 73 20 61 20 36 34 2d 62 69 74    P4 is a 64-bit
1e520 20 69 6e 74 65 67 65 72 0a 2a 2a 20 28 50 34 5f   integer.** (P4_
1e530 49 4e 54 36 34 29 20 69 6e 20 77 68 69 63 68 20  INT64) in which 
1e540 74 68 65 20 66 69 72 73 74 20 36 33 20 62 69 74  the first 63 bit
1e550 73 20 61 72 65 20 6f 6e 65 20 66 6f 72 20 65 61  s are one for ea
1e560 63 68 20 6f 66 20 74 68 65 0a 2a 2a 20 66 69 72  ch of the.** fir
1e570 73 74 20 36 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  st 63 columns of
1e580 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
1e590 64 65 78 20 74 68 61 74 20 61 72 65 20 61 63 74  dex that are act
1e5a0 75 61 6c 6c 79 20 75 73 65 64 0a 2a 2a 20 62 79  ually used.** by
1e5b0 20 74 68 65 20 63 75 72 73 6f 72 2e 20 20 54 68   the cursor.  Th
1e5c0 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74  e high-order bit
1e5d0 20 69 73 20 73 65 74 20 69 66 20 61 6e 79 20 63   is set if any c
1e5e0 6f 6c 75 6d 6e 20 61 66 74 65 72 0a 2a 2a 20 74  olumn after.** t
1e5f0 68 65 20 36 34 74 68 20 69 73 20 75 73 65 64 2e  he 64th is used.
1e600 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6c 75  .*/.case OP_Colu
1e610 6d 6e 73 55 73 65 64 3a 20 7b 0a 20 20 56 64 62  mnsUsed: {.  Vdb
1e620 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 70  eCursor *pC;.  p
1e630 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
1e640 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
1e650 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
1e660 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
1e670 20 20 70 43 2d 3e 6d 61 73 6b 55 73 65 64 20 3d    pC->maskUsed =
1e680 20 2a 28 75 36 34 2a 29 70 4f 70 2d 3e 70 34 2e   *(u64*)pOp->p4.
1e690 70 49 36 34 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pI64;.  break;.}
1e6a0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
1e6b0 64 65 3a 20 53 65 65 6b 47 45 20 50 31 20 50 32  de: SeekGE P1 P2
1e6c0 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f   P3 P4 *.** Syno
1e6d0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50  psis: key=r[P3@P
1e6e0 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73  4].**.** If curs
1e6f0 6f 72 20 50 31 20 72 65 66 65 72 73 20 74 6f 20  or P1 refers to 
1e700 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d  an SQL table (B-
1e710 54 72 65 65 20 74 68 61 74 20 75 73 65 73 20 69  Tree that uses i
1e720 6e 74 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a  nteger keys), .*
1e730 2a 20 75 73 65 20 74 68 65 20 76 61 6c 75 65 20  * use the value 
1e740 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 20 61  in register P3 a
1e750 73 20 74 68 65 20 6b 65 79 2e 20 20 49 66 20 63  s the key.  If c
1e760 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1e770 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1e780 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1e790 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1e7a0 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1e7b0 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1e7c0 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1e7d0 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1e7e0 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1e7f0 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1e800 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1e810 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1e820 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1e830 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1e840 6f 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20  or equal to the 
1e850 6b 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68  key value. If th
1e860 65 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72  ere are no recor
1e870 64 73 20 0a 2a 2a 20 67 72 65 61 74 65 72 20 74  ds .** greater t
1e880 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1e890 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1e8a0 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1e8b0 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1e8c0 2a 2a 20 49 66 20 74 68 65 20 63 75 72 73 6f 72  ** If the cursor
1e8d0 20 50 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75   P1 was opened u
1e8e0 73 69 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f  sing the OPFLAG_
1e8f0 53 45 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65  SEEKEQ flag, the
1e900 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65  n this.** opcode
1e910 20 77 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e   will always lan
1e920 64 20 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68  d on a record th
1e930 61 74 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c  at equally equal
1e940 73 20 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a  s the key, or.**
1e950 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64   else jump immed
1e960 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57  iately to P2.  W
1e970 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69  hen the cursor i
1e980 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c  s OPFLAG_SEEKEQ,
1e990 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20   this.** opcode 
1e9a0 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64  must be followed
1e9b0 20 62 79 20 61 6e 20 49 64 78 4c 45 20 6f 70 63   by an IdxLE opc
1e9c0 6f 64 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ode with the sam
1e9d0 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20  e arguments..** 
1e9e0 54 68 65 20 49 64 78 4c 45 20 6f 70 63 6f 64 65  The IdxLE opcode
1e9f0 20 77 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64   will be skipped
1ea00 20 69 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   if this opcode 
1ea10 73 75 63 63 65 65 64 73 2c 20 62 75 74 20 74 68  succeeds, but th
1ea20 65 0a 2a 2a 20 49 64 78 4c 45 20 6f 70 63 6f 64  e.** IdxLE opcod
1ea30 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f  e will be used o
1ea40 6e 20 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f  n subsequent loo
1ea50 70 20 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a  p iterations..**
1ea60 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1ea70 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
1ea80 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  r configured to 
1ea90 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20  move in forward 
1eaa0 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74  order,.** from t
1eab0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77  he beginning tow
1eac0 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e  ard the end.  In
1ead0 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
1eae0 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63  e cursor is.** c
1eaf0 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65  onfigured to use
1eb00 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e   Next, not Prev.
1eb10 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1eb20 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1eb30 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b 47 74  , SeekLt, SeekGt
1eb40 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f  , SeekLe.*/./* O
1eb50 70 63 6f 64 65 3a 20 53 65 65 6b 47 54 20 50 31  pcode: SeekGT P1
1eb60 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
1eb70 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
1eb80 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 63  3@P4].**.** If c
1eb90 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1eba0 74 6f 20 61 6e 20 53 51 4c 20 74 61 62 6c 65 20  to an SQL table 
1ebb0 28 42 2d 54 72 65 65 20 74 68 61 74 20 75 73 65  (B-Tree that use
1ebc0 73 20 69 6e 74 65 67 65 72 20 6b 65 79 73 29 2c  s integer keys),
1ebd0 20 0a 2a 2a 20 75 73 65 20 74 68 65 20 76 61 6c   .** use the val
1ebe0 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
1ebf0 33 20 61 73 20 61 20 6b 65 79 2e 20 49 66 20 63  3 as a key. If c
1ec00 75 72 73 6f 72 20 50 31 20 72 65 66 65 72 73 20  ursor P1 refers 
1ec10 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c 20 69 6e  .** to an SQL in
1ec20 64 65 78 2c 20 74 68 65 6e 20 50 33 20 69 73 20  dex, then P3 is 
1ec30 74 68 65 20 66 69 72 73 74 20 69 6e 20 61 6e 20  the first in an 
1ec40 61 72 72 61 79 20 6f 66 20 50 34 20 72 65 67 69  array of P4 regi
1ec50 73 74 65 72 73 20 0a 2a 2a 20 74 68 61 74 20 61  sters .** that a
1ec60 72 65 20 75 73 65 64 20 61 73 20 61 6e 20 75 6e  re used as an un
1ec70 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65 79  packed index key
1ec80 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f 73 69 74  . .**.** Reposit
1ec90 69 6f 6e 20 63 75 72 73 6f 72 20 50 31 20 73 6f  ion cursor P1 so
1eca0 20 74 68 61 74 20 20 69 74 20 70 6f 69 6e 74 73   that  it points
1ecb0 20 74 6f 20 74 68 65 20 73 6d 61 6c 6c 65 73 74   to the smallest
1ecc0 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a 20   entry that .** 
1ecd0 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20  is greater than 
1ece0 74 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49  the key value. I
1ecf0 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72  f there are no r
1ed00 65 63 6f 72 64 73 20 67 72 65 61 74 65 72 20 74  ecords greater t
1ed10 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79 20  han .** the key 
1ed20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a 65  and P2 is not ze
1ed30 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  ro, then jump to
1ed40 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20   P2..**.** This 
1ed50 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68  opcode leaves th
1ed60 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75  e cursor configu
1ed70 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 66  red to move in f
1ed80 6f 72 77 61 72 64 20 6f 72 64 65 72 2c 0a 2a 2a  orward order,.**
1ed90 20 66 72 6f 6d 20 74 68 65 20 62 65 67 69 6e 6e   from the beginn
1eda0 69 6e 67 20 74 6f 77 61 72 64 20 74 68 65 20 65  ing toward the e
1edb0 6e 64 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f  nd.  In other wo
1edc0 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20  rds, the cursor 
1edd0 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64  is.** configured
1ede0 20 74 6f 20 75 73 65 20 4e 65 78 74 2c 20 6e 6f   to use Next, no
1edf0 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a 2a 20 53 65  t Prev..**.** Se
1ee00 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e  e also: Found, N
1ee10 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 4c 74 2c  otFound, SeekLt,
1ee20 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65 0a   SeekGe, SeekLe.
1ee30 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65  */./* Opcode: Se
1ee40 65 6b 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  ekLT P1 P2 P3 P4
1ee50 20 2a 20 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   * .** Synopsis:
1ee60 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1ee70 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1ee80 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1ee90 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1eea0 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1eeb0 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1eec0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1eed0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1eee0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1eef0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1ef00 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1ef10 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1ef20 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1ef30 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1ef40 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1ef50 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1ef60 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1ef70 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1ef80 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 20 69  or P1 so that  i
1ef90 74 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  t points to the 
1efa0 6c 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68  largest entry th
1efb0 61 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74  at .** is less t
1efc0 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c 75  han the key valu
1efd0 65 2e 20 49 66 20 74 68 65 72 65 20 61 72 65 20  e. If there are 
1efe0 6e 6f 20 72 65 63 6f 72 64 73 20 6c 65 73 73 20  no records less 
1eff0 74 68 61 6e 20 0a 2a 2a 20 74 68 65 20 6b 65 79  than .** the key
1f000 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74 20 7a   and P2 is not z
1f010 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74  ero, then jump t
1f020 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  o P2..**.** This
1f030 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74   opcode leaves t
1f040 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67  he cursor config
1f050 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20  ured to move in 
1f060 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a  reverse order,.*
1f070 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74  * from the end t
1f080 6f 77 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e  oward the beginn
1f090 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ing.  In other w
1f0a0 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72  ords, the cursor
1f0b0 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65   is.** configure
1f0c0 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e  d to use Prev, n
1f0d0 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 53  ot Next..**.** S
1f0e0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
1f0f0 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65 6b 47 74  NotFound, SeekGt
1f100 2c 20 53 65 65 6b 47 65 2c 20 53 65 65 6b 4c 65  , SeekGe, SeekLe
1f110 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .*/./* Opcode: S
1f120 65 65 6b 4c 45 20 50 31 20 50 32 20 50 33 20 50  eekLE P1 P2 P3 P
1f130 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1f140 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1f150 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1f160 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1f170 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1f180 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1f190 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1f1a0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1f1b0 67 69 73 74 65 72 20 50 33 20 61 73 20 61 20 6b  gister P3 as a k
1f1c0 65 79 2e 20 49 66 20 63 75 72 73 6f 72 20 50 31  ey. If cursor P1
1f1d0 20 72 65 66 65 72 73 20 0a 2a 2a 20 74 6f 20 61   refers .** to a
1f1e0 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20 74 68 65  n SQL index, the
1f1f0 6e 20 50 33 20 69 73 20 74 68 65 20 66 69 72 73  n P3 is the firs
1f200 74 20 69 6e 20 61 6e 20 61 72 72 61 79 20 6f 66  t in an array of
1f210 20 50 34 20 72 65 67 69 73 74 65 72 73 20 0a 2a   P4 registers .*
1f220 2a 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  * that are used 
1f230 61 73 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  as an unpacked i
1f240 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a  ndex key. .**.**
1f250 20 52 65 70 6f 73 69 74 69 6f 6e 20 63 75 72 73   Reposition curs
1f260 6f 72 20 50 31 20 73 6f 20 74 68 61 74 20 69 74  or P1 so that it
1f270 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 6c   points to the l
1f280 61 72 67 65 73 74 20 65 6e 74 72 79 20 74 68 61  argest entry tha
1f290 74 20 0a 2a 2a 20 69 73 20 6c 65 73 73 20 74 68  t .** is less th
1f2a0 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
1f2b0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1f2c0 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1f2d0 63 6f 72 64 73 20 0a 2a 2a 20 6c 65 73 73 20 74  cords .** less t
1f2e0 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
1f2f0 74 68 65 20 6b 65 79 20 61 6e 64 20 50 32 20 69  the key and P2 i
1f300 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
1f310 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a   jump to P2..**.
1f320 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
1f330 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
1f340 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
1f350 6f 76 65 20 69 6e 20 72 65 76 65 72 73 65 20 6f  ove in reverse o
1f360 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
1f370 65 20 65 6e 64 20 74 6f 77 61 72 64 20 74 68 65  e end toward the
1f380 20 62 65 67 69 6e 6e 69 6e 67 2e 20 20 49 6e 20   beginning.  In 
1f390 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
1f3a0 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
1f3b0 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
1f3c0 50 72 65 76 2c 20 6e 6f 74 20 4e 65 78 74 2e 0a  Prev, not Next..
1f3d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63 75 72  **.** If the cur
1f3e0 73 6f 72 20 50 31 20 77 61 73 20 6f 70 65 6e 65  sor P1 was opene
1f3f0 64 20 75 73 69 6e 67 20 74 68 65 20 4f 50 46 4c  d using the OPFL
1f400 41 47 5f 53 45 45 4b 45 51 20 66 6c 61 67 2c 20  AG_SEEKEQ flag, 
1f410 74 68 65 6e 20 74 68 69 73 0a 2a 2a 20 6f 70 63  then this.** opc
1f420 6f 64 65 20 77 69 6c 6c 20 61 6c 77 61 79 73 20  ode will always 
1f430 6c 61 6e 64 20 6f 6e 20 61 20 72 65 63 6f 72 64  land on a record
1f440 20 74 68 61 74 20 65 71 75 61 6c 6c 79 20 65 71   that equally eq
1f450 75 61 6c 73 20 74 68 65 20 6b 65 79 2c 20 6f 72  uals the key, or
1f460 0a 2a 2a 20 65 6c 73 65 20 6a 75 6d 70 20 69 6d  .** else jump im
1f470 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
1f480 20 20 57 68 65 6e 20 74 68 65 20 63 75 72 73 6f    When the curso
1f490 72 20 69 73 20 4f 50 46 4c 41 47 5f 53 45 45 4b  r is OPFLAG_SEEK
1f4a0 45 51 2c 20 74 68 69 73 0a 2a 2a 20 6f 70 63 6f  EQ, this.** opco
1f4b0 64 65 20 6d 75 73 74 20 62 65 20 66 6f 6c 6c 6f  de must be follo
1f4c0 77 65 64 20 62 79 20 61 6e 20 49 64 78 47 45 20  wed by an IdxGE 
1f4d0 6f 70 63 6f 64 65 20 77 69 74 68 20 74 68 65 20  opcode with the 
1f4e0 73 61 6d 65 20 61 72 67 75 6d 65 6e 74 73 2e 0a  same arguments..
1f4f0 2a 2a 20 54 68 65 20 49 64 78 47 45 20 6f 70 63  ** The IdxGE opc
1f500 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 6b 69 70  ode will be skip
1f510 70 65 64 20 69 66 20 74 68 69 73 20 6f 70 63 6f  ped if this opco
1f520 64 65 20 73 75 63 63 65 65 64 73 2c 20 62 75 74  de succeeds, but
1f530 20 74 68 65 0a 2a 2a 20 49 64 78 47 45 20 6f 70   the.** IdxGE op
1f540 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65  code will be use
1f550 64 20 6f 6e 20 73 75 62 73 65 71 75 65 6e 74 20  d on subsequent 
1f560 6c 6f 6f 70 20 69 74 65 72 61 74 69 6f 6e 73 2e  loop iterations.
1f570 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
1f580 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64   Found, NotFound
1f590 2c 20 53 65 65 6b 47 74 2c 20 53 65 65 6b 47 65  , SeekGt, SeekGe
1f5a0 2c 20 53 65 65 6b 4c 74 0a 2a 2f 0a 63 61 73 65  , SeekLt.*/.case
1f5b0 20 4f 50 5f 53 65 65 6b 4c 54 3a 20 20 20 20 20   OP_SeekLT:     
1f5c0 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f5d0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1f5e0 4c 45 3a 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  LE:         /* j
1f5f0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
1f600 20 4f 50 5f 53 65 65 6b 47 45 3a 20 20 20 20 20   OP_SeekGE:     
1f610 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
1f620 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b   */.case OP_Seek
1f630 47 54 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 6a  GT: {       /* j
1f640 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
1f650 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
1f660 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
1f670 65 73 75 6c 74 20 2a 2f 0a 20 20 69 6e 74 20 6f  esult */.  int o
1f680 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  c;            /*
1f690 20 4f 70 63 6f 64 65 20 2a 2f 0a 20 20 56 64 62   Opcode */.  Vdb
1f6a0 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20 20  eCursor *pC;    
1f6b0 2f 2a 20 54 68 65 20 63 75 72 73 6f 72 20 74 6f  /* The cursor to
1f6c0 20 73 65 65 6b 20 2a 2f 0a 20 20 55 6e 70 61 63   seek */.  Unpac
1f6d0 6b 65 64 52 65 63 6f 72 64 20 72 3b 20 20 2f 2a  kedRecord r;  /*
1f6e0 20 54 68 65 20 6b 65 79 20 74 6f 20 73 65 65 6b   The key to seek
1f6f0 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 46   for */.  int nF
1f700 69 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  ield;        /* 
1f710 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
1f720 73 20 6f 72 20 66 69 65 6c 64 73 20 69 6e 20 74  s or fields in t
1f730 68 65 20 6b 65 79 20 2a 2f 0a 20 20 69 36 34 20  he key */.  i64 
1f740 69 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 2f  iKey;          /
1f750 2a 20 54 68 65 20 72 6f 77 69 64 20 77 65 20 61  * The rowid we a
1f760 72 65 20 74 6f 20 73 65 65 6b 20 74 6f 20 2a 2f  re to seek to */
1f770 0a 20 20 69 6e 74 20 65 71 4f 6e 6c 79 3b 20 20  .  int eqOnly;  
1f780 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 69 6e        /* Only in
1f790 74 65 72 65 73 74 65 64 20 69 6e 20 3d 3d 20 72  terested in == r
1f7a0 65 73 75 6c 74 73 20 2a 2f 0a 0a 20 20 61 73 73  esults */..  ass
1f7b0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
1f7c0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
1f7d0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
1f7e0 74 28 20 70 4f 70 2d 3e 70 32 21 3d 30 20 29 3b  t( pOp->p2!=0 );
1f7f0 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
1f800 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
1f810 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
1f820 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
1f830 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
1f840 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
1f850 20 4f 50 5f 53 65 65 6b 4c 45 20 3d 3d 20 4f 50   OP_SeekLE == OP
1f860 5f 53 65 65 6b 4c 54 2b 31 20 29 3b 0a 20 20 61  _SeekLT+1 );.  a
1f870 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45  ssert( OP_SeekGE
1f880 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 32 20   == OP_SeekLT+2 
1f890 29 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f  );.  assert( OP_
1f8a0 53 65 65 6b 47 54 20 3d 3d 20 4f 50 5f 53 65 65  SeekGT == OP_See
1f8b0 6b 4c 54 2b 33 20 29 3b 0a 20 20 61 73 73 65 72  kLT+3 );.  asser
1f8c0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
1f8d0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f8e0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
1f8f0 29 3b 0a 20 20 6f 63 20 3d 20 70 4f 70 2d 3e 6f  );.  oc = pOp->o
1f900 70 63 6f 64 65 3b 0a 20 20 65 71 4f 6e 6c 79 20  pcode;.  eqOnly 
1f910 3d 20 30 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52  = 0;.  pC->nullR
1f920 6f 77 20 3d 20 30 3b 0a 23 69 66 64 65 66 20 53  ow = 0;.#ifdef S
1f930 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43  QLITE_DEBUG.  pC
1f940 2d 3e 73 65 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e  ->seekOp = pOp->
1f950 6f 70 63 6f 64 65 3b 0a 23 65 6e 64 69 66 0a 0a  opcode;.#endif..
1f960 20 20 69 66 28 20 70 43 2d 3e 69 73 54 61 62 6c    if( pC->isTabl
1f970 65 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65 20  e ){.    /* The 
1f980 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 20 66 6c  BTREE_SEEK_EQ fl
1f990 61 67 20 69 73 20 6f 6e 6c 79 20 73 65 74 20 6f  ag is only set o
1f9a0 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 73 20  n index cursors 
1f9b0 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 73  */.    assert( s
1f9c0 71 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f  qlite3BtreeCurso
1f9d0 72 48 61 73 48 69 6e 74 28 70 43 2d 3e 75 63 2e  rHasHint(pC->uc.
1f9e0 70 43 75 72 73 6f 72 2c 20 42 54 52 45 45 5f 53  pCursor, BTREE_S
1f9f0 45 45 4b 5f 45 51 29 3d 3d 30 0a 20 20 20 20 20  EEK_EQ)==0.     
1fa00 20 20 20 20 20 20 20 20 20 7c 7c 20 43 4f 52 52           || CORR
1fa10 55 50 54 5f 44 42 20 29 3b 0a 0a 20 20 20 20 2f  UPT_DB );..    /
1fa20 2a 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75  * The input valu
1fa30 65 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65  e in P3 might be
1fa40 20 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e   of any type: in
1fa50 74 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72  teger, real, str
1fa60 69 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62  ing,.    ** blob
1fa70 2c 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20  , or NULL.  But 
1fa80 69 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61  it needs to be a
1fa90 6e 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65  n integer before
1faa0 20 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a   we can do.    *
1fab0 2a 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63  * the seek, so c
1fac0 6f 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20  onvert it. */.  
1fad0 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70    pIn3 = &aMem[p
1fae0 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28  Op->p3];.    if(
1faf0 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20   (pIn3->flags & 
1fb00 28 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61  (MEM_Int|MEM_Rea
1fb10 6c 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d  l|MEM_Str))==MEM
1fb20 5f 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70  _Str ){.      ap
1fb30 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  plyNumericAffini
1fb40 74 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20  ty(pIn3, 0);.   
1fb50 20 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71   }.    iKey = sq
1fb60 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
1fb70 65 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a  e(pIn3);..    /*
1fb80 20 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65   If the P3 value
1fb90 20 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f   could not be co
1fba0 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
1fbb0 69 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a  integer without.
1fbc0 20 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69      ** loss of i
1fbd0 6e 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e  nformation, then
1fbe0 20 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73   special process
1fbf0 69 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e  ing is required.
1fc00 2e 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70  .. */.    if( (p
1fc10 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
1fc20 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  _Int)==0 ){.    
1fc30 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
1fc40 67 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d  gs & MEM_Real)==
1fc50 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
1fc60 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1fc70 63 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72  cannot be conver
1fc80 74 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e  ted into any kin
1fc90 64 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20  d of a number,. 
1fca0 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74         ** then t
1fcb0 68 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70  he seek is not p
1fcc0 6f 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70  ossible, so jump
1fcd0 20 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20   to P2 */.      
1fce0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
1fcf0 6e 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d  n(1,2); goto jum
1fd00 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20  p_to_p2;.       
1fd10 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
1fd20 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65  .      /* If the
1fd30 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69   approximation i
1fd40 4b 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68  Key is larger th
1fd50 61 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65  an the actual re
1fd60 61 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20  al search.      
1fd70 2a 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74  ** term, substit
1fd80 75 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64  ute >= for > and
1fd90 20 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20   < for <=. e.g. 
1fda0 69 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65  if the search te
1fdb0 72 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34  rm.      ** is 4
1fdc0 2e 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  .9 and the integ
1fdd0 65 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e  er approximation
1fde0 20 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20   5:.      **.   
1fdf0 20 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20     **        (x 
1fe00 3e 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20  >  4.9)    ->   
1fe10 20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20    (x >= 5).     
1fe20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d   **        (x <=
1fe30 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20   4.9)    ->     
1fe40 28 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a  (x <  5).      *
1fe50 2f 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33  /.      if( pIn3
1fe60 2d 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b  ->u.r<(double)iK
1fe70 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  ey ){.        as
1fe80 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d  sert( OP_SeekGE=
1fe90 3d 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29  =(OP_SeekGT-1) )
1fea0 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
1feb0 28 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50  ( OP_SeekLT==(OP
1fec0 5f 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20  _SeekLE-1) );.  
1fed0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f        assert( (O
1fee0 50 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30  P_SeekLE & 0x000
1fef0 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26  1)==(OP_SeekGT &
1ff00 20 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20   0x0001) );.    
1ff10 20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78      if( (oc & 0x
1ff20 30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47  0001)==(OP_SeekG
1ff30 54 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63  T & 0x0001) ) oc
1ff40 2d 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20  --;.      }..   
1ff50 20 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70     /* If the app
1ff60 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20  roximation iKey 
1ff70 69 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20  is smaller than 
1ff80 74 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20  the actual real 
1ff90 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20  search.      ** 
1ffa0 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65  term, substitute
1ffb0 20 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20   <= for < and > 
1ffc0 66 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20  for >=.  */.    
1ffd0 20 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d    else if( pIn3-
1ffe0 3e 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r>(double)iKe
1fff0 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
20000 65 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d  ert( OP_SeekLE==
20010 28 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b  (OP_SeekLT+1) );
20020 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
20030 20 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f   OP_SeekGT==(OP_
20040 53 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20  SeekGE+1) );.   
20050 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
20060 5f 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31  _SeekLT & 0x0001
20070 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20  )==(OP_SeekGE & 
20080 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
20090 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
200a0 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54  001)==(OP_SeekLT
200b0 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b   & 0x0001) ) oc+
200c0 2b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  +;.      }.    }
200d0 20 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74   .    rc = sqlit
200e0 65 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70  e3BtreeMovetoUnp
200f0 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75  acked(pC->uc.pCu
20100 72 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b  rsor, 0, (u64)iK
20110 65 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20  ey, 0, &res);.  
20120 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67    pC->movetoTarg
20130 65 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55  et = iKey;  /* U
20140 73 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65  sed by OP_Delete
20150 20 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d   */.    if( rc!=
20160 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20170 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20180 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20190 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f  }.  }else{.    /
201a0 2a 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77  * For a cursor w
201b0 69 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45  ith the BTREE_SE
201c0 45 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79  EK_EQ hint, only
201d0 20 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61   the OP_SeekGE a
201e0 6e 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65  nd.    ** OP_See
201f0 6b 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20  kLE opcodes are 
20200 61 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65  allowed, and the
20210 73 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64  se must be immed
20220 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a  iately followed.
20230 20 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f      ** by an OP_
20240 49 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c  IdxGT or OP_IdxL
20250 54 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63  T opcode, respec
20260 74 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65  tively, with the
20270 20 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a   same key..    *
20280 2f 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  /.    if( sqlite
20290 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
202a0 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
202b0 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
202c0 51 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e  Q) ){.      eqOn
202d0 6c 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73  ly = 1;.      as
202e0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
202f0 65 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  e==OP_SeekGE || 
20300 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
20310 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20  SeekLE );.      
20320 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f  assert( pOp[1].o
20330 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20  pcode==OP_IdxLT 
20340 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65  || pOp[1].opcode
20350 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20  ==OP_IdxGT );.  
20360 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20370 31 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31  1].p1==pOp[0].p1
20380 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
20390 28 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70  ( pOp[1].p2==pOp
203a0 5b 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20  [0].p2 );.      
203b0 61 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70  assert( pOp[1].p
203c0 33 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a  3==pOp[0].p3 );.
203d0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
203e0 70 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30  p[1].p4.i==pOp[0
203f0 5d 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a  ].p4.i );.    }.
20400 0a 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  .    nField = pO
20410 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73  p->p4.i;.    ass
20420 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
20430 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
20440 20 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64    assert( nField
20450 3e 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79  >0 );.    r.pKey
20460 49 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49  Info = pC->pKeyI
20470 6e 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c  nfo;.    r.nFiel
20480 64 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b  d = (u16)nField;
20490 0a 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78  ..    /* The nex
204a0 74 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63  t line of code c
204b0 6f 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f  omputes as follo
204c0 77 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a  ws, only faster:
204d0 0a 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63  .    **   if( oc
204e0 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f  ==OP_SeekGT || o
204f0 63 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a  c==OP_SeekLE ){.
20500 20 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66      **     r.def
20510 61 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20  ault_rc = -1;.  
20520 20 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20    **   }else{.  
20530 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75    **     r.defau
20540 6c 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20  lt_rc = +1;.    
20550 2a 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20  **   }.    */.  
20560 20 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d    r.default_rc =
20570 20 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f   ((1 & (oc - OP_
20580 53 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20  SeekLT)) ? -1 : 
20590 2b 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  +1);.    assert(
205a0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c   oc!=OP_SeekGT |
205b0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
205c0 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
205d0 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20  ( oc!=OP_SeekLE 
205e0 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
205f0 3d 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =-1 );.    asser
20600 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45  t( oc!=OP_SeekGE
20610 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20620 3d 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65  ==+1 );.    asse
20630 72 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c  rt( oc!=OP_SeekL
20640 54 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72  T || r.default_r
20650 63 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e  c==+1 );..    r.
20660 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
20670 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
20680 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
20690 20 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b   int i; for(i=0;
206a0 20 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b   i<r.nField; i++
206b0 29 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56  ) assert( memIsV
206c0 61 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29  alid(&r.aMem[i])
206d0 20 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20   ); }.#endif.   
206e0 20 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20   r.eqSeen = 0;. 
206f0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
20700 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b  treeMovetoUnpack
20710 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  ed(pC->uc.pCurso
20720 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65  r, &r, 0, 0, &re
20730 73 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d  s);.    if( rc!=
20740 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
20750 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
20760 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
20770 7d 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79  }.    if( eqOnly
20780 20 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20   && r.eqSeen==0 
20790 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
207a0 20 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20   res!=0 );.     
207b0 20 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66   goto seek_not_f
207c0 6f 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ound;.    }.  }.
207d0 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
207e0 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e  veto = 0;.  pC->
207f0 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
20800 43 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65  CHE_STALE;.#ifde
20810 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
20820 73 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63  sqlite3_search_c
20830 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20  ount++;.#endif. 
20840 20 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b   if( oc>=OP_Seek
20850 47 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f  GE ){  assert( o
20860 63 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20  c==OP_SeekGE || 
20870 6f 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b  oc==OP_SeekGT );
20880 0a 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c  .    if( res<0 |
20890 7c 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d  | (res==0 && oc=
208a0 3d 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20  =OP_SeekGT) ){. 
208b0 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
208c0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
208d0 42 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63  BtreeNext(pC->uc
208e0 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b  .pCursor, &res);
208f0 0a 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53  .      if( rc!=S
20900 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20  QLITE_OK ) goto 
20910 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
20920 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  or;.    }else{. 
20930 20 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20       res = 0;.  
20940 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20    }.  }else{.   
20950 20 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f   assert( oc==OP_
20960 53 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50  SeekLT || oc==OP
20970 5f 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69  _SeekLE );.    i
20980 66 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73  f( res>0 || (res
20990 3d 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65  ==0 && oc==OP_Se
209a0 65 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72  ekLT) ){.      r
209b0 65 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63  es = 0;.      rc
209c0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
209d0 72 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70  revious(pC->uc.p
209e0 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20  Cursor, &res);. 
209f0 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
20a00 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62  ITE_OK ) goto ab
20a10 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
20a20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
20a30 20 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20     /* res might 
20a40 62 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61  be negative beca
20a50 75 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73  use the table is
20a60 20 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74   empty.  Check t
20a70 6f 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69  o.      ** see i
20a80 66 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61  f this is the ca
20a90 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  se..      */.   
20aa0 20 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33     res = sqlite3
20ab0 42 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e  BtreeEof(pC->uc.
20ac0 70 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a  pCursor);.    }.
20ad0 20 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75    }.seek_not_fou
20ae0 6e 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  nd:.  assert( pO
20af0 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62  p->p2>0 );.  Vdb
20b00 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
20b10 21 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65  !=0,2);.  if( re
20b20 73 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  s ){.    goto ju
20b30 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73  mp_to_p2;.  }els
20b40 65 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a  e if( eqOnly ){.
20b50 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
20b60 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64  1].opcode==OP_Id
20b70 78 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70  xLT || pOp[1].op
20b80 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29  code==OP_IdxGT )
20b90 3b 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20  ;.    pOp++; /* 
20ba0 53 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c  Skip the OP_IdxL
20bb0 74 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68  t or OP_IdxGT th
20bc0 61 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20  at follows */.  
20bd0 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
20be0 20 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50   Opcode: Found P
20bf0 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20  1 P2 P3 P4 *.** 
20c00 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b  Synopsis: key=r[
20c10 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20  P3@P4].**.** If 
20c20 50 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73  P4==0 then regis
20c30 74 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62  ter P3 holds a b
20c40 6c 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20  lob constructed 
20c50 62 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20  by MakeRecord.  
20c60 49 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20  If.** P4>0 then 
20c70 72 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74  register P3 is t
20c80 68 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72  he first of P4 r
20c90 65 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f  egisters that fo
20ca0 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a  rm an unpacked.*
20cb0 2a 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20  * record..**.** 
20cc0 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
20cd0 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
20ce0 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
20cf0 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
20d00 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70  and P4.** is a p
20d10 72 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74  refix of any ent
20d20 72 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20  ry in P1 then a 
20d30 6a 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20  jump is made to 
20d40 50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20  P2 and.** P1 is 
20d50 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20d60 20 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e   the matching en
20d70 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  try..**.** This 
20d80 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73  operation leaves
20d90 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
20da0 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
20db0 63 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63  can be.** advanc
20dc0 65 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72  ed in the forwar
20dd0 64 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68  d direction.  Th
20de0 65 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e Next instructi
20df0 6f 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a  on will work,.**
20e00 20 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65   but not the Pre
20e10 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  v instruction..*
20e20 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e  *.** See also: N
20e30 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c  otFound, NoConfl
20e40 69 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20  ict, NotExists. 
20e50 53 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63  SeekGe.*/./* Opc
20e60 6f 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31  ode: NotFound P1
20e70 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20e80 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20e90 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
20ea0 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
20eb0 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
20ec0 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
20ed0 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
20ee0 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
20ef0 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
20f00 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
20f10 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
20f20 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
20f30 20 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20   record..** .** 
20f40 43 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20  Cursor P1 is on 
20f50 61 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20  an index btree. 
20f60 20 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69   If the record i
20f70 64 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20  dentified by P3 
20f80 61 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74  and P4.** is not
20f90 20 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61   the prefix of a
20fa0 6e 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74  ny entry in P1 t
20fb0 68 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61  hen a jump is ma
20fc0 64 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31  de to P2.  If P1
20fd0 20 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69   .** does contai
20fe0 6e 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65  n an entry whose
20ff0 20 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20   prefix matches 
21000 74 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64  the P3/P4 record
21010 20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a   then control.**
21020 20 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74   falls through t
21030 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
21040 75 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73  uction and P1 is
21050 20 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61   left pointing a
21060 74 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e  t the.** matchin
21070 67 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54  g entry..**.** T
21080 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65  his operation le
21090 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  aves the cursor 
210a0 69 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65  in a state where
210b0 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a   it cannot be.**
210c0 20 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74   advanced in eit
210d0 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20  her direction.  
210e0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
210f0 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65  the Next and Pre
21100 76 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20  v.** opcodes do 
21110 6e 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74  not work after t
21120 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a  his operation..*
21130 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
21140 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c  ound, NotExists,
21150 20 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f   NoConflict.*/./
21160 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66  * Opcode: NoConf
21170 6c 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34  lict P1 P2 P3 P4
21180 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
21190 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a  key=r[P3@P4].**.
211a0 2a 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e  ** If P4==0 then
211b0 20 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c   register P3 hol
211c0 64 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72  ds a blob constr
211d0 75 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63  ucted by MakeRec
211e0 6f 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30  ord.  If.** P4>0
211f0 20 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50   then register P
21200 33 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f  3 is the first o
21210 66 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74  f P4 registers t
21220 68 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61  hat form an unpa
21230 63 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a  cked.** record..
21240 2a 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31  ** .** Cursor P1
21250 20 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20   is on an index 
21260 62 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72  btree.  If the r
21270 65 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64  ecord identified
21280 20 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a   by P3 and P4.**
21290 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55   contains any NU
212a0 4c 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69  LL value, jump i
212b0 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
212c0 2e 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20  .  If all terms 
212d0 6f 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64  of the.** record
212e0 20 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68   are not-NULL th
212f0 65 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f  en a check is do
21300 6e 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  ne to determine 
21310 69 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68  if any row in th
21320 65 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74  e.** P1 index bt
21330 72 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69  ree has a matchi
21340 6e 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20  ng key prefix.  
21350 49 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20  If there are no 
21360 6d 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a  matches, jump.**
21370 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
21380 50 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  P2.  If there is
21390 20 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74   a match, fall t
213a0 68 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65  hrough and leave
213b0 20 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f   the P1.** curso
213c0 72 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68  r pointing to th
213d0 65 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a  e matching row..
213e0 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
213f0 65 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20  e is similar to 
21400 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68  OP_NotFound with
21410 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20   the exceptions 
21420 74 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e  that the.** bran
21430 63 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b  ch is always tak
21440 65 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f  en if any part o
21450 66 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79  f the search key
21460 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a   input is NULL..
21470 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61  **.** This opera
21480 74 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20  tion leaves the 
21490 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
214a0 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
214b0 74 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64  t be.** advanced
214c0 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
214d0 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
214e0 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
214f0 61 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f  and Prev.** opco
21500 64 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20  des do not work 
21510 61 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61  after this opera
21520 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  tion..**.** See 
21530 61 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20  also: NotFound, 
21540 46 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73  Found, NotExists
21550 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f  .*/.case OP_NoCo
21560 6e 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a  nflict:     /* j
21570 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65  ump, in3 */.case
21580 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20   OP_NotFound:   
21590 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
215a0 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e   */.case OP_Foun
215b0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
215c0 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e  ump, in3 */.  in
215d0 74 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b  t alreadyExists;
215e0 0a 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b  .  int takeJump;
215f0 0a 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62  .  int ii;.  Vdb
21600 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
21610 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
21620 65 64 52 65 63 6f 72 64 20 2a 70 46 72 65 65 3b  edRecord *pFree;
21630 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21640 64 20 2a 70 49 64 78 4b 65 79 3b 0a 20 20 55 6e  d *pIdxKey;.  Un
21650 70 61 63 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a  packedRecord r;.
21660 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
21670 45 53 54 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  EST.  if( pOp->o
21680 70 63 6f 64 65 21 3d 4f 50 5f 4e 6f 43 6f 6e 66  pcode!=OP_NoConf
21690 6c 69 63 74 20 29 20 73 71 6c 69 74 65 33 5f 66  lict ) sqlite3_f
216a0 6f 75 6e 64 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65  ound_count++;.#e
216b0 6e 64 69 66 0a 0a 20 20 61 73 73 65 72 74 28 20  ndif..  assert( 
216c0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
216d0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
216e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
216f0 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
21700 54 33 32 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  T32 );.  pC = p-
21710 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
21720 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
21730 20 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   );.#ifdef SQLIT
21740 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
21750 65 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f  ekOp = pOp->opco
21760 64 65 3b 0a 23 65 6e 64 69 66 0a 20 20 70 49 6e  de;.#endif.  pIn
21770 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
21780 33 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43  3];.  assert( pC
21790 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
217a0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
217b0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
217c0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
217d0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
217e0 65 3d 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  e==0 );.  if( pO
217f0 70 2d 3e 70 34 2e 69 3e 30 20 29 7b 0a 20 20 20  p->p4.i>0 ){.   
21800 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43   r.pKeyInfo = pC
21810 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 20 20  ->pKeyInfo;.    
21820 72 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29  r.nField = (u16)
21830 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 72  pOp->p4.i;.    r
21840 2e 61 4d 65 6d 20 3d 20 70 49 6e 33 3b 0a 23 69  .aMem = pIn3;.#i
21850 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21860 47 0a 20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20  G.    for(ii=0; 
21870 69 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 69 2b  ii<r.nField; ii+
21880 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74  +){.      assert
21890 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e  ( memIsValid(&r.
218a0 61 4d 65 6d 5b 69 69 5d 29 20 29 3b 0a 20 20 20  aMem[ii]) );.   
218b0 20 20 20 61 73 73 65 72 74 28 20 28 72 2e 61 4d     assert( (r.aM
218c0 65 6d 5b 69 69 5d 2e 66 6c 61 67 73 20 26 20 4d  em[ii].flags & M
218d0 45 4d 5f 5a 65 72 6f 29 3d 3d 30 20 7c 7c 20 72  EM_Zero)==0 || r
218e0 2e 61 4d 65 6d 5b 69 69 5d 2e 6e 3d 3d 30 20 29  .aMem[ii].n==0 )
218f0 3b 0a 20 20 20 20 20 20 69 66 28 20 69 69 20 29  ;.      if( ii )
21900 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
21910 70 4f 70 2d 3e 70 33 2b 69 69 2c 20 26 72 2e 61  pOp->p3+ii, &r.a
21920 4d 65 6d 5b 69 69 5d 29 3b 0a 20 20 20 20 7d 0a  Mem[ii]);.    }.
21930 23 65 6e 64 69 66 0a 20 20 20 20 70 49 64 78 4b  #endif.    pIdxK
21940 65 79 20 3d 20 26 72 3b 0a 20 20 20 20 70 46 72  ey = &r;.    pFr
21950 65 65 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ee = 0;.  }else{
21960 0a 20 20 20 20 70 46 72 65 65 20 3d 20 70 49 64  .    pFree = pId
21970 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
21980 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
21990 65 63 6f 72 64 28 70 43 2d 3e 70 4b 65 79 49 6e  ecord(pC->pKeyIn
219a0 66 6f 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  fo);.    if( pId
219b0 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  xKey==0 ) goto n
219c0 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73 65 72  o_mem;.    asser
219d0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26  t( pIn3->flags &
219e0 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20 20 20   MEM_Blob );.   
219f0 20 28 76 6f 69 64 29 45 78 70 61 6e 64 42 6c 6f   (void)ExpandBlo
21a00 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73 71 6c  b(pIn3);.    sql
21a10 69 74 65 33 56 64 62 65 52 65 63 6f 72 64 55 6e  ite3VdbeRecordUn
21a20 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49 6e 66  pack(pC->pKeyInf
21a30 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49 6e 33  o, pIn3->n, pIn3
21a40 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b 0a 20  ->z, pIdxKey);. 
21a50 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e 64 65   }.  pIdxKey->de
21a60 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20  fault_rc = 0;.  
21a70 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a 20 20  takeJump = 0;.  
21a80 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  if( pOp->opcode=
21a90 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
21aa0 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74 68 65  {.    /* For the
21ab0 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 6f   OP_NoConflict o
21ac0 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68 65 20  pcode, take the 
21ad0 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66 20 74  jump if any of t
21ae0 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75 74 20  he.    ** input 
21af0 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c 4c 2c  fields are NULL,
21b00 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79 20 77   since any key w
21b10 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c 6c 20  ith a NULL will 
21b20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e 66 6c  not.    ** confl
21b30 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ict */.    for(i
21b40 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65 79 2d  i=0; ii<pIdxKey-
21b50 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29 7b 0a  >nField; ii++){.
21b60 20 20 20 20 20 20 69 66 28 20 70 49 64 78 4b 65        if( pIdxKe
21b70 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c 61 67  y->aMem[ii].flag
21b80 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  s & MEM_Null ){.
21b90 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75 6d 70          takeJump
21ba0 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 62 72   = 1;.        br
21bb0 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
21bc0 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71   }.  }.  rc = sq
21bd0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
21be0 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63 2e  Unpacked(pC->uc.
21bf0 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b 65 79  pCursor, pIdxKey
21c00 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20  , 0, 0, &res);. 
21c10 20 69 66 28 20 70 46 72 65 65 20 29 20 73 71 6c   if( pFree ) sql
21c20 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 70  ite3DbFree(db, p
21c30 46 72 65 65 29 3b 0a 20 20 69 66 28 20 72 63 21  Free);.  if( rc!
21c40 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
21c50 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
21c60 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
21c70 20 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20   pC->seekResult 
21c80 3d 20 72 65 73 3b 0a 20 20 61 6c 72 65 61 64 79  = res;.  already
21c90 45 78 69 73 74 73 20 3d 20 28 72 65 73 3d 3d 30  Exists = (res==0
21ca0 29 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77  );.  pC->nullRow
21cb0 20 3d 20 31 2d 61 6c 72 65 61 64 79 45 78 69 73   = 1-alreadyExis
21cc0 74 73 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72  ts;.  pC->deferr
21cd0 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20  edMoveto = 0;.  
21ce0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
21cf0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
21d00 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65   if( pOp->opcode
21d10 3d 3d 4f 50 5f 46 6f 75 6e 64 20 29 7b 0a 20 20  ==OP_Found ){.  
21d20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
21d30 6e 28 61 6c 72 65 61 64 79 45 78 69 73 74 73 21  n(alreadyExists!
21d40 3d 30 2c 32 29 3b 0a 20 20 20 20 69 66 28 20 61  =0,2);.    if( a
21d50 6c 72 65 61 64 79 45 78 69 73 74 73 20 29 20 67  lreadyExists ) g
21d60 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a  oto jump_to_p2;.
21d70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
21d80 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 74 61 6b  eBranchTaken(tak
21d90 65 4a 75 6d 70 7c 7c 61 6c 72 65 61 64 79 45 78  eJump||alreadyEx
21da0 69 73 74 73 3d 3d 30 2c 32 29 3b 0a 20 20 20 20  ists==0,2);.    
21db0 69 66 28 20 74 61 6b 65 4a 75 6d 70 20 7c 7c 20  if( takeJump || 
21dc0 21 61 6c 72 65 61 64 79 45 78 69 73 74 73 20 29  !alreadyExists )
21dd0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
21de0 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
21df0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65  ../* Opcode: See
21e00 6b 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  kRowid P1 P2 P3 
21e10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
21e20 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a 2a   intkey=r[P3].**
21e30 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
21e40 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72 20  dex of a cursor 
21e50 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20 74  open on an SQL t
21e60 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74 68  able btree (with
21e70 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79 73   integer.** keys
21e80 29 2e 20 20 49 66 20 72 65 67 69 73 74 65 72 20  ).  If register 
21e90 50 33 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e 74  P3 does not cont
21ea0 61 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 6f  ain an integer o
21eb0 72 20 69 66 20 50 31 20 64 6f 65 73 20 6e 6f 74  r if P1 does not
21ec0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 20 61 20 72 65  .** contain a re
21ed0 63 6f 72 64 20 77 69 74 68 20 72 6f 77 69 64 20  cord with rowid 
21ee0 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d  P3 then jump imm
21ef0 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 20  ediately to P2. 
21f00 20 0a 2a 2a 20 4f 72 2c 20 69 66 20 50 32 20 69   .** Or, if P2 i
21f10 73 20 30 2c 20 72 61 69 73 65 20 61 6e 20 53 51  s 0, raise an SQ
21f20 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72 72  LITE_CORRUPT err
21f30 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20 63  or. If P1 does c
21f40 6f 6e 74 61 69 6e 0a 2a 2a 20 61 20 72 65 63 6f  ontain.** a reco
21f50 72 64 20 77 69 74 68 20 72 6f 77 69 64 20 50 33  rd with rowid P3
21f60 20 74 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20   then .** leave 
21f70 74 68 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  the cursor point
21f80 69 6e 67 20 61 74 20 74 68 61 74 20 72 65 63 6f  ing at that reco
21f90 72 64 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f  rd and fall thro
21fa0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a  ugh to the next.
21fb0 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  ** instruction..
21fc0 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74  **.** The OP_Not
21fd0 45 78 69 73 74 73 20 6f 70 63 6f 64 65 20 70 65  Exists opcode pe
21fe0 72 66 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20  rforms the same 
21ff0 6f 70 65 72 61 74 69 6f 6e 2c 20 62 75 74 20 77  operation, but w
22000 69 74 68 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  ith OP_NotExists
22010 0a 2a 2a 20 74 68 65 20 50 33 20 72 65 67 69 73  .** the P3 regis
22020 74 65 72 20 6d 75 73 74 20 62 65 20 67 75 61 72  ter must be guar
22030 61 6e 74 65 65 64 20 74 6f 20 63 6f 6e 74 61 69  anteed to contai
22040 6e 20 61 6e 20 69 6e 74 65 67 65 72 20 76 61 6c  n an integer val
22050 75 65 2e 20 20 57 69 74 68 20 74 68 69 73 0a 2a  ue.  With this.*
22060 2a 20 6f 70 63 6f 64 65 2c 20 72 65 67 69 73 74  * opcode, regist
22070 65 72 20 50 33 20 6d 69 67 68 74 20 6e 6f 74 20  er P3 might not 
22080 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
22090 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4f 50  er..**.** The OP
220a0 5f 4e 6f 74 46 6f 75 6e 64 20 6f 70 63 6f 64 65  _NotFound opcode
220b0 20 70 65 72 66 6f 72 6d 73 20 74 68 65 20 73 61   performs the sa
220c0 6d 65 20 6f 70 65 72 61 74 69 6f 6e 20 6f 6e 20  me operation on 
220d0 69 6e 64 65 78 20 62 74 72 65 65 73 0a 2a 2a 20  index btrees.** 
220e0 28 77 69 74 68 20 61 72 62 69 74 72 61 72 79 20  (with arbitrary 
220f0 6d 75 6c 74 69 2d 76 61 6c 75 65 20 6b 65 79 73  multi-value keys
22100 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  )..**.** This op
22110 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65 20  code leaves the 
22120 63 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74  cursor in a stat
22130 65 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f  e where it canno
22140 74 20 62 65 20 61 64 76 61 6e 63 65 64 0a 2a 2a  t be advanced.**
22150 20 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63   in either direc
22160 74 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20  tion.  In other 
22170 77 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20  words, the Next 
22180 61 6e 64 20 50 72 65 76 20 6f 70 63 6f 64 65 73  and Prev opcodes
22190 20 77 69 6c 6c 0a 2a 2a 20 6e 6f 74 20 77 6f 72   will.** not wor
221a0 6b 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 69 73  k following this
221b0 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53   opcode..**.** S
221c0 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e 64 2c 20  ee also: Found, 
221d0 4e 6f 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66  NotFound, NoConf
221e0 6c 69 63 74 2c 20 53 65 65 6b 52 6f 77 69 64 0a  lict, SeekRowid.
221f0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f  */./* Opcode: No
22200 74 45 78 69 73 74 73 20 50 31 20 50 32 20 50 33  tExists P1 P2 P3
22210 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
22220 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 0a 2a  : intkey=r[P3].*
22230 2a 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69  *.** P1 is the i
22240 6e 64 65 78 20 6f 66 20 61 20 63 75 72 73 6f 72  ndex of a cursor
22250 20 6f 70 65 6e 20 6f 6e 20 61 6e 20 53 51 4c 20   open on an SQL 
22260 74 61 62 6c 65 20 62 74 72 65 65 20 28 77 69 74  table btree (wit
22270 68 20 69 6e 74 65 67 65 72 0a 2a 2a 20 6b 65 79  h integer.** key
22280 73 29 2e 20 20 50 33 20 69 73 20 61 6e 20 69 6e  s).  P3 is an in
22290 74 65 67 65 72 20 72 6f 77 69 64 2e 20 20 49 66  teger rowid.  If
222a0 20 50 31 20 64 6f 65 73 20 6e 6f 74 20 63 6f 6e   P1 does not con
222b0 74 61 69 6e 20 61 20 72 65 63 6f 72 64 20 77 69  tain a record wi
222c0 74 68 0a 2a 2a 20 72 6f 77 69 64 20 50 33 20 74  th.** rowid P3 t
222d0 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  hen jump immedia
222e0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 4f 72 2c  tely to P2.  Or,
222f0 20 69 66 20 50 32 20 69 73 20 30 2c 20 72 61 69   if P2 is 0, rai
22300 73 65 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f  se an.** SQLITE_
22310 43 4f 52 52 55 50 54 20 65 72 72 6f 72 2e 20 49  CORRUPT error. I
22320 66 20 50 31 20 64 6f 65 73 20 63 6f 6e 74 61 69  f P1 does contai
22330 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
22340 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a  rowid P3 then .*
22350 2a 20 6c 65 61 76 65 20 74 68 65 20 63 75 72 73  * leave the curs
22360 6f 72 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74  or pointing at t
22370 68 61 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66  hat record and f
22380 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
22390 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72  he next.** instr
223a0 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68  uction..**.** Th
223b0 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 20 6f  e OP_SeekRowid o
223c0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
223d0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
223e0 6e 20 62 75 74 20 61 6c 73 6f 20 61 6c 6c 6f 77  n but also allow
223f0 73 20 74 68 65 0a 2a 2a 20 50 33 20 72 65 67 69  s the.** P3 regi
22400 73 74 65 72 20 74 6f 20 63 6f 6e 74 61 69 6e 20  ster to contain 
22410 61 20 6e 6f 6e 2d 69 6e 74 65 67 65 72 20 76 61  a non-integer va
22420 6c 75 65 2c 20 69 6e 20 77 68 69 63 68 20 63 61  lue, in which ca
22430 73 65 20 74 68 65 20 6a 75 6d 70 20 69 73 0a 2a  se the jump is.*
22440 2a 20 61 6c 77 61 79 73 20 74 61 6b 65 6e 2e 20  * always taken. 
22450 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72 65 71   This opcode req
22460 75 69 72 65 73 20 74 68 61 74 20 50 33 20 61 6c  uires that P3 al
22470 77 61 79 73 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ways contain an 
22480 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54  integer..**.** T
22490 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 6f  he OP_NotFound o
224a0 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74  pcode performs t
224b0 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f  he same operatio
224c0 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65 65  n on index btree
224d0 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69 74  s.** (with arbit
224e0 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75 65  rary multi-value
224f0 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54 68   keys)..**.** Th
22500 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
22510 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61   the cursor in a
22520 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20   state where it 
22530 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e 63  cannot be advanc
22540 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72 20  ed.** in either 
22550 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20 6f  direction.  In o
22560 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20  ther words, the 
22570 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f 70  Next and Prev op
22580 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e 6f  codes will.** no
22590 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e 67  t work following
225a0 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
225b0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
225c0 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 4e  und, NotFound, N
225d0 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b 52  oConflict, SeekR
225e0 6f 77 69 64 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  owid.*/.case OP_
225f0 53 65 65 6b 52 6f 77 69 64 3a 20 7b 20 20 20 20  SeekRowid: {    
22600 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33      /* jump, in3
22610 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
22620 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72   *pC;.  BtCursor
22630 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72   *pCrsr;.  int r
22640 65 73 3b 0a 20 20 75 36 34 20 69 4b 65 79 3b 0a  es;.  u64 iKey;.
22650 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b  .  pIn3 = &aMem[
22660 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
22670 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
22680 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20  EM_Int)==0 ){.  
22690 20 20 61 70 70 6c 79 41 66 66 69 6e 69 74 79 28    applyAffinity(
226a0 70 49 6e 33 2c 20 53 51 4c 49 54 45 5f 41 46 46  pIn3, SQLITE_AFF
226b0 5f 4e 55 4d 45 52 49 43 2c 20 65 6e 63 6f 64 69  _NUMERIC, encodi
226c0 6e 67 29 3b 0a 20 20 20 20 69 66 28 20 28 70 49  ng);.    if( (pI
226d0 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
226e0 49 6e 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  Int)==0 ) goto j
226f0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20  ump_to_p2;.  }. 
22700 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
22710 20 69 6e 74 6f 20 4f 50 5f 4e 6f 74 45 78 69 73   into OP_NotExis
22720 74 73 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f  ts */.case OP_No
22730 74 45 78 69 73 74 73 3a 20 20 20 20 20 20 20 20  tExists:        
22740 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a    /* jump, in3 *
22750 2f 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d  /.  pIn3 = &aMem
22760 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73  [pOp->p3];.  ass
22770 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
22780 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20   & MEM_Int );.  
22790 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
227a0 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
227b0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
227c0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
227d0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
227e0 70 43 21 3d 30 20 29 3b 0a 23 69 66 64 65 66 20  pC!=0 );.#ifdef 
227f0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
22800 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 30 3b 0a 23  C->seekOp = 0;.#
22810 65 6e 64 69 66 0a 20 20 61 73 73 65 72 74 28 20  endif.  assert( 
22820 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20  pC->isTable );. 
22830 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
22840 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
22850 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
22860 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
22870 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
22880 72 21 3d 30 20 29 3b 0a 20 20 72 65 73 20 3d 20  r!=0 );.  res = 
22890 30 3b 0a 20 20 69 4b 65 79 20 3d 20 70 49 6e 33  0;.  iKey = pIn3
228a0 2d 3e 75 2e 69 3b 0a 20 20 72 63 20 3d 20 73 71  ->u.i;.  rc = sq
228b0 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
228c0 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
228d0 30 2c 20 69 4b 65 79 2c 20 30 2c 20 26 72 65 73  0, iKey, 0, &res
228e0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 63 3d  );.  assert( rc=
228f0 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65  =SQLITE_OK || re
22900 73 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 6d 6f  s==0 );.  pC->mo
22910 76 65 74 6f 54 61 72 67 65 74 20 3d 20 69 4b 65  vetoTarget = iKe
22920 79 3b 20 20 2f 2a 20 55 73 65 64 20 62 79 20 4f  y;  /* Used by O
22930 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 20 20 70 43  P_Delete */.  pC
22940 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
22950 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73   pC->cacheStatus
22960 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a   = CACHE_STALE;.
22970 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f    pC->deferredMo
22980 76 65 74 6f 20 3d 20 30 3b 0a 20 20 56 64 62 65  veto = 0;.  Vdbe
22990 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
229a0 3d 30 2c 32 29 3b 0a 20 20 70 43 2d 3e 73 65 65  =0,2);.  pC->see
229b0 6b 52 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20  kResult = res;. 
229c0 20 69 66 28 20 72 65 73 21 3d 30 20 29 7b 0a 20   if( res!=0 ){. 
229d0 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53     assert( rc==S
229e0 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 20 20  QLITE_OK );.    
229f0 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29  if( pOp->p2==0 )
22a00 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c  {.      rc = SQL
22a10 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54  ITE_CORRUPT_BKPT
22a20 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
22a30 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
22a40 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p2;.    }.  }.  
22a50 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
22a60 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
22a70 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
22a80 20 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63   Opcode: Sequenc
22a90 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  e P1 P2 * * *.**
22aa0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22ab0 3d 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72 2b  =cursor[P1].ctr+
22ac0 2b 0a 2a 2a 0a 2a 2a 20 46 69 6e 64 20 74 68 65  +.**.** Find the
22ad0 20 6e 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20   next available 
22ae0 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72 20  sequence number 
22af0 66 6f 72 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a  for cursor P1..*
22b00 2a 20 57 72 69 74 65 20 74 68 65 20 73 65 71 75  * Write the sequ
22b10 65 6e 63 65 20 6e 75 6d 62 65 72 20 69 6e 74 6f  ence number into
22b20 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
22b30 20 54 68 65 20 73 65 71 75 65 6e 63 65 20 6e 75   The sequence nu
22b40 6d 62 65 72 20 6f 6e 20 74 68 65 20 63 75 72 73  mber on the curs
22b50 6f 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  or is incremente
22b60 64 20 61 66 74 65 72 20 74 68 69 73 0a 2a 2a 20  d after this.** 
22b70 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 0a 2a  instruction.  .*
22b80 2f 0a 63 61 73 65 20 4f 50 5f 53 65 71 75 65 6e  /.case OP_Sequen
22b90 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  ce: {           
22ba0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73  /* out2 */.  ass
22bb0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
22bc0 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
22bd0 75 72 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72  ursor );.  asser
22be0 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  t( p->apCsr[pOp-
22bf0 3e 70 31 5d 21 3d 30 20 29 3b 0a 20 20 61 73 73  >p1]!=0 );.  ass
22c00 65 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f  ert( p->apCsr[pO
22c10 70 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65  p->p1]->eCurType
22c20 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
22c30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
22c40 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
22c50 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  );.  pOut->u.i =
22c60 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
22c70 31 5d 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 3b 0a  1]->seqCount++;.
22c80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
22c90 4f 70 63 6f 64 65 3a 20 4e 65 77 52 6f 77 69 64  Opcode: NewRowid
22ca0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
22cb0 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
22cc0 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 47 65 74  =rowid.**.** Get
22cd0 20 61 20 6e 65 77 20 69 6e 74 65 67 65 72 20 72   a new integer r
22ce0 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 28 61 2e  ecord number (a.
22cf0 6b 2e 61 20 22 72 6f 77 69 64 22 29 20 75 73 65  k.a "rowid") use
22d00 64 20 61 73 20 74 68 65 20 6b 65 79 20 74 6f 20  d as the key to 
22d10 61 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  a table..** The 
22d20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
22d30 20 6e 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20   not previously 
22d40 75 73 65 64 20 61 73 20 61 20 6b 65 79 20 69 6e  used as a key in
22d50 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a   the database.**
22d60 20 74 61 62 6c 65 20 74 68 61 74 20 63 75 72 73   table that curs
22d70 6f 72 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 2e  or P1 points to.
22d80 20 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72 64    The new record
22d90 20 6e 75 6d 62 65 72 20 69 73 20 77 72 69 74 74   number is writt
22da0 65 6e 0a 2a 2a 20 77 72 69 74 74 65 6e 20 74 6f  en.** written to
22db0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
22dc0 0a 2a 2a 20 49 66 20 50 33 3e 30 20 74 68 65 6e  .** If P3>0 then
22dd0 20 50 33 20 69 73 20 61 20 72 65 67 69 73 74 65   P3 is a registe
22de0 72 20 69 6e 20 74 68 65 20 72 6f 6f 74 20 66 72  r in the root fr
22df0 61 6d 65 20 6f 66 20 74 68 69 73 20 56 44 42 45  ame of this VDBE
22e00 20 74 68 61 74 20 68 6f 6c 64 73 20 0a 2a 2a 20   that holds .** 
22e10 74 68 65 20 6c 61 72 67 65 73 74 20 70 72 65 76  the largest prev
22e20 69 6f 75 73 6c 79 20 67 65 6e 65 72 61 74 65 64  iously generated
22e30 20 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20   record number. 
22e40 4e 6f 20 6e 65 77 20 72 65 63 6f 72 64 20 6e 75  No new record nu
22e50 6d 62 65 72 73 20 61 72 65 0a 2a 2a 20 61 6c 6c  mbers are.** all
22e60 6f 77 65 64 20 74 6f 20 62 65 20 6c 65 73 73 20  owed to be less 
22e70 74 68 61 6e 20 74 68 69 73 20 76 61 6c 75 65 2e  than this value.
22e80 20 57 68 65 6e 20 74 68 69 73 20 76 61 6c 75 65   When this value
22e90 20 72 65 61 63 68 65 73 20 69 74 73 20 6d 61 78   reaches its max
22ea0 69 6d 75 6d 2c 20 0a 2a 2a 20 61 6e 20 53 51 4c  imum, .** an SQL
22eb0 49 54 45 5f 46 55 4c 4c 20 65 72 72 6f 72 20 69  ITE_FULL error i
22ec0 73 20 67 65 6e 65 72 61 74 65 64 2e 20 54 68 65  s generated. The
22ed0 20 50 33 20 72 65 67 69 73 74 65 72 20 69 73 20   P3 register is 
22ee0 75 70 64 61 74 65 64 20 77 69 74 68 20 74 68 65  updated with the
22ef0 20 27 0a 2a 2a 20 67 65 6e 65 72 61 74 65 64 20   '.** generated 
22f00 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 2e 20 54  record number. T
22f10 68 69 73 20 50 33 20 6d 65 63 68 61 6e 69 73 6d  his P3 mechanism
22f20 20 69 73 20 75 73 65 64 20 74 6f 20 68 65 6c 70   is used to help
22f30 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0a 2a   implement the.*
22f40 2a 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  * AUTOINCREMENT 
22f50 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73 65  feature..*/.case
22f60 20 4f 50 5f 4e 65 77 52 6f 77 69 64 3a 20 7b 20   OP_NewRowid: { 
22f70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
22f80 32 20 2a 2f 0a 20 20 69 36 34 20 76 3b 20 20 20  2 */.  i64 v;   
22f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22fa0 20 54 68 65 20 6e 65 77 20 72 6f 77 69 64 20 2a   The new rowid *
22fb0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
22fc0 70 43 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 75  pC;        /* Cu
22fd0 72 73 6f 72 20 6f 66 20 74 61 62 6c 65 20 74 6f  rsor of table to
22fe0 20 67 65 74 20 74 68 65 20 6e 65 77 20 72 6f 77   get the new row
22ff0 69 64 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73 3b  id */.  int res;
23000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23010 2a 20 52 65 73 75 6c 74 20 6f 66 20 61 6e 20 73  * Result of an s
23020 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28  qlite3BtreeLast(
23030 29 20 2a 2f 0a 20 20 69 6e 74 20 63 6e 74 3b 20  ) */.  int cnt; 
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23050 20 43 6f 75 6e 74 65 72 20 74 6f 20 6c 69 6d 69   Counter to limi
23060 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  t the number of 
23070 73 65 61 72 63 68 65 73 20 2a 2f 0a 20 20 4d 65  searches */.  Me
23080 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20 20  m *pMem;        
23090 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
230a0 20 68 6f 6c 64 69 6e 67 20 6c 61 72 67 65 73 74   holding largest
230b0 20 72 6f 77 69 64 20 66 6f 72 20 41 55 54 4f 49   rowid for AUTOI
230c0 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 56 64  NCREMENT */.  Vd
230d0 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
230e0 20 20 20 20 20 2f 2a 20 52 6f 6f 74 20 66 72 61       /* Root fra
230f0 6d 65 20 6f 66 20 56 44 42 45 20 2a 2f 0a 0a 20  me of VDBE */.. 
23100 20 76 20 3d 20 30 3b 0a 20 20 72 65 73 20 3d 20   v = 0;.  res = 
23110 30 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  0;.  pOut = out2
23120 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
23130 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f  p);.  assert( pO
23140 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
23150 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
23160 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
23170 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
23180 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
23190 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
231a0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
231b0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
231c0 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  ( pC->uc.pCursor
231d0 21 3d 30 20 29 3b 0a 20 20 7b 0a 20 20 20 20 2f  !=0 );.  {.    /
231e0 2a 20 54 68 65 20 6e 65 78 74 20 72 6f 77 69 64  * The next rowid
231f0 20 6f 72 20 72 65 63 6f 72 64 20 6e 75 6d 62 65   or record numbe
23200 72 20 28 64 69 66 66 65 72 65 6e 74 20 74 65 72  r (different ter
23210 6d 73 20 66 6f 72 20 74 68 65 20 73 61 6d 65 0a  ms for the same.
23220 20 20 20 20 2a 2a 20 74 68 69 6e 67 29 20 69 73      ** thing) is
23230 20 6f 62 74 61 69 6e 65 64 20 69 6e 20 61 20 74   obtained in a t
23240 77 6f 2d 73 74 65 70 20 61 6c 67 6f 72 69 74 68  wo-step algorith
23250 6d 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a  m..    **.    **
23260 20 46 69 72 73 74 20 77 65 20 61 74 74 65 6d 70   First we attemp
23270 74 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  t to find the la
23280 72 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72  rgest existing r
23290 6f 77 69 64 20 61 6e 64 20 61 64 64 20 6f 6e 65  owid and add one
232a0 0a 20 20 20 20 2a 2a 20 74 6f 20 74 68 61 74 2e  .    ** to that.
232b0 20 20 42 75 74 20 69 66 20 74 68 65 20 6c 61 72    But if the lar
232c0 67 65 73 74 20 65 78 69 73 74 69 6e 67 20 72 6f  gest existing ro
232d0 77 69 64 20 69 73 20 61 6c 72 65 61 64 79 20 74  wid is already t
232e0 68 65 20 6d 61 78 69 6d 75 6d 0a 20 20 20 20 2a  he maximum.    *
232f0 2a 20 70 6f 73 69 74 69 76 65 20 69 6e 74 65 67  * positive integ
23300 65 72 2c 20 77 65 20 68 61 76 65 20 74 6f 20 66  er, we have to f
23310 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
23320 68 65 20 73 65 63 6f 6e 64 0a 20 20 20 20 2a 2a  he second.    **
23330 20 70 72 6f 62 61 62 69 6c 69 73 74 69 63 20 61   probabilistic a
23340 6c 67 6f 72 69 74 68 6d 0a 20 20 20 20 2a 2a 0a  lgorithm.    **.
23350 20 20 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e      ** The secon
23360 64 20 61 6c 67 6f 72 69 74 68 6d 20 69 73 20 74  d algorithm is t
23370 6f 20 73 65 6c 65 63 74 20 61 20 72 6f 77 69 64  o select a rowid
23380 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 73   at random and s
23390 65 65 20 69 66 0a 20 20 20 20 2a 2a 20 69 74 20  ee if.    ** it 
233a0 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 20 69  already exists i
233b0 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 66  n the table.  If
233c0 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
233d0 73 74 2c 20 77 65 20 68 61 76 65 0a 20 20 20 20  st, we have.    
233e0 2a 2a 20 73 75 63 63 65 65 64 65 64 2e 20 20 49  ** succeeded.  I
233f0 66 20 74 68 65 20 72 61 6e 64 6f 6d 20 72 6f 77  f the random row
23400 69 64 20 64 6f 65 73 20 65 78 69 73 74 2c 20 77  id does exist, w
23410 65 20 73 65 6c 65 63 74 20 61 20 6e 65 77 20 6f  e select a new o
23420 6e 65 0a 20 20 20 20 2a 2a 20 61 6e 64 20 74 72  ne.    ** and tr
23430 79 20 61 67 61 69 6e 2c 20 75 70 20 74 6f 20 31  y again, up to 1
23440 30 30 20 74 69 6d 65 73 2e 0a 20 20 20 20 2a 2f  00 times..    */
23450 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
23460 3e 69 73 54 61 62 6c 65 20 29 3b 0a 0a 23 69 66  >isTable );..#if
23470 64 65 66 20 53 51 4c 49 54 45 5f 33 32 42 49 54  def SQLITE_32BIT
23480 5f 52 4f 57 49 44 0a 23 20 20 20 64 65 66 69 6e  _ROWID.#   defin
23490 65 20 4d 41 58 5f 52 4f 57 49 44 20 30 78 37 66  e MAX_ROWID 0x7f
234a0 66 66 66 66 66 66 0a 23 65 6c 73 65 0a 20 20 20  ffffff.#else.   
234b0 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d 70 69 6c 65   /* Some compile
234c0 72 73 20 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75  rs complain abou
234d0 74 20 63 6f 6e 73 74 61 6e 74 73 20 6f 66 20 74  t constants of t
234e0 68 65 20 66 6f 72 6d 20 30 78 37 66 66 66 66 66  he form 0x7fffff
234f0 66 66 66 66 66 66 66 66 66 66 2e 0a 20 20 20 20  ffffffffff..    
23500 2a 2a 20 4f 74 68 65 72 73 20 63 6f 6d 70 6c 61  ** Others compla
23510 69 6e 20 61 62 6f 75 74 20 30 78 37 66 66 66 66  in about 0x7ffff
23520 66 66 66 66 66 66 66 66 66 66 66 66 4c 4c 2e 20  ffffffffffffLL. 
23530 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
23540 61 63 72 6f 20 73 65 65 6d 73 0a 20 20 20 20 2a  acro seems.    *
23550 2a 20 74 6f 20 70 72 6f 76 69 64 65 20 74 68 65  * to provide the
23560 20 63 6f 6e 73 74 61 6e 74 20 77 68 69 6c 65 20   constant while 
23570 6d 61 6b 69 6e 67 20 61 6c 6c 20 63 6f 6d 70 69  making all compi
23580 6c 65 72 73 20 68 61 70 70 79 2e 0a 20 20 20 20  lers happy..    
23590 2a 2f 0a 23 20 20 20 64 65 66 69 6e 65 20 4d 41  */.#   define MA
235a0 58 5f 52 4f 57 49 44 20 20 28 69 36 34 29 28 20  X_ROWID  (i64)( 
235b0 28 28 28 75 36 34 29 30 78 37 66 66 66 66 66 66  (((u64)0x7ffffff
235c0 66 29 3c 3c 33 32 29 20 7c 20 28 75 36 34 29 30  f)<<32) | (u64)0
235d0 78 66 66 66 66 66 66 66 66 20 29 0a 23 65 6e 64  xffffffff ).#end
235e0 69 66 0a 0a 20 20 20 20 69 66 28 20 21 70 43 2d  if..    if( !pC-
235f0 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23600 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71  ){.      rc = sq
23610 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70  lite3BtreeLast(p
23620 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
23630 72 65 73 29 3b 0a 20 20 20 20 20 20 69 66 28 20  res);.      if( 
23640 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc!=SQLITE_OK ){
23650 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62  .        goto ab
23660 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
23670 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
23680 69 66 28 20 72 65 73 20 29 7b 0a 20 20 20 20 20  if( res ){.     
23690 20 20 20 76 20 3d 20 31 3b 20 20 20 2f 2a 20 49     v = 1;   /* I
236a0 4d 50 3a 20 52 2d 36 31 39 31 34 2d 34 38 30 37  MP: R-61914-4807
236b0 34 20 2a 2f 0a 20 20 20 20 20 20 7d 65 6c 73 65  4 */.      }else
236c0 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  {.        assert
236d0 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 75  ( sqlite3BtreeCu
236e0 72 73 6f 72 49 73 56 61 6c 69 64 28 70 43 2d 3e  rsorIsValid(pC->
236f0 75 63 2e 70 43 75 72 73 6f 72 29 20 29 3b 0a 20  uc.pCursor) );. 
23700 20 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74         v = sqlit
23710 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
23720 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
23730 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 76  );.        if( v
23740 3e 3d 4d 41 58 5f 52 4f 57 49 44 20 29 7b 0a 20  >=MAX_ROWID ){. 
23750 20 20 20 20 20 20 20 20 20 70 43 2d 3e 75 73 65           pC->use
23760 52 61 6e 64 6f 6d 52 6f 77 69 64 20 3d 20 31 3b  RandomRowid = 1;
23770 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
23780 20 20 20 20 20 20 20 20 20 20 76 2b 2b 3b 20 20            v++;  
23790 20 2f 2a 20 49 4d 50 3a 20 52 2d 32 39 35 33 38   /* IMP: R-29538
237a0 2d 33 34 39 38 37 20 2a 2f 0a 20 20 20 20 20 20  -34987 */.      
237b0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
237c0 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
237d0 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45  E_OMIT_AUTOINCRE
237e0 4d 45 4e 54 0a 20 20 20 20 69 66 28 20 70 4f 70  MENT.    if( pOp
237f0 2d 3e 70 33 20 29 7b 0a 20 20 20 20 20 20 2f 2a  ->p3 ){.      /*
23800 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20   Assert that P3 
23810 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72  is a valid memor
23820 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20  y cell. */.     
23830 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
23840 3e 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20  >0 );.      if( 
23850 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20 20  p->pFrame ){.   
23860 20 20 20 20 20 66 6f 72 28 70 46 72 61 6d 65 3d       for(pFrame=
23870 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46 72 61 6d  p->pFrame; pFram
23880 65 2d 3e 70 50 61 72 65 6e 74 3b 20 70 46 72 61  e->pParent; pFra
23890 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65  me=pFrame->pPare
238a0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20  nt);.        /* 
238b0 41 73 73 65 72 74 20 74 68 61 74 20 50 33 20 69  Assert that P3 i
238c0 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f 72 79  s a valid memory
238d0 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20 20 20   cell. */.      
238e0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
238f0 33 3c 3d 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20  3<=pFrame->nMem 
23900 29 3b 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20  );.        pMem 
23910 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 5b  = &pFrame->aMem[
23920 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 20 20  pOp->p3];.      
23930 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 2f  }else{.        /
23940 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 50 33  * Assert that P3
23950 20 69 73 20 61 20 76 61 6c 69 64 20 6d 65 6d 6f   is a valid memo
23960 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a 20 20 20 20  ry cell. */.    
23970 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
23980 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
23990 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
239a0 0a 20 20 20 20 20 20 20 20 70 4d 65 6d 20 3d 20  .        pMem = 
239b0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
239c0 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
239d0 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4d 65 6d  ToChange(p, pMem
239e0 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
239f0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
23a00 6c 69 64 28 70 4d 65 6d 29 20 29 3b 0a 0a 20 20  lid(pMem) );..  
23a10 20 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41      REGISTER_TRA
23a20 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70 4d 65 6d  CE(pOp->p3, pMem
23a30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
23a40 56 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66  VdbeMemIntegerif
23a50 79 28 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 61  y(pMem);.      a
23a60 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
23a70 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d  ags & MEM_Int)!=
23a80 30 20 29 3b 20 20 2f 2a 20 6d 65 6d 28 50 33 29  0 );  /* mem(P3)
23a90 20 68 6f 6c 64 73 20 61 6e 20 69 6e 74 65 67 65   holds an intege
23aa0 72 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 70  r */.      if( p
23ab0 4d 65 6d 2d 3e 75 2e 69 3d 3d 4d 41 58 5f 52 4f  Mem->u.i==MAX_RO
23ac0 57 49 44 20 7c 7c 20 70 43 2d 3e 75 73 65 52 61  WID || pC->useRa
23ad0 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20 20 20  ndomRowid ){.   
23ae0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
23af0 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
23b00 20 52 2d 31 37 38 31 37 2d 30 30 36 33 30 20 2a   R-17817-00630 *
23b10 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
23b20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23b30 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23b40 20 69 66 28 20 76 3c 70 4d 65 6d 2d 3e 75 2e 69   if( v<pMem->u.i
23b50 2b 31 20 29 7b 0a 20 20 20 20 20 20 20 20 76 20  +1 ){.        v 
23b60 3d 20 70 4d 65 6d 2d 3e 75 2e 69 20 2b 20 31 3b  = pMem->u.i + 1;
23b70 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
23b80 4d 65 6d 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20  Mem->u.i = v;.  
23b90 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20 69    }.#endif.    i
23ba0 66 28 20 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  f( pC->useRandom
23bb0 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 2f  Rowid ){.      /
23bc0 2a 20 49 4d 50 4c 45 4d 45 4e 54 41 54 49 4f 4e  * IMPLEMENTATION
23bd0 2d 4f 46 3a 20 52 2d 30 37 36 37 37 2d 34 31 38  -OF: R-07677-418
23be0 38 31 20 49 66 20 74 68 65 20 6c 61 72 67 65 73  81 If the larges
23bf0 74 20 52 4f 57 49 44 20 69 73 20 65 71 75 61 6c  t ROWID is equal
23c00 20 74 6f 20 74 68 65 0a 20 20 20 20 20 20 2a 2a   to the.      **
23c10 20 6c 61 72 67 65 73 74 20 70 6f 73 73 69 62 6c   largest possibl
23c20 65 20 69 6e 74 65 67 65 72 20 28 39 32 32 33 33  e integer (92233
23c30 37 32 30 33 36 38 35 34 37 37 35 38 30 37 29 20  72036854775807) 
23c40 74 68 65 6e 20 74 68 65 20 64 61 74 61 62 61 73  then the databas
23c50 65 0a 20 20 20 20 20 20 2a 2a 20 65 6e 67 69 6e  e.      ** engin
23c60 65 20 73 74 61 72 74 73 20 70 69 63 6b 69 6e 67  e starts picking
23c70 20 70 6f 73 69 74 69 76 65 20 63 61 6e 64 69 64   positive candid
23c80 61 74 65 20 52 4f 57 49 44 73 20 61 74 20 72 61  ate ROWIDs at ra
23c90 6e 64 6f 6d 20 75 6e 74 69 6c 0a 20 20 20 20 20  ndom until.     
23ca0 20 2a 2a 20 69 74 20 66 69 6e 64 73 20 6f 6e 65   ** it finds one
23cb0 20 74 68 61 74 20 69 73 20 6e 6f 74 20 70 72 65   that is not pre
23cc0 76 69 6f 75 73 6c 79 20 75 73 65 64 2e 20 2a 2f  viously used. */
23cd0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
23ce0 4f 70 2d 3e 70 33 3d 3d 30 20 29 3b 20 20 2f 2a  Op->p3==0 );  /*
23cf0 20 57 65 20 63 61 6e 6e 6f 74 20 62 65 20 69 6e   We cannot be in
23d00 20 72 61 6e 64 6f 6d 20 72 6f 77 69 64 20 6d 6f   random rowid mo
23d10 64 65 20 69 66 20 74 68 69 73 20 69 73 0a 20 20  de if this is.  
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23d30 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 61 6e             ** an
23d40 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 74   AUTOINCREMENT t
23d50 61 62 6c 65 2e 20 2a 2f 0a 20 20 20 20 20 20 63  able. */.      c
23d60 6e 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 64 6f  nt = 0;.      do
23d70 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
23d80 33 5f 72 61 6e 64 6f 6d 6e 65 73 73 28 73 69 7a  3_randomness(siz
23d90 65 6f 66 28 76 29 2c 20 26 76 29 3b 0a 20 20 20  eof(v), &v);.   
23da0 20 20 20 20 20 76 20 26 3d 20 28 4d 41 58 5f 52       v &= (MAX_R
23db0 4f 57 49 44 3e 3e 31 29 3b 20 76 2b 2b 3b 20 20  OWID>>1); v++;  
23dc0 2f 2a 20 45 6e 73 75 72 65 20 74 68 61 74 20 76  /* Ensure that v
23dd0 20 69 73 20 67 72 65 61 74 65 72 20 74 68 61 6e   is greater than
23de0 20 7a 65 72 6f 20 2a 2f 0a 20 20 20 20 20 20 7d   zero */.      }
23df0 77 68 69 6c 65 28 20 20 28 28 72 63 20 3d 20 73  while(  ((rc = s
23e00 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74  qlite3BtreeMovet
23e10 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75 63  oUnpacked(pC->uc
23e20 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20 28 75 36  .pCursor, 0, (u6
23e30 34 29 76 2c 0a 20 20 20 20 20 20 20 20 20 20 20  4)v,.           
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e60 20 20 20 20 20 20 30 2c 20 26 72 65 73 29 29 3d        0, &res))=
23e70 3d 53 51 4c 49 54 45 5f 4f 4b 29 0a 20 20 20 20  =SQLITE_OK).    
23e80 20 20 20 20 20 20 20 20 26 26 20 28 72 65 73 3d          && (res=
23e90 3d 30 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  =0).            
23ea0 26 26 20 28 2b 2b 63 6e 74 3c 31 30 30 29 29 3b  && (++cnt<100));
23eb0 0a 20 20 20 20 20 20 69 66 28 20 72 63 20 29 20  .      if( rc ) 
23ec0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23ed0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 69  o_error;.      i
23ee0 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
23ef0 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
23f00 5f 46 55 4c 4c 3b 20 20 20 2f 2a 20 49 4d 50 3a  _FULL;   /* IMP:
23f10 20 52 2d 33 38 32 31 39 2d 35 33 30 30 32 20 2a   R-38219-53002 *
23f20 2f 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20 61  /.        goto a
23f30 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
23f40 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  r;.      }.     
23f50 20 61 73 73 65 72 74 28 20 76 3e 30 20 29 3b 20   assert( v>0 ); 
23f60 20 2f 2a 20 45 56 3a 20 52 2d 34 30 38 31 32 2d   /* EV: R-40812-
23f70 30 33 35 37 30 20 2a 2f 0a 20 20 20 20 7d 0a 20  03570 */.    }. 
23f80 20 20 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d     pC->deferredM
23f90 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 20 20 70  oveto = 0;.    p
23fa0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
23fb0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
23fc0 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
23fd0 76 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  v;.  break;.}../
23fe0 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74  * Opcode: Insert
23ff0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
24000 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 6e 74  ** Synopsis: int
24010 6b 65 79 3d 72 5b 50 33 5d 20 64 61 74 61 3d 72  key=r[P3] data=r
24020 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  [P2].**.** Write
24030 20 61 6e 20 65 6e 74 72 79 20 69 6e 74 6f 20 74   an entry into t
24040 68 65 20 74 61 62 6c 65 20 6f 66 20 63 75 72 73  he table of curs
24050 6f 72 20 50 31 2e 20 20 41 20 6e 65 77 20 65 6e  or P1.  A new en
24060 74 72 79 20 69 73 0a 2a 2a 20 63 72 65 61 74 65  try is.** create
24070 64 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20  d if it doesn't 
24080 61 6c 72 65 61 64 79 20 65 78 69 73 74 20 6f 72  already exist or
24090 20 74 68 65 20 64 61 74 61 20 66 6f 72 20 61 6e   the data for an
240a0 20 65 78 69 73 74 69 6e 67 0a 2a 2a 20 65 6e 74   existing.** ent
240b0 72 79 20 69 73 20 6f 76 65 72 77 72 69 74 74 65  ry is overwritte
240c0 6e 2e 20 20 54 68 65 20 64 61 74 61 20 69 73 20  n.  The data is 
240d0 74 68 65 20 76 61 6c 75 65 20 4d 45 4d 5f 42 6c  the value MEM_Bl
240e0 6f 62 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67  ob stored in reg
240f0 69 73 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20  ister.** number 
24100 50 32 2e 20 54 68 65 20 6b 65 79 20 69 73 20 73  P2. The key is s
24110 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
24120 72 20 50 33 2e 20 54 68 65 20 6b 65 79 20 6d 75  r P3. The key mu
24130 73 74 0a 2a 2a 20 62 65 20 61 20 4d 45 4d 5f 49  st.** be a MEM_I
24140 6e 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  nt..**.** If the
24150 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20   OPFLAG_NCHANGE 
24160 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
24170 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77 20  t, then the row 
24180 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 0a  change count is.
24190 2a 2a 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 28  ** incremented (
241a0 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e 20  otherwise not). 
241b0 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c   If the OPFLAG_L
241c0 41 53 54 52 4f 57 49 44 20 66 6c 61 67 20 6f 66  ASTROWID flag of
241d0 20 50 35 20 69 73 20 73 65 74 2c 0a 2a 2a 20 74   P5 is set,.** t
241e0 68 65 6e 20 72 6f 77 69 64 20 69 73 20 73 74 6f  hen rowid is sto
241f0 72 65 64 20 66 6f 72 20 73 75 62 73 65 71 75 65  red for subseque
24200 6e 74 20 72 65 74 75 72 6e 20 62 79 20 74 68 65  nt return by the
24210 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 6c 61 73 74  .** sqlite3_last
24220 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29 20  _insert_rowid() 
24230 66 75 6e 63 74 69 6f 6e 20 28 6f 74 68 65 72 77  function (otherw
24240 69 73 65 20 69 74 20 69 73 20 75 6e 6d 6f 64 69  ise it is unmodi
24250 66 69 65 64 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  fied)..**.** If 
24260 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45  the OPFLAG_USESE
24270 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 6f 66  EKRESULT flag of
24280 20 50 35 20 69 73 20 73 65 74 2c 20 74 68 65 20   P5 is set, the 
24290 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6d  implementation m
242a0 69 67 68 74 0a 2a 2a 20 72 75 6e 20 66 61 73 74  ight.** run fast
242b0 65 72 20 62 79 20 61 76 6f 69 64 69 6e 67 20 61  er by avoiding a
242c0 6e 20 75 6e 6e 65 63 65 73 73 61 72 79 20 73 65  n unnecessary se
242d0 65 6b 20 6f 6e 20 63 75 72 73 6f 72 20 50 31 2e  ek on cursor P1.
242e0 20 20 48 6f 77 65 76 65 72 2c 0a 2a 2a 20 74 68    However,.** th
242f0 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  e OPFLAG_USESEEK
24300 52 45 53 55 4c 54 20 66 6c 61 67 20 6d 75 73 74  RESULT flag must
24310 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 20   only be set if 
24320 74 68 65 72 65 20 68 61 76 65 20 62 65 65 6e 20  there have been 
24330 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20 73 65 65 6b  no prior.** seek
24340 73 20 6f 6e 20 74 68 65 20 63 75 72 73 6f 72 20  s on the cursor 
24350 6f 72 20 69 66 20 74 68 65 20 6d 6f 73 74 20 72  or if the most r
24360 65 63 65 6e 74 20 73 65 65 6b 20 75 73 65 64 20  ecent seek used 
24370 61 20 6b 65 79 20 65 71 75 61 6c 20 74 6f 20 50  a key equal to P
24380 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  3..**.** If the 
24390 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20  OPFLAG_ISUPDATE 
243a0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
243b0 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  n this opcode is
243c0 20 70 61 72 74 20 6f 66 20 61 6e 0a 2a 2a 20 55   part of an.** U
243d0 50 44 41 54 45 20 6f 70 65 72 61 74 69 6f 6e 2e  PDATE operation.
243e0 20 20 4f 74 68 65 72 77 69 73 65 20 28 69 66 20    Otherwise (if 
243f0 74 68 65 20 66 6c 61 67 20 69 73 20 63 6c 65 61  the flag is clea
24400 72 29 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  r) then this opc
24410 6f 64 65 0a 2a 2a 20 69 73 20 70 61 72 74 20 6f  ode.** is part o
24420 66 20 61 6e 20 49 4e 53 45 52 54 20 6f 70 65 72  f an INSERT oper
24430 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 69 66 66  ation.  The diff
24440 65 72 65 6e 63 65 20 69 73 20 6f 6e 6c 79 20 69  erence is only i
24450 6d 70 6f 72 74 61 6e 74 20 74 6f 0a 2a 2a 20 74  mportant to.** t
24460 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 2e 0a  he update hook..
24470 2a 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20  **.** Parameter 
24480 50 34 20 6d 61 79 20 70 6f 69 6e 74 20 74 6f 20  P4 may point to 
24490 61 20 54 61 62 6c 65 20 73 74 72 75 63 74 75 72  a Table structur
244a0 65 2c 20 6f 72 20 6d 61 79 20 62 65 20 4e 55 4c  e, or may be NUL
244b0 4c 2e 20 49 66 20 69 74 20 69 73 20 0a 2a 2a 20  L. If it is .** 
244c0 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 74  not NULL, then t
244d0 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 28  he update-hook (
244e0 73 71 6c 69 74 65 33 2e 78 55 70 64 61 74 65 43  sqlite3.xUpdateC
244f0 61 6c 6c 62 61 63 6b 29 20 69 73 20 69 6e 76 6f  allback) is invo
24500 6b 65 64 20 0a 2a 2a 20 66 6f 6c 6c 6f 77 69 6e  ked .** followin
24510 67 20 61 20 73 75 63 63 65 73 73 66 75 6c 20 69  g a successful i
24520 6e 73 65 72 74 2e 0a 2a 2a 0a 2a 2a 20 28 57 41  nsert..**.** (WA
24530 52 4e 49 4e 47 2f 54 4f 44 4f 3a 20 49 66 20 50  RNING/TODO: If P
24540 31 20 69 73 20 61 20 70 73 65 75 64 6f 2d 63 75  1 is a pseudo-cu
24550 72 73 6f 72 20 61 6e 64 20 50 32 20 69 73 20 64  rsor and P2 is d
24560 79 6e 61 6d 69 63 61 6c 6c 79 0a 2a 2a 20 61 6c  ynamically.** al
24570 6c 6f 63 61 74 65 64 2c 20 74 68 65 6e 20 6f 77  located, then ow
24580 6e 65 72 73 68 69 70 20 6f 66 20 50 32 20 69 73  nership of P2 is
24590 20 74 72 61 6e 73 66 65 72 72 65 64 20 74 6f 20   transferred to 
245a0 74 68 65 20 70 73 65 75 64 6f 2d 63 75 72 73 6f  the pseudo-curso
245b0 72 0a 2a 2a 20 61 6e 64 20 72 65 67 69 73 74 65  r.** and registe
245c0 72 20 50 32 20 62 65 63 6f 6d 65 73 20 65 70 68  r P2 becomes eph
245d0 65 6d 65 72 61 6c 2e 20 20 49 66 20 74 68 65 20  emeral.  If the 
245e0 63 75 72 73 6f 72 20 69 73 20 63 68 61 6e 67 65  cursor is change
245f0 64 2c 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20  d, the.** value 
24600 6f 66 20 72 65 67 69 73 74 65 72 20 50 32 20 77  of register P2 w
24610 69 6c 6c 20 74 68 65 6e 20 63 68 61 6e 67 65 2e  ill then change.
24620 20 20 4d 61 6b 65 20 73 75 72 65 20 74 68 69 73    Make sure this
24630 20 64 6f 65 73 20 6e 6f 74 0a 2a 2a 20 63 61 75   does not.** cau
24640 73 65 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  se any problems.
24650 29 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ).**.** This ins
24660 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f  truction only wo
24670 72 6b 73 20 6f 6e 20 74 61 62 6c 65 73 2e 20 20  rks on tables.  
24680 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
24690 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
246a0 72 20 69 6e 64 69 63 65 73 20 69 73 20 4f 50 5f  r indices is OP_
246b0 49 64 78 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a  IdxInsert..*/./*
246c0 20 4f 70 63 6f 64 65 3a 20 49 6e 73 65 72 74 49   Opcode: InsertI
246d0 6e 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50  nt P1 P2 P3 P4 P
246e0 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69  5.** Synopsis: i
246f0 6e 74 6b 65 79 3d 50 33 20 64 61 74 61 3d 72 5b  ntkey=P3 data=r[
24700 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77  P2].**.** This w
24710 6f 72 6b 73 20 65 78 61 63 74 6c 79 20 6c 69 6b  orks exactly lik
24720 65 20 4f 50 5f 49 6e 73 65 72 74 20 65 78 63 65  e OP_Insert exce
24730 70 74 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  pt that the key 
24740 69 73 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  is the.** intege
24750 72 20 76 61 6c 75 65 20 50 33 2c 20 6e 6f 74 20  r value P3, not 
24760 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
24770 20 69 6e 74 65 67 65 72 20 73 74 6f 72 65 64 20   integer stored 
24780 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  in register P3..
24790 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65 72  */.case OP_Inser
247a0 74 3a 20 0a 63 61 73 65 20 4f 50 5f 49 6e 73 65  t: .case OP_Inse
247b0 72 74 49 6e 74 3a 20 7b 0a 20 20 4d 65 6d 20 2a  rtInt: {.  Mem *
247c0 70 44 61 74 61 3b 20 20 20 20 20 20 20 2f 2a 20  pData;       /* 
247d0 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67  MEM cell holding
247e0 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 72 65   data for the re
247f0 63 6f 72 64 20 74 6f 20 62 65 20 69 6e 73 65 72  cord to be inser
24800 74 65 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4b  ted */.  Mem *pK
24810 65 79 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 45  ey;        /* ME
24820 4d 20 63 65 6c 6c 20 68 6f 6c 64 69 6e 67 20 6b  M cell holding k
24830 65 79 20 20 66 6f 72 20 74 68 65 20 72 65 63 6f  ey  for the reco
24840 72 64 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  rd */.  VdbeCurs
24850 6f 72 20 2a 70 43 3b 20 20 20 2f 2a 20 43 75 72  or *pC;   /* Cur
24860 73 6f 72 20 74 6f 20 74 61 62 6c 65 20 69 6e 74  sor to table int
24870 6f 20 77 68 69 63 68 20 69 6e 73 65 72 74 20 69  o which insert i
24880 73 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69  s written */.  i
24890 6e 74 20 73 65 65 6b 52 65 73 75 6c 74 3b 20 20  nt seekResult;  
248a0 20 2f 2a 20 52 65 73 75 6c 74 20 6f 66 20 70 72   /* Result of pr
248b0 69 6f 72 20 73 65 65 6b 20 6f 72 20 30 20 69 66  ior seek or 0 if
248c0 20 6e 6f 20 55 53 45 53 45 45 4b 52 45 53 55 4c   no USESEEKRESUL
248d0 54 20 66 6c 61 67 20 2a 2f 0a 20 20 63 6f 6e 73  T flag */.  cons
248e0 74 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 2f 2a  t char *zDb;  /*
248f0 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 2d   database name -
24900 20 75 73 65 64 20 62 79 20 74 68 65 20 75 70 64   used by the upd
24910 61 74 65 20 68 6f 6f 6b 20 2a 2f 0a 20 20 54 61  ate hook */.  Ta
24920 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20 20  ble *pTab;      
24930 2f 2a 20 54 61 62 6c 65 20 73 74 72 75 63 74 75  /* Table structu
24940 72 65 20 2d 20 75 73 65 64 20 62 79 20 75 70 64  re - used by upd
24950 61 74 65 20 61 6e 64 20 70 72 65 2d 75 70 64 61  ate and pre-upda
24960 74 65 20 68 6f 6f 6b 73 20 2a 2f 0a 20 20 69 6e  te hooks */.  in
24970 74 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  t op;           
24980 2f 2a 20 4f 70 63 6f 64 65 20 66 6f 72 20 75 70  /* Opcode for up
24990 64 61 74 65 20 68 6f 6f 6b 3a 20 53 51 4c 49 54  date hook: SQLIT
249a0 45 5f 55 50 44 41 54 45 20 6f 72 20 53 51 4c 49  E_UPDATE or SQLI
249b0 54 45 5f 49 4e 53 45 52 54 20 2a 2f 0a 20 20 42  TE_INSERT */.  B
249c0 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 20 20  treePayload x;  
249d0 20 2f 2a 20 50 61 79 6c 6f 61 64 20 74 6f 20 62   /* Payload to b
249e0 65 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 0a 20  e inserted */.. 
249f0 20 6f 70 20 3d 20 30 3b 0a 20 20 70 44 61 74 61   op = 0;.  pData
24a00 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32   = &aMem[pOp->p2
24a10 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
24a20 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
24a30 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
24a40 0a 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73  .  assert( memIs
24a50 56 61 6c 69 64 28 70 44 61 74 61 29 20 29 3b 0a  Valid(pData) );.
24a60 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b    pC = p->apCsr[
24a70 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
24a80 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61  rt( pC!=0 );.  a
24a90 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54  ssert( pC->eCurT
24aa0 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52  ype==CURTYPE_BTR
24ab0 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  EE );.  assert( 
24ac0 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
24ad0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
24ae0 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47  pOp->p5 & OPFLAG
24af0 5f 49 53 4e 4f 4f 50 29 20 7c 7c 20 70 43 2d 3e  _ISNOOP) || pC->
24b00 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 61 73 73  isTable );.  ass
24b10 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
24b20 3d 3d 50 34 5f 54 41 42 4c 45 20 7c 7c 20 70 4f  ==P4_TABLE || pO
24b30 70 2d 3e 70 34 74 79 70 65 3e 3d 50 34 5f 53 54  p->p4type>=P4_ST
24b40 41 54 49 43 20 29 3b 0a 20 20 52 45 47 49 53 54  ATIC );.  REGIST
24b50 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
24b60 2c 20 70 44 61 74 61 29 3b 0a 0a 20 20 69 66 28  , pData);..  if(
24b70 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50   pOp->opcode==OP
24b80 5f 49 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 70  _Insert ){.    p
24b90 4b 65 79 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Key = &aMem[pOp-
24ba0 3e 70 33 5d 3b 0a 20 20 20 20 61 73 73 65 72 74  >p3];.    assert
24bb0 28 20 70 4b 65 79 2d 3e 66 6c 61 67 73 20 26 20  ( pKey->flags & 
24bc0 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 20 20 61  MEM_Int );.    a
24bd0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
24be0 64 28 70 4b 65 79 29 20 29 3b 0a 20 20 20 20 52  d(pKey) );.    R
24bf0 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f  EGISTER_TRACE(pO
24c00 70 2d 3e 70 33 2c 20 70 4b 65 79 29 3b 0a 20 20  p->p3, pKey);.  
24c10 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4b 65 79 2d    x.nKey = pKey-
24c20 3e 75 2e 69 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  >u.i;.  }else{. 
24c30 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
24c40 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72  opcode==OP_Inser
24c50 74 49 6e 74 20 29 3b 0a 20 20 20 20 78 2e 6e 4b  tInt );.    x.nK
24c60 65 79 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  ey = pOp->p3;.  
24c70 7d 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34  }..  if( pOp->p4
24c80 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26  type==P4_TABLE &
24c90 26 20 48 41 53 5f 55 50 44 41 54 45 5f 48 4f 4f  & HAS_UPDATE_HOO
24ca0 4b 28 64 62 29 20 29 7b 0a 20 20 20 20 61 73 73  K(db) ){.    ass
24cb0 65 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20  ert( pC->iDb>=0 
24cc0 29 3b 0a 20 20 20 20 7a 44 62 20 3d 20 64 62 2d  );.    zDb = db-
24cd0 3e 61 44 62 5b 70 43 2d 3e 69 44 62 5d 2e 7a 44  >aDb[pC->iDb].zD
24ce0 62 53 4e 61 6d 65 3b 0a 20 20 20 20 70 54 61 62  bSName;.    pTab
24cf0 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62 3b   = pOp->p4.pTab;
24d00 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4f  .    assert( (pO
24d10 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24d20 53 4e 4f 4f 50 29 20 7c 7c 20 48 61 73 52 6f 77  SNOOP) || HasRow
24d30 69 64 28 70 54 61 62 29 20 29 3b 0a 20 20 20 20  id(pTab) );.    
24d40 6f 70 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  op = ((pOp->p5 &
24d50 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
24d60 29 20 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54  ) ? SQLITE_UPDAT
24d70 45 20 3a 20 53 51 4c 49 54 45 5f 49 4e 53 45 52  E : SQLITE_INSER
24d80 54 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  T);.  }else{.   
24d90 20 70 54 61 62 20 3d 20 30 3b 20 2f 2a 20 4e 6f   pTab = 0; /* No
24da0 74 20 6e 65 65 64 65 64 2e 20 20 53 69 6c 65 6e  t needed.  Silen
24db0 63 65 20 61 20 63 6f 6d 70 69 6c 65 72 20 77 61  ce a compiler wa
24dc0 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 20 20 7a 44  rning. */.    zD
24dd0 62 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e  b = 0;  /* Not n
24de0 65 65 64 65 64 2e 20 20 53 69 6c 65 6e 63 65 20  eeded.  Silence 
24df0 61 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  a compiler warni
24e00 6e 67 2e 20 2a 2f 0a 20 20 7d 0a 0a 23 69 66 64  ng. */.  }..#ifd
24e10 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24e20 5f 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a  _PREUPDATE_HOOK.
24e30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
24e40 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 2c  pre-update hook,
24e50 20 69 66 20 61 6e 79 20 2a 2f 0a 20 20 69 66 28   if any */.  if(
24e60 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
24e70 61 6c 6c 62 61 63 6b 20 0a 20 20 20 26 26 20 70  allback .   && p
24e80 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54  Op->p4type==P4_T
24e90 41 42 4c 45 0a 20 20 20 26 26 20 21 28 70 4f 70  ABLE.   && !(pOp
24ea0 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49 53  ->p5 & OPFLAG_IS
24eb0 55 50 44 41 54 45 29 0a 20 20 29 7b 0a 20 20 20  UPDATE).  ){.   
24ec0 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 65 55   sqlite3VdbePreU
24ed0 70 64 61 74 65 48 6f 6f 6b 28 70 2c 20 70 43 2c  pdateHook(p, pC,
24ee0 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 2c 20   SQLITE_INSERT, 
24ef0 7a 44 62 2c 20 70 54 61 62 2c 20 78 2e 6e 4b 65  zDb, pTab, x.nKe
24f00 79 2c 20 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 7d  y, pOp->p2);.  }
24f10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26  .  if( pOp->p5 &
24f20 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 29   OPFLAG_ISNOOP )
24f30 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
24f40 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
24f50 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29  OPFLAG_NCHANGE )
24f60 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20   p->nChange++;. 
24f70 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
24f80 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20  PFLAG_LASTROWID 
24f90 29 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20  ) db->lastRowid 
24fa0 3d 20 78 2e 6e 4b 65 79 3b 0a 20 20 69 66 28 20  = x.nKey;.  if( 
24fb0 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26 20 4d  pData->flags & M
24fc0 45 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 78  EM_Null ){.    x
24fd0 2e 70 44 61 74 61 20 3d 20 30 3b 0a 20 20 20 20  .pData = 0;.    
24fe0 78 2e 6e 44 61 74 61 20 3d 20 30 3b 0a 20 20 7d  x.nData = 0;.  }
24ff0 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
25000 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73 20 26  ( pData->flags &
25010 20 28 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f 53   (MEM_Blob|MEM_S
25020 74 72 29 20 29 3b 0a 20 20 20 20 78 2e 70 44 61  tr) );.    x.pDa
25030 74 61 20 3d 20 70 44 61 74 61 2d 3e 7a 3b 0a 20  ta = pData->z;. 
25040 20 20 20 78 2e 6e 44 61 74 61 20 3d 20 70 44 61     x.nData = pDa
25050 74 61 2d 3e 6e 3b 0a 20 20 7d 0a 20 20 73 65 65  ta->n;.  }.  see
25060 6b 52 65 73 75 6c 74 20 3d 20 28 28 70 4f 70 2d  kResult = ((pOp-
25070 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 55 53 45  >p5 & OPFLAG_USE
25080 53 45 45 4b 52 45 53 55 4c 54 29 20 3f 20 70 43  SEEKRESULT) ? pC
25090 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3a 20 30  ->seekResult : 0
250a0 29 3b 0a 20 20 69 66 28 20 70 44 61 74 61 2d 3e  );.  if( pData->
250b0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f  flags & MEM_Zero
250c0 20 29 7b 0a 20 20 20 20 78 2e 6e 5a 65 72 6f 20   ){.    x.nZero 
250d0 3d 20 70 44 61 74 61 2d 3e 75 2e 6e 5a 65 72 6f  = pData->u.nZero
250e0 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78  ;.  }else{.    x
250f0 2e 6e 5a 65 72 6f 20 3d 20 30 3b 0a 20 20 7d 0a  .nZero = 0;.  }.
25100 20 20 78 2e 70 4b 65 79 20 3d 20 30 3b 0a 20 20    x.pKey = 0;.  
25110 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
25120 65 49 6e 73 65 72 74 28 70 43 2d 3e 75 63 2e 70  eInsert(pC->uc.p
25130 43 75 72 73 6f 72 2c 20 26 78 2c 0a 20 20 20 20  Cursor, &x,.    
25140 20 20 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50    (pOp->p5 & (OP
25150 46 4c 41 47 5f 41 50 50 45 4e 44 7c 4f 50 46 4c  FLAG_APPEND|OPFL
25160 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25170 29 2c 20 73 65 65 6b 52 65 73 75 6c 74 0a 20 20  ), seekResult.  
25180 29 3b 0a 20 20 70 43 2d 3e 64 65 66 65 72 72 65  );.  pC->deferre
25190 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a 20 20 70  dMoveto = 0;.  p
251a0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
251b0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 0a 20   CACHE_STALE;.. 
251c0 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75   /* Invoke the u
251d0 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
251e0 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
251f0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
25200 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
25210 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
25220 43 61 6c 6c 62 61 63 6b 20 26 26 20 6f 70 20 29  Callback && op )
25230 7b 0a 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74  {.    db->xUpdat
25240 65 43 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55  eCallback(db->pU
25250 70 64 61 74 65 41 72 67 2c 20 6f 70 2c 20 7a 44  pdateArg, op, zD
25260 62 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  b, pTab->zName, 
25270 78 2e 6e 4b 65 79 29 3b 0a 20 20 7d 0a 20 20 62  x.nKey);.  }.  b
25280 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
25290 64 65 3a 20 44 65 6c 65 74 65 20 50 31 20 50 32  de: Delete P1 P2
252a0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
252b0 44 65 6c 65 74 65 20 74 68 65 20 72 65 63 6f 72  Delete the recor
252c0 64 20 61 74 20 77 68 69 63 68 20 74 68 65 20 50  d at which the P
252d0 31 20 63 75 72 73 6f 72 20 69 73 20 63 75 72 72  1 cursor is curr
252e0 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67 2e 0a  ently pointing..
252f0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46  **.** If the OPF
25300 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
25310 20 62 69 74 20 6f 66 20 74 68 65 20 50 35 20 70   bit of the P5 p
25320 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74 2c  arameter is set,
25330 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63 75 72   then.** the cur
25340 73 6f 72 20 77 69 6c 6c 20 62 65 20 6c 65 66 74  sor will be left
25350 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 20 65 69   pointing at  ei
25360 74 68 65 72 20 74 68 65 20 6e 65 78 74 20 6f 72  ther the next or
25370 20 74 68 65 20 70 72 65 76 69 6f 75 73 0a 2a 2a   the previous.**
25380 20 72 65 63 6f 72 64 20 69 6e 20 74 68 65 20 74   record in the t
25390 61 62 6c 65 2e 20 49 66 20 69 74 20 69 73 20 6c  able. If it is l
253a0 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
253b0 74 68 65 20 6e 65 78 74 20 72 65 63 6f 72 64 2c  the next record,
253c0 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 6e 65 78   then.** the nex
253d0 74 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  t Next instructi
253e0 6f 6e 20 77 69 6c 6c 20 62 65 20 61 20 6e 6f 2d  on will be a no-
253f0 6f 70 2e 20 41 73 20 61 20 72 65 73 75 6c 74 2c  op. As a result,
25400 20 69 6e 20 74 68 69 73 20 63 61 73 65 0a 2a 2a   in this case.**
25410 20 69 74 20 69 73 20 6f 6b 20 74 6f 20 64 65 6c   it is ok to del
25420 65 74 65 20 61 20 72 65 63 6f 72 64 20 66 72 6f  ete a record fro
25430 6d 20 77 69 74 68 69 6e 20 61 20 4e 65 78 74 20  m within a Next 
25440 6c 6f 6f 70 2e 20 49 66 20 0a 2a 2a 20 4f 50 46  loop. If .** OPF
25450 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
25460 20 62 69 74 20 6f 66 20 50 35 20 69 73 20 63 6c   bit of P5 is cl
25470 65 61 72 2c 20 74 68 65 6e 20 74 68 65 20 63 75  ear, then the cu
25480 72 73 6f 72 20 77 69 6c 6c 20 62 65 0a 2a 2a 20  rsor will be.** 
25490 6c 65 66 74 20 69 6e 20 61 6e 20 75 6e 64 65 66  left in an undef
254a0 69 6e 65 64 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a  ined state..**.*
254b0 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
254c0 41 55 58 44 45 4c 45 54 45 20 62 69 74 20 69 73  AUXDELETE bit is
254d0 20 73 65 74 20 6f 6e 20 50 35 2c 20 74 68 61 74   set on P5, that
254e0 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
254f0 74 68 69 73 0a 2a 2a 20 64 65 6c 65 74 65 20 6f  this.** delete o
25500 6e 65 20 6f 66 20 73 65 76 65 72 61 6c 20 61 73  ne of several as
25510 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 64 65  sociated with de
25520 6c 65 74 69 6e 67 20 61 20 74 61 62 6c 65 20 72  leting a table r
25530 6f 77 20 61 6e 64 20 61 6c 6c 20 69 74 73 0a 2a  ow and all its.*
25540 2a 20 61 73 73 6f 63 69 61 74 65 64 20 69 6e 64  * associated ind
25550 65 78 20 65 6e 74 72 69 65 73 2e 20 20 45 78 61  ex entries.  Exa
25560 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68 6f 73  ctly one of thos
25570 65 20 64 65 6c 65 74 65 73 20 69 73 20 74 68 65  e deletes is the
25580 20 22 70 72 69 6d 61 72 79 22 0a 2a 2a 20 64 65   "primary".** de
25590 6c 65 74 65 2e 20 20 54 68 65 20 6f 74 68 65 72  lete.  The other
255a0 73 20 61 72 65 20 61 6c 6c 20 6f 6e 20 4f 50 46  s are all on OPF
255b0 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 63 75  LAG_FORDELETE cu
255c0 72 73 6f 72 73 20 6f 72 20 65 6c 73 65 20 61 72  rsors or else ar
255d0 65 0a 2a 2a 20 6d 61 72 6b 65 64 20 77 69 74 68  e.** marked with
255e0 20 74 68 65 20 41 55 58 44 45 4c 45 54 45 20 66   the AUXDELETE f
255f0 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  lag..**.** If th
25600 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
25610 20 66 6c 61 67 20 6f 66 20 50 32 20 28 4e 42 3a   flag of P2 (NB:
25620 20 50 32 20 6e 6f 74 20 50 35 29 20 69 73 20 73   P2 not P5) is s
25630 65 74 2c 20 74 68 65 6e 20 74 68 65 20 72 6f 77  et, then the row
25640 0a 2a 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74  .** change count
25650 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20   is incremented 
25660 28 6f 74 68 65 72 77 69 73 65 20 6e 6f 74 29 2e  (otherwise not).
25670 0a 2a 2a 0a 2a 2a 20 50 31 20 6d 75 73 74 20 6e  .**.** P1 must n
25680 6f 74 20 62 65 20 70 73 65 75 64 6f 2d 74 61 62  ot be pseudo-tab
25690 6c 65 2e 20 20 49 74 20 68 61 73 20 74 6f 20 62  le.  It has to b
256a0 65 20 61 20 72 65 61 6c 20 74 61 62 6c 65 20 77  e a real table w
256b0 69 74 68 0a 2a 2a 20 6d 75 6c 74 69 70 6c 65 20  ith.** multiple 
256c0 72 6f 77 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  rows..**.** If P
256d0 34 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 20 74 68  4 is not NULL th
256e0 65 6e 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20  en it points to 
256f0 61 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 2e 20  a Table object. 
25700 49 6e 20 74 68 69 73 20 63 61 73 65 20 65 69 74  In this case eit
25710 68 65 72 20 0a 2a 2a 20 74 68 65 20 75 70 64 61  her .** the upda
25720 74 65 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65  te or pre-update
25730 20 68 6f 6f 6b 2c 20 6f 72 20 62 6f 74 68 2c 20   hook, or both, 
25740 6d 61 79 20 62 65 20 69 6e 76 6f 6b 65 64 2e 20  may be invoked. 
25750 54 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75  The P1 cursor mu
25760 73 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  st.** have been 
25770 70 6f 73 69 74 69 6f 6e 65 64 20 75 73 69 6e 67  positioned using
25780 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20 70 72 69   OP_NotFound pri
25790 6f 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 74  or to invoking t
257a0 68 69 73 20 6f 70 63 6f 64 65 20 69 6e 20 0a 2a  his opcode in .*
257b0 2a 20 74 68 69 73 20 63 61 73 65 2e 20 53 70 65  * this case. Spe
257c0 63 69 66 69 63 61 6c 6c 79 2c 20 69 66 20 6f 6e  cifically, if on
257d0 65 20 69 73 20 63 6f 6e 66 69 67 75 72 65 64 2c  e is configured,
257e0 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65 20   the pre-update 
257f0 68 6f 6f 6b 20 69 73 20 0a 2a 2a 20 69 6e 76 6f  hook is .** invo
25800 6b 65 64 20 69 66 20 50 34 20 69 73 20 6e 6f 74  ked if P4 is not
25810 20 4e 55 4c 4c 2e 20 54 68 65 20 75 70 64 61 74   NULL. The updat
25820 65 2d 68 6f 6f 6b 20 69 73 20 69 6e 76 6f 6b 65  e-hook is invoke
25830 64 20 69 66 20 6f 6e 65 20 69 73 20 63 6f 6e 66  d if one is conf
25840 69 67 75 72 65 64 2c 20 0a 2a 2a 20 50 34 20 69  igured, .** P4 i
25850 73 20 6e 6f 74 20 4e 55 4c 4c 2c 20 61 6e 64 20  s not NULL, and 
25860 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e  the OPFLAG_NCHAN
25870 47 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  GE flag is set i
25880 6e 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  n P2..**.** If t
25890 68 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41  he OPFLAG_ISUPDA
258a0 54 45 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  TE flag is set i
258b0 6e 20 50 32 2c 20 74 68 65 6e 20 50 33 20 63 6f  n P2, then P3 co
258c0 6e 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65  ntains the addre
258d0 73 73 0a 2a 2a 20 6f 66 20 74 68 65 20 6d 65 6d  ss.** of the mem
258e0 6f 72 79 20 63 65 6c 6c 20 74 68 61 74 20 63 6f  ory cell that co
258f0 6e 74 61 69 6e 73 20 74 68 65 20 76 61 6c 75 65  ntains the value
25900 20 74 68 61 74 20 74 68 65 20 72 6f 77 69 64 20   that the rowid 
25910 6f 66 20 74 68 65 20 72 6f 77 20 77 69 6c 6c 0a  of the row will.
25920 2a 2a 20 62 65 20 73 65 74 20 74 6f 20 62 79 20  ** be set to by 
25930 74 68 65 20 75 70 64 61 74 65 2e 0a 2a 2f 0a 63  the update..*/.c
25940 61 73 65 20 4f 50 5f 44 65 6c 65 74 65 3a 20 7b  ase OP_Delete: {
25950 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
25960 43 3b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  C;.  const char 
25970 2a 7a 44 62 3b 0a 20 20 54 61 62 6c 65 20 2a 70  *zDb;.  Table *p
25980 54 61 62 3b 0a 20 20 69 6e 74 20 6f 70 66 6c 61  Tab;.  int opfla
25990 67 73 3b 0a 0a 20 20 6f 70 66 6c 61 67 73 20 3d  gs;..  opflags =
259a0 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73 65   pOp->p2;.  asse
259b0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
259c0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
259d0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
259e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
259f0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
25a00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
25a10 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
25a20 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
25a30 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
25a40 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61  Cursor!=0 );.  a
25a50 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72  ssert( pC->defer
25a60 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a  redMoveto==0 );.
25a70 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
25a80 45 42 55 47 0a 20 20 69 66 28 20 70 4f 70 2d 3e  EBUG.  if( pOp->
25a90 70 34 74 79 70 65 3d 3d 50 34 5f 54 41 42 4c 45  p4type==P4_TABLE
25aa0 20 26 26 20 48 61 73 52 6f 77 69 64 28 70 4f 70   && HasRowid(pOp
25ab0 2d 3e 70 34 2e 70 54 61 62 29 20 26 26 20 70 4f  ->p4.pTab) && pO
25ac0 70 2d 3e 70 35 3d 3d 30 20 29 7b 0a 20 20 20 20  p->p5==0 ){.    
25ad0 2f 2a 20 49 66 20 70 35 20 69 73 20 7a 65 72 6f  /* If p5 is zero
25ae0 2c 20 74 68 65 20 73 65 65 6b 20 6f 70 65 72 61  , the seek opera
25af0 74 69 6f 6e 20 74 68 61 74 20 70 6f 73 69 74 69  tion that positi
25b00 6f 6e 65 64 20 74 68 65 20 63 75 72 73 6f 72 20  oned the cursor 
25b10 70 72 69 6f 72 20 74 6f 0a 20 20 20 20 2a 2a 20  prior to.    ** 
25b20 4f 50 5f 44 65 6c 65 74 65 20 77 69 6c 6c 20 68  OP_Delete will h
25b30 61 76 65 20 61 6c 73 6f 20 73 65 74 20 74 68 65  ave also set the
25b40 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
25b50 74 20 66 69 65 6c 64 20 74 6f 20 74 68 65 20 72  t field to the r
25b60 6f 77 69 64 20 6f 66 0a 20 20 20 20 2a 2a 20 74  owid of.    ** t
25b70 68 65 20 72 6f 77 20 74 68 61 74 20 69 73 20 62  he row that is b
25b80 65 69 6e 67 20 64 65 6c 65 74 65 64 20 2a 2f 0a  eing deleted */.
25b90 20 20 20 20 69 36 34 20 69 4b 65 79 20 3d 20 73      i64 iKey = s
25ba0 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
25bb0 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
25bc0 72 73 6f 72 29 3b 0a 20 20 20 20 61 73 73 65 72  rsor);.    asser
25bd0 74 28 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72  t( pC->movetoTar
25be0 67 65 74 3d 3d 69 4b 65 79 20 29 3b 0a 20 20 7d  get==iKey );.  }
25bf0 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 49 66  .#endif..  /* If
25c00 20 74 68 65 20 75 70 64 61 74 65 2d 68 6f 6f 6b   the update-hook
25c10 20 6f 72 20 70 72 65 2d 75 70 64 61 74 65 2d 68   or pre-update-h
25c20 6f 6f 6b 20 77 69 6c 6c 20 62 65 20 69 6e 76 6f  ook will be invo
25c30 6b 65 64 2c 20 73 65 74 20 7a 44 62 20 74 6f 0a  ked, set zDb to.
25c40 20 20 2a 2a 20 74 68 65 20 6e 61 6d 65 20 6f 66    ** the name of
25c50 20 74 68 65 20 64 62 20 74 6f 20 70 61 73 73 20   the db to pass 
25c60 61 73 20 74 6f 20 69 74 2e 20 41 6c 73 6f 20 73  as to it. Also s
25c70 65 74 20 6c 6f 63 61 6c 20 70 54 61 62 20 74 6f  et local pTab to
25c80 20 61 20 63 6f 70 79 0a 20 20 2a 2a 20 6f 66 20   a copy.  ** of 
25c90 70 34 2e 70 54 61 62 2e 20 46 69 6e 61 6c 6c 79  p4.pTab. Finally
25ca0 2c 20 69 66 20 70 35 20 69 73 20 74 72 75 65 2c  , if p5 is true,
25cb0 20 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74   indicating that
25cc0 20 74 68 69 73 20 63 75 72 73 6f 72 20 77 61 73   this cursor was
25cd0 0a 20 20 2a 2a 20 6c 61 73 74 20 6d 6f 76 65 64  .  ** last moved
25ce0 20 77 69 74 68 20 4f 50 5f 4e 65 78 74 20 6f 72   with OP_Next or
25cf0 20 4f 50 5f 50 72 65 76 2c 20 6e 6f 74 20 53 65   OP_Prev, not Se
25d00 65 6b 20 6f 72 20 4e 6f 74 46 6f 75 6e 64 2c 20  ek or NotFound, 
25d10 73 65 74 20 0a 20 20 2a 2a 20 56 64 62 65 43 75  set .  ** VdbeCu
25d20 72 73 6f 72 2e 6d 6f 76 65 74 6f 54 61 72 67 65  rsor.movetoTarge
25d30 74 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74  t to the current
25d40 20 72 6f 77 69 64 2e 20 20 2a 2f 0a 20 20 69 66   rowid.  */.  if
25d50 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
25d60 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
25d70 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
25d80 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
25d90 2d 3e 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20 20  ->iDb>=0 );.    
25da0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
25db0 70 54 61 62 21 3d 30 20 29 3b 0a 20 20 20 20 7a  pTab!=0 );.    z
25dc0 44 62 20 3d 20 64 62 2d 3e 61 44 62 5b 70 43 2d  Db = db->aDb[pC-
25dd0 3e 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a  >iDb].zDbSName;.
25de0 20 20 20 20 70 54 61 62 20 3d 20 70 4f 70 2d 3e      pTab = pOp->
25df0 70 34 2e 70 54 61 62 3b 0a 20 20 20 20 69 66 28  p4.pTab;.    if(
25e00 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
25e10 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 29  AG_SAVEPOSITION)
25e20 21 3d 30 20 26 26 20 70 43 2d 3e 69 73 54 61 62  !=0 && pC->isTab
25e30 6c 65 20 29 7b 0a 20 20 20 20 20 20 70 43 2d 3e  le ){.      pC->
25e40 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 73  movetoTarget = s
25e50 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
25e60 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
25e70 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  rsor);.    }.  }
25e80 65 6c 73 65 7b 0a 20 20 20 20 7a 44 62 20 3d 20  else{.    zDb = 
25e90 30 3b 20 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64  0;   /* Not need
25ea0 65 64 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63  ed.  Silence a c
25eb0 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e  ompiler warning.
25ec0 20 2a 2f 0a 20 20 20 20 70 54 61 62 20 3d 20 30   */.    pTab = 0
25ed0 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
25ee0 2e 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d  .  Silence a com
25ef0 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a  piler warning. *
25f00 2f 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53 51  /.  }..#ifdef SQ
25f10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55  LITE_ENABLE_PREU
25f20 50 44 41 54 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20  PDATE_HOOK.  /* 
25f30 49 6e 76 6f 6b 65 20 74 68 65 20 70 72 65 2d 75  Invoke the pre-u
25f40 70 64 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65  pdate-hook if re
25f50 71 75 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28  quired. */.  if(
25f60 20 64 62 2d 3e 78 50 72 65 55 70 64 61 74 65 43   db->xPreUpdateC
25f70 61 6c 6c 62 61 63 6b 20 26 26 20 70 4f 70 2d 3e  allback && pOp->
25f80 70 34 2e 70 54 61 62 20 29 7b 0a 20 20 20 20 61  p4.pTab ){.    a
25f90 73 73 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73  ssert( !(opflags
25fa0 20 26 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41   & OPFLAG_ISUPDA
25fb0 54 45 29 20 0a 20 20 20 20 20 20 20 20 20 7c 7c  TE) .         ||
25fc0 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 3d   HasRowid(pTab)=
25fd0 3d 30 20 0a 20 20 20 20 20 20 20 20 20 7c 7c 20  =0 .         || 
25fe0 28 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 66  (aMem[pOp->p3].f
25ff0 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 20  lags & MEM_Int) 
26000 0a 20 20 20 20 29 3b 0a 20 20 20 20 73 71 6c 69  .    );.    sqli
26010 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
26020 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
26030 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
26040 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
26050 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
26060 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
26070 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
26080 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
26090 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
260a0 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
260b0 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
260c0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
260d0 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
260e0 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
260f0 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
26100 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
26110 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
26120 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
26130 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
26140 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
26150 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
26160 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
26170 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
26180 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
26190 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
261a0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
261b0 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
261c0 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
261d0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
261e0 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
261f0 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
26200 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
26210 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
26220 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26230 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
26240 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
26250 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
26260 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
26270 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
26280 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
26290 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
262a0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
262b0 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
262c0 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
262d0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
262e0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
262f0 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
26300 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
26310 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26320 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26330 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
26340 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
26350 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26360 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
26370 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
26380 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
26390 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
263a0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
263b0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
263c0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
263d0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
263e0 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
263f0 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
26400 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
26410 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
26420 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
26430 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
26440 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
26450 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
26460 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
26470 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
26480 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
26490 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
264a0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
264b0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
264c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
264d0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
264e0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
264f0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
26500 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
26510 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
26520 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
26530 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
26540 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
26550 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
26560 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
26570 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
26580 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
26590 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
265a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
265b0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
265c0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
265d0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
265e0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
265f0 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
26600 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
26610 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
26620 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
26630 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
26640 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
26650 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
26660 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
26670 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
26680 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
26690 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
266a0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
266b0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
266c0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
266d0 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
266e0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
266f0 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
26700 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
26710 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
26720 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
26730 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
26740 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
26750 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
26760 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
26770 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
26780 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
26790 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
267a0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
267b0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
267c0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
267d0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
267e0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
267f0 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
26800 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
26810 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
26820 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
26830 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
26840 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
26850 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
26860 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
26870 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
26880 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
26890 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
268a0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
268b0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
268c0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
268d0 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
268e0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
268f0 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26900 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
26910 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26920 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26930 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26940 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
26950 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
26960 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
26970 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
26980 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
26990 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
269a0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
269b0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
269c0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
269d0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
269e0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
269f0 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26a00 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
26a10 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26a20 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
26a30 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26a40 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
26a50 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26a60 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
26a70 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
26a80 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
26a90 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
26aa0 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
26ab0 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
26ac0 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
26ad0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
26ae0 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
26af0 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
26b00 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
26b10 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
26b20 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
26b30 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
26b40 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26b50 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
26b60 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
26b70 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
26b80 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
26b90 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
26ba0 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
26bb0 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
26bc0 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
26bd0 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
26be0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
26bf0 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
26c00 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
26c10 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
26c20 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
26c30 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
26c40 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
26c50 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
26c60 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26c70 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
26c80 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
26c90 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26ca0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
26cb0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
26cc0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26cd0 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
26ce0 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
26cf0 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
26d00 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
26d10 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
26d20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26d30 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26d40 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
26d50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
26d60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26d70 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
26d80 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
26d90 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26da0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26db0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
26dc0 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
26dd0 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
26de0 64 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65  data.**.** Write
26df0 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50   into register P
26e00 32 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72  2 the complete r
26e10 6f 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74  ow content for t
26e20 68 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68  he row at .** wh
26e30 69 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73  ich cursor P1 is
26e40 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74   currently point
26e50 69 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73  ing..** There is
26e60 20 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69   no interpretati
26e70 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20  on of the data. 
26e80 20 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20   .** It is just 
26e90 63 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20  copied onto the 
26ea0 50 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63  P2 register exac
26eb0 74 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73  tly as .** it is
26ec0 20 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61   found in the da
26ed0 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a  tabase file..**.
26ee0 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20  ** If cursor P1 
26ef0 69 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65  is an index, the
26f00 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73  n the content is
26f10 20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20   the key of the 
26f20 72 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f  row..** If curso
26f30 72 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c  r P2 is a table,
26f40 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e   then the conten
26f50 74 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74  t extracted is t
26f60 68 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49  he data..**.** I
26f70 66 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20  f the P1 cursor 
26f80 6d 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67  must be pointing
26f90 20 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20   to a valid row 
26fa0 28 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29  (not a NULL row)
26fb0 0a 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61  .** of a real ta
26fc0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
26fd0 6f 2d 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  o-table..**.** I
26fe0 66 20 50 33 21 3d 30 20 74 68 65 6e 20 74 68 69  f P3!=0 then thi
26ff0 73 20 6f 70 63 6f 64 65 20 69 73 20 61 6c 6c 6f  s opcode is allo
27000 77 65 64 20 74 6f 20 6d 61 6b 65 20 61 6e 20 65  wed to make an e
27010 70 68 65 72 6d 65 72 61 6c 20 70 6f 69 6e 74 65  phermeral pointe
27020 72 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 64 61  r.** into the da
27030 74 61 62 61 73 65 20 70 61 67 65 2e 20 20 54 68  tabase page.  Th
27040 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  at means that th
27050 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 74 68 65  e content of the
27060 20 6f 75 74 70 75 74 0a 2a 2a 20 72 65 67 69 73   output.** regis
27070 74 65 72 20 77 69 6c 6c 20 62 65 20 69 6e 76 61  ter will be inva
27080 6c 69 64 61 74 65 64 20 61 73 20 73 6f 6f 6e 20  lidated as soon 
27090 61 73 20 74 68 65 20 63 75 72 73 6f 72 20 6d 6f  as the cursor mo
270a0 76 65 73 20 2d 20 69 6e 63 6c 75 64 69 6e 67 0a  ves - including.
270b0 2a 2a 20 6d 6f 76 65 73 20 63 61 75 73 65 64 20  ** moves caused 
270c0 62 79 20 6f 74 68 65 72 20 63 75 72 73 6f 72 73  by other cursors
270d0 20 74 68 61 74 20 22 73 61 76 65 22 20 74 68 65   that "save" the
270e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 63 75 72   the current cur
270f0 73 6f 72 73 0a 2a 2a 20 70 6f 73 69 74 69 6f 6e  sors.** position
27100 20 69 6e 20 6f 72 64 65 72 20 74 68 61 74 20 74   in order that t
27110 68 65 79 20 63 61 6e 20 77 72 69 74 65 20 74 6f  hey can write to
27120 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c 65 2e   the same table.
27130 20 20 49 66 20 50 33 3d 3d 30 0a 2a 2a 20 74 68    If P3==0.** th
27140 65 6e 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65  en a copy of the
27150 20 64 61 74 61 20 69 73 20 6d 61 64 65 20 69 6e   data is made in
27160 74 6f 20 6d 65 6d 6f 72 79 2e 20 20 50 33 21 3d  to memory.  P3!=
27170 30 20 69 73 20 66 61 73 74 65 72 2c 20 62 75 74  0 is faster, but
27180 0a 2a 2a 20 50 33 3d 3d 30 20 69 73 20 73 61 66  .** P3==0 is saf
27190 65 72 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 21  er..**.** If P3!
271a0 3d 30 20 74 68 65 6e 20 74 68 65 20 63 6f 6e 74  =0 then the cont
271b0 65 6e 74 20 6f 66 20 74 68 65 20 50 32 20 72 65  ent of the P2 re
271c0 67 69 73 74 65 72 20 69 73 20 75 6e 73 75 69 74  gister is unsuit
271d0 61 62 6c 65 20 66 6f 72 20 75 73 65 0a 2a 2a 20  able for use.** 
271e0 69 6e 20 4f 50 5f 52 65 73 75 6c 74 20 61 6e 64  in OP_Result and
271f0 20 61 6e 79 20 4f 50 5f 52 65 73 75 6c 74 20 77   any OP_Result w
27200 69 6c 6c 20 69 6e 76 61 6c 69 64 61 74 65 20 74  ill invalidate t
27210 68 65 20 50 32 20 72 65 67 69 73 74 65 72 20 63  he P2 register c
27220 6f 6e 74 65 6e 74 2e 0a 2a 2a 20 54 68 65 20 50  ontent..** The P
27230 32 20 72 65 67 69 73 74 65 72 20 63 6f 6e 74 65  2 register conte
27240 6e 74 20 69 73 20 69 6e 76 61 6c 69 64 61 74 65  nt is invalidate
27250 64 20 62 79 20 6f 70 63 6f 64 65 73 20 6c 69 6b  d by opcodes lik
27260 65 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f 72  e OP_Function or
27270 0a 2a 2a 20 62 79 20 61 6e 79 20 75 73 65 20 6f  .** by any use o
27280 66 20 61 6e 6f 74 68 65 72 20 63 75 72 73 6f 72  f another cursor
27290 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
272a0 20 73 61 6d 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a   same table..*/.
272b0 63 61 73 65 20 4f 50 5f 52 6f 77 44 61 74 61 3a  case OP_RowData:
272c0 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20   {.  VdbeCursor 
272d0 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20  *pC;.  BtCursor 
272e0 2a 70 43 72 73 72 3b 0a 20 20 75 33 32 20 6e 3b  *pCrsr;.  u32 n;
272f0 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ..  pOut = out2P
27300 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
27310 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
27320 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
27330 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
27340 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
27350 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
27360 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
27370 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
27380 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
27390 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
273a0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
273b0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
273c0 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
273d0 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
273e0 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
273f0 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
27400 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
27410 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
27420 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
27430 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
27440 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
27450 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
27460 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
27470 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
27480 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
27490 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
274a0 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
274b0 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
274c0 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
274d0 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
274e0 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
274f0 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
27500 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
27510 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
27520 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
27530 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
27540 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
27550 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
27560 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
27570 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
27580 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
27590 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
275a0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
275b0 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
275c0 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
275d0 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
275e0 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
275f0 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
27600 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
27610 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
27620 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
27630 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
27640 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
27650 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
27660 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
27670 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
27680 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
27690 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
276a0 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
276b0 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
276c0 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
276d0 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
276e0 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
276f0 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
27700 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 72  ase( n==0 );.  r
27710 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d  c = sqlite3VdbeM
27720 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 72 73  emFromBtree(pCrs
27730 72 2c 20 30 2c 20 6e 2c 20 70 4f 75 74 29 3b 0a  r, 0, n, pOut);.
27740 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
27750 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
27760 6f 72 3b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e  or;.  if( !pOp->
27770 70 33 20 29 20 44 65 65 70 68 65 6d 65 72 61 6c  p3 ) Deephemeral
27780 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20 55 50 44  ize(pOut);.  UPD
27790 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45  ATE_MAX_BLOBSIZE
277a0 28 70 4f 75 74 29 3b 0a 20 20 52 45 47 49 53 54  (pOut);.  REGIST
277b0 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32  ER_TRACE(pOp->p2
277c0 2c 20 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b  , pOut);.  break
277d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
277e0 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a 20  Rowid P1 P2 * * 
277f0 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
27800 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a  [P2]=rowid.**.**
27810 20 53 74 6f 72 65 20 69 6e 20 72 65 67 69 73 74   Store in regist
27820 65 72 20 50 32 20 61 6e 20 69 6e 74 65 67 65 72  er P2 an integer
27830 20 77 68 69 63 68 20 69 73 20 74 68 65 20 6b 65   which is the ke
27840 79 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 65  y of the table e
27850 6e 74 72 79 20 74 68 61 74 0a 2a 2a 20 50 31 20  ntry that.** P1 
27860 69 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  is currently poi
27870 6e 74 20 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20  nt to..**.** P1 
27880 63 61 6e 20 62 65 20 65 69 74 68 65 72 20 61 6e  can be either an
27890 20 6f 72 64 69 6e 61 72 79 20 74 61 62 6c 65 20   ordinary table 
278a0 6f 72 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  or a virtual tab
278b0 6c 65 2e 20 20 54 68 65 72 65 20 75 73 65 64 20  le.  There used 
278c0 74 6f 0a 2a 2a 20 62 65 20 61 20 73 65 70 61 72  to.** be a separ
278d0 61 74 65 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70  ate OP_VRowid op
278e0 63 6f 64 65 20 66 6f 72 20 75 73 65 20 77 69 74  code for use wit
278f0 68 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  h virtual tables
27900 2c 20 62 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e  , but this.** on
27910 65 20 6f 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72  e opcode now wor
27920 6b 73 20 66 6f 72 20 62 6f 74 68 20 74 61 62 6c  ks for both tabl
27930 65 20 74 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65  e types..*/.case
27940 20 4f 50 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20   OP_Rowid: {    
27950 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
27960 6f 75 74 32 20 2a 2f 0a 20 20 56 64 62 65 43 75  out2 */.  VdbeCu
27970 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 36 34 20  rsor *pC;.  i64 
27980 76 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61  v;.  sqlite3_vta
27990 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
279a0 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
279b0 20 2a 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f   *pModule;..  pO
279c0 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
279d0 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61  ase(p, pOp);.  a
279e0 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
279f0 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
27a00 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
27a10 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
27a20 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
27a30 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
27a40 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 21 3d  ( pC->eCurType!=
27a50 43 55 52 54 59 50 45 5f 50 53 45 55 44 4f 20 7c  CURTYPE_PSEUDO |
27a60 7c 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b  | pC->nullRow );
27a70 0a 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52  .  if( pC->nullR
27a80 6f 77 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  ow ){.    pOut->
27a90 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
27aa0 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
27ab0 65 6c 73 65 20 69 66 28 20 70 43 2d 3e 64 65 66  else if( pC->def
27ac0 65 72 72 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20  erredMoveto ){. 
27ad0 20 20 20 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74     v = pC->movet
27ae0 6f 54 61 72 67 65 74 3b 0a 23 69 66 6e 64 65 66  oTarget;.#ifndef
27af0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27b00 54 55 41 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73  TUALTABLE.  }els
27b10 65 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79  e if( pC->eCurTy
27b20 70 65 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42  pe==CURTYPE_VTAB
27b30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27b40 70 43 2d 3e 75 63 2e 70 56 43 75 72 21 3d 30 20  pC->uc.pVCur!=0 
27b50 29 3b 0a 20 20 20 20 70 56 74 61 62 20 3d 20 70  );.    pVtab = p
27b60 43 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70 56 74  C->uc.pVCur->pVt
27b70 61 62 3b 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20  ab;.    pModule 
27b80 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
27b90 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4d  ;.    assert( pM
27ba0 6f 64 75 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b  odule->xRowid );
27bb0 0a 20 20 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c  .    rc = pModul
27bc0 65 2d 3e 78 52 6f 77 69 64 28 70 43 2d 3e 75 63  e->xRowid(pC->uc
27bd0 2e 70 56 43 75 72 2c 20 26 76 29 3b 0a 20 20 20  .pVCur, &v);.   
27be0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
27bf0 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
27c00 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  b);.    if( rc )
27c10 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
27c20 74 6f 5f 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66  to_error;.#endif
27c30 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
27c40 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a  VIRTUALTABLE */.
27c50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73    }else{.    ass
27c60 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
27c70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27c80 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
27c90 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27ca0 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 );.    rc = sq
27cb0 6c 69 74 65 33 56 64 62 65 43 75 72 73 6f 72 52  lite3VdbeCursorR
27cc0 65 73 74 6f 72 65 28 70 43 29 3b 0a 20 20 20 20  estore(pC);.    
27cd0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
27ce0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
27cf0 3b 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 6e 75  ;.    if( pC->nu
27d00 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 20 20 70  llRow ){.      p
27d10 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
27d20 5f 4e 75 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65  _Null;.      bre
27d30 61 6b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 76 20  ak;.    }.    v 
27d40 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
27d50 74 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e  tegerKey(pC->uc.
27d60 70 43 75 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20  pCursor);.  }.  
27d70 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20  pOut->u.i = v;. 
27d80 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
27d90 63 6f 64 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31  code: NullRow P1
27da0 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d   * * * *.**.** M
27db0 6f 76 65 20 74 68 65 20 63 75 72 73 6f 72 20 50  ove the cursor P
27dc0 31 20 74 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e  1 to a null row.
27dd0 20 20 41 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20    Any OP_Column 
27de0 6f 70 65 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68  operations.** th
27df0 61 74 20 6f 63 63 75 72 20 77 68 69 6c 65 20 74  at occur while t
27e00 68 65 20 63 75 72 73 6f 72 20 69 73 20 6f 6e 20  he cursor is on 
27e10 74 68 65 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c  the null row wil
27e20 6c 20 61 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74  l always.** writ
27e30 65 20 61 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73  e a NULL..*/.cas
27e40 65 20 4f 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a  e OP_NullRow: {.
27e50 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
27e60 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ;..  assert( pOp
27e70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
27e80 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
27e90 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
27ea0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
27eb0 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20 20  ert( pC!=0 );.  
27ec0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b  pC->nullRow = 1;
27ed0 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
27ee0 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
27ef0 3b 0a 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72  ;.  if( pC->eCur
27f00 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
27f10 52 45 45 20 29 7b 0a 20 20 20 20 61 73 73 65 72  REE ){.    asser
27f20 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  t( pC->uc.pCurso
27f30 72 21 3d 30 20 29 3b 0a 20 20 20 20 73 71 6c 69  r!=0 );.    sqli
27f40 74 65 33 42 74 72 65 65 43 6c 65 61 72 43 75 72  te3BtreeClearCur
27f50 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  sor(pC->uc.pCurs
27f60 6f 72 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  or);.  }.  break
27f70 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
27f80 4c 61 73 74 20 50 31 20 50 32 20 50 33 20 2a 20  Last P1 P2 P3 * 
27f90 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74  *.**.** The next
27fa0 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77 69   use of the Rowi
27fb0 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50  d or Column or P
27fc0 72 65 76 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  rev instruction 
27fd0 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20  for P1 .** will 
27fe0 72 65 66 65 72 20 74 6f 20 74 68 65 20 6c 61 73  refer to the las
27ff0 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65 20 64  t entry in the d
28000 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f 72  atabase table or
28010 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68   index..** If th
28020 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
28030 20 69 73 20 65 6d 70 74 79 20 61 6e 64 20 50 32   is empty and P2
28040 3e 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d  >0, then jump im
28050 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
28060 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 30 20 6f  .** If P2 is 0 o
28070 72 20 69 66 20 74 68 65 20 74 61 62 6c 65 20 6f  r if the table o
28080 72 20 69 6e 64 65 78 20 69 73 20 6e 6f 74 20 65  r index is not e
28090 6d 70 74 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75  mpty, fall throu
280a0 67 68 0a 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c  gh.** to the fol
280b0 6c 6f 77 69 6e 67 20 69 6e 73 74 72 75 63 74 69  lowing instructi
280c0 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  on..**.** This o
280d0 70 63 6f 64 65 20 6c 65 61 76 65 73 20 74 68 65  pcode leaves the
280e0 20 63 75 72 73 6f 72 20 63 6f 6e 66 69 67 75 72   cursor configur
280f0 65 64 20 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65  ed to move in re
28100 76 65 72 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20  verse order,.** 
28110 66 72 6f 6d 20 74 68 65 20 65 6e 64 20 74 6f 77  from the end tow
28120 61 72 64 20 74 68 65 20 62 65 67 69 6e 6e 69 6e  ard the beginnin
28130 67 2e 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  g.  In other wor
28140 64 73 2c 20 74 68 65 20 63 75 72 73 6f 72 20 69  ds, the cursor i
28150 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65 64 20  s.** configured 
28160 74 6f 20 75 73 65 20 50 72 65 76 2c 20 6e 6f 74  to use Prev, not
28170 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   Next..**.** If 
28180 50 33 20 69 73 20 2d 31 2c 20 74 68 65 6e 20 74  P3 is -1, then t
28190 68 65 20 63 75 72 73 6f 72 20 69 73 20 70 6f 73  he cursor is pos
281a0 69 74 69 6f 6e 65 64 20 61 74 20 74 68 65 20 65  itioned at the e
281b0 6e 64 20 6f 66 20 74 68 65 20 62 74 72 65 65 0a  nd of the btree.
281c0 2a 2a 20 66 6f 72 20 74 68 65 20 70 75 72 70 6f  ** for the purpo
281d0 73 65 20 6f 66 20 61 70 70 65 6e 64 69 6e 67 20  se of appending 
281e0 61 20 6e 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f  a new entry onto
281f0 20 74 68 65 20 62 74 72 65 65 2e 20 20 49 6e 20   the btree.  In 
28200 74 68 61 74 0a 2a 2a 20 63 61 73 65 20 50 32 20  that.** case P2 
28210 6d 75 73 74 20 62 65 20 30 2e 20 20 49 74 20 69  must be 0.  It i
28220 73 20 61 73 73 75 6d 65 64 20 74 68 61 74 20 74  s assumed that t
28230 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
28240 64 20 6f 6e 6c 79 20 66 6f 72 0a 2a 2a 20 61 70  d only for.** ap
28250 70 65 6e 64 69 6e 67 20 61 6e 64 20 73 6f 20 69  pending and so i
28260 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
28270 76 61 6c 69 64 2c 20 74 68 65 6e 20 74 68 65 20  valid, then the 
28280 63 75 72 73 6f 72 20 6d 75 73 74 20 61 6c 72 65  cursor must alre
28290 61 64 79 0a 2a 2a 20 62 65 20 70 6f 69 6e 74 69  ady.** be pointi
282a0 6e 67 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  ng at the end of
282b0 20 74 68 65 20 62 74 72 65 65 20 61 6e 64 20 73   the btree and s
282c0 6f 20 6e 6f 20 63 68 61 6e 67 65 73 20 61 72 65  o no changes are
282d0 20 6d 61 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20   made to.** the 
282e0 63 75 72 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20  cursor..*/.case 
282f0 4f 50 5f 4c 61 73 74 3a 20 7b 20 20 20 20 20 20  OP_Last: {      
28300 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56    /* jump */.  V
28310 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
28320 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73 72   BtCursor *pCrsr
28330 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20  ;.  int res;..  
28340 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
28350 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
28360 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
28370 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
28380 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
28390 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
283a0 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
283b0 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
283c0 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e  ;.  pCrsr = pC->
283d0 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 72 65  uc.pCursor;.  re
283e0 73 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28  s = 0;.  assert(
283f0 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20 70   pCrsr!=0 );.  p
28400 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
28410 70 4f 70 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20  pOp->p3;.#ifdef 
28420 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 70  SQLITE_DEBUG.  p
28430 43 2d 3e 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c  C->seekOp = OP_L
28440 61 73 74 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66  ast;.#endif.  if
28450 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20  ( pOp->p3==0 || 
28460 21 73 71 6c 69 74 65 33 42 74 72 65 65 43 75 72  !sqlite3BtreeCur
28470 73 6f 72 49 73 56 61 6c 69 64 4e 4e 28 70 43 72  sorIsValidNN(pCr
28480 73 72 29 20 29 7b 0a 20 20 20 20 72 63 20 3d 20  sr) ){.    rc = 
28490 73 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74  sqlite3BtreeLast
284a0 28 70 43 72 73 72 2c 20 26 72 65 73 29 3b 0a 20  (pCrsr, &res);. 
284b0 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d     pC->nullRow =
284c0 20 28 75 38 29 72 65 73 3b 0a 20 20 20 20 70 43   (u8)res;.    pC
284d0 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
284e0 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61   = 0;.    pC->ca
284f0 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48  cheStatus = CACH
28500 45 5f 53 54 41 4c 45 3b 0a 20 20 20 20 69 66 28  E_STALE;.    if(
28510 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
28520 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
28530 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30     if( pOp->p2>0
28540 20 29 7b 0a 20 20 20 20 20 20 56 64 62 65 42 72   ){.      VdbeBr
28550 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21 3d 30  anchTaken(res!=0
28560 2c 32 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72  ,2);.      if( r
28570 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  es ) goto jump_t
28580 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 65  o_p2;.    }.  }e
28590 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
285a0 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20   pOp->p2==0 );. 
285b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a   }.  break;.}...
285c0 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
285d0 72 53 6f 72 74 20 50 31 20 50 32 20 2a 20 2a 20  rSort P1 P2 * * 
285e0 2a 0a 2a 2a 0a 2a 2a 20 41 66 74 65 72 20 61 6c  *.**.** After al
285f0 6c 20 72 65 63 6f 72 64 73 20 68 61 76 65 20 62  l records have b
28600 65 65 6e 20 69 6e 73 65 72 74 65 64 20 69 6e 74  een inserted int
28610 6f 20 74 68 65 20 53 6f 72 74 65 72 20 6f 62 6a  o the Sorter obj
28620 65 63 74 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65  ect.** identifie
28630 64 20 62 79 20 50 31 2c 20 69 6e 76 6f 6b 65 20  d by P1, invoke 
28640 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 61  this opcode to a
28650 63 74 75 61 6c 6c 79 20 64 6f 20 74 68 65 20 73  ctually do the s
28660 6f 72 74 69 6e 67 2e 0a 2a 2a 20 4a 75 6d 70 20  orting..** Jump 
28670 74 6f 20 50 32 20 69 66 20 74 68 65 72 65 20 61  to P2 if there a
28680 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 74 6f  re no records to
28690 20 62 65 20 73 6f 72 74 65 64 2e 0a 2a 2a 0a 2a   be sorted..**.*
286a0 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73  * This opcode is
286b0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 4f 50   an alias for OP
286c0 5f 53 6f 72 74 20 61 6e 64 20 4f 50 5f 52 65 77  _Sort and OP_Rew
286d0 69 6e 64 20 74 68 61 74 20 69 73 20 75 73 65 64  ind that is used
286e0 0a 2a 2a 20 66 6f 72 20 53 6f 72 74 65 72 20 6f  .** for Sorter o
286f0 62 6a 65 63 74 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70  bjects..*/./* Op
28700 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20 50 32  code: Sort P1 P2
28710 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
28720 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 65 78  s opcode does ex
28730 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 74  actly the same t
28740 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77 69 6e  hing as OP_Rewin
28750 64 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  d except that.**
28760 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73 20 61   it increments a
28770 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 67  n undocumented g
28780 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 75  lobal variable u
28790 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e 67 2e  sed for testing.
287a0 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67 20 69  .**.** Sorting i
287b0 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62  s accomplished b
287c0 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f 72 64  y writing record
287d0 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69 6e 67  s into a sorting
287e0 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65 6e 20   index,.** then 
287f0 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74 20 69  rewinding that i
28800 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69 6e 67  ndex and playing
28810 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20 62 65   it back from be
28820 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20 65 6e  ginning to.** en
28830 64 2e 20 20 57 65 20 75 73 65 20 74 68 65 20 4f  d.  We use the O
28840 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20 69 6e  P_Sort opcode in
28850 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65 77 69  stead of OP_Rewi
28860 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a 2a 20  nd to do the.** 
28870 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74 68 61  rewinding so tha
28880 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  t the global var
28890 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20 69 6e  iable will be in
288a0 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a 2a 2a  cremented and.**
288b0 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65 73 74   regression test
288c0 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e 65 20  s can determine 
288d0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
288e0 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69 73 0a  he optimizer is.
288f0 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f 70 74  ** correctly opt
28900 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f 72 74  imizing out sort
28910 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
28920 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f 2a 20  rterSort:    /* 
28930 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  jump */.case OP_
28940 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Sort: {        /
28950 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64 65 66  * jump */.#ifdef
28960 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
28970 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f 75 6e  qlite3_sort_coun
28980 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33 5f 73  t++;.  sqlite3_s
28990 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b 0a 23  earch_count--;.#
289a0 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f 75 6e  endif.  p->aCoun
289b0 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54 53  ter[SQLITE_STMTS
289c0 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b 0a 20  TATUS_SORT]++;. 
289d0 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
289e0 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e 64 20   into OP_Rewind 
289f0 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  */.}./* Opcode: 
28a00 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a 20 2a  Rewind P1 P2 * *
28a10 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 65 78   *.**.** The nex
28a20 74 20 75 73 65 20 6f 66 20 74 68 65 20 52 6f 77  t use of the Row
28a30 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f 72 20  id or Column or 
28a40 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  Next instruction
28a50 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69 6c 6c   for P1 .** will
28a60 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 66 69   refer to the fi
28a70 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74 68 65  rst entry in the
28a80 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
28a90 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49 66 20  or index..** If 
28aa0 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  the table or ind
28ab0 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a 75 6d  ex is empty, jum
28ac0 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
28ad0 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74   P2..** If the t
28ae0 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
28af0 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61 6c 6c   not empty, fall
28b00 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
28b10 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20 69 6e  following .** in
28b20 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  struction..**.**
28b30 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61   This opcode lea
28b40 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 63  ves the cursor c
28b50 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76  onfigured to mov
28b60 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64  e in forward ord
28b70 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20  er,.** from the 
28b80 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64  beginning toward
28b90 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74   the end.  In ot
28ba0 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63  her words, the c
28bb0 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66  ursor is.** conf
28bc0 69 67 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65  igured to use Ne
28bd0 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2f  xt, not Prev..*/
28be0 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e 64 3a  .case OP_Rewind:
28bf0 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
28c00 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  p */.  VdbeCurso
28c10 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72 73 6f  r *pC;.  BtCurso
28c20 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e 74 20  r *pCrsr;.  int 
28c30 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74 28 20  res;..  assert( 
28c40 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
28c50 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
28c60 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
28c70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
28c80 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
28c90 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f 72  .  assert( isSor
28ca0 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d 3e 6f  ter(pC)==(pOp->o
28cb0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
28cc0 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73 20 3d  Sort) );.  res =
28cd0 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   1;.#ifdef SQLIT
28ce0 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65  E_DEBUG.  pC->se
28cf0 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69 6e 64  ekOp = OP_Rewind
28d00 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 69  ;.#endif.  if( i
28d10 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b 0a 20  sSorter(pC) ){. 
28d20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56     rc = sqlite3V
28d30 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e 64 28  dbeSorterRewind(
28d40 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d 65 6c  pC, &res);.  }el
28d50 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
28d60 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
28d70 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
28d80 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75     pCrsr = pC->u
28d90 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20 20 61  c.pCursor;.    a
28da0 73 73 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a  ssert( pCrsr );.
28db0 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
28dc0 42 74 72 65 65 46 69 72 73 74 28 70 43 72 73 72  BtreeFirst(pCrsr
28dd0 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70 43 2d  , &res);.    pC-
28de0 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20  >deferredMoveto 
28df0 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63  = 0;.    pC->cac
28e00 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
28e10 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20 69 66  _STALE;.  }.  if
28e20 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
28e30 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
28e40 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
28e50 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73 65 72  (u8)res;.  asser
28e60 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26 26 20  t( pOp->p2>0 && 
28e70 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29  pOp->p2<p->nOp )
28e80 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61  ;.  VdbeBranchTa
28e90 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20  ken(res!=0,2);. 
28ea0 20 69 66 28 20 72 65 73 20 29 20 67 6f 74 6f 20   if( res ) goto 
28eb0 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
28ec0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
28ed0 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20 50 33  e: Next P1 P2 P3
28ee0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41 64 76   P4 P5.**.** Adv
28ef0 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31 20 73  ance cursor P1 s
28f00 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e 74 73  o that it points
28f10 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b 65 79   to the next key
28f20 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20 69 74  /data pair in it
28f30 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  s.** table or in
28f40 64 65 78 2e 20 20 49 66 20 74 68 65 72 65 20 61  dex.  If there a
28f50 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79 2f 76  re no more key/v
28f60 61 6c 75 65 20 70 61 69 72 73 20 74 68 65 6e 20  alue pairs then 
28f70 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a 2a 20  fall through.** 
28f80 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  to the following
28f90 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 42   instruction.  B
28fa0 75 74 20 69 66 20 74 68 65 20 63 75 72 73 6f 72  ut if the cursor
28fb0 20 61 64 76 61 6e 63 65 20 77 61 73 20 73 75 63   advance was suc
28fc0 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75 6d 70  cessful,.** jump
28fd0 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
28fe0 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4e 65  P2..**.** The Ne
28ff0 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c  xt opcode is onl
29000 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e  y valid followin
29010 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53 65 65  g an SeekGT, See
29020 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 52 65  kGE, or.** OP_Re
29030 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73 65 64  wind opcode used
29040 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74 68 65   to position the
29050 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74 20 69   cursor.  Next i
29060 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a  s not allowed.**
29070 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65 6b 4c   to follow SeekL
29080 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20 4f 50  T, SeekLE, or OP
29090 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  _Last..**.** The
290a0 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20   P1 cursor must 
290b0 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61  be for a real ta
290c0 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64  ble, not a pseud
290d0 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d 75 73  o-table.  P1 mus
290e0 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e 20 6f  t have.** been o
290f0 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f 20 74  pened prior to t
29100 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20 74 68  his opcode or th
29110 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c 20 73  e program will s
29120 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a 20 54  egfault..**.** T
29130 68 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 61  he P3 value is a
29140 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62 74 72   hint to the btr
29150 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ee implementatio
29160 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74 68 61  n. If P3==1, tha
29170 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20 69 73  t.** means P1 is
29180 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 61 6e   an SQL index an
29190 64 20 74 68 61 74 20 74 68 69 73 20 69 6e 73 74  d that this inst
291a0 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20 68 61  ruction could ha
291b0 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69 74 74  ve been.** omitt
291c0 65 64 20 69 66 20 74 68 61 74 20 69 6e 64 65 78  ed if that index
291d0 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71 75 65   had been unique
291e0 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c 6c 79  .  P3 is usually
291f0 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20 61 6c   0.  P3 is.** al
29200 77 61 79 73 20 65 69 74 68 65 72 20 30 20 6f 72  ways either 0 or
29210 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   1..**.** P4 is 
29220 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65 20 50  always of type P
29230 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65 20 66  4_ADVANCE. The f
29240 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20  unction pointer 
29250 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 71 6c  points to.** sql
29260 69 74 65 33 42 74 72 65 65 4e 65 78 74 28 29 2e  ite3BtreeNext().
29270 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20  .**.** If P5 is 
29280 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74 68 65  positive and the
29290 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 2c 20   jump is taken, 
292a0 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75 6e 74  then event count
292b0 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50 35 2d  er.** number P5-
292c0 31 20 69 6e 20 74 68 65 20 70 72 65 70 61 72 65  1 in the prepare
292d0 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 69  d statement is i
292e0 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a  ncremented..**.*
292f0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72 65 76  * See also: Prev
29300 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a 2f 0a  , NextIfOpen.*/.
29310 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78 74 49  /* Opcode: NextI
29320 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33 20 50  fOpen P1 P2 P3 P
29330 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20  4 P5.**.** This 
29340 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73  opcode works jus
29350 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78 63 65  t like Next exce
29360 70 74 20 74 68 61 74 20 69 66 20 63 75 72 73 6f  pt that if curso
29370 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  r P1 is not.** o
29380 70 65 6e 20 69 74 20 62 65 68 61 76 65 73 20 61  pen it behaves a
29390 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20 4f 70   no-op..*/./* Op
293a0 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20 50 32  code: Prev P1 P2
293b0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
293c0 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72 20 50  Back up cursor P
293d0 31 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69  1 so that it poi
293e0 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65 76 69  nts to the previ
293f0 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70 61 69  ous key/data pai
29400 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61 62 6c  r in its.** tabl
29410 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49 66 20  e or index.  If 
29420 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72 65 76  there is no prev
29430 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65 20 70  ious key/value p
29440 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c 20 74  airs then fall t
29450 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74 68 65  hrough.** to the
29460 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73 74 72   following instr
29470 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69 66 20  uction.  But if 
29480 74 68 65 20 63 75 72 73 6f 72 20 62 61 63 6b 75  the cursor backu
29490 70 20 77 61 73 20 73 75 63 63 65 73 73 66 75 6c  p was successful
294a0 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65 64 69  ,.** jump immedi
294b0 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a 0a  ately to P2..**.
294c0 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76 20 6f  **.** The Prev o
294d0 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 76 61  pcode is only va
294e0 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 6e  lid following an
294f0 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c   SeekLT, SeekLE,
29500 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74 20 6f   or.** OP_Last o
29510 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20 70 6f  pcode used to po
29520 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72 73 6f  sition the curso
29530 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f 74 20  r.  Prev is not 
29540 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20 66 6f  allowed.** to fo
29550 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53 65 65  llow SeekGT, See
29560 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77 69 6e  kGE, or OP_Rewin
29570 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 31 20  d..**.** The P1 
29580 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65 20 66  cursor must be f
29590 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c 65 2c  or a real table,
295a0 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d 74 61   not a pseudo-ta
295b0 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73 0a 2a  ble.  If P1 is.*
295c0 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65 6e 20  * not open then 
295d0 74 68 65 20 62 65 68 61 76 69 6f 72 20 69 73 20  the behavior is 
295e0 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a  undefined..**.**
295f0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
29600 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
29610 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
29620 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
29630 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
29640 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
29650 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
29660 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
29670 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
29680 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
29690 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
296a0 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
296b0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
296c0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
296d0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
296e0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
296f0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
29700 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
29710 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
29720 71 6c 69 74 65 33 42 74 72 65 65 50 72 65 76 69  qlite3BtreePrevi
29730 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ous()..**.** If 
29740 50 35 20 69 73 20 70 6f 73 69 74 69 76 65 20 61  P5 is positive a
29750 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74  nd the jump is t
29760 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65 6e 74  aken, then event
29770 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62   counter.** numb
29780 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65 20 70  er P5-1 in the p
29790 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
297a0 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
297b0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
297c0 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20 50 32  PrevIfOpen P1 P2
297d0 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20   P3 P4 P5.**.** 
297e0 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
297f0 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72 65 76  s just like Prev
29800 20 65 78 63 65 70 74 20 74 68 61 74 20 69 66 20   except that if 
29810 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e 6f 74  cursor P1 is not
29820 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65 68 61  .** open it beha
29830 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a  ves a no-op..*/.
29840 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
29850 72 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20  rNext P1 P2 * * 
29860 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70  P5.**.** This op
29870 63 6f 64 65 20 77 6f 72 6b 73 20 6a 75 73 74 20  code works just 
29880 6c 69 6b 65 20 4f 50 5f 4e 65 78 74 20 65 78 63  like OP_Next exc
29890 65 70 74 20 74 68 61 74 20 50 31 20 6d 75 73 74  ept that P1 must
298a0 20 62 65 20 61 0a 2a 2a 20 73 6f 72 74 65 72 20   be a.** sorter 
298b0 6f 62 6a 65 63 74 20 66 6f 72 20 77 68 69 63 68  object for which
298c0 20 74 68 65 20 4f 50 5f 53 6f 72 74 65 72 53 6f   the OP_SorterSo
298d0 72 74 20 6f 70 63 6f 64 65 20 68 61 73 20 62 65  rt opcode has be
298e0 65 6e 0a 2a 2a 20 69 6e 76 6f 6b 65 64 2e 20 20  en.** invoked.  
298f0 54 68 69 73 20 6f 70 63 6f 64 65 20 61 64 76 61  This opcode adva
29900 6e 63 65 73 20 74 68 65 20 63 75 72 73 6f 72 20  nces the cursor 
29910 74 6f 20 74 68 65 20 6e 65 78 74 20 73 6f 72 74  to the next sort
29920 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2c 20 6f 72  ed.** record, or
29930 20 6a 75 6d 70 73 20 74 6f 20 50 32 20 69 66 20   jumps to P2 if 
29940 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d 6f 72  there are no mor
29950 65 20 73 6f 72 74 65 64 20 72 65 63 6f 72 64 73  e sorted records
29960 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72  ..*/.case OP_Sor
29970 74 65 72 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a  terNext: {  /* j
29980 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
29990 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72  sor *pC;.  int r
299a0 65 73 3b 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61  es;..  pC = p->a
299b0 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  pCsr[pOp->p1];. 
299c0 20 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65   assert( isSorte
299d0 72 28 70 43 29 20 29 3b 0a 20 20 72 65 73 20 3d  r(pC) );.  res =
299e0 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   0;.  rc = sqlit
299f0 65 33 56 64 62 65 53 6f 72 74 65 72 4e 65 78 74  e3VdbeSorterNext
29a00 28 64 62 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a  (db, pC, &res);.
29a10 20 20 67 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c    goto next_tail
29a20 3b 0a 63 61 73 65 20 4f 50 5f 50 72 65 76 49 66  ;.case OP_PrevIf
29a30 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70  Open:    /* jump
29a40 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74   */.case OP_Next
29a50 49 66 4f 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75  IfOpen:    /* ju
29a60 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61  mp */.  if( p->a
29a70 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30  pCsr[pOp->p1]==0
29a80 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46   ) break;.  /* F
29a90 61 6c 6c 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63  all through */.c
29aa0 61 73 65 20 4f 50 5f 50 72 65 76 3a 20 20 20 20  ase OP_Prev:    
29ab0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f        /* jump */
29ac0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20  .case OP_Next:  
29ad0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
29ae0 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  */.  assert( pOp
29af0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
29b00 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
29b10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29b20 70 35 3c 41 72 72 61 79 53 69 7a 65 28 70 2d 3e  p5<ArraySize(p->
29b30 61 43 6f 75 6e 74 65 72 29 20 29 3b 0a 20 20 70  aCounter) );.  p
29b40 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
29b50 2d 3e 70 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70  ->p1];.  res = p
29b60 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74  Op->p3;.  assert
29b70 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
29b80 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
29b90 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
29ba0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
29bb0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
29bc0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
29bd0 20 72 65 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d   res==0 || (res=
29be0 3d 31 20 26 26 20 70 43 2d 3e 69 73 54 61 62 6c  =1 && pC->isTabl
29bf0 65 3d 3d 30 29 20 29 3b 0a 20 20 74 65 73 74 63  e==0) );.  testc
29c00 61 73 65 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20  ase( res==1 );. 
29c10 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
29c20 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c  code!=OP_Next ||
29c30 20 70 4f 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63   pOp->p4.xAdvanc
29c40 65 3d 3d 73 71 6c 69 74 65 33 42 74 72 65 65 4e  e==sqlite3BtreeN
29c50 65 78 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ext );.  assert(
29c60 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50   pOp->opcode!=OP
29c70 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34  _Prev || pOp->p4
29c80 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
29c90 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 20  e3BtreePrevious 
29ca0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
29cb0 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78  ->opcode!=OP_Nex
29cc0 74 49 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e  tIfOpen || pOp->
29cd0 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c  p4.xAdvance==sql
29ce0 69 74 65 33 42 74 72 65 65 4e 65 78 74 20 29 3b  ite3BtreeNext );
29cf0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
29d00 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
29d10 66 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34  fOpen || pOp->p4
29d20 2e 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74  .xAdvance==sqlit
29d30 65 33 42 74 72 65 65 50 72 65 76 69 6f 75 73 29  e3BtreePrevious)
29d40 3b 0a 0a 20 20 2f 2a 20 54 68 65 20 4e 65 78 74  ;..  /* The Next
29d50 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
29d60 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b 47  used after SeekG
29d70 54 2c 20 53 65 65 6b 47 45 2c 20 61 6e 64 20 52  T, SeekGE, and R
29d80 65 77 69 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20  ewind..  ** The 
29d90 50 72 65 76 20 6f 70 63 6f 64 65 20 69 73 20 6f  Prev opcode is o
29da0 6e 6c 79 20 75 73 65 64 20 61 66 74 65 72 20 53  nly used after S
29db0 65 65 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61  eekLT, SeekLE, a
29dc0 6e 64 20 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73  nd Last. */.  as
29dd0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29de0 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
29df0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65  p->opcode!=OP_Ne
29e00 78 74 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  xtIfOpen.       
29e10 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29e20 50 5f 53 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e  P_SeekGT || pC->
29e30 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47  seekOp==OP_SeekG
29e40 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
29e50 73 65 65 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e  seekOp==OP_Rewin
29e60 64 20 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d  d || pC->seekOp=
29e70 3d 4f 50 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73  =OP_Found);.  as
29e80 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
29e90 65 21 3d 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f  e!=OP_Prev || pO
29ea0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
29eb0 65 76 49 66 4f 70 65 6e 0a 20 20 20 20 20 20 20  evIfOpen.       
29ec0 7c 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f  || pC->seekOp==O
29ed0 50 5f 53 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e  P_SeekLT || pC->
29ee0 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c  seekOp==OP_SeekL
29ef0 45 0a 20 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e  E.       || pC->
29f00 73 65 65 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20  seekOp==OP_Last 
29f10 29 3b 0a 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e  );..  rc = pOp->
29f20 70 34 2e 78 41 64 76 61 6e 63 65 28 70 43 2d 3e  p4.xAdvance(pC->
29f30 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 72 65 73  uc.pCursor, &res
29f40 29 3b 0a 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20  );.next_tail:.  
29f50 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
29f60 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
29f70 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
29f80 28 72 65 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66  (res==0,2);.  if
29f90 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
29fa0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
29fb0 20 20 69 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a    if( res==0 ){.
29fc0 20 20 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20      pC->nullRow 
29fd0 3d 20 30 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75  = 0;.    p->aCou
29fe0 6e 74 65 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b  nter[pOp->p5]++;
29ff0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54  .#ifdef SQLITE_T
2a000 45 53 54 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  EST.    sqlite3_
2a010 73 65 61 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a  search_count++;.
2a020 23 65 6e 64 69 66 0a 20 20 20 20 67 6f 74 6f 20  #endif.    goto 
2a030 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63  jump_to_p2_and_c
2a040 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75  heck_for_interru
2a050 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  pt;.  }else{.   
2a060 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31   pC->nullRow = 1
2a070 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65  ;.  }.  goto che
2a080 63 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74  ck_for_interrupt
2a090 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2a0a0 49 64 78 49 6e 73 65 72 74 20 50 31 20 50 32 20  IdxInsert P1 P2 
2a0b0 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
2a0c0 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a  psis: key=r[P2].
2a0d0 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72 20 50  **.** Register P
2a0e0 32 20 68 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69  2 holds an SQL i
2a0f0 6e 64 65 78 20 6b 65 79 20 6d 61 64 65 20 75 73  ndex key made us
2a100 69 6e 67 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52  ing the.** MakeR
2a110 65 63 6f 72 64 20 69 6e 73 74 72 75 63 74 69 6f  ecord instructio
2a120 6e 73 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65  ns.  This opcode
2a130 20 77 72 69 74 65 73 20 74 68 61 74 20 6b 65 79   writes that key
2a140 0a 2a 2a 20 69 6e 74 6f 20 74 68 65 20 69 6e 64  .** into the ind
2a150 65 78 20 50 31 2e 20 20 44 61 74 61 20 66 6f 72  ex P1.  Data for
2a160 20 74 68 65 20 65 6e 74 72 79 20 69 73 20 6e 69   the entry is ni
2a170 6c 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69  l..**.** If P4 i
2a180 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e  s not zero, then
2a190 20 69 74 20 69 73 20 74 68 65 20 6e 75 6d 62 65   it is the numbe
2a1a0 72 20 6f 66 20 76 61 6c 75 65 73 20 69 6e 20 74  r of values in t
2a1b0 68 65 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b  he unpacked.** k
2a1c0 65 79 20 6f 66 20 72 65 67 28 50 32 29 2e 20 20  ey of reg(P2).  
2a1d0 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 50 33  In that case, P3
2a1e0 20 69 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66   is the index of
2a1f0 20 74 68 65 20 66 69 72 73 74 20 72 65 67 69 73   the first regis
2a200 74 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75  ter.** for the u
2a210 6e 70 61 63 6b 65 64 20 6b 65 79 2e 20 20 54 68  npacked key.  Th
2a220 65 20 61 76 61 69 6c 61 62 69 6c 69 74 79 20 6f  e availability o
2a230 66 20 74 68 65 20 75 6e 70 61 63 6b 65 64 20 6b  f the unpacked k
2a240 65 79 20 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73  ey can sometimes
2a250 0a 2a 2a 20 62 65 20 61 6e 20 6f 70 74 69 6d 69  .** be an optimi
2a260 7a 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66  zation..**.** If
2a270 20 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c   P5 has the OPFL
2a280 41 47 5f 41 50 50 45 4e 44 20 62 69 74 20 73 65  AG_APPEND bit se
2a290 74 2c 20 74 68 61 74 20 69 73 20 61 20 68 69 6e  t, that is a hin
2a2a0 74 20 74 6f 20 74 68 65 20 62 2d 74 72 65 65 20  t to the b-tree 
2a2b0 6c 61 79 65 72 0a 2a 2a 20 74 68 61 74 20 74 68  layer.** that th
2a2c0 69 73 20 69 6e 73 65 72 74 20 69 73 20 6c 69 6b  is insert is lik
2a2d0 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
2a2e0 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  end..**.** If P5
2a2f0 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
2a300 4e 43 48 41 4e 47 45 20 62 69 74 20 73 65 74 2c  NCHANGE bit set,
2a310 20 74 68 65 6e 20 74 68 65 20 63 68 61 6e 67 65   then the change
2a320 20 63 6f 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69   counter is.** i
2a330 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68  ncremented by th
2a340 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  is instruction. 
2a350 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e   If the OPFLAG_N
2a360 43 48 41 4e 47 45 20 62 69 74 20 69 73 20 63 6c  CHANGE bit is cl
2a370 65 61 72 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65  ear,.** then the
2a380 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20   change counter 
2a390 69 73 20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a  is unchanged..**
2a3a0 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41  .** If the OPFLA
2a3b0 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20  G_USESEEKRESULT 
2a3c0 66 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65  flag of P5 is se
2a3d0 74 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  t, the implement
2a3e0 61 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72  ation might.** r
2a3f0 75 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f  un faster by avo
2a400 69 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73  iding an unneces
2a410 73 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72  sary seek on cur
2a420 73 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72  sor P1.  However
2a430 2c 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f  ,.** the OPFLAG_
2a440 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c  USESEEKRESULT fl
2a450 61 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20  ag must only be 
2a460 73 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76  set if there hav
2a470 65 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a  e been no prior.
2a480 2a 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20  ** seeks on the 
2a490 63 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65  cursor or if the
2a4a0 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65   most recent see
2a4b0 6b 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75  k used a key equ
2a4c0 69 76 61 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32  ivalent.** to P2
2a4d0 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e  . .**.** This in
2a4e0 73 74 72 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77  struction only w
2a4f0 6f 72 6b 73 20 66 6f 72 20 69 6e 64 69 63 65 73  orks for indices
2a500 2e 20 20 54 68 65 20 65 71 75 69 76 61 6c 65 6e  .  The equivalen
2a510 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a  t instruction.**
2a520 20 66 6f 72 20 74 61 62 6c 65 73 20 69 73 20 4f   for tables is O
2a530 50 5f 49 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20  P_Insert..*/./* 
2a540 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e  Opcode: SorterIn
2a550 73 65 72 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  sert P1 P2 * * *
2a560 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2a570 79 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65  y=r[P2].**.** Re
2a580 67 69 73 74 65 72 20 50 32 20 68 6f 6c 64 73 20  gister P2 holds 
2a590 61 6e 20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79  an SQL index key
2a5a0 20 6d 61 64 65 20 75 73 69 6e 67 20 74 68 65 0a   made using the.
2a5b0 2a 2a 20 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e  ** MakeRecord in
2a5c0 73 74 72 75 63 74 69 6f 6e 73 2e 20 20 54 68 69  structions.  Thi
2a5d0 73 20 6f 70 63 6f 64 65 20 77 72 69 74 65 73 20  s opcode writes 
2a5e0 74 68 61 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f  that key.** into
2a5f0 20 74 68 65 20 73 6f 72 74 65 72 20 50 31 2e 20   the sorter P1. 
2a600 20 44 61 74 61 20 66 6f 72 20 74 68 65 20 65 6e   Data for the en
2a610 74 72 79 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63  try is nil..*/.c
2a620 61 73 65 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73  ase OP_SorterIns
2a630 65 72 74 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e  ert:       /* in
2a640 32 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78  2 */.case OP_Idx
2a650 49 6e 73 65 72 74 3a 20 7b 20 20 20 20 20 20 20  Insert: {       
2a660 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62   /* in2 */.  Vdb
2a670 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42  eCursor *pC;.  B
2a680 74 72 65 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a  treePayload x;..
2a690 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2a6a0 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
2a6b0 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
2a6c0 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
2a6d0 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
2a6e0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73  ( pC!=0 );.  ass
2a6f0 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70 43  ert( isSorter(pC
2a700 29 3d 3d 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  )==(pOp->opcode=
2a710 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74  =OP_SorterInsert
2a720 29 20 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  ) );.  pIn2 = &a
2a730 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2a740 61 73 73 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c  assert( pIn2->fl
2a750 61 67 73 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29  ags & MEM_Blob )
2a760 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20  ;.  if( pOp->p5 
2a770 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  & OPFLAG_NCHANGE
2a780 20 29 20 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b   ) p->nChange++;
2a790 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
2a7a0 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
2a7b0 5f 42 54 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f  _BTREE || pOp->o
2a7c0 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72  pcode==OP_Sorter
2a7d0 49 6e 73 65 72 74 20 29 3b 0a 20 20 61 73 73 65  Insert );.  asse
2a7e0 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d  rt( pC->isTable=
2a7f0 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 45 78 70  =0 );.  rc = Exp
2a800 61 6e 64 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20  andBlob(pIn2);. 
2a810 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2a820 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2a830 72 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70  r;.  if( pOp->op
2a840 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49  code==OP_SorterI
2a850 6e 73 65 72 74 20 29 7b 0a 20 20 20 20 72 63 20  nsert ){.    rc 
2a860 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72  = sqlite3VdbeSor
2a870 74 65 72 57 72 69 74 65 28 70 43 2c 20 70 49 6e  terWrite(pC, pIn
2a880 32 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  2);.  }else{.   
2a890 20 78 2e 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e   x.nKey = pIn2->
2a8a0 6e 3b 0a 20 20 20 20 78 2e 70 4b 65 79 20 3d 20  n;.    x.pKey = 
2a8b0 70 49 6e 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61  pIn2->z;.    x.a
2a8c0 4d 65 6d 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70  Mem = aMem + pOp
2a8d0 2d 3e 70 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d  ->p3;.    x.nMem
2a8e0 20 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e   = (u16)pOp->p4.
2a8f0 69 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  i;.    rc = sqli
2a900 74 65 33 42 74 72 65 65 49 6e 73 65 72 74 28 70  te3BtreeInsert(p
2a910 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 26  C->uc.pCursor, &
2a920 78 2c 0a 20 20 20 20 20 20 20 20 20 28 70 4f 70  x,.         (pOp
2a930 2d 3e 70 35 20 26 20 28 4f 50 46 4c 41 47 5f 41  ->p5 & (OPFLAG_A
2a940 50 50 45 4e 44 7c 4f 50 46 4c 41 47 5f 53 41 56  PPEND|OPFLAG_SAV
2a950 45 50 4f 53 49 54 49 4f 4e 29 29 2c 20 0a 20 20  EPOSITION)), .  
2a960 20 20 20 20 20 20 28 28 70 4f 70 2d 3e 70 35 20        ((pOp->p5 
2a970 26 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b  & OPFLAG_USESEEK
2a980 52 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65  RESULT) ? pC->se
2a990 65 6b 52 65 73 75 6c 74 20 3a 20 30 29 0a 20 20  ekResult : 0).  
2a9a0 20 20 20 20 20 20 29 3b 0a 20 20 20 20 61 73 73        );.    ass
2a9b0 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2a9c0 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2a9d0 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75    pC->cacheStatu
2a9e0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
2a9f0 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 29 20 67  .  }.  if( rc) g
2aa00 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2aa10 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
2aa20 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .}../* Opcode: I
2aa30 64 78 44 65 6c 65 74 65 20 50 31 20 50 32 20 50  dxDelete P1 P2 P
2aa40 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  3 * *.** Synopsi
2aa50 73 3a 20 6b 65 79 3d 72 5b 50 32 40 50 33 5d 0a  s: key=r[P2@P3].
2aa60 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 6e 74 65 6e  **.** The conten
2aa70 74 20 6f 66 20 50 33 20 72 65 67 69 73 74 65 72  t of P3 register
2aa80 73 20 73 74 61 72 74 69 6e 67 20 61 74 20 72 65  s starting at re
2aa90 67 69 73 74 65 72 20 50 32 20 66 6f 72 6d 0a 2a  gister P2 form.*
2aaa0 2a 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  * an unpacked in
2aab0 64 65 78 20 6b 65 79 2e 20 54 68 69 73 20 6f 70  dex key. This op
2aac0 63 6f 64 65 20 72 65 6d 6f 76 65 73 20 74 68 61  code removes tha
2aad0 74 20 65 6e 74 72 79 20 66 72 6f 6d 20 74 68 65  t entry from the
2aae0 20 0a 2a 2a 20 69 6e 64 65 78 20 6f 70 65 6e 65   .** index opene
2aaf0 64 20 62 79 20 63 75 72 73 6f 72 20 50 31 2e 0a  d by cursor P1..
2ab00 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 44 65  */.case OP_IdxDe
2ab10 6c 65 74 65 3a 20 7b 0a 20 20 56 64 62 65 43 75  lete: {.  VdbeCu
2ab20 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75  rsor *pC;.  BtCu
2ab30 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69  rsor *pCrsr;.  i
2ab40 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63 6b  nt res;.  Unpack
2ab50 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20 61  edRecord r;..  a
2ab60 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30  ssert( pOp->p3>0
2ab70 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2ab80 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
2ab90 70 32 2b 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  p2+pOp->p3<=(p->
2aba0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
2abb0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 61 73 73 65  sor)+1 );.  asse
2abc0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
2abd0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
2abe0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
2abf0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
2ac00 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
2ac10 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2ac20 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
2ac30 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
2ac40 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
2ac50 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
2ac60 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
2ac70 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2ac80 3d 30 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49 6e  =0 );.  r.pKeyIn
2ac90 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
2aca0 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d 20  o;.  r.nField = 
2acb0 28 75 31 36 29 70 4f 70 2d 3e 70 33 3b 0a 20 20  (u16)pOp->p3;.  
2acc0 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30  r.default_rc = 0
2acd0 3b 0a 20 20 72 2e 61 4d 65 6d 20 3d 20 26 61 4d  ;.  r.aMem = &aM
2ace0 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 72  em[pOp->p2];.  r
2acf0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ad00 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
2ad10 43 72 73 72 2c 20 26 72 2c 20 30 2c 20 30 2c 20  Crsr, &r, 0, 0, 
2ad20 26 72 65 73 29 3b 0a 20 20 69 66 28 20 72 63 20  &res);.  if( rc 
2ad30 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2ad40 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
2ad50 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 72   res==0 ){.    r
2ad60 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
2ad70 44 65 6c 65 74 65 28 70 43 72 73 72 2c 20 42 54  Delete(pCrsr, BT
2ad80 52 45 45 5f 41 55 58 44 45 4c 45 54 45 29 3b 0a  REE_AUXDELETE);.
2ad90 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74      if( rc ) got
2ada0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2adb0 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 61 73 73 65  rror;.  }.  asse
2adc0 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64  rt( pC->deferred
2add0 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 70  Moveto==0 );.  p
2ade0 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d  C->cacheStatus =
2adf0 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20   CACHE_STALE;.  
2ae00 70 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d  pC->seekResult =
2ae10 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
2ae20 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 20  /* Opcode: Seek 
2ae30 50 31 20 2a 20 50 33 20 50 34 20 2a 0a 2a 2a 20  P1 * P3 P4 *.** 
2ae40 53 79 6e 6f 70 73 69 73 3a 20 4d 6f 76 65 20 50  Synopsis: Move P
2ae50 33 20 74 6f 20 50 31 2e 72 6f 77 69 64 0a 2a 2a  3 to P1.rowid.**
2ae60 0a 2a 2a 20 50 31 20 69 73 20 61 6e 20 6f 70 65  .** P1 is an ope
2ae70 6e 20 69 6e 64 65 78 20 63 75 72 73 6f 72 20 61  n index cursor a
2ae80 6e 64 20 50 33 20 69 73 20 61 20 63 75 72 73 6f  nd P3 is a curso
2ae90 72 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70  r on the corresp
2aea0 6f 6e 64 69 6e 67 0a 2a 2a 20 74 61 62 6c 65 2e  onding.** table.
2aeb0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 64 6f    This opcode do
2aec0 65 73 20 61 20 64 65 66 65 72 72 65 64 20 73 65  es a deferred se
2aed0 65 6b 20 6f 66 20 74 68 65 20 50 33 20 74 61 62  ek of the P3 tab
2aee0 6c 65 20 63 75 72 73 6f 72 0a 2a 2a 20 74 6f 20  le cursor.** to 
2aef0 74 68 65 20 72 6f 77 20 74 68 61 74 20 63 6f 72  the row that cor
2af00 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20  responds to the 
2af10 63 75 72 72 65 6e 74 20 72 6f 77 20 6f 66 20 50  current row of P
2af20 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73  1..**.** This is
2af30 20 61 20 64 65 66 65 72 72 65 64 20 73 65 65 6b   a deferred seek
2af40 2e 20 20 4e 6f 74 68 69 6e 67 20 61 63 74 75 61  .  Nothing actua
2af50 6c 6c 79 20 68 61 70 70 65 6e 73 20 75 6e 74 69  lly happens unti
2af60 6c 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  l.** the cursor 
2af70 69 73 20 75 73 65 64 20 74 6f 20 72 65 61 64 20  is used to read 
2af80 61 20 72 65 63 6f 72 64 2e 20 20 54 68 61 74 20  a record.  That 
2af90 77 61 79 2c 20 69 66 20 6e 6f 20 72 65 61 64 73  way, if no reads
2afa0 0a 2a 2a 20 6f 63 63 75 72 2c 20 6e 6f 20 75 6e  .** occur, no un
2afb0 6e 65 63 65 73 73 61 72 79 20 49 2f 4f 20 68 61  necessary I/O ha
2afc0 70 70 65 6e 73 2e 0a 2a 2a 0a 2a 2a 20 50 34 20  ppens..**.** P4 
2afd0 6d 61 79 20 62 65 20 61 6e 20 61 72 72 61 79 20  may be an array 
2afe0 6f 66 20 69 6e 74 65 67 65 72 73 20 28 74 79 70  of integers (typ
2aff0 65 20 50 34 5f 49 4e 54 41 52 52 41 59 29 20 63  e P4_INTARRAY) c
2b000 6f 6e 74 61 69 6e 69 6e 67 0a 2a 2a 20 6f 6e 65  ontaining.** one
2b010 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
2b020 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 50 33  column in the P3
2b030 20 74 61 62 6c 65 2e 20 20 49 66 20 61 72 72 61   table.  If arra
2b040 79 20 65 6e 74 72 79 20 61 28 69 29 0a 2a 2a 20  y entry a(i).** 
2b050 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65  is non-zero, the
2b060 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2b070 20 61 28 69 29 2d 31 20 66 72 6f 6d 20 63 75 72   a(i)-1 from cur
2b080 73 6f 72 20 50 33 20 69 73 20 0a 2a 2a 20 65 71  sor P3 is .** eq
2b090 75 69 76 61 6c 65 6e 74 20 74 6f 20 70 65 72 66  uivalent to perf
2b0a0 6f 72 6d 69 6e 67 20 74 68 65 20 64 65 66 65 72  orming the defer
2b0b0 72 65 64 20 73 65 65 6b 20 61 6e 64 20 74 68 65  red seek and the
2b0c0 6e 20 72 65 61 64 69 6e 67 20 63 6f 6c 75 6d 6e  n reading column
2b0d0 20 69 20 0a 2a 2a 20 66 72 6f 6d 20 50 31 2e 20   i .** from P1. 
2b0e0 20 54 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 6f   This informatio
2b0f0 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 50  n is stored in P
2b100 33 20 61 6e 64 20 75 73 65 64 20 74 6f 20 72 65  3 and used to re
2b110 64 69 72 65 63 74 0a 2a 2a 20 72 65 61 64 73 20  direct.** reads 
2b120 61 67 61 69 6e 73 74 20 50 33 20 6f 76 65 72 20  against P3 over 
2b130 74 6f 20 50 31 2c 20 74 68 75 73 20 70 6f 73 73  to P1, thus poss
2b140 69 62 6c 79 20 61 76 6f 69 64 69 6e 67 20 74 68  ibly avoiding th
2b150 65 20 6e 65 65 64 20 74 6f 0a 2a 2a 20 73 65 65  e need to.** see
2b160 6b 20 61 6e 64 20 72 65 61 64 20 63 75 72 73 6f  k and read curso
2b170 72 20 50 33 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  r P3..*/./* Opco
2b180 64 65 3a 20 49 64 78 52 6f 77 69 64 20 50 31 20  de: IdxRowid P1 
2b190 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
2b1a0 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 77 69  psis: r[P2]=rowi
2b1b0 64 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 69 6e  d.**.** Write in
2b1c0 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 20 61  to register P2 a
2b1d0 6e 20 69 6e 74 65 67 65 72 20 77 68 69 63 68 20  n integer which 
2b1e0 69 73 20 74 68 65 20 6c 61 73 74 20 65 6e 74 72  is the last entr
2b1f0 79 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 20  y in the record 
2b200 61 74 0a 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66  at.** the end of
2b210 20 74 68 65 20 69 6e 64 65 78 20 6b 65 79 20 70   the index key p
2b220 6f 69 6e 74 65 64 20 74 6f 20 62 79 20 63 75 72  ointed to by cur
2b230 73 6f 72 20 50 31 2e 20 20 54 68 69 73 20 69 6e  sor P1.  This in
2b240 74 65 67 65 72 20 73 68 6f 75 6c 64 20 62 65 0a  teger should be.
2b250 2a 2a 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ** the rowid of 
2b260 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72 79 20  the table entry 
2b270 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 6e  to which this in
2b280 64 65 78 20 65 6e 74 72 79 20 70 6f 69 6e 74 73  dex entry points
2b290 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
2b2a0 3a 20 52 6f 77 69 64 2c 20 4d 61 6b 65 52 65 63  : Rowid, MakeRec
2b2b0 6f 72 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ord..*/.case OP_
2b2c0 53 65 65 6b 3a 0a 63 61 73 65 20 4f 50 5f 49 64  Seek:.case OP_Id
2b2d0 78 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  xRowid: {       
2b2e0 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
2b2f0 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  /.  VdbeCursor *
2b300 70 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  pC;             
2b310 20 20 20 2f 2a 20 54 68 65 20 50 31 20 69 6e 64     /* The P1 ind
2b320 65 78 20 63 75 72 73 6f 72 20 2a 2f 0a 20 20 56  ex cursor */.  V
2b330 64 62 65 43 75 72 73 6f 72 20 2a 70 54 61 62 43  dbeCursor *pTabC
2b340 75 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ur;           /*
2b350 20 54 68 65 20 50 32 20 74 61 62 6c 65 20 63 75   The P2 table cu
2b360 72 73 6f 72 20 28 4f 50 5f 53 65 65 6b 20 6f 6e  rsor (OP_Seek on
2b370 6c 79 29 20 2a 2f 0a 20 20 69 36 34 20 72 6f 77  ly) */.  i64 row
2b380 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  id;             
2b390 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 77 69 64          /* Rowid
2b3a0 20 74 68 61 74 20 50 31 20 63 75 72 72 65 6e 74   that P1 current
2b3b0 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 0a 20   points to */.. 
2b3c0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
2b3d0 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
2b3e0 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70  ->nCursor );.  p
2b3f0 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
2b400 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2b410 20 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65   pC!=0 );.  asse
2b420 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
2b430 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20  ==CURTYPE_BTREE 
2b440 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
2b450 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
2b460 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2b470 69 73 54 61 62 6c 65 3d 3d 30 20 29 3b 0a 20 20  isTable==0 );.  
2b480 61 73 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65  assert( pC->defe
2b490 72 72 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b  rredMoveto==0 );
2b4a0 0a 20 20 61 73 73 65 72 74 28 20 21 70 43 2d 3e  .  assert( !pC->
2b4b0 6e 75 6c 6c 52 6f 77 20 7c 7c 20 70 4f 70 2d 3e  nullRow || pOp->
2b4c0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f  opcode==OP_IdxRo
2b4d0 77 69 64 20 29 3b 0a 0a 20 20 2f 2a 20 54 68 65  wid );..  /* The
2b4e0 20 49 64 78 52 6f 77 69 64 20 61 6e 64 20 53 65   IdxRowid and Se
2b4f0 65 6b 20 6f 70 63 6f 64 65 73 20 61 72 65 20 63  ek opcodes are c
2b500 6f 6d 62 69 6e 65 64 20 62 65 63 61 75 73 65 20  ombined because 
2b510 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 61 6c 69  of the commonali
2b520 74 79 0a 20 20 2a 2a 20 6f 66 20 73 71 6c 69 74  ty.  ** of sqlit
2b530 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2b540 6f 72 65 28 29 20 61 6e 64 20 73 71 6c 69 74 65  ore() and sqlite
2b550 33 56 64 62 65 49 64 78 52 6f 77 69 64 28 29 2e  3VdbeIdxRowid().
2b560 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
2b570 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
2b580 6f 72 65 28 70 43 29 3b 0a 0a 20 20 2f 2a 20 73  ore(pC);..  /* s
2b590 71 6c 69 74 65 33 56 62 65 43 75 72 73 6f 72 52  qlite3VbeCursorR
2b5a0 65 73 74 6f 72 65 28 29 20 63 61 6e 20 6f 6e 6c  estore() can onl
2b5b0 79 20 66 61 69 6c 20 69 66 20 74 68 65 20 72 65  y fail if the re
2b5c0 63 6f 72 64 20 68 61 73 20 62 65 65 6e 20 64 65  cord has been de
2b5d0 6c 65 74 65 64 0a 20 20 2a 2a 20 6f 75 74 20 66  leted.  ** out f
2b5e0 72 6f 6d 20 75 6e 64 65 72 20 74 68 65 20 63 75  rom under the cu
2b5f0 72 73 6f 72 2e 20 20 54 68 61 74 20 77 69 6c 6c  rsor.  That will
2b600 20 6e 65 76 65 72 20 68 61 70 70 65 6e 73 20 66   never happens f
2b610 6f 72 20 61 6e 20 49 64 78 52 6f 77 69 64 0a 20  or an IdxRowid. 
2b620 20 2a 2a 20 6f 72 20 53 65 65 6b 20 6f 70 63 6f   ** or Seek opco
2b630 64 65 20 2a 2f 0a 20 20 69 66 28 20 4e 45 56 45  de */.  if( NEVE
2b640 52 28 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 29  R(rc!=SQLITE_OK)
2b650 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
2b660 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 69  e_to_error;..  i
2b670 66 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  f( !pC->nullRow 
2b680 29 7b 0a 20 20 20 20 72 6f 77 69 64 20 3d 20 30  ){.    rowid = 0
2b690 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64  ;  /* Not needed
2b6a0 2e 20 20 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20  .  Only used to 
2b6b0 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69 6e  silence a warnin
2b6c0 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20 73  g. */.    rc = s
2b6d0 71 6c 69 74 65 33 56 64 62 65 49 64 78 52 6f 77  qlite3VdbeIdxRow
2b6e0 69 64 28 64 62 2c 20 70 43 2d 3e 75 63 2e 70 43  id(db, pC->uc.pC
2b6f0 75 72 73 6f 72 2c 20 26 72 6f 77 69 64 29 3b 0a  ursor, &rowid);.
2b700 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
2b710 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 67  TE_OK ){.      g
2b720 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2b730 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20 20  _error;.    }.  
2b740 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2b750 65 3d 3d 4f 50 5f 53 65 65 6b 20 29 7b 0a 20 20  e==OP_Seek ){.  
2b760 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
2b770 3e 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70  >p3>=0 && pOp->p
2b780 33 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a  3<p->nCursor );.
2b790 20 20 20 20 20 20 70 54 61 62 43 75 72 20 3d 20        pTabCur = 
2b7a0 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 33  p->apCsr[pOp->p3
2b7b0 5d 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ];.      assert(
2b7c0 20 70 54 61 62 43 75 72 21 3d 30 20 29 3b 0a 20   pTabCur!=0 );. 
2b7d0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
2b7e0 62 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  bCur->eCurType==
2b7f0 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
2b800 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
2b810 54 61 62 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  TabCur->uc.pCurs
2b820 6f 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  or!=0 );.      a
2b830 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2b840 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20 20 20  isTable );.     
2b850 20 70 54 61 62 43 75 72 2d 3e 6e 75 6c 6c 52 6f   pTabCur->nullRo
2b860 77 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 54 61  w = 0;.      pTa
2b870 62 43 75 72 2d 3e 6d 6f 76 65 74 6f 54 61 72 67  bCur->movetoTarg
2b880 65 74 20 3d 20 72 6f 77 69 64 3b 0a 20 20 20 20  et = rowid;.    
2b890 20 20 70 54 61 62 43 75 72 2d 3e 64 65 66 65 72    pTabCur->defer
2b8a0 72 65 64 4d 6f 76 65 74 6f 20 3d 20 31 3b 0a 20  redMoveto = 1;. 
2b8b0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
2b8c0 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54  ->p4type==P4_INT
2b8d0 41 52 52 41 59 20 7c 7c 20 70 4f 70 2d 3e 70 34  ARRAY || pOp->p4
2b8e0 2e 61 69 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  .ai==0 );.      
2b8f0 70 54 61 62 43 75 72 2d 3e 61 41 6c 74 4d 61 70  pTabCur->aAltMap
2b900 20 3d 20 70 4f 70 2d 3e 70 34 2e 61 69 3b 0a 20   = pOp->p4.ai;. 
2b910 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e 70 41       pTabCur->pA
2b920 6c 74 43 75 72 73 6f 72 20 3d 20 70 43 3b 0a 20  ltCursor = pC;. 
2b930 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
2b940 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2b950 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2b960 20 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d       pOut->u.i =
2b970 20 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20   rowid;.    }.  
2b980 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72  }else{.    asser
2b990 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  t( pOp->opcode==
2b9a0 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b 0a 20  OP_IdxRowid );. 
2b9b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2b9c0 6d 53 65 74 4e 75 6c 6c 28 26 61 4d 65 6d 5b 70  mSetNull(&aMem[p
2b9d0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 7d 0a 20 20  Op->p2]);.  }.  
2b9e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2b9f0 6f 64 65 3a 20 49 64 78 47 45 20 50 31 20 50 32  ode: IdxGE P1 P2
2ba00 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
2ba10 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40  opsis: key=r[P3@
2ba20 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 34  P4].**.** The P4
2ba30 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65 73   register values
2ba40 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2ba50 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  P3 form an unpac
2ba60 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b 65  ked index .** ke
2ba70 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68 65  y that omits the
2ba80 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20 20 43   PRIMARY KEY.  C
2ba90 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65 79 20  ompare this key 
2baa0 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20 74 68  value against th
2bab0 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68 61 74  e index .** that
2bac0 20 50 31 20 69 73 20 63 75 72 72 65 6e 74 6c 79   P1 is currently
2bad0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20 69 67   pointing to, ig
2bae0 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49 4d 41  noring the PRIMA
2baf0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 20  RY KEY or ROWID 
2bb00 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20 74 68  .** fields at th
2bb10 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  e end..**.** If 
2bb20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74  the P1 index ent
2bb30 72 79 20 69 73 20 67 72 65 61 74 65 72 20 74 68  ry is greater th
2bb40 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20 74  an or equal to t
2bb50 68 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20  he key value.** 
2bb60 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
2bb70 20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c    Otherwise fall
2bb80 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
2bb90 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
2bba0 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ..*/./* Opcode: 
2bbb0 49 64 78 47 54 20 50 31 20 50 32 20 50 33 20 50  IdxGT P1 P2 P3 P
2bbc0 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
2bbd0 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a  : key=r[P3@P4].*
2bbe0 2a 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69  *.** The P4 regi
2bbf0 73 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69  ster values begi
2bc00 6e 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f  nning with P3 fo
2bc10 72 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69  rm an unpacked i
2bc20 6e 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61  ndex .** key tha
2bc30 74 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d  t omits the PRIM
2bc40 41 52 59 20 4b 45 59 2e 20 20 43 6f 6d 70 61 72  ARY KEY.  Compar
2bc50 65 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65  e this key value
2bc60 20 61 67 61 69 6e 73 74 20 74 68 65 20 69 6e 64   against the ind
2bc70 65 78 20 0a 2a 2a 20 74 68 61 74 20 50 31 20 69  ex .** that P1 i
2bc80 73 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e  s currently poin
2bc90 74 69 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e  ting to, ignorin
2bca0 67 20 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45  g the PRIMARY KE
2bcb0 59 20 6f 72 20 52 4f 57 49 44 20 0a 2a 2a 20 66  Y or ROWID .** f
2bcc0 69 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64  ields at the end
2bcd0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 50  ..**.** If the P
2bce0 31 20 69 6e 64 65 78 20 65 6e 74 72 79 20 69 73  1 index entry is
2bcf0 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 74 68   greater than th
2bd00 65 20 6b 65 79 20 76 61 6c 75 65 0a 2a 2a 20 74  e key value.** t
2bd10 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 20  hen jump to P2. 
2bd20 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2bd30 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2bd40 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2bd50 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2bd60 64 78 4c 54 20 50 31 20 50 32 20 50 33 20 50 34  dxLT P1 P2 P3 P4
2bd70 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2bd80 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2bd90 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2bda0 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2bdb0 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2bdc0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2bdd0 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2bde0 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2bdf0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2be00 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2be10 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2be20 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2be30 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2be40 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2be50 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2be60 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2be70 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2be80 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2be90 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2bea0 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  y is less than t
2beb0 68 65 20 6b 65 79 20 76 61 6c 75 65 20 74 68 65  he key value the
2bec0 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a  n jump to P2..**
2bed0 20 4f 74 68 65 72 77 69 73 65 20 66 61 6c 6c 20   Otherwise fall 
2bee0 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e  through to the n
2bef0 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ext instruction.
2bf00 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
2bf10 64 78 4c 45 20 50 31 20 50 32 20 50 33 20 50 34  dxLE P1 P2 P3 P4
2bf20 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
2bf30 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
2bf40 0a 2a 2a 20 54 68 65 20 50 34 20 72 65 67 69 73  .** The P4 regis
2bf50 74 65 72 20 76 61 6c 75 65 73 20 62 65 67 69 6e  ter values begin
2bf60 6e 69 6e 67 20 77 69 74 68 20 50 33 20 66 6f 72  ning with P3 for
2bf70 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e  m an unpacked in
2bf80 64 65 78 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74  dex .** key that
2bf90 20 6f 6d 69 74 73 20 74 68 65 20 50 52 49 4d 41   omits the PRIMA
2bfa0 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49 44 2e  RY KEY or ROWID.
2bfb0 20 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b    Compare this k
2bfc0 65 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74  ey value against
2bfd0 0a 2a 2a 20 74 68 65 20 69 6e 64 65 78 20 74 68  .** the index th
2bfe0 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2bff0 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2c000 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2c010 4d 41 52 59 20 4b 45 59 20 6f 72 0a 2a 2a 20 52  MARY KEY or.** R
2c020 4f 57 49 44 20 6f 6e 20 74 68 65 20 50 31 20 69  OWID on the P1 i
2c030 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  ndex..**.** If t
2c040 68 65 20 50 31 20 69 6e 64 65 78 20 65 6e 74 72  he P1 index entr
2c050 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f  y is less than o
2c060 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
2c070 65 79 20 76 61 6c 75 65 20 74 68 65 6e 20 6a 75  ey value then ju
2c080 6d 70 0a 2a 2a 20 74 6f 20 50 32 2e 20 4f 74 68  mp.** to P2. Oth
2c090 65 72 77 69 73 65 20 66 61 6c 6c 20 74 68 72 6f  erwise fall thro
2c0a0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
2c0b0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
2c0c0 63 61 73 65 20 4f 50 5f 49 64 78 4c 45 3a 20 20  case OP_IdxLE:  
2c0d0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20          /* jump 
2c0e0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 47 54  */.case OP_IdxGT
2c0f0 3a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  :          /* ju
2c100 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 64  mp */.case OP_Id
2c110 78 4c 54 3a 20 20 20 20 20 20 20 20 20 20 2f 2a  xLT:          /*
2c120 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f 50   jump */.case OP
2c130 5f 49 64 78 47 45 3a 20 20 7b 20 20 20 20 20 20  _IdxGE:  {      
2c140 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64   /* jump */.  Vd
2c150 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20  beCursor *pC;.  
2c160 69 6e 74 20 72 65 73 3b 0a 20 20 55 6e 70 61 63  int res;.  Unpac
2c170 6b 65 64 52 65 63 6f 72 64 20 72 3b 0a 0a 20 20  kedRecord r;..  
2c180 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e  assert( pOp->p1>
2c190 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d  =0 && pOp->p1<p-
2c1a0 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43  >nCursor );.  pC
2c1b0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
2c1c0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2c1d0 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
2c1e0 74 28 20 70 43 2d 3e 69 73 4f 72 64 65 72 65 64  t( pC->isOrdered
2c1f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2c200 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2c210 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2c220 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2c230 75 72 73 6f 72 21 3d 30 29 3b 0a 20 20 61 73 73  ursor!=0);.  ass
2c240 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65  ert( pC->deferre
2c250 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20  dMoveto==0 );.  
2c260 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3d  assert( pOp->p5=
2c270 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 31  =0 || pOp->p5==1
2c280 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2c290 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
2c2a0 54 33 32 20 29 3b 0a 20 20 72 2e 70 4b 65 79 49  T32 );.  r.pKeyI
2c2b0 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
2c2c0 66 6f 3b 0a 20 20 72 2e 6e 46 69 65 6c 64 20 3d  fo;.  r.nField =
2c2d0 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b   (u16)pOp->p4.i;
2c2e0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f  .  if( pOp->opco
2c2f0 64 65 3c 4f 50 5f 49 64 78 4c 54 20 29 7b 0a 20  de<OP_IdxLT ){. 
2c300 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
2c310 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 45  opcode==OP_IdxLE
2c320 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d   || pOp->opcode=
2c330 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
2c340 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
2c350 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  -1;.  }else{.   
2c360 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70   assert( pOp->op
2c370 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c  code==OP_IdxGE |
2c380 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  | pOp->opcode==O
2c390 50 5f 49 64 78 4c 54 20 29 3b 0a 20 20 20 20 72  P_IdxLT );.    r
2c3a0 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b  .default_rc = 0;
2c3b0 0a 20 20 7d 0a 20 20 72 2e 61 4d 65 6d 20 3d 20  .  }.  r.aMem = 
2c3c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2c3d0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2c3e0 42 55 47 0a 20 20 7b 20 69 6e 74 20 69 3b 20 66  BUG.  { int i; f
2c3f0 6f 72 28 69 3d 30 3b 20 69 3c 72 2e 6e 46 69 65  or(i=0; i<r.nFie
2c400 6c 64 3b 20 69 2b 2b 29 20 61 73 73 65 72 74 28  ld; i++) assert(
2c410 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 72 2e 61   memIsValid(&r.a
2c420 4d 65 6d 5b 69 5d 29 20 29 3b 20 7d 0a 23 65 6e  Mem[i]) ); }.#en
2c430 64 69 66 0a 20 20 72 65 73 20 3d 20 30 3b 20 20  dif.  res = 0;  
2c440 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2c450 4f 6e 6c 79 20 75 73 65 64 20 74 6f 20 73 69 6c  Only used to sil
2c460 65 6e 63 65 20 61 20 77 61 72 6e 69 6e 67 2e 20  ence a warning. 
2c470 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  */.  rc = sqlite
2c480 33 56 64 62 65 49 64 78 4b 65 79 43 6f 6d 70 61  3VdbeIdxKeyCompa
2c490 72 65 28 64 62 2c 20 70 43 2c 20 26 72 2c 20 26  re(db, pC, &r, &
2c4a0 72 65 73 29 3b 0a 20 20 61 73 73 65 72 74 28 20  res);.  assert( 
2c4b0 28 4f 50 5f 49 64 78 4c 45 26 31 29 3d 3d 28 4f  (OP_IdxLE&1)==(O
2c4c0 50 5f 49 64 78 4c 54 26 31 29 20 26 26 20 28 4f  P_IdxLT&1) && (O
2c4d0 50 5f 49 64 78 47 45 26 31 29 3d 3d 28 4f 50 5f  P_IdxGE&1)==(OP_
2c4e0 49 64 78 47 54 26 31 29 20 29 3b 0a 20 20 69 66  IdxGT&1) );.  if
2c4f0 28 20 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 26 31  ( (pOp->opcode&1
2c500 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31 29 20  )==(OP_IdxLT&1) 
2c510 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ){.    assert( p
2c520 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c530 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63  dxLE || pOp->opc
2c540 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29 3b  ode==OP_IdxLT );
2c550 0a 20 20 20 20 72 65 73 20 3d 20 2d 72 65 73 3b  .    res = -res;
2c560 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
2c570 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2c580 65 3d 3d 4f 50 5f 49 64 78 47 45 20 7c 7c 20 70  e==OP_IdxGE || p
2c590 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2c5a0 64 78 47 54 20 29 3b 0a 20 20 20 20 72 65 73 2b  dxGT );.    res+
2c5b0 2b 3b 0a 20 20 7d 0a 20 20 56 64 62 65 42 72 61  +;.  }.  VdbeBra
2c5c0 6e 63 68 54 61 6b 65 6e 28 72 65 73 3e 30 2c 32  nchTaken(res>0,2
2c5d0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
2c5e0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2c5f0 65 72 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73  error;.  if( res
2c600 3e 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  >0 ) goto jump_t
2c610 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
2c620 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 65 73  ../* Opcode: Des
2c630 74 72 6f 79 20 50 31 20 50 32 20 50 33 20 2a 20  troy P1 P2 P3 * 
2c640 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2c650 6e 20 65 6e 74 69 72 65 20 64 61 74 61 62 61 73  n entire databas
2c660 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  e table or index
2c670 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65   whose root page
2c680 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
2c690 0a 2a 2a 20 66 69 6c 65 20 69 73 20 67 69 76 65  .** file is give
2c6a0 6e 20 62 79 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54  n by P1..**.** T
2c6b0 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 64  he table being d
2c6c0 65 73 74 72 6f 79 65 64 20 69 73 20 69 6e 20 74  estroyed is in t
2c6d0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2c6e0 20 66 69 6c 65 20 69 66 20 50 33 3d 3d 30 2e 20   file if P3==0. 
2c6f0 20 49 66 0a 2a 2a 20 50 33 3d 3d 31 20 74 68 65   If.** P3==1 the
2c700 6e 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62  n the table to b
2c710 65 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  e clear is in th
2c720 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2c730 62 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61  base file.** tha
2c740 74 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  t is used to sto
2c750 72 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65  re tables create
2c760 20 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45   using CREATE TE
2c770 4d 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a  MPORARY TABLE..*
2c780 2a 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43 55  *.** If AUTOVACU
2c790 55 4d 20 69 73 20 65 6e 61 62 6c 65 64 20 74 68  UM is enabled th
2c7a0 65 6e 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  en it is possibl
2c7b0 65 20 74 68 61 74 20 61 6e 6f 74 68 65 72 20 72  e that another r
2c7c0 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 6d 69 67 68  oot page.** migh
2c7d0 74 20 62 65 20 6d 6f 76 65 64 20 69 6e 74 6f 20  t be moved into 
2c7e0 74 68 65 20 6e 65 77 6c 79 20 64 65 6c 65 74 65  the newly delete
2c7f0 64 20 72 6f 6f 74 20 70 61 67 65 20 69 6e 20 6f  d root page in o
2c800 72 64 65 72 20 74 6f 20 6b 65 65 70 20 61 6c 6c  rder to keep all
2c810 0a 2a 2a 20 72 6f 6f 74 20 70 61 67 65 73 20 63  .** root pages c
2c820 6f 6e 74 69 67 75 6f 75 73 20 61 74 20 74 68 65  ontiguous at the
2c830 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68   beginning of th
2c840 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68 65  e database.  The
2c850 20 66 6f 72 6d 65 72 0a 2a 2a 20 76 61 6c 75 65   former.** value
2c860 20 6f 66 20 74 68 65 20 72 6f 6f 74 20 70 61 67   of the root pag
2c870 65 20 74 68 61 74 20 6d 6f 76 65 64 20 2d 20 69  e that moved - i
2c880 74 73 20 76 61 6c 75 65 20 62 65 66 6f 72 65 20  ts value before 
2c890 74 68 65 20 6d 6f 76 65 20 6f 63 63 75 72 72 65  the move occurre
2c8a0 64 20 2d 0a 2a 2a 20 69 73 20 73 74 6f 72 65 64  d -.** is stored
2c8b0 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
2c8c0 20 20 49 66 20 6e 6f 20 70 61 67 65 20 0a 2a 2a    If no page .**
2c8d0 20 6d 6f 76 65 6d 65 6e 74 20 77 61 73 20 72 65   movement was re
2c8e0 71 75 69 72 65 64 20 28 62 65 63 61 75 73 65 20  quired (because 
2c8f0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
2c900 64 72 6f 70 70 65 64 20 77 61 73 20 61 6c 72 65  dropped was alre
2c910 61 64 79 20 0a 2a 2a 20 74 68 65 20 6c 61 73 74  ady .** the last
2c920 20 6f 6e 65 20 69 6e 20 74 68 65 20 64 61 74 61   one in the data
2c930 62 61 73 65 29 20 74 68 65 6e 20 61 20 7a 65 72  base) then a zer
2c940 6f 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  o is stored in r
2c950 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 20 49  egister P2..** I
2c960 66 20 41 55 54 4f 56 41 43 55 55 4d 20 69 73 20  f AUTOVACUUM is 
2c970 64 69 73 61 62 6c 65 64 20 74 68 65 6e 20 61 20  disabled then a 
2c980 7a 65 72 6f 20 69 73 20 73 74 6f 72 65 64 20 69  zero is stored i
2c990 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a  n register P2..*
2c9a0 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2c9b0 6c 65 61 72 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lear.*/.case OP_
2c9c0 44 65 73 74 72 6f 79 3a 20 7b 20 20 20 20 20 2f  Destroy: {     /
2c9d0 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
2c9e0 69 4d 6f 76 65 64 3b 0a 20 20 69 6e 74 20 69 44  iMoved;.  int iD
2c9f0 62 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  b;..  assert( p-
2ca00 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
2ca10 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
2ca20 31 3e 31 20 29 3b 0a 20 20 70 4f 75 74 20 3d 20  1>1 );.  pOut = 
2ca30 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
2ca40 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
2ca50 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c  flags = MEM_Null
2ca60 3b 0a 20 20 69 66 28 20 64 62 2d 3e 6e 56 64 62  ;.  if( db->nVdb
2ca70 65 52 65 61 64 20 3e 20 64 62 2d 3e 6e 56 44 65  eRead > db->nVDe
2ca80 73 74 72 6f 79 2b 31 20 29 7b 0a 20 20 20 20 72  stroy+1 ){.    r
2ca90 63 20 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45  c = SQLITE_LOCKE
2caa0 44 3b 0a 20 20 20 20 70 2d 3e 65 72 72 6f 72 41  D;.    p->errorA
2cab0 63 74 69 6f 6e 20 3d 20 4f 45 5f 41 62 6f 72 74  ction = OE_Abort
2cac0 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74  ;.    goto abort
2cad0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
2cae0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 44 62 20   }else{.    iDb 
2caf0 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 61  = pOp->p3;.    a
2cb00 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73  ssert( DbMaskTes
2cb10 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20  t(p->btreeMask, 
2cb20 69 44 62 29 20 29 3b 0a 20 20 20 20 69 4d 6f 76  iDb) );.    iMov
2cb30 65 64 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20  ed = 0;  /* Not 
2cb40 6e 65 65 64 65 64 2e 20 20 4f 6e 6c 79 20 74 6f  needed.  Only to
2cb50 20 73 69 6c 65 6e 63 65 20 61 20 77 61 72 6e 69   silence a warni
2cb60 6e 67 2e 20 2a 2f 0a 20 20 20 20 72 63 20 3d 20  ng. */.    rc = 
2cb70 73 71 6c 69 74 65 33 42 74 72 65 65 44 72 6f 70  sqlite3BtreeDrop
2cb80 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b 69 44  Table(db->aDb[iD
2cb90 62 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 31 2c  b].pBt, pOp->p1,
2cba0 20 26 69 4d 6f 76 65 64 29 3b 0a 20 20 20 20 70   &iMoved);.    p
2cbb0 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d  Out->flags = MEM
2cbc0 5f 49 6e 74 3b 0a 20 20 20 20 70 4f 75 74 2d 3e  _Int;.    pOut->
2cbd0 75 2e 69 20 3d 20 69 4d 6f 76 65 64 3b 0a 20 20  u.i = iMoved;.  
2cbe0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cbf0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cc00 6f 72 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  or;.#ifndef SQLI
2cc10 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
2cc20 55 4d 0a 20 20 20 20 69 66 28 20 69 4d 6f 76 65  UM.    if( iMove
2cc30 64 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71  d!=0 ){.      sq
2cc40 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2cc50 65 64 28 64 62 2c 20 69 44 62 2c 20 69 4d 6f 76  ed(db, iDb, iMov
2cc60 65 64 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20  ed, pOp->p1);.  
2cc70 20 20 20 20 2f 2a 20 41 6c 6c 20 4f 50 5f 44 65      /* All OP_De
2cc80 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e 73  stroy operations
2cc90 20 6f 63 63 75 72 20 6f 6e 20 74 68 65 20 73 61   occur on the sa
2cca0 6d 65 20 62 74 72 65 65 20 2a 2f 0a 20 20 20 20  me btree */.    
2ccb0 20 20 61 73 73 65 72 74 28 20 72 65 73 65 74 53    assert( resetS
2ccc0 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 30 20  chemaOnFault==0 
2ccd0 7c 7c 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e  || resetSchemaOn
2cce0 46 61 75 6c 74 3d 3d 69 44 62 2b 31 20 29 3b 0a  Fault==iDb+1 );.
2ccf0 20 20 20 20 20 20 72 65 73 65 74 53 63 68 65 6d        resetSchem
2cd00 61 4f 6e 46 61 75 6c 74 20 3d 20 69 44 62 2b 31  aOnFault = iDb+1
2cd10 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20  ;.    }.#endif. 
2cd20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
2cd30 2a 20 4f 70 63 6f 64 65 3a 20 43 6c 65 61 72 20  * Opcode: Clear 
2cd40 50 31 20 50 32 20 50 33 0a 2a 2a 0a 2a 2a 20 44  P1 P2 P3.**.** D
2cd50 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74 65 6e  elete all conten
2cd60 74 73 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ts of the databa
2cd70 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  se table or inde
2cd80 78 20 77 68 6f 73 65 20 72 6f 6f 74 20 70 61 67  x whose root pag
2cd90 65 0a 2a 2a 20 69 6e 20 74 68 65 20 64 61 74 61  e.** in the data
2cda0 62 61 73 65 20 66 69 6c 65 20 69 73 20 67 69 76  base file is giv
2cdb0 65 6e 20 62 79 20 50 31 2e 20 20 42 75 74 2c 20  en by P1.  But, 
2cdc0 75 6e 6c 69 6b 65 20 44 65 73 74 72 6f 79 2c 20  unlike Destroy, 
2cdd0 64 6f 20 6e 6f 74 0a 2a 2a 20 72 65 6d 6f 76 65  do not.** remove
2cde0 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69 6e   the table or in
2cdf0 64 65 78 20 66 72 6f 6d 20 74 68 65 20 64 61 74  dex from the dat
2ce00 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
2ce10 2a 20 54 68 65 20 74 61 62 6c 65 20 62 65 69 6e  * The table bein
2ce20 67 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68  g clear is in th
2ce30 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2ce40 66 69 6c 65 20 69 66 20 50 32 3d 3d 30 2e 20 20  file if P2==0.  
2ce50 49 66 0a 2a 2a 20 50 32 3d 3d 31 20 74 68 65 6e  If.** P2==1 then
2ce60 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 62 65   the table to be
2ce70 20 63 6c 65 61 72 20 69 73 20 69 6e 20 74 68 65   clear is in the
2ce80 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61 62   auxiliary datab
2ce90 61 73 65 20 66 69 6c 65 0a 2a 2a 20 74 68 61 74  ase file.** that
2cea0 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72   is used to stor
2ceb0 65 20 74 61 62 6c 65 73 20 63 72 65 61 74 65 20  e tables create 
2cec0 75 73 69 6e 67 20 43 52 45 41 54 45 20 54 45 4d  using CREATE TEM
2ced0 50 4f 52 41 52 59 20 54 41 42 4c 45 2e 0a 2a 2a  PORARY TABLE..**
2cee0 0a 2a 2a 20 49 66 20 74 68 65 20 50 33 20 76 61  .** If the P3 va
2cef0 6c 75 65 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c  lue is non-zero,
2cf00 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20   then the table 
2cf10 72 65 66 65 72 72 65 64 20 74 6f 20 6d 75 73 74  referred to must
2cf20 20 62 65 20 61 6e 0a 2a 2a 20 69 6e 74 6b 65 79   be an.** intkey
2cf30 20 74 61 62 6c 65 20 28 61 6e 20 53 51 4c 20 74   table (an SQL t
2cf40 61 62 6c 65 2c 20 6e 6f 74 20 61 6e 20 69 6e 64  able, not an ind
2cf50 65 78 29 2e 20 49 6e 20 74 68 69 73 20 63 61 73  ex). In this cas
2cf60 65 20 74 68 65 20 72 6f 77 20 63 68 61 6e 67 65  e the row change
2cf70 20 0a 2a 2a 20 63 6f 75 6e 74 20 69 73 20 69 6e   .** count is in
2cf80 63 72 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65  cremented by the
2cf90 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20   number of rows 
2cfa0 69 6e 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  in the table bei
2cfb0 6e 67 20 63 6c 65 61 72 65 64 2e 20 0a 2a 2a 20  ng cleared. .** 
2cfc0 49 66 20 50 33 20 69 73 20 67 72 65 61 74 65 72  If P3 is greater
2cfd0 20 74 68 61 6e 20 7a 65 72 6f 2c 20 74 68 65 6e   than zero, then
2cfe0 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65   the value store
2cff0 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33  d in register P3
2d000 20 69 73 0a 2a 2a 20 61 6c 73 6f 20 69 6e 63 72   is.** also incr
2d010 65 6d 65 6e 74 65 64 20 62 79 20 74 68 65 20 6e  emented by the n
2d020 75 6d 62 65 72 20 6f 66 20 72 6f 77 73 20 69 6e  umber of rows in
2d030 20 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67   the table being
2d040 20 63 6c 65 61 72 65 64 2e 0a 2a 2a 0a 2a 2a 20   cleared..**.** 
2d050 53 65 65 20 61 6c 73 6f 3a 20 44 65 73 74 72 6f  See also: Destro
2d060 79 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 65  y.*/.case OP_Cle
2d070 61 72 3a 20 7b 0a 20 20 69 6e 74 20 6e 43 68 61  ar: {.  int nCha
2d080 6e 67 65 3b 0a 20 0a 20 20 6e 43 68 61 6e 67 65  nge;. .  nChange
2d090 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2d0a0 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
2d0b0 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
2d0c0 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
2d0d0 61 73 6b 2c 20 70 4f 70 2d 3e 70 32 29 20 29 3b  ask, pOp->p2) );
2d0e0 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42  .  rc = sqlite3B
2d0f0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 28 0a  treeClearTable(.
2d100 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 70 4f        db->aDb[pO
2d110 70 2d 3e 70 32 5d 2e 70 42 74 2c 20 70 4f 70 2d  p->p2].pBt, pOp-
2d120 3e 70 31 2c 20 28 70 4f 70 2d 3e 70 33 20 3f 20  >p1, (pOp->p3 ? 
2d130 26 6e 43 68 61 6e 67 65 20 3a 20 30 29 0a 20 20  &nChange : 0).  
2d140 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33  );.  if( pOp->p3
2d150 20 29 7b 0a 20 20 20 20 70 2d 3e 6e 43 68 61 6e   ){.    p->nChan
2d160 67 65 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  ge += nChange;. 
2d170 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 3e 30     if( pOp->p3>0
2d180 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
2d190 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
2d1a0 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 20 29 3b 0a  em[pOp->p3]) );.
2d1b0 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
2d1c0 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65 6d 5b  Change(p, &aMem[
2d1d0 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20 20  pOp->p3]);.     
2d1e0 20 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2e 75   aMem[pOp->p3].u
2d1f0 2e 69 20 2b 3d 20 6e 43 68 61 6e 67 65 3b 0a 20  .i += nChange;. 
2d200 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72     }.  }.  if( r
2d210 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
2d220 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
2d230 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2d240 64 65 3a 20 52 65 73 65 74 53 6f 72 74 65 72 20  de: ResetSorter 
2d250 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a  P1 * * * *.**.**
2d260 20 44 65 6c 65 74 65 20 61 6c 6c 20 63 6f 6e 74   Delete all cont
2d270 65 6e 74 73 20 66 72 6f 6d 20 74 68 65 20 65 70  ents from the ep
2d280 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 6f 72  hemeral table or
2d290 20 73 6f 72 74 65 72 0a 2a 2a 20 74 68 61 74 20   sorter.** that 
2d2a0 69 73 20 6f 70 65 6e 20 6f 6e 20 63 75 72 73 6f  is open on curso
2d2b0 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P1..**.** This
2d2c0 20 6f 70 63 6f 64 65 20 6f 6e 6c 79 20 77 6f 72   opcode only wor
2d2d0 6b 73 20 66 6f 72 20 63 75 72 73 6f 72 73 20 75  ks for cursors u
2d2e0 73 65 64 20 66 6f 72 20 73 6f 72 74 69 6e 67 20  sed for sorting 
2d2f0 61 6e 64 0a 2a 2a 20 6f 70 65 6e 65 64 20 77 69  and.** opened wi
2d300 74 68 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65  th OP_OpenEpheme
2d310 72 61 6c 20 6f 72 20 4f 50 5f 53 6f 72 74 65 72  ral or OP_Sorter
2d320 4f 70 65 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Open..*/.case OP
2d330 5f 52 65 73 65 74 53 6f 72 74 65 72 3a 20 7b 0a  _ResetSorter: {.
2d340 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
2d350 3b 0a 20 0a 20 20 61 73 73 65 72 74 28 20 70 4f  ;. .  assert( pO
2d360 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2d370 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2d380 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2d390 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2d3a0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2d3b0 20 69 66 28 20 69 73 53 6f 72 74 65 72 28 70 43   if( isSorter(pC
2d3c0 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
2d3d0 56 64 62 65 53 6f 72 74 65 72 52 65 73 65 74 28  VdbeSorterReset(
2d3e0 64 62 2c 20 70 43 2d 3e 75 63 2e 70 53 6f 72 74  db, pC->uc.pSort
2d3f0 65 72 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  er);.  }else{.  
2d400 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43    assert( pC->eC
2d410 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f  urType==CURTYPE_
2d420 42 54 52 45 45 20 29 3b 0a 20 20 20 20 61 73 73  BTREE );.    ass
2d430 65 72 74 28 20 70 43 2d 3e 69 73 45 70 68 65 6d  ert( pC->isEphem
2d440 65 72 61 6c 20 29 3b 0a 20 20 20 20 72 63 20 3d  eral );.    rc =
2d450 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65   sqlite3BtreeCle
2d460 61 72 54 61 62 6c 65 4f 66 43 75 72 73 6f 72 28  arTableOfCursor(
2d470 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29 3b  pC->uc.pCursor);
2d480 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
2d490 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
2d4a0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72 65  error;.  }.  bre
2d4b0 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2d4c0 3a 20 43 72 65 61 74 65 54 61 62 6c 65 20 50 31  : CreateTable P1
2d4d0 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e   P2 * * *.** Syn
2d4e0 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f  opsis: r[P2]=roo
2d4f0 74 20 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41  t iDb=P1.**.** A
2d500 6c 6c 6f 63 61 74 65 20 61 20 6e 65 77 20 74 61  llocate a new ta
2d510 62 6c 65 20 69 6e 20 74 68 65 20 6d 61 69 6e 20  ble in the main 
2d520 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66  database file if
2d530 20 50 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65   P1==0 or in the
2d540 0a 2a 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61  .** auxiliary da
2d550 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d560 31 3d 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74  1==1 or in an at
2d570 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 20  tached database 
2d580 69 66 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69  if.** P1>1.  Wri
2d590 74 65 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65  te the root page
2d5a0 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e   number of the n
2d5b0 65 77 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a  ew table into.**
2d5c0 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a   register P2.**.
2d5d0 2a 2a 20 54 68 65 20 64 69 66 66 65 72 65 6e 63  ** The differenc
2d5e0 65 20 62 65 74 77 65 65 6e 20 61 20 74 61 62 6c  e between a tabl
2d5f0 65 20 61 6e 64 20 61 6e 20 69 6e 64 65 78 20 69  e and an index i
2d600 73 20 74 68 69 73 3a 20 20 41 20 74 61 62 6c 65  s this:  A table
2d610 20 6d 75 73 74 0a 2a 2a 20 68 61 76 65 20 61 20   must.** have a 
2d620 34 2d 62 79 74 65 20 69 6e 74 65 67 65 72 20 6b  4-byte integer k
2d630 65 79 20 61 6e 64 20 63 61 6e 20 68 61 76 65 20  ey and can have 
2d640 61 72 62 69 74 72 61 72 79 20 64 61 74 61 2e 20  arbitrary data. 
2d650 20 41 6e 20 69 6e 64 65 78 0a 2a 2a 20 68 61 73   An index.** has
2d660 20 61 6e 20 61 72 62 69 74 72 61 72 79 20 6b 65   an arbitrary ke
2d670 79 20 62 75 74 20 6e 6f 20 64 61 74 61 2e 0a 2a  y but no data..*
2d680 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 43  *.** See also: C
2d690 72 65 61 74 65 49 6e 64 65 78 0a 2a 2f 0a 2f 2a  reateIndex.*/./*
2d6a0 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 49   Opcode: CreateI
2d6b0 6e 64 65 78 20 50 31 20 50 32 20 2a 20 2a 20 2a  ndex P1 P2 * * *
2d6c0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2d6d0 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2d6e0 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2d6f0 20 6e 65 77 20 69 6e 64 65 78 20 69 6e 20 74 68   new index in th
2d700 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2d710 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2d720 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2d730 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2d740 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2d750 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2d760 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2d770 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2d780 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2d790 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2d7a0 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2d7b0 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 64   P2..**.** See d
2d7c0 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 6e 20  ocumentation on 
2d7d0 4f 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 66  OP_CreateTable f
2d7e0 6f 72 20 61 64 64 69 74 69 6f 6e 61 6c 20 69 6e  or additional in
2d7f0 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61  formation..*/.ca
2d800 73 65 20 4f 50 5f 43 72 65 61 74 65 49 6e 64 65  se OP_CreateInde
2d810 78 3a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  x:            /*
2d820 20 6f 75 74 32 20 2a 2f 0a 63 61 73 65 20 4f 50   out2 */.case OP
2d830 5f 43 72 65 61 74 65 54 61 62 6c 65 3a 20 7b 20  _CreateTable: { 
2d840 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
2d850 20 2a 2f 0a 20 20 69 6e 74 20 70 67 6e 6f 3b 0a   */.  int pgno;.
2d860 20 20 69 6e 74 20 66 6c 61 67 73 3b 0a 20 20 44    int flags;.  D
2d870 62 20 2a 70 44 62 3b 0a 0a 20 20 70 4f 75 74 20  b *pDb;..  pOut 
2d880 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
2d890 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 67 6e 6f  (p, pOp);.  pgno
2d8a0 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20   = 0;.  assert( 
2d8b0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
2d8c0 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b  p->p1<db->nDb );
2d8d0 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73  .  assert( DbMas
2d8e0 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61  kTest(p->btreeMa
2d8f0 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b 0a  sk, pOp->p1) );.
2d900 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
2d910 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70 44  dOnly==0 );.  pD
2d920 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 70 4f 70  b = &db->aDb[pOp
2d930 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
2d940 20 70 44 62 2d 3e 70 42 74 21 3d 30 20 29 3b 0a   pDb->pBt!=0 );.
2d950 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2d960 65 3d 3d 4f 50 5f 43 72 65 61 74 65 54 61 62 6c  e==OP_CreateTabl
2d970 65 20 29 7b 0a 20 20 20 20 2f 2a 20 66 6c 61 67  e ){.    /* flag
2d980 73 20 3d 20 42 54 52 45 45 5f 49 4e 54 4b 45 59  s = BTREE_INTKEY
2d990 3b 20 2a 2f 0a 20 20 20 20 66 6c 61 67 73 20 3d  ; */.    flags =
2d9a0 20 42 54 52 45 45 5f 49 4e 54 4b 45 59 3b 0a 20   BTREE_INTKEY;. 
2d9b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 66 6c 61 67   }else{.    flag
2d9c0 73 20 3d 20 42 54 52 45 45 5f 42 4c 4f 42 4b 45  s = BTREE_BLOBKE
2d9d0 59 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 73 71  Y;.  }.  rc = sq
2d9e0 6c 69 74 65 33 42 74 72 65 65 43 72 65 61 74 65  lite3BtreeCreate
2d9f0 54 61 62 6c 65 28 70 44 62 2d 3e 70 42 74 2c 20  Table(pDb->pBt, 
2da00 26 70 67 6e 6f 2c 20 66 6c 61 67 73 29 3b 0a 20  &pgno, flags);. 
2da10 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
2da20 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
2da30 72 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  r;.  pOut->u.i =
2da40 20 70 67 6e 6f 3b 0a 20 20 62 72 65 61 6b 3b 0a   pgno;.  break;.
2da50 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61  }../* Opcode: Pa
2da60 72 73 65 53 63 68 65 6d 61 20 50 31 20 2a 20 2a  rseSchema P1 * *
2da70 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64   P4 *.**.** Read
2da80 20 61 6e 64 20 70 61 72 73 65 20 61 6c 6c 20 65   and parse all e
2da90 6e 74 72 69 65 73 20 66 72 6f 6d 20 74 68 65 20  ntries from the 
2daa0 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 74 61  SQLITE_MASTER ta
2dab0 62 6c 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  ble of database 
2dac0 50 31 0a 2a 2a 20 74 68 61 74 20 6d 61 74 63 68  P1.** that match
2dad0 20 74 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   the WHERE claus
2dae0 65 20 50 34 2e 20 0a 2a 2a 0a 2a 2a 20 54 68 69  e P4. .**.** Thi
2daf0 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73  s opcode invokes
2db00 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 63   the parser to c
2db10 72 65 61 74 65 20 61 20 6e 65 77 20 76 69 72 74  reate a new virt
2db20 75 61 6c 20 6d 61 63 68 69 6e 65 2c 0a 2a 2a 20  ual machine,.** 
2db30 74 68 65 6e 20 72 75 6e 73 20 74 68 65 20 6e 65  then runs the ne
2db40 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e  w virtual machin
2db50 65 2e 20 20 49 74 20 69 73 20 74 68 75 73 20 61  e.  It is thus a
2db60 20 72 65 2d 65 6e 74 72 61 6e 74 20 6f 70 63 6f   re-entrant opco
2db70 64 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  de..*/.case OP_P
2db80 61 72 73 65 53 63 68 65 6d 61 3a 20 7b 0a 20 20  arseSchema: {.  
2db90 69 6e 74 20 69 44 62 3b 0a 20 20 63 6f 6e 73 74  int iDb;.  const
2dba0 20 63 68 61 72 20 2a 7a 4d 61 73 74 65 72 3b 0a   char *zMaster;.
2dbb0 20 20 63 68 61 72 20 2a 7a 53 71 6c 3b 0a 20 20    char *zSql;.  
2dbc0 49 6e 69 74 44 61 74 61 20 69 6e 69 74 44 61 74  InitData initDat
2dbd0 61 3b 0a 0a 20 20 2f 2a 20 41 6e 79 20 70 72 65  a;..  /* Any pre
2dbe0 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
2dbf0 74 68 61 74 20 69 6e 76 6f 6b 65 73 20 74 68 69  that invokes thi
2dc00 73 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 68 6f  s opcode will ho
2dc10 6c 64 20 6d 75 74 65 78 65 73 0a 20 20 2a 2a 20  ld mutexes.  ** 
2dc20 6f 6e 20 65 76 65 72 79 20 62 74 72 65 65 2e 20  on every btree. 
2dc30 20 54 68 69 73 20 69 73 20 61 20 70 72 65 72 65   This is a prere
2dc40 71 75 69 73 69 74 65 20 66 6f 72 20 69 6e 76 6f  quisite for invo
2dc50 6b 69 6e 67 20 0a 20 20 2a 2a 20 73 71 6c 69 74  king .  ** sqlit
2dc60 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 29  e3InitCallback()
2dc70 2e 0a 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  ..  */.#ifdef SQ
2dc80 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f 72  LITE_DEBUG.  for
2dc90 28 69 44 62 3d 30 3b 20 69 44 62 3c 64 62 2d 3e  (iDb=0; iDb<db->
2dca0 6e 44 62 3b 20 69 44 62 2b 2b 29 7b 0a 20 20 20  nDb; iDb++){.   
2dcb0 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 31 20   assert( iDb==1 
2dcc0 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 48  || sqlite3BtreeH
2dcd0 6f 6c 64 73 4d 75 74 65 78 28 64 62 2d 3e 61 44  oldsMutex(db->aD
2dce0 62 5b 69 44 62 5d 2e 70 42 74 29 20 29 3b 0a 20  b[iDb].pBt) );. 
2dcf0 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 69 44 62   }.#endif..  iDb
2dd00 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 61 73   = pOp->p1;.  as
2dd10 73 65 72 74 28 20 69 44 62 3e 3d 30 20 26 26 20  sert( iDb>=0 && 
2dd20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20  iDb<db->nDb );. 
2dd30 20 61 73 73 65 72 74 28 20 44 62 48 61 73 50 72   assert( DbHasPr
2dd40 6f 70 65 72 74 79 28 64 62 2c 20 69 44 62 2c 20  operty(db, iDb, 
2dd50 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
2dd60 20 29 3b 0a 20 20 2f 2a 20 55 73 65 64 20 74 6f   );.  /* Used to
2dd70 20 62 65 20 61 20 63 6f 6e 64 69 74 69 6f 6e 61   be a conditiona
2dd80 6c 20 2a 2f 20 7b 0a 20 20 20 20 7a 4d 61 73 74  l */ {.    zMast
2dd90 65 72 20 3d 20 4d 41 53 54 45 52 5f 4e 41 4d 45  er = MASTER_NAME
2dda0 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 64  ;.    initData.d
2ddb0 62 20 3d 20 64 62 3b 0a 20 20 20 20 69 6e 69 74  b = db;.    init
2ddc0 44 61 74 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e  Data.iDb = pOp->
2ddd0 70 31 3b 0a 20 20 20 20 69 6e 69 74 44 61 74 61  p1;.    initData
2dde0 2e 70 7a 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e  .pzErrMsg = &p->
2ddf0 7a 45 72 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71  zErrMsg;.    zSq
2de00 6c 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  l = sqlite3MPrin
2de10 74 66 28 64 62 2c 0a 20 20 20 20 20 20 20 22 53  tf(db,.       "S
2de20 45 4c 45 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74  ELECT name, root
2de30 70 61 67 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27  page, sql FROM '
2de40 25 71 27 2e 25 73 20 57 48 45 52 45 20 25 73 20  %q'.%s WHERE %s 
2de50 4f 52 44 45 52 20 42 59 20 72 6f 77 69 64 22 2c  ORDER BY rowid",
2de60 0a 20 20 20 20 20 20 20 64 62 2d 3e 61 44 62 5b  .       db->aDb[
2de70 69 44 62 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a  iDb].zDbSName, z
2de80 4d 61 73 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e  Master, pOp->p4.
2de90 7a 29 3b 0a 20 20 20 20 69 66 28 20 7a 53 71 6c  z);.    if( zSql
2dea0 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63 20  ==0 ){.      rc 
2deb0 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  = SQLITE_NOMEM_B
2dec0 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  KPT;.    }else{.
2ded0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
2dee0 2d 3e 69 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29  ->init.busy==0 )
2def0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 69 6e 69 74  ;.      db->init
2df00 2e 62 75 73 79 20 3d 20 31 3b 0a 20 20 20 20 20  .busy = 1;.     
2df10 20 69 6e 69 74 44 61 74 61 2e 72 63 20 3d 20 53   initData.rc = S
2df20 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20  QLITE_OK;.      
2df30 61 73 73 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c  assert( !db->mal
2df40 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 20  locFailed );.   
2df50 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
2df60 65 78 65 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73  exec(db, zSql, s
2df70 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
2df80 63 6b 2c 20 26 69 6e 69 74 44 61 74 61 2c 20 30  ck, &initData, 0
2df90 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d  );.      if( rc=
2dfa0 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20  =SQLITE_OK ) rc 
2dfb0 3d 20 69 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20  = initData.rc;. 
2dfc0 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
2dfd0 65 65 28 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20  ee(db, zSql);.  
2dfe0 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73      db->init.bus
2dff0 79 20 3d 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d  y = 0;.    }.  }
2e000 0a 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20  .  if( rc ){.   
2e010 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
2e020 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
2e030 69 6f 6e 28 64 62 29 3b 0a 20 20 20 20 69 66 28  ion(db);.    if(
2e040 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45   rc==SQLITE_NOME
2e050 4d 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  M ){.      goto 
2e060 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  no_mem;.    }.  
2e070 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
2e080 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20  _to_error;.  }. 
2e090 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66   break;  .}..#if
2e0a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2e0b0 5f 4f 4d 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f  _OMIT_ANALYZE)./
2e0c0 2a 20 4f 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e  * Opcode: LoadAn
2e0d0 61 6c 79 73 69 73 20 50 31 20 2a 20 2a 20 2a 20  alysis P1 * * * 
2e0e0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65  *.**.** Read the
2e0f0 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74 61   sqlite_stat1 ta
2e100 62 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73 65  ble for database
2e110 20 50 31 20 61 6e 64 20 6c 6f 61 64 20 74 68 65   P1 and load the
2e120 20 63 6f 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74   content.** of t
2e130 68 61 74 20 74 61 62 6c 65 20 69 6e 74 6f 20 74  hat table into t
2e140 68 65 20 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65  he internal inde
2e150 78 20 68 61 73 68 20 74 61 62 6c 65 2e 20 20 54  x hash table.  T
2e160 68 69 73 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a  his will cause.*
2e170 2a 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 74  * the analysis t
2e180 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70  o be used when p
2e190 72 65 70 61 72 69 6e 67 20 61 6c 6c 20 73 75 62  reparing all sub
2e1a0 73 65 71 75 65 6e 74 20 71 75 65 72 69 65 73 2e  sequent queries.
2e1b0 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64  .*/.case OP_Load
2e1c0 41 6e 61 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73  Analysis: {.  as
2e1d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
2e1e0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
2e1f0 6e 44 62 20 29 3b 0a 20 20 72 63 20 3d 20 73 71  nDb );.  rc = sq
2e200 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2e210 64 28 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  d(db, pOp->p1);.
2e220 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2e230 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2e240 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d  or;.  break;  .}
2e250 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
2e260 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2e270 41 4e 41 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20  ANALYZE) */../* 
2e280 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c  Opcode: DropTabl
2e290 65 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  e P1 * * P4 *.**
2e2a0 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68 65 20 69  .** Remove the i
2e2b0 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f  nternal (in-memo
2e2c0 72 79 29 20 64 61 74 61 20 73 74 72 75 63 74 75  ry) data structu
2e2d0 72 65 73 20 74 68 61 74 20 64 65 73 63 72 69 62  res that describ
2e2e0 65 0a 2a 2a 20 74 68 65 20 74 61 62 6c 65 20 6e  e.** the table n
2e2f0 61 6d 65 64 20 50 34 20 69 6e 20 64 61 74 61 62  amed P4 in datab
2e300 61 73 65 20 50 31 2e 20 20 54 68 69 73 20 69 73  ase P1.  This is
2e310 20 63 61 6c 6c 65 64 20 61 66 74 65 72 20 61 20   called after a 
2e320 74 61 62 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70  table.** is drop
2e330 70 65 64 20 66 72 6f 6d 20 64 69 73 6b 20 28 75  ped from disk (u
2e340 73 69 6e 67 20 74 68 65 20 44 65 73 74 72 6f 79  sing the Destroy
2e350 20 6f 70 63 6f 64 65 29 20 69 6e 20 6f 72 64 65   opcode) in orde
2e360 72 20 74 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68  r to keep .** th
2e370 65 20 69 6e 74 65 72 6e 61 6c 20 72 65 70 72 65  e internal repre
2e380 73 65 6e 74 61 74 69 6f 6e 20 6f 66 20 74 68 65  sentation of the
2e390 0a 2a 2a 20 73 63 68 65 6d 61 20 63 6f 6e 73 69  .** schema consi
2e3a0 73 74 65 6e 74 20 77 69 74 68 20 77 68 61 74 20  stent with what 
2e3b0 69 73 20 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63  is on disk..*/.c
2e3c0 61 73 65 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65  ase OP_DropTable
2e3d0 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c  : {.  sqlite3Unl
2e3e0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61 62 6c  inkAndDeleteTabl
2e3f0 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70  e(db, pOp->p1, p
2e400 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65  Op->p4.z);.  bre
2e410 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
2e420 3a 20 44 72 6f 70 49 6e 64 65 78 20 50 31 20 2a  : DropIndex P1 *
2e430 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65   * P4 *.**.** Re
2e440 6d 6f 76 65 20 74 68 65 20 69 6e 74 65 72 6e 61  move the interna
2e450 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61  l (in-memory) da
2e460 74 61 20 73 74 72 75 63 74 75 72 65 73 20 74 68  ta structures th
2e470 61 74 20 64 65 73 63 72 69 62 65 0a 2a 2a 20 74  at describe.** t
2e480 68 65 20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50  he index named P
2e490 34 20 69 6e 20 64 61 74 61 62 61 73 65 20 50 31  4 in database P1
2e4a0 2e 20 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65  .  This is calle
2e4b0 64 20 61 66 74 65 72 20 61 6e 20 69 6e 64 65 78  d after an index
2e4c0 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66  .** is dropped f
2e4d0 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20  rom disk (using 
2e4e0 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f  the Destroy opco
2e4f0 64 65 29 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20  de).** in order 
2e500 74 6f 20 6b 65 65 70 20 74 68 65 20 69 6e 74 65  to keep the inte
2e510 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2e520 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2e530 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2e540 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2e550 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2e560 5f 44 72 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20  _DropIndex: {.  
2e570 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
2e580 44 65 6c 65 74 65 49 6e 64 65 78 28 64 62 2c 20  DeleteIndex(db, 
2e590 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
2e5a0 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .z);.  break;.}.
2e5b0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70  ./* Opcode: Drop
2e5c0 54 72 69 67 67 65 72 20 50 31 20 2a 20 2a 20 50  Trigger P1 * * P
2e5d0 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65  4 *.**.** Remove
2e5e0 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28 69   the internal (i
2e5f0 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20 73  n-memory) data s
2e600 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20 64  tructures that d
2e610 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20 74  escribe.** the t
2e620 72 69 67 67 65 72 20 6e 61 6d 65 64 20 50 34 20  rigger named P4 
2e630 69 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20  in database P1. 
2e640 20 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20   This is called 
2e650 61 66 74 65 72 20 61 20 74 72 69 67 67 65 72 0a  after a trigger.
2e660 2a 2a 20 69 73 20 64 72 6f 70 70 65 64 20 66 72  ** is dropped fr
2e670 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74  om disk (using t
2e680 68 65 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64  he Destroy opcod
2e690 65 29 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  e) in order to k
2e6a0 65 65 70 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65  eep .** the inte
2e6b0 72 6e 61 6c 20 72 65 70 72 65 73 65 6e 74 61 74  rnal representat
2e6c0 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63  ion of the.** sc
2e6d0 68 65 6d 61 20 63 6f 6e 73 69 73 74 65 6e 74 20  hema consistent 
2e6e0 77 69 74 68 20 77 68 61 74 20 69 73 20 6f 6e 20  with what is on 
2e6f0 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  disk..*/.case OP
2e700 5f 44 72 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a  _DropTrigger: {.
2e710 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41    sqlite3UnlinkA
2e720 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28  ndDeleteTrigger(
2e730 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  db, pOp->p1, pOp
2e740 2d 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b  ->p4.z);.  break
2e750 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51  ;.}...#ifndef SQ
2e760 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2e770 49 54 59 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63  ITY_CHECK./* Opc
2e780 6f 64 65 3a 20 49 6e 74 65 67 72 69 74 79 43 6b  ode: IntegrityCk
2e790 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
2e7a0 2a 2a 0a 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c  **.** Do an anal
2e7b0 79 73 69 73 20 6f 66 20 74 68 65 20 63 75 72 72  ysis of the curr
2e7c0 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
2e7d0 61 73 65 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a  ase.  Store in.*
2e7e0 2a 20 72 65 67 69 73 74 65 72 20 50 31 20 74 68  * register P1 th
2e7f0 65 20 74 65 78 74 20 6f 66 20 61 6e 20 65 72 72  e text of an err
2e800 6f 72 20 6d 65 73 73 61 67 65 20 64 65 73 63 72  or message descr
2e810 69 62 69 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65  ibing any proble
2e820 6d 73 2e 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f  ms..** If no pro
2e830 62 6c 65 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c  blems are found,
2e840 20 73 74 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e   store a NULL in
2e850 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
2e860 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74 65 72  .** The register
2e870 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2e880 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
2e890 6f 66 20 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72  of allowed error
2e8a0 73 2e 0a 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65  s..** At most re
2e8b0 67 28 50 33 29 20 65 72 72 6f 72 73 20 77 69 6c  g(P3) errors wil
2e8c0 6c 20 62 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a  l be reported..*
2e8d0 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
2e8e0 2c 20 74 68 65 20 61 6e 61 6c 79 73 69 73 20 73  , the analysis s
2e8f0 74 6f 70 73 20 61 73 20 73 6f 6f 6e 20 61 73 20  tops as soon as 
2e900 72 65 67 28 50 31 29 20 65 72 72 6f 72 73 20 61  reg(P1) errors a
2e910 72 65 20 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65  re .** seen.  Re
2e920 67 28 50 31 29 20 69 73 20 75 70 64 61 74 65 64  g(P1) is updated
2e930 20 77 69 74 68 20 74 68 65 20 6e 75 6d 62 65 72   with the number
2e940 20 6f 66 20 65 72 72 6f 72 73 20 72 65 6d 61 69   of errors remai
2e950 6e 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ning..**.** The 
2e960 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72  root page number
2e970 73 20 6f 66 20 61 6c 6c 20 74 61 62 6c 65 73 20  s of all tables 
2e980 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
2e990 61 72 65 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20  are integers.** 
2e9a0 73 74 6f 72 65 64 20 69 6e 20 50 34 5f 49 4e 54  stored in P4_INT
2e9b0 41 52 52 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a  ARRAY argument..
2e9c0 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69 73 20 6e  **.** If P5 is n
2e9d0 6f 74 20 7a 65 72 6f 2c 20 74 68 65 20 63 68 65  ot zero, the che
2e9e0 63 6b 20 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68  ck is done on th
2e9f0 65 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  e auxiliary data
2ea00 62 61 73 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f  base.** file, no
2ea10 74 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  t the main datab
2ea20 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20  ase file..**.** 
2ea30 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 75  This opcode is u
2ea40 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
2ea50 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 5f 63   the integrity_c
2ea60 68 65 63 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a  heck pragma..*/.
2ea70 63 61 73 65 20 4f 50 5f 49 6e 74 65 67 72 69 74  case OP_Integrit
2ea80 79 43 6b 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f  yCk: {.  int nRo
2ea90 6f 74 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ot;      /* Numb
2eaa0 65 72 20 6f 66 20 74 61 62 6c 65 73 20 74 6f 20  er of tables to 
2eab0 63 68 65 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20  check.  (Number 
2eac0 6f 66 20 72 6f 6f 74 20 70 61 67 65 73 2e 29 20  of root pages.) 
2ead0 2a 2f 0a 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b  */.  int *aRoot;
2eae0 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20 6f 66       /* Array of
2eaf0 20 72 6f 6f 74 70 61 67 65 20 6e 75 6d 62 65 72   rootpage number
2eb00 73 20 66 6f 72 20 74 61 62 6c 65 73 20 74 6f 20  s for tables to 
2eb10 62 65 20 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20  be checked */.  
2eb20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
2eb30 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72  /* Number of err
2eb40 6f 72 73 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a  ors reported */.
2eb50 20 20 63 68 61 72 20 2a 7a 3b 20 20 20 20 20 20    char *z;      
2eb60 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74 68 65    /* Text of the
2eb70 20 65 72 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f   error report */
2eb80 0a 20 20 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20  .  Mem *pnErr;  
2eb90 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 6b     /* Register k
2eba0 65 65 70 69 6e 67 20 74 72 61 63 6b 20 6f 66 20  eeping track of 
2ebb0 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67  errors remaining
2ebc0 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70   */..  assert( p
2ebd0 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20  ->bIsReader );. 
2ebe0 20 6e 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32   nRoot = pOp->p2
2ebf0 3b 0a 20 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d  ;.  aRoot = pOp-
2ec00 3e 70 34 2e 61 69 3b 0a 20 20 61 73 73 65 72 74  >p4.ai;.  assert
2ec10 28 20 6e 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61  ( nRoot>0 );.  a
2ec20 73 73 65 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f  ssert( aRoot[nRo
2ec30 6f 74 5d 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65  ot]==0 );.  asse
2ec40 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26  rt( pOp->p3>0 &&
2ec50 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d   pOp->p3<=(p->nM
2ec60 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
2ec70 72 29 20 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20  r) );.  pnErr = 
2ec80 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
2ec90 20 20 61 73 73 65 72 74 28 20 28 70 6e 45 72 72    assert( (pnErr
2eca0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e  ->flags & MEM_In
2ecb0 74 29 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  t)!=0 );.  asser
2ecc0 74 28 20 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73  t( (pnErr->flags
2ecd0 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f   & (MEM_Str|MEM_
2ece0 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70  Blob))==0 );.  p
2ecf0 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
2ed00 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
2ed10 70 4f 70 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20  pOp->p5<db->nDb 
2ed20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d  );.  assert( DbM
2ed30 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65  askTest(p->btree
2ed40 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29  Mask, pOp->p5) )
2ed50 3b 0a 20 20 7a 20 3d 20 73 71 6c 69 74 65 33 42  ;.  z = sqlite3B
2ed60 74 72 65 65 49 6e 74 65 67 72 69 74 79 43 68 65  treeIntegrityChe
2ed70 63 6b 28 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e  ck(db->aDb[pOp->
2ed80 70 35 5d 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20  p5].pBt, aRoot, 
2ed90 6e 52 6f 6f 74 2c 0a 20 20 20 20 20 20 20 20 20  nRoot,.         
2eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2edb0 20 20 20 20 20 20 20 20 28 69 6e 74 29 70 6e 45          (int)pnE
2edc0 72 72 2d 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b  rr->u.i, &nErr);
2edd0 0a 20 20 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d  .  pnErr->u.i -=
2ede0 20 6e 45 72 72 3b 0a 20 20 73 71 6c 69 74 65 33   nErr;.  sqlite3
2edf0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
2ee00 49 6e 31 29 3b 0a 20 20 69 66 28 20 6e 45 72 72  In1);.  if( nErr
2ee10 3d 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  ==0 ){.    asser
2ee20 74 28 20 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c  t( z==0 );.  }el
2ee30 73 65 20 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20  se if( z==0 ){. 
2ee40 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a     goto no_mem;.
2ee50 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c    }else{.    sql
2ee60 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 53 74  ite3VdbeMemSetSt
2ee70 72 28 70 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53  r(pIn1, z, -1, S
2ee80 51 4c 49 54 45 5f 55 54 46 38 2c 20 73 71 6c 69  QLITE_UTF8, sqli
2ee90 74 65 33 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20  te3_free);.  }. 
2eea0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
2eeb0 53 49 5a 45 28 70 49 6e 31 29 3b 0a 20 20 73 71  SIZE(pIn1);.  sq
2eec0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45  lite3VdbeChangeE
2eed0 6e 63 6f 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e  ncoding(pIn1, en
2eee0 63 6f 64 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b  coding);.  break
2eef0 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
2ef00 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2ef10 49 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a  ITY_CHECK */../*
2ef20 20 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 41   Opcode: RowSetA
2ef30 64 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  dd P1 P2 * * *.*
2ef40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73  * Synopsis: rows
2ef50 65 74 28 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a  et(P1)=r[P2].**.
2ef60 2a 2a 20 49 6e 73 65 72 74 20 74 68 65 20 69 6e  ** Insert the in
2ef70 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
2ef80 20 62 79 20 72 65 67 69 73 74 65 72 20 50 32 20   by register P2 
2ef90 69 6e 74 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69  into a boolean i
2efa0 6e 64 65 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20  ndex.** held in 
2efb0 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a  register P1..**.
2efc0 2a 2a 20 41 6e 20 61 73 73 65 72 74 69 6f 6e 20  ** An assertion 
2efd0 66 61 69 6c 73 20 69 66 20 50 32 20 69 73 20 6e  fails if P2 is n
2efe0 6f 74 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  ot an integer..*
2eff0 2f 0a 63 61 73 65 20 4f 50 5f 52 6f 77 53 65 74  /.case OP_RowSet
2f000 41 64 64 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20  Add: {       /* 
2f010 69 6e 31 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49  in1, in2 */.  pI
2f020 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
2f030 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61  p1];.  pIn2 = &a
2f040 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
2f050 61 73 73 65 72 74 28 20 28 70 49 6e 32 2d 3e 66  assert( (pIn2->f
2f060 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2f070 3d 30 20 29 3b 0a 20 20 69 66 28 20 28 70 49 6e  =0 );.  if( (pIn
2f080 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52  1->flags & MEM_R
2f090 6f 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20  owSet)==0 ){.   
2f0a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
2f0b0 65 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a  etRowSet(pIn1);.
2f0c0 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66      if( (pIn1->f
2f0d0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2f0e0 74 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f  t)==0 ) goto no_
2f0f0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  mem;.  }.  sqlit
2f100 65 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70  e3RowSetInsert(p
2f110 49 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20  In1->u.pRowSet, 
2f120 70 49 6e 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72  pIn2->u.i);.  br
2f130 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
2f140 65 3a 20 52 6f 77 53 65 74 52 65 61 64 20 50 31  e: RowSetRead P1
2f150 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
2f160 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f  nopsis: r[P3]=ro
2f170 77 73 65 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45  wset(P1).**.** E
2f180 78 74 72 61 63 74 20 74 68 65 20 73 6d 61 6c 6c  xtract the small
2f190 65 73 74 20 76 61 6c 75 65 20 66 72 6f 6d 20 62  est value from b
2f1a0 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20  oolean index P1 
2f1b0 61 6e 64 20 70 75 74 20 74 68 61 74 20 76 61 6c  and put that val
2f1c0 75 65 20 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73  ue into.** regis
2f1d0 74 65 72 20 50 33 2e 20 20 4f 72 2c 20 69 66 20  ter P3.  Or, if 
2f1e0 62 6f 6f 6c 65 61 6e 20 69 6e 64 65 78 20 50 31  boolean index P1
2f1f0 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d   is initially em
2f200 70 74 79 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a  pty, leave P3.**
2f210 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20 6a   unchanged and j
2f220 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69  ump to instructi
2f230 6f 6e 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f  on P2..*/.case O
2f240 50 5f 52 6f 77 53 65 74 52 65 61 64 3a 20 7b 20  P_RowSetRead: { 
2f250 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2f260 6e 31 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36  n1, out3 */.  i6
2f270 34 20 76 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d  4 val;..  pIn1 =
2f280 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
2f290 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
2f2a0 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2f2b0 29 3d 3d 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69  )==0 .   || sqli
2f2c0 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 70 49  te3RowSetNext(pI
2f2d0 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26  n1->u.pRowSet, &
2f2e0 76 61 6c 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20  val)==0.  ){.   
2f2f0 20 2f 2a 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20   /* The boolean 
2f300 69 6e 64 65 78 20 69 73 20 65 6d 70 74 79 20 2a  index is empty *
2f310 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
2f320 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2f330 29 3b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  );.    VdbeBranc
2f340 68 54 61 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20  hTaken(1,2);.   
2f350 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
2f360 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69  _and_check_for_i
2f370 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73  nterrupt;.  }els
2f380 65 7b 0a 20 20 20 20 2f 2a 20 41 20 76 61 6c 75  e{.    /* A valu
2f390 65 20 77 61 73 20 70 75 6c 6c 65 64 20 66 72 6f  e was pulled fro
2f3a0 6d 20 74 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20  m the index */. 
2f3b0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
2f3c0 65 6e 28 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c  en(0,2);.    sql
2f3d0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
2f3e0 74 36 34 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t64(&aMem[pOp->p
2f3f0 33 5d 2c 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20  3], val);.  }.  
2f400 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69  goto check_for_i
2f410 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20  nterrupt;.}../* 
2f420 4f 70 63 6f 64 65 3a 20 52 6f 77 53 65 74 54 65  Opcode: RowSetTe
2f430 73 74 20 50 31 20 50 32 20 50 33 20 50 34 0a 2a  st P1 P2 P3 P4.*
2f440 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
2f450 5b 50 33 5d 20 69 6e 20 72 6f 77 73 65 74 28 50  [P3] in rowset(P
2f460 31 29 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  1) goto P2.**.**
2f470 20 52 65 67 69 73 74 65 72 20 50 33 20 69 73 20   Register P3 is 
2f480 61 73 73 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20  assumed to hold 
2f490 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67 65 72  a 64-bit integer
2f4a0 20 76 61 6c 75 65 2e 20 49 66 20 72 65 67 69 73   value. If regis
2f4b0 74 65 72 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69  ter P1.** contai
2f4c0 6e 73 20 61 20 52 6f 77 53 65 74 20 6f 62 6a 65  ns a RowSet obje
2f4d0 63 74 20 61 6e 64 20 74 68 61 74 20 52 6f 77 53  ct and that RowS
2f4e0 65 74 20 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69  et object contai
2f4f0 6e 73 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ns.** the value 
2f500 68 65 6c 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70  held in P3, jump
2f510 20 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e   to register P2.
2f520 20 4f 74 68 65 72 77 69 73 65 2c 20 69 6e 73 65   Otherwise, inse
2f530 72 74 20 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65  rt the.** intege
2f540 72 20 69 6e 20 50 33 20 69 6e 74 6f 20 74 68 65  r in P3 into the
2f550 20 52 6f 77 53 65 74 20 61 6e 64 20 63 6f 6e 74   RowSet and cont
2f560 69 6e 75 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a  inue on to the.*
2f570 2a 20 6e 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a  * next opcode..*
2f580 2a 0a 2a 2a 20 54 68 65 20 52 6f 77 53 65 74 20  *.** The RowSet 
2f590 6f 62 6a 65 63 74 20 69 73 20 6f 70 74 69 6d 69  object is optimi
2f5a0 7a 65 64 20 66 6f 72 20 74 68 65 20 63 61 73 65  zed for the case
2f5b0 20 77 68 65 72 65 20 73 75 63 63 65 73 73 69 76   where successiv
2f5c0 65 20 73 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74  e sets.** of int
2f5d0 65 67 65 72 73 2c 20 77 68 65 72 65 20 65 61 63  egers, where eac
2f5e0 68 20 73 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e  h set contains n
2f5f0 6f 20 64 75 70 6c 69 63 61 74 65 73 2e 20 45 61  o duplicates. Ea
2f600 63 68 20 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c  ch set.** of val
2f610 75 65 73 20 69 73 20 69 64 65 6e 74 69 66 69 65  ues is identifie
2f620 64 20 62 79 20 61 20 75 6e 69 71 75 65 20 50 34  d by a unique P4
2f630 20 76 61 6c 75 65 2e 20 54 68 65 20 66 69 72 73   value. The firs
2f640 74 20 73 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61  t set.** must ha
2f650 76 65 20 50 34 3d 3d 30 2c 20 74 68 65 20 66 69  ve P4==0, the fi
2f660 6e 61 6c 20 73 65 74 20 50 34 3d 2d 31 2e 20 20  nal set P4=-1.  
2f670 50 34 20 6d 75 73 74 20 62 65 20 65 69 74 68 65  P4 must be eithe
2f680 72 20 2d 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e  r -1 or.** non-n
2f690 65 67 61 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f  egative.  For no
2f6a0 6e 2d 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  n-negative value
2f6b0 73 20 6f 66 20 50 34 20 6f 6e 6c 79 20 74 68 65  s of P4 only the
2f6c0 20 6c 6f 77 65 72 20 34 0a 2a 2a 20 62 69 74 73   lower 4.** bits
2f6d0 20 61 72 65 20 73 69 67 6e 69 66 69 63 61 6e 74   are significant
2f6e0 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c  ..**.** This all
2f6f0 6f 77 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ows optimization
2f700 73 3a 20 28 61 29 20 77 68 65 6e 20 50 34 3d 3d  s: (a) when P4==
2f710 30 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  0 there is no ne
2f720 65 64 20 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68  ed to test.** th
2f730 65 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  e rowset object 
2f740 66 6f 72 20 50 33 2c 20 61 73 20 69 74 20 69 73  for P3, as it is
2f750 20 67 75 61 72 61 6e 74 65 65 64 20 6e 6f 74 20   guaranteed not 
2f760 74 6f 20 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a  to contain it,.*
2f770 2a 20 28 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d  * (b) when P4==-
2f780 31 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e 65  1 there is no ne
2f790 65 64 20 74 6f 20 69 6e 73 65 72 74 20 74 68 65  ed to insert the
2f7a0 20 76 61 6c 75 65 2c 20 61 73 20 69 74 20 77 69   value, as it wi
2f7b0 6c 6c 0a 2a 2a 20 6e 65 76 65 72 20 62 65 20 74  ll.** never be t
2f7c0 65 73 74 65 64 20 66 6f 72 2c 20 61 6e 64 20 28  ested for, and (
2f7d0 63 29 20 77 68 65 6e 20 61 20 76 61 6c 75 65 20  c) when a value 
2f7e0 74 68 61 74 20 69 73 20 70 61 72 74 20 6f 66 20  that is part of 
2f7f0 73 65 74 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65  set X is.** inse
2f800 72 74 65 64 2c 20 74 68 65 72 65 20 69 73 20 6e  rted, there is n
2f810 6f 20 6e 65 65 64 20 74 6f 20 73 65 61 72 63 68  o need to search
2f820 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20 73   to see if the s
2f830 61 6d 65 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a  ame value was.**
2f840 20 70 72 65 76 69 6f 75 73 6c 79 20 69 6e 73 65   previously inse
2f850 72 74 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  rted as part of 
2f860 73 65 74 20 58 20 28 6f 6e 6c 79 20 69 66 20 69  set X (only if i
2f870 74 20 77 61 73 20 70 72 65 76 69 6f 75 73 6c 79  t was previously
2f880 0a 2a 2a 20 69 6e 73 65 72 74 65 64 20 61 73 20  .** inserted as 
2f890 70 61 72 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68  part of some oth
2f8a0 65 72 20 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65  er set)..*/.case
2f8b0 20 4f 50 5f 52 6f 77 53 65 74 54 65 73 74 3a 20   OP_RowSetTest: 
2f8c0 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
2f8d0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
2f8e0 6e 31 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  n1, in3 */.  int
2f8f0 20 69 53 65 74 3b 0a 20 20 69 6e 74 20 65 78 69   iSet;.  int exi
2f900 73 74 73 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26  sts;..  pIn1 = &
2f910 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
2f920 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
2f930 70 2d 3e 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d  p->p3];.  iSet =
2f940 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73   pOp->p4.i;.  as
2f950 73 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67  sert( pIn3->flag
2f960 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20  s&MEM_Int );..  
2f970 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 61  /* If there is a
2f980 6e 79 74 68 69 6e 67 20 6f 74 68 65 72 20 74 68  nything other th
2f990 61 6e 20 61 20 72 6f 77 73 65 74 20 6f 62 6a 65  an a rowset obje
2f9a0 63 74 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c  ct in memory cel
2f9b0 6c 20 50 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74  l P1,.  ** delet
2f9c0 65 20 69 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69  e it now and ini
2f9d0 74 69 61 6c 69 7a 65 20 50 31 20 77 69 74 68 20  tialize P1 with 
2f9e0 61 6e 20 65 6d 70 74 79 20 72 6f 77 73 65 74 0a  an empty rowset.
2f9f0 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 49 6e 31    */.  if( (pIn1
2fa00 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f  ->flags & MEM_Ro
2fa10 77 53 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  wSet)==0 ){.    
2fa20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
2fa30 74 52 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20  tRowSet(pIn1);. 
2fa40 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c     if( (pIn1->fl
2fa50 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74  ags & MEM_RowSet
2fa60 29 3d 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d  )==0 ) goto no_m
2fa70 65 6d 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  em;.  }..  asser
2fa80 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d  t( pOp->p4type==
2fa90 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 61 73  P4_INT32 );.  as
2faa0 73 65 72 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c  sert( iSet==-1 |
2fab0 7c 20 69 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69  | iSet>=0 );.  i
2fac0 66 28 20 69 53 65 74 20 29 7b 0a 20 20 20 20 65  f( iSet ){.    e
2fad0 78 69 73 74 73 20 3d 20 73 71 6c 69 74 65 33 52  xists = sqlite3R
2fae0 6f 77 53 65 74 54 65 73 74 28 70 49 6e 31 2d 3e  owSetTest(pIn1->
2faf0 75 2e 70 52 6f 77 53 65 74 2c 20 69 53 65 74 2c  u.pRowSet, iSet,
2fb00 20 70 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20   pIn3->u.i);.   
2fb10 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
2fb20 28 65 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20  (exists!=0,2);. 
2fb30 20 20 20 69 66 28 20 65 78 69 73 74 73 20 29 20     if( exists ) 
2fb40 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
2fb50 0a 20 20 7d 0a 20 20 69 66 28 20 69 53 65 74 3e  .  }.  if( iSet>
2fb60 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  =0 ){.    sqlite
2fb70 33 52 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49  3RowSetInsert(pI
2fb80 6e 31 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70  n1->u.pRowSet, p
2fb90 49 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20  In3->u.i);.  }. 
2fba0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e   break;.}...#ifn
2fbb0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2fbc0 54 52 49 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f  TRIGGER../* Opco
2fbd0 64 65 3a 20 50 72 6f 67 72 61 6d 20 50 31 20 50  de: Program P1 P
2fbe0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a  2 P3 P4 P5.**.**
2fbf0 20 45 78 65 63 75 74 65 20 74 68 65 20 74 72 69   Execute the tri
2fc00 67 67 65 72 20 70 72 6f 67 72 61 6d 20 70 61 73  gger program pas
2fc10 73 65 64 20 61 73 20 50 34 20 28 74 79 70 65 20  sed as P4 (type 
2fc20 50 34 5f 53 55 42 50 52 4f 47 52 41 4d 29 2e 20  P4_SUBPROGRAM). 
2fc30 0a 2a 2a 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69  .**.** P1 contai
2fc40 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  ns the address o
2fc50 66 20 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c  f the memory cel
2fc60 6c 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  l that contains 
2fc70 74 68 65 20 66 69 72 73 74 20 6d 65 6d 6f 72 79  the first memory
2fc80 20 0a 2a 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20   .** cell in an 
2fc90 61 72 72 61 79 20 6f 66 20 76 61 6c 75 65 73 20  array of values 
2fca0 75 73 65 64 20 61 73 20 61 72 67 75 6d 65 6e 74  used as argument
2fcb0 73 20 74 6f 20 74 68 65 20 73 75 62 2d 70 72 6f  s to the sub-pro
2fcc0 67 72 61 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e  gram. P2 .** con
2fcd0 74 61 69 6e 73 20 74 68 65 20 61 64 64 72 65 73  tains the addres
2fce0 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20  s to jump to if 
2fcf0 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
2fd00 74 68 72 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45  throws an IGNORE
2fd10 20 0a 2a 2a 20 65 78 63 65 70 74 69 6f 6e 20 75   .** exception u
2fd20 73 69 6e 67 20 74 68 65 20 52 41 49 53 45 28 29  sing the RAISE()
2fd30 20 66 75 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73   function. Regis
2fd40 74 65 72 20 50 33 20 63 6f 6e 74 61 69 6e 73 20  ter P3 contains 
2fd50 74 68 65 20 61 64 64 72 65 73 73 20 0a 2a 2a 20  the address .** 
2fd60 6f 66 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  of a memory cell
2fd70 20 69 6e 20 74 68 69 73 20 28 74 68 65 20 70 61   in this (the pa
2fd80 72 65 6e 74 29 20 56 4d 20 74 68 61 74 20 69 73  rent) VM that is
2fd90 20 75 73 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74   used to allocat
2fda0 65 20 74 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79  e the .** memory
2fdb0 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65   required by the
2fdc0 20 73 75 62 2d 76 64 62 65 20 61 74 20 72 75 6e   sub-vdbe at run
2fdd0 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  time..**.** P4 i
2fde0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  s a pointer to t
2fdf0 68 65 20 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67  he VM containing
2fe00 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
2fe10 67 72 61 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50  gram..**.** If P
2fe20 35 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  5 is non-zero, t
2fe30 68 65 6e 20 72 65 63 75 72 73 69 76 65 20 70 72  hen recursive pr
2fe40 6f 67 72 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e  ogram invocation
2fe50 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a   is enabled..*/.
2fe60 63 61 73 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a  case OP_Program:
2fe70 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
2fe80 70 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b  p */.  int nMem;
2fe90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
2fea0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
2feb0 72 79 20 72 65 67 69 73 74 65 72 73 20 66 6f 72  ry registers for
2fec0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2fed0 20 20 69 6e 74 20 6e 42 79 74 65 3b 20 20 20 20    int nByte;    
2fee0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 79 74            /* Byt
2fef0 65 73 20 6f 66 20 72 75 6e 74 69 6d 65 20 73 70  es of runtime sp
2ff00 61 63 65 20 72 65 71 75 69 72 65 64 20 66 6f 72  ace required for
2ff10 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a   sub-program */.
2ff20 20 20 4d 65 6d 20 2a 70 52 74 3b 20 20 20 20 20    Mem *pRt;     
2ff30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
2ff40 69 73 74 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74  ister to allocat
2ff50 65 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65 20  e runtime space 
2ff60 2a 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20  */.  Mem *pMem; 
2ff70 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ff80 55 73 65 64 20 74 6f 20 69 74 65 72 61 74 65 20  Used to iterate 
2ff90 74 68 72 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63  through memory c
2ffa0 65 6c 6c 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ells */.  Mem *p
2ffb0 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
2ffc0 20 20 2f 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79    /* Last memory
2ffd0 20 63 65 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72   cell in new arr
2ffe0 61 79 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  ay */.  VdbeFram
2fff0 65 20 2a 70 46 72 61 6d 65 3b 20 20 20 20 20 20  e *pFrame;      
30000 2f 2a 20 4e 65 77 20 76 64 62 65 20 66 72 61 6d  /* New vdbe fram
30010 65 20 74 6f 20 65 78 65 63 75 74 65 20 69 6e 20  e to execute in 
30020 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
30030 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
30040 53 75 62 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65  Sub-program to e
30050 78 65 63 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64  xecute */.  void
30060 20 2a 74 3b 20 20 20 20 20 20 20 20 20 20 20 20   *t;            
30070 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65      /* Token ide
30080 6e 74 69 66 79 69 6e 67 20 74 72 69 67 67 65 72  ntifying trigger
30090 20 2a 2f 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20   */..  pProgram 
300a0 3d 20 70 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72  = pOp->p4.pProgr
300b0 61 6d 3b 0a 20 20 70 52 74 20 3d 20 26 61 4d 65  am;.  pRt = &aMe
300c0 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73  m[pOp->p3];.  as
300d0 73 65 72 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e  sert( pProgram->
300e0 6e 4f 70 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a  nOp>0 );.  .  /*
300f0 20 49 66 20 74 68 65 20 70 35 20 66 6c 61 67 20   If the p5 flag 
30100 69 73 20 63 6c 65 61 72 2c 20 74 68 65 6e 20 72  is clear, then r
30110 65 63 75 72 73 69 76 65 20 69 6e 76 6f 63 61 74  ecursive invocat
30120 69 6f 6e 20 6f 66 20 74 72 69 67 67 65 72 73 20  ion of triggers 
30130 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
30140 64 20 66 6f 72 20 62 61 63 6b 77 61 72 64 73 20  d for backwards 
30150 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 28 70  compatibility (p
30160 35 20 69 73 20 73 65 74 20 69 66 20 74 68 69 73  5 is set if this
30170 20 73 75 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a   sub-program.  *
30180 2a 20 69 73 20 72 65 61 6c 6c 79 20 61 20 74 72  * is really a tr
30190 69 67 67 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72  igger, not a for
301a0 65 69 67 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c  eign key action,
301b0 20 61 6e 64 20 74 68 65 20 66 6c 61 67 20 73 65   and the flag se
301c0 74 0a 20 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72  t.  ** and clear
301d0 65 64 20 62 79 20 74 68 65 20 22 50 52 41 47 4d  ed by the "PRAGM
301e0 41 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  A recursive_trig
301f0 67 65 72 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73  gers" command is
30200 20 63 6c 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20   clear)..  ** . 
30210 20 2a 2a 20 49 74 20 69 73 20 72 65 63 75 72 73   ** It is recurs
30220 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f  ive invocation o
30230 66 20 74 72 69 67 67 65 72 73 2c 20 61 74 20 74  f triggers, at t
30240 68 65 20 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68  he SQL level, th
30250 61 74 20 69 73 20 0a 20 20 2a 2a 20 64 69 73 61  at is .  ** disa
30260 62 6c 65 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61  bled. In some ca
30270 73 65 73 20 61 20 73 69 6e 67 6c 65 20 74 72 69  ses a single tri
30280 67 67 65 72 20 6d 61 79 20 67 65 6e 65 72 61 74  gger may generat
30290 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  e more than one 
302a0 0a 20 20 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d  .  ** SubProgram
302b0 20 28 69 66 20 74 68 65 20 74 72 69 67 67 65 72   (if the trigger
302c0 20 6d 61 79 20 62 65 20 65 78 65 63 75 74 65 64   may be executed
302d0 20 77 69 74 68 20 6d 6f 72 65 20 74 68 61 6e 20   with more than 
302e0 6f 6e 65 20 64 69 66 66 65 72 65 6e 74 20 0a 20  one different . 
302f0 20 2a 2a 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20   ** ON CONFLICT 
30300 61 6c 67 6f 72 69 74 68 6d 29 2e 20 53 75 62 50  algorithm). SubP
30310 72 6f 67 72 61 6d 20 73 74 72 75 63 74 75 72 65  rogram structure
30320 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
30330 68 20 61 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20  h a.  ** single 
30340 74 72 69 67 67 65 72 20 61 6c 6c 20 68 61 76 65  trigger all have
30350 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75 65 20   the same value 
30360 66 6f 72 20 74 68 65 20 53 75 62 50 72 6f 67 72  for the SubProgr
30370 61 6d 2e 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76  am.token .  ** v
30380 61 72 69 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69  ariable.  */.  i
30390 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20  f( pOp->p5 ){.  
303a0 20 20 74 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e    t = pProgram->
303b0 74 6f 6b 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70  token;.    for(p
303c0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
303d0 20 70 46 72 61 6d 65 20 26 26 20 70 46 72 61 6d   pFrame && pFram
303e0 65 2d 3e 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72  e->token!=t; pFr
303f0 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72  ame=pFrame->pPar
30400 65 6e 74 29 3b 0a 20 20 20 20 69 66 28 20 70 46  ent);.    if( pF
30410 72 61 6d 65 20 29 20 62 72 65 61 6b 3b 0a 20 20  rame ) break;.  
30420 7d 0a 0a 20 20 69 66 28 20 70 2d 3e 6e 46 72 61  }..  if( p->nFra
30430 6d 65 3e 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53  me>=db->aLimit[S
30440 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47  QLITE_LIMIT_TRIG
30450 47 45 52 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20  GER_DEPTH] ){.  
30460 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 45 52    rc = SQLITE_ER
30470 52 4f 52 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ROR;.    sqlite3
30480 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 74 6f  VdbeError(p, "to
30490 6f 20 6d 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66  o many levels of
304a0 20 74 72 69 67 67 65 72 20 72 65 63 75 72 73 69   trigger recursi
304b0 6f 6e 22 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61  on");.    goto a
304c0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
304d0 72 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67  r;.  }..  /* Reg
304e0 69 73 74 65 72 20 70 52 74 20 69 73 20 75 73 65  ister pRt is use
304f0 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 6d  d to store the m
30500 65 6d 6f 72 79 20 72 65 71 75 69 72 65 64 20 74  emory required t
30510 6f 20 73 61 76 65 20 74 68 65 20 73 74 61 74 65  o save the state
30520 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 63 75 72  .  ** of the cur
30530 72 65 6e 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e  rent program, an
30540 64 20 74 68 65 20 6d 65 6d 6f 72 79 20 72 65 71  d the memory req
30550 75 69 72 65 64 20 61 74 20 72 75 6e 74 69 6d 65  uired at runtime
30560 20 74 6f 20 65 78 65 63 75 74 65 0a 20 20 2a 2a   to execute.  **
30570 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72 6f   the trigger pro
30580 67 72 61 6d 2e 20 49 66 20 74 68 69 73 20 74 72  gram. If this tr
30590 69 67 67 65 72 20 68 61 73 20 62 65 65 6e 20 66  igger has been f
305a0 69 72 65 64 20 62 65 66 6f 72 65 2c 20 74 68 65  ired before, the
305b0 6e 20 70 52 74 20 0a 20 20 2a 2a 20 69 73 20 61  n pRt .  ** is a
305c0 6c 72 65 61 64 79 20 61 6c 6c 6f 63 61 74 65 64  lready allocated
305d0 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 69 74 20  . Otherwise, it 
305e0 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69  must be initiali
305f0 7a 65 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28  zed.  */.  if( (
30600 70 52 74 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46  pRt->flags&MEM_F
30610 72 61 6d 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20  rame)==0 ){.    
30620 2f 2a 20 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d  /* SubProgram.nM
30630 65 6d 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  em is set to the
30640 20 6e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72   number of memor
30650 79 20 63 65 6c 6c 73 20 75 73 65 64 20 62 79 20  y cells used by 
30660 74 68 65 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67  the .    ** prog
30670 72 61 6d 20 73 74 6f 72 65 64 20 69 6e 20 53 75  ram stored in Su
30680 62 50 72 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73  bProgram.aOp. As
30690 20 77 65 6c 6c 20 61 73 20 74 68 65 73 65 2c 20   well as these, 
306a0 6f 6e 65 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a  one memory.    *
306b0 2a 20 63 65 6c 6c 20 69 73 20 72 65 71 75 69 72  * cell is requir
306c0 65 64 20 66 6f 72 20 65 61 63 68 20 63 75 72 73  ed for each curs
306d0 6f 72 20 75 73 65 64 20 62 79 20 74 68 65 20 70  or used by the p
306e0 72 6f 67 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61  rogram. Set loca
306f0 6c 0a 20 20 20 20 2a 2a 20 76 61 72 69 61 62 6c  l.    ** variabl
30700 65 20 6e 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65  e nMem (and late
30710 72 2c 20 56 64 62 65 46 72 61 6d 65 2e 6e 43 68  r, VdbeFrame.nCh
30720 69 6c 64 4d 65 6d 29 20 74 6f 20 74 68 69 73 20  ildMem) to this 
30730 76 61 6c 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20  value..    */.  
30740 20 20 6e 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61    nMem = pProgra
30750 6d 2d 3e 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72  m->nMem + pProgr
30760 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73  am->nCsr;.    as
30770 73 65 72 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a  sert( nMem>0 );.
30780 20 20 20 20 69 66 28 20 70 50 72 6f 67 72 61 6d      if( pProgram
30790 2d 3e 6e 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d  ->nCsr==0 ) nMem
307a0 2b 2b 3b 0a 20 20 20 20 6e 42 79 74 65 20 3d 20  ++;.    nByte = 
307b0 52 4f 55 4e 44 38 28 73 69 7a 65 6f 66 28 56 64  ROUND8(sizeof(Vd
307c0 62 65 46 72 61 6d 65 29 29 0a 20 20 20 20 20 20  beFrame)).      
307d0 20 20 20 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a          + nMem *
307e0 20 73 69 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20   sizeof(Mem).   
307f0 20 20 20 20 20 20 20 20 20 20 20 2b 20 70 50 72             + pPr
30800 6f 67 72 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69  ogram->nCsr * si
30810 7a 65 6f 66 28 56 64 62 65 43 75 72 73 6f 72 20  zeof(VdbeCursor 
30820 2a 29 3b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  *);.    pFrame =
30830 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
30840 5a 65 72 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b  Zero(db, nByte);
30850 0a 20 20 20 20 69 66 28 20 21 70 46 72 61 6d 65  .    if( !pFrame
30860 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e   ){.      goto n
30870 6f 5f 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20  o_mem;.    }.   
30880 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52   sqlite3VdbeMemR
30890 65 6c 65 61 73 65 28 70 52 74 29 3b 0a 20 20 20  elease(pRt);.   
308a0 20 70 52 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45   pRt->flags = ME
308b0 4d 5f 46 72 61 6d 65 3b 0a 20 20 20 20 70 52 74  M_Frame;.    pRt
308c0 2d 3e 75 2e 70 46 72 61 6d 65 20 3d 20 70 46 72  ->u.pFrame = pFr
308d0 61 6d 65 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65  ame;..    pFrame
308e0 2d 3e 76 20 3d 20 70 3b 0a 20 20 20 20 70 46 72  ->v = p;.    pFr
308f0 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d  ame->nChildMem =
30900 20 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d   nMem;.    pFram
30910 65 2d 3e 6e 43 68 69 6c 64 43 73 72 20 3d 20 70  e->nChildCsr = p
30920 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20  Program->nCsr;. 
30930 20 20 20 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20     pFrame->pc = 
30940 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70 29  (int)(pOp - aOp)
30950 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d  ;.    pFrame->aM
30960 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20  em = p->aMem;.  
30970 20 20 70 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d    pFrame->nMem =
30980 20 70 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46   p->nMem;.    pF
30990 72 61 6d 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d  rame->apCsr = p-
309a0 3e 61 70 43 73 72 3b 0a 20 20 20 20 70 46 72 61  >apCsr;.    pFra
309b0 6d 65 2d 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d  me->nCursor = p-
309c0 3e 6e 43 75 72 73 6f 72 3b 0a 20 20 20 20 70 46  >nCursor;.    pF
309d0 72 61 6d 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61  rame->aOp = p->a
309e0 4f 70 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  Op;.    pFrame->
309f0 6e 4f 70 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20  nOp = p->nOp;.  
30a00 20 20 70 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20    pFrame->token 
30a10 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65  = pProgram->toke
30a20 6e 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  n;.#ifdef SQLITE
30a30 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41  _ENABLE_STMT_SCA
30a40 4e 53 54 41 54 55 53 0a 20 20 20 20 70 46 72 61  NSTATUS.    pFra
30a50 6d 65 2d 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e  me->anExec = p->
30a60 61 6e 45 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a  anExec;.#endif..
30a70 20 20 20 20 70 45 6e 64 20 3d 20 26 56 64 62 65      pEnd = &Vdbe
30a80 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
30a90 5b 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  [pFrame->nChildM
30aa0 65 6d 5d 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65  em];.    for(pMe
30ab0 6d 3d 56 64 62 65 46 72 61 6d 65 4d 65 6d 28 70  m=VdbeFrameMem(p
30ac0 46 72 61 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45  Frame); pMem!=pE
30ad0 6e 64 3b 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20  nd; pMem++){.   
30ae0 20 20 20 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d     pMem->flags =
30af0 20 4d 45 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a   MEM_Undefined;.
30b00 20 20 20 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d        pMem->db =
30b10 20 64 62 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c   db;.    }.  }el
30b20 73 65 7b 0a 20 20 20 20 70 46 72 61 6d 65 20 3d  se{.    pFrame =
30b30 20 70 52 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a   pRt->u.pFrame;.
30b40 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72 6f      assert( pPro
30b50 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67  gram->nMem+pProg
30b60 72 61 6d 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d  ram->nCsr==pFram
30b70 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20  e->nChildMem .  
30b80 20 20 20 20 20 20 7c 7c 20 28 70 50 72 6f 67 72        || (pProgr
30b90 61 6d 2d 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70  am->nCsr==0 && p
30ba0 50 72 6f 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d  Program->nMem+1=
30bb0 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d  =pFrame->nChildM
30bc0 65 6d 29 20 29 3b 0a 20 20 20 20 61 73 73 65 72  em) );.    asser
30bd0 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73  t( pProgram->nCs
30be0 72 3d 3d 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c  r==pFrame->nChil
30bf0 64 43 73 72 20 29 3b 0a 20 20 20 20 61 73 73 65  dCsr );.    asse
30c00 72 74 28 20 28 69 6e 74 29 28 70 4f 70 20 2d 20  rt( (int)(pOp - 
30c10 61 4f 70 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63  aOp)==pFrame->pc
30c20 20 29 3b 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46   );.  }..  p->nF
30c30 72 61 6d 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65  rame++;.  pFrame
30c40 2d 3e 70 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70  ->pParent = p->p
30c50 46 72 61 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d  Frame;.  pFrame-
30c60 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20 64 62 2d  >lastRowid = db-
30c70 3e 6c 61 73 74 52 6f 77 69 64 3b 0a 20 20 70 46  >lastRowid;.  pF
30c80 72 61 6d 65 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  rame->nChange = 
30c90 70 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 70 46  p->nChange;.  pF
30ca0 72 61 6d 65 2d 3e 6e 44 62 43 68 61 6e 67 65 20  rame->nDbChange 
30cb0 3d 20 70 2d 3e 64 62 2d 3e 6e 43 68 61 6e 67 65  = p->db->nChange
30cc0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 46 72 61  ;.  assert( pFra
30cd0 6d 65 2d 3e 70 41 75 78 44 61 74 61 3d 3d 30 20  me->pAuxData==0 
30ce0 29 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70 41 75  );.  pFrame->pAu
30cf0 78 44 61 74 61 20 3d 20 70 2d 3e 70 41 75 78 44  xData = p->pAuxD
30d00 61 74 61 3b 0a 20 20 70 2d 3e 70 41 75 78 44 61  ata;.  p->pAuxDa
30d10 74 61 20 3d 20 30 3b 0a 20 20 70 2d 3e 6e 43 68  ta = 0;.  p->nCh
30d20 61 6e 67 65 20 3d 20 30 3b 0a 20 20 70 2d 3e 70  ange = 0;.  p->p
30d30 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65 3b 0a  Frame = pFrame;.
30d40 20 20 70 2d 3e 61 4d 65 6d 20 3d 20 61 4d 65 6d    p->aMem = aMem
30d50 20 3d 20 56 64 62 65 46 72 61 6d 65 4d 65 6d 28   = VdbeFrameMem(
30d60 70 46 72 61 6d 65 29 3b 0a 20 20 70 2d 3e 6e 4d  pFrame);.  p->nM
30d70 65 6d 20 3d 20 70 46 72 61 6d 65 2d 3e 6e 43 68  em = pFrame->nCh
30d80 69 6c 64 4d 65 6d 3b 0a 20 20 70 2d 3e 6e 43 75  ildMem;.  p->nCu
30d90 72 73 6f 72 20 3d 20 28 75 31 36 29 70 46 72 61  rsor = (u16)pFra
30da0 6d 65 2d 3e 6e 43 68 69 6c 64 43 73 72 3b 0a 20  me->nChildCsr;. 
30db0 20 70 2d 3e 61 70 43 73 72 20 3d 20 28 56 64 62   p->apCsr = (Vdb
30dc0 65 43 75 72 73 6f 72 20 2a 2a 29 26 61 4d 65 6d  eCursor **)&aMem
30dd0 5b 70 2d 3e 6e 4d 65 6d 5d 3b 0a 20 20 70 2d 3e  [p->nMem];.  p->
30de0 61 4f 70 20 3d 20 61 4f 70 20 3d 20 70 50 72 6f  aOp = aOp = pPro
30df0 67 72 61 6d 2d 3e 61 4f 70 3b 0a 20 20 70 2d 3e  gram->aOp;.  p->
30e00 6e 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  nOp = pProgram->
30e10 6e 4f 70 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nOp;.#ifdef SQLI
30e20 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
30e30 43 41 4e 53 54 41 54 55 53 0a 20 20 70 2d 3e 61  CANSTATUS.  p->a
30e40 6e 45 78 65 63 20 3d 20 30 3b 0a 23 65 6e 64 69  nExec = 0;.#endi
30e50 66 0a 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b 2d  f.  pOp = &aOp[-
30e60 31 5d 3b 0a 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  1];..  break;.}.
30e70 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 72 61  ./* Opcode: Para
30e80 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
30e90 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
30ea0 69 73 20 6f 6e 6c 79 20 65 76 65 72 20 70 72 65  is only ever pre
30eb0 73 65 6e 74 20 69 6e 20 73 75 62 2d 70 72 6f 67  sent in sub-prog
30ec0 72 61 6d 73 20 63 61 6c 6c 65 64 20 76 69 61 20  rams called via 
30ed0 74 68 65 20 0a 2a 2a 20 4f 50 5f 50 72 6f 67 72  the .** OP_Progr
30ee0 61 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  am instruction. 
30ef0 43 6f 70 79 20 61 20 76 61 6c 75 65 20 63 75 72  Copy a value cur
30f00 72 65 6e 74 6c 79 20 73 74 6f 72 65 64 20 69 6e  rently stored in
30f10 20 61 20 6d 65 6d 6f 72 79 20 0a 2a 2a 20 63 65   a memory .** ce
30f20 6c 6c 20 6f 66 20 74 68 65 20 63 61 6c 6c 69 6e  ll of the callin
30f30 67 20 28 70 61 72 65 6e 74 29 20 66 72 61 6d 65  g (parent) frame
30f40 20 74 6f 20 63 65 6c 6c 20 50 32 20 69 6e 20 74   to cell P2 in t
30f50 68 65 20 63 75 72 72 65 6e 74 20 66 72 61 6d 65  he current frame
30f60 73 20 0a 2a 2a 20 61 64 64 72 65 73 73 20 73 70  s .** address sp
30f70 61 63 65 2e 20 54 68 69 73 20 69 73 20 75 73 65  ace. This is use
30f80 64 20 62 79 20 74 72 69 67 67 65 72 20 70 72 6f  d by trigger pro
30f90 67 72 61 6d 73 20 74 6f 20 61 63 63 65 73 73 20  grams to access 
30fa0 74 68 65 20 6e 65 77 2e 2a 20 0a 2a 2a 20 61 6e  the new.* .** an
30fb0 64 20 6f 6c 64 2e 2a 20 76 61 6c 75 65 73 2e 0a  d old.* values..
30fc0 2a 2a 0a 2a 2a 20 54 68 65 20 61 64 64 72 65 73  **.** The addres
30fd0 73 20 6f 66 20 74 68 65 20 63 65 6c 6c 20 69 6e  s of the cell in
30fe0 20 74 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d   the parent fram
30ff0 65 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20  e is determined 
31000 62 79 20 61 64 64 69 6e 67 0a 2a 2a 20 74 68 65  by adding.** the
31010 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
31020 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31030 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 31   value of the P1
31040 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
31050 0a 2a 2a 20 63 61 6c 6c 69 6e 67 20 4f 50 5f 50  .** calling OP_P
31060 72 6f 67 72 61 6d 20 69 6e 73 74 72 75 63 74 69  rogram instructi
31070 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 50  on..*/.case OP_P
31080 61 72 61 6d 3a 20 7b 20 20 20 20 20 20 20 20 20  aram: {         
31090 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56    /* out2 */.  V
310a0 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
310b0 3b 0a 20 20 4d 65 6d 20 2a 70 49 6e 3b 0a 20 20  ;.  Mem *pIn;.  
310c0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
310d0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
310e0 20 70 46 72 61 6d 65 20 3d 20 70 2d 3e 70 46 72   pFrame = p->pFr
310f0 61 6d 65 3b 0a 20 20 70 49 6e 20 3d 20 26 70 46  ame;.  pIn = &pF
31100 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
31110 70 31 20 2b 20 70 46 72 61 6d 65 2d 3e 61 4f 70  p1 + pFrame->aOp
31120 5b 70 46 72 61 6d 65 2d 3e 70 63 5d 2e 70 31 5d  [pFrame->pc].p1]
31130 3b 20 20 20 0a 20 20 73 71 6c 69 74 65 33 56 64  ;   .  sqlite3Vd
31140 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
31150 28 70 4f 75 74 2c 20 70 49 6e 2c 20 4d 45 4d 5f  (pOut, pIn, MEM_
31160 45 70 68 65 6d 29 3b 0a 20 20 62 72 65 61 6b 3b  Ephem);.  break;
31170 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 23 69  .}..#endif /* #i
31180 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
31190 54 5f 54 52 49 47 47 45 52 20 2a 2f 0a 0a 23 69  T_TRIGGER */..#i
311a0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
311b0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 2f 2a  T_FOREIGN_KEY./*
311c0 20 4f 70 63 6f 64 65 3a 20 46 6b 43 6f 75 6e 74   Opcode: FkCount
311d0 65 72 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  er P1 P2 * * *.*
311e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 66 6b 63 74  * Synopsis: fkct
311f0 72 5b 50 31 5d 2b 3d 50 32 0a 2a 2a 0a 2a 2a 20  r[P1]+=P2.**.** 
31200 49 6e 63 72 65 6d 65 6e 74 20 61 20 22 63 6f 6e  Increment a "con
31210 73 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 22  straint counter"
31220 20 62 79 20 50 32 20 28 50 32 20 6d 61 79 20 62   by P2 (P2 may b
31230 65 20 6e 65 67 61 74 69 76 65 20 6f 72 20 70 6f  e negative or po
31240 73 69 74 69 76 65 29 2e 0a 2a 2a 20 49 66 20 50  sitive)..** If P
31250 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74  1 is non-zero, t
31260 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 73  he database cons
31270 74 72 61 69 6e 74 20 63 6f 75 6e 74 65 72 20 69  traint counter i
31280 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 0a 2a  s incremented .*
31290 2a 20 28 64 65 66 65 72 72 65 64 20 66 6f 72 65  * (deferred fore
312a0 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
312b0 6e 74 73 29 2e 20 4f 74 68 65 72 77 69 73 65 2c  nts). Otherwise,
312c0 20 69 66 20 50 31 20 69 73 20 7a 65 72 6f 2c 20   if P1 is zero, 
312d0 74 68 65 20 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  the .** statemen
312e0 74 20 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63  t counter is inc
312f0 72 65 6d 65 6e 74 65 64 20 28 69 6d 6d 65 64 69  remented (immedi
31300 61 74 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  ate foreign key 
31310 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 0a 2a 2f  constraints)..*/
31320 0a 63 61 73 65 20 4f 50 5f 46 6b 43 6f 75 6e 74  .case OP_FkCount
31330 65 72 3a 20 7b 0a 20 20 69 66 28 20 64 62 2d 3e  er: {.  if( db->
31340 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 44  flags & SQLITE_D
31350 65 66 65 72 46 4b 73 20 29 7b 0a 20 20 20 20 64  eferFKs ){.    d
31360 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43  b->nDeferredImmC
31370 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a  ons += pOp->p2;.
31380 20 20 7d 65 6c 73 65 20 69 66 28 20 70 4f 70 2d    }else if( pOp-
31390 3e 70 31 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e  >p1 ){.    db->n
313a0 44 65 66 65 72 72 65 64 43 6f 6e 73 20 2b 3d 20  DeferredCons += 
313b0 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
313c0 7b 0a 20 20 20 20 70 2d 3e 6e 46 6b 43 6f 6e 73  {.    p->nFkCons
313d0 74 72 61 69 6e 74 20 2b 3d 20 70 4f 70 2d 3e 70  traint += pOp->p
313e0 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  2;.  }.  break;.
313f0 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 46 6b  }../* Opcode: Fk
31400 49 66 5a 65 72 6f 20 50 31 20 50 32 20 2a 20 2a  IfZero P1 P2 * *
31410 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31420 69 66 20 66 6b 63 74 72 5b 50 31 5d 3d 3d 30 20  if fkctr[P1]==0 
31430 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68  goto P2.**.** Th
31440 69 73 20 6f 70 63 6f 64 65 20 74 65 73 74 73 20  is opcode tests 
31450 69 66 20 61 20 66 6f 72 65 69 67 6e 20 6b 65 79  if a foreign key
31460 20 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e   constraint-coun
31470 74 65 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79  ter is currently
31480 20 7a 65 72 6f 2e 0a 2a 2a 20 49 66 20 73 6f 2c   zero..** If so,
31490 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
314a0 74 69 6f 6e 20 50 32 2e 20 4f 74 68 65 72 77 69  tion P2. Otherwi
314b0 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68  se, fall through
314c0 20 74 6f 20 74 68 65 20 6e 65 78 74 20 0a 2a 2a   to the next .**
314d0 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
314e0 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f 6e  .** If P1 is non
314f0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65 20  -zero, then the 
31500 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69 66  jump is taken if
31510 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f   the database co
31520 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74 65 72  nstraint-counter
31530 0a 2a 2a 20 69 73 20 7a 65 72 6f 20 28 74 68 65  .** is zero (the
31540 20 6f 6e 65 20 74 68 61 74 20 63 6f 75 6e 74 73   one that counts
31550 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
31560 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 73 29  aint violations)
31570 2e 20 49 66 20 50 31 20 69 73 0a 2a 2a 20 7a 65  . If P1 is.** ze
31580 72 6f 2c 20 74 68 65 20 6a 75 6d 70 20 69 73 20  ro, the jump is 
31590 74 61 6b 65 6e 20 69 66 20 74 68 65 20 73 74 61  taken if the sta
315a0 74 65 6d 65 6e 74 20 63 6f 6e 73 74 72 61 69 6e  tement constrain
315b0 74 2d 63 6f 75 6e 74 65 72 20 69 73 20 7a 65 72  t-counter is zer
315c0 6f 0a 2a 2a 20 28 69 6d 6d 65 64 69 61 74 65 20  o.** (immediate 
315d0 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73  foreign key cons
315e0 74 72 61 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e  traint violation
315f0 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46  s)..*/.case OP_F
31600 6b 49 66 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20  kIfZero: {      
31610 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
31620 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a 20  if( pOp->p1 ){. 
31630 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
31640 65 6e 28 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  en(db->nDeferred
31650 43 6f 6e 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e  Cons==0 && db->n
31660 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d  DeferredImmCons=
31670 3d 30 2c 20 32 29 3b 0a 20 20 20 20 69 66 28 20  =0, 2);.    if( 
31680 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e  db->nDeferredCon
31690 73 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66  s==0 && db->nDef
316a0 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 20  erredImmCons==0 
316b0 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
316c0 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  2;.  }else{.    
316d0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
316e0 70 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74  p->nFkConstraint
316f0 3d 3d 30 20 26 26 20 64 62 2d 3e 6e 44 65 66 65  ==0 && db->nDefe
31700 72 72 65 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20  rredImmCons==0, 
31710 32 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 6e  2);.    if( p->n
31720 46 6b 43 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20  FkConstraint==0 
31730 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64  && db->nDeferred
31740 49 6d 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74  ImmCons==0 ) got
31750 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
31760 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  }.  break;.}.#en
31770 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
31780 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
31790 47 4e 5f 4b 45 59 20 2a 2f 0a 0a 23 69 66 6e 64  GN_KEY */..#ifnd
317a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
317b0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2f 2a 20  UTOINCREMENT./* 
317c0 4f 70 63 6f 64 65 3a 20 4d 65 6d 4d 61 78 20 50  Opcode: MemMax P
317d0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
317e0 6e 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 6d 61  nopsis: r[P1]=ma
317f0 78 28 72 5b 50 31 5d 2c 72 5b 50 32 5d 29 0a 2a  x(r[P1],r[P2]).*
31800 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20 72 65 67  *.** P1 is a reg
31810 69 73 74 65 72 20 69 6e 20 74 68 65 20 72 6f 6f  ister in the roo
31820 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69 73 20  t frame of this 
31830 56 4d 20 28 74 68 65 20 72 6f 6f 74 20 66 72 61  VM (the root fra
31840 6d 65 20 69 73 0a 2a 2a 20 64 69 66 66 65 72 65  me is.** differe
31850 6e 74 20 66 72 6f 6d 20 74 68 65 20 63 75 72 72  nt from the curr
31860 65 6e 74 20 66 72 61 6d 65 20 69 66 20 74 68 69  ent frame if thi
31870 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  s instruction is
31880 20 62 65 69 6e 67 20 65 78 65 63 75 74 65 64 0a   being executed.
31890 2a 2a 20 77 69 74 68 69 6e 20 61 20 73 75 62 2d  ** within a sub-
318a0 70 72 6f 67 72 61 6d 29 2e 20 53 65 74 20 74 68  program). Set th
318b0 65 20 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73  e value of regis
318c0 74 65 72 20 50 31 20 74 6f 20 74 68 65 20 6d 61  ter P1 to the ma
318d0 78 69 6d 75 6d 20 6f 66 20 0a 2a 2a 20 69 74 73  ximum of .** its
318e0 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 61   current value a
318f0 6e 64 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20  nd the value in 
31900 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a  register P2..**.
31910 2a 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74  ** This instruct
31920 69 6f 6e 20 74 68 72 6f 77 73 20 61 6e 20 65 72  ion throws an er
31930 72 6f 72 20 69 66 20 74 68 65 20 6d 65 6d 6f 72  ror if the memor
31940 79 20 63 65 6c 6c 20 69 73 20 6e 6f 74 20 69 6e  y cell is not in
31950 69 74 69 61 6c 6c 79 0a 2a 2a 20 61 6e 20 69 6e  itially.** an in
31960 74 65 67 65 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f  teger..*/.case O
31970 50 5f 4d 65 6d 4d 61 78 3a 20 7b 20 20 20 20 20  P_MemMax: {     
31980 20 20 20 2f 2a 20 69 6e 32 20 2a 2f 0a 20 20 56     /* in2 */.  V
31990 64 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65  dbeFrame *pFrame
319a0 3b 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  ;.  if( p->pFram
319b0 65 20 29 7b 0a 20 20 20 20 66 6f 72 28 70 46 72  e ){.    for(pFr
319c0 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70  ame=p->pFrame; p
319d0 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 20  Frame->pParent; 
319e0 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d 3e 70  pFrame=pFrame->p
319f0 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 70 49 6e  Parent);.    pIn
31a00 31 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61 4d 65  1 = &pFrame->aMe
31a10 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 65  m[pOp->p1];.  }e
31a20 6c 73 65 7b 0a 20 20 20 20 70 49 6e 31 20 3d 20  lse{.    pIn1 = 
31a30 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  &aMem[pOp->p1];.
31a40 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 6d 65    }.  assert( me
31a50 6d 49 73 56 61 6c 69 64 28 70 49 6e 31 29 20 29  mIsValid(pIn1) )
31a60 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
31a70 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
31a80 31 29 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d  1);.  pIn2 = &aM
31a90 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73  em[pOp->p2];.  s
31aa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
31ab0 65 67 65 72 69 66 79 28 70 49 6e 32 29 3b 0a 20  egerify(pIn2);. 
31ac0 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3c 70   if( pIn1->u.i<p
31ad0 49 6e 32 2d 3e 75 2e 69 29 7b 0a 20 20 20 20 70  In2->u.i){.    p
31ae0 49 6e 31 2d 3e 75 2e 69 20 3d 20 70 49 6e 32 2d  In1->u.i = pIn2-
31af0 3e 75 2e 69 3b 0a 20 20 7d 0a 20 20 62 72 65 61  >u.i;.  }.  brea
31b00 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
31b10 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
31b20 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 0a 2f 2a 20  NCREMENT */../* 
31b30 4f 70 63 6f 64 65 3a 20 49 66 50 6f 73 20 50 31  Opcode: IfPos P1
31b40 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
31b50 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d  nopsis: if r[P1]
31b60 3e 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 3d 50  >0 then r[P1]-=P
31b70 33 2c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a  3, goto P2.**.**
31b80 20 52 65 67 69 73 74 65 72 20 50 31 20 6d 75 73   Register P1 mus
31b90 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
31ba0 65 67 65 72 2e 0a 2a 2a 20 49 66 20 74 68 65 20  eger..** If the 
31bb0 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
31bc0 72 20 50 31 20 69 73 20 31 20 6f 72 20 67 72 65  r P1 is 1 or gre
31bd0 61 74 65 72 2c 20 73 75 62 74 72 61 63 74 20 50  ater, subtract P
31be0 33 20 66 72 6f 6d 20 74 68 65 0a 2a 2a 20 76 61  3 from the.** va
31bf0 6c 75 65 20 69 6e 20 50 31 20 61 6e 64 20 6a 75  lue in P1 and ju
31c00 6d 70 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20  mp to P2..**.** 
31c10 49 66 20 74 68 65 20 69 6e 69 74 69 61 6c 20 76  If the initial v
31c20 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65 72  alue of register
31c30 20 50 31 20 69 73 20 6c 65 73 73 20 74 68 61 6e   P1 is less than
31c40 20 31 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20   1, then the.** 
31c50 76 61 6c 75 65 20 69 73 20 75 6e 63 68 61 6e 67  value is unchang
31c60 65 64 20 61 6e 64 20 63 6f 6e 74 72 6f 6c 20 70  ed and control p
31c70 61 73 73 65 73 20 74 68 72 6f 75 67 68 20 74 6f  asses through to
31c80 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
31c90 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ction..*/.case O
31ca0 50 5f 49 66 50 6f 73 3a 20 7b 20 20 20 20 20 20  P_IfPos: {      
31cb0 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a    /* jump, in1 *
31cc0 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  /.  pIn1 = &aMem
31cd0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
31ce0 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ert( pIn1->flags
31cf0 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64  &MEM_Int );.  Vd
31d00 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 70  beBranchTaken( p
31d10 49 6e 31 2d 3e 75 2e 69 3e 30 2c 20 32 29 3b 0a  In1->u.i>0, 2);.
31d20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e    if( pIn1->u.i>
31d30 30 20 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75  0 ){.    pIn1->u
31d40 2e 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  .i -= pOp->p3;. 
31d50 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
31d60 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
31d70 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .}../* Opcode: O
31d80 66 66 73 65 74 4c 69 6d 69 74 20 50 31 20 50 32  ffsetLimit P1 P2
31d90 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
31da0 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 3e 30 20  sis: if r[P1]>0 
31db0 74 68 65 6e 20 72 5b 50 32 5d 3d 72 5b 50 31 5d  then r[P2]=r[P1]
31dc0 2b 6d 61 78 28 30 2c 72 5b 50 33 5d 29 20 65 6c  +max(0,r[P3]) el
31dd0 73 65 20 72 5b 50 32 5d 3d 28 2d 31 29 0a 2a 2a  se r[P2]=(-1).**
31de0 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
31df0 70 65 72 66 6f 72 6d 73 20 61 20 63 6f 6d 6d 6f  performs a commo
31e00 6e 6c 79 20 75 73 65 64 20 63 6f 6d 70 75 74 61  nly used computa
31e10 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20  tion associated 
31e20 77 69 74 68 0a 2a 2a 20 4c 49 4d 49 54 20 61 6e  with.** LIMIT an
31e30 64 20 4f 46 46 53 45 54 20 70 72 6f 63 65 73 73  d OFFSET process
31e40 2e 20 20 72 5b 50 31 5d 20 68 6f 6c 64 73 20 74  .  r[P1] holds t
31e50 68 65 20 6c 69 6d 69 74 20 63 6f 75 6e 74 65 72  he limit counter
31e60 2e 20 20 72 5b 50 33 5d 0a 2a 2a 20 68 6f 6c 64  .  r[P3].** hold
31e70 73 20 74 68 65 20 6f 66 66 73 65 74 20 63 6f 75  s the offset cou
31e80 6e 74 65 72 2e 20 20 54 68 65 20 6f 70 63 6f 64  nter.  The opcod
31e90 65 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 63  e computes the c
31ea0 6f 6d 62 69 6e 65 64 20 76 61 6c 75 65 0a 2a 2a  ombined value.**
31eb0 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 20 61 6e   of the LIMIT an
31ec0 64 20 4f 46 46 53 45 54 20 61 6e 64 20 73 74 6f  d OFFSET and sto
31ed0 72 65 73 20 74 68 61 74 20 76 61 6c 75 65 20 69  res that value i
31ee0 6e 20 72 5b 50 32 5d 2e 20 20 54 68 65 20 72 5b  n r[P2].  The r[
31ef0 50 32 5d 0a 2a 2a 20 76 61 6c 75 65 20 63 6f 6d  P2].** value com
31f00 70 75 74 65 64 20 69 73 20 74 68 65 20 74 6f 74  puted is the tot
31f10 61 6c 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77  al number of row
31f20 73 20 74 68 61 74 20 77 69 6c 6c 20 6e 65 65 64  s that will need
31f30 20 74 6f 20 62 65 0a 2a 2a 20 76 69 73 69 74 65   to be.** visite
31f40 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 6f  d in order to co
31f50 6d 70 6c 65 74 65 20 74 68 65 20 71 75 65 72 79  mplete the query
31f60 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 72 5b 50 33 5d  ..**.** If r[P3]
31f70 20 69 73 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61   is zero or nega
31f80 74 69 76 65 2c 20 74 68 61 74 20 6d 65 61 6e 73  tive, that means
31f90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4f 46 46   there is no OFF
31fa0 53 45 54 0a 2a 2a 20 61 6e 64 20 72 5b 50 32 5d  SET.** and r[P2]
31fb0 20 69 73 20 73 65 74 20 74 6f 20 62 65 20 74 68   is set to be th
31fc0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 4c  e value of the L
31fd0 49 4d 49 54 2c 20 72 5b 50 31 5d 2e 0a 2a 2a 0a  IMIT, r[P1]..**.
31fe0 2a 2a 20 69 66 20 72 5b 50 31 5d 20 69 73 20 7a  ** if r[P1] is z
31ff0 65 72 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c  ero or negative,
32000 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72   that means ther
32010 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 0a 2a 2a  e is no LIMIT.**
32020 20 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65   and r[P2] is se
32030 74 20 74 6f 20 2d 31 2e 20 0a 2a 2a 0a 2a 2a 20  t to -1. .**.** 
32040 4f 74 68 65 72 77 69 73 65 2c 20 72 5b 50 32 5d  Otherwise, r[P2]
32050 20 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 73   is set to the s
32060 75 6d 20 6f 66 20 72 5b 50 31 5d 20 61 6e 64 20  um of r[P1] and 
32070 72 5b 50 33 5d 2e 0a 2a 2f 0a 63 61 73 65 20 4f  r[P3]..*/.case O
32080 50 5f 4f 66 66 73 65 74 4c 69 6d 69 74 3a 20 7b  P_OffsetLimit: {
32090 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6f 75 74 32      /* in1, out2
320a0 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 36 34 20 78  , in3 */.  i64 x
320b0 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d  ;.  pIn1 = &aMem
320c0 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e  [pOp->p1];.  pIn
320d0 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  3 = &aMem[pOp->p
320e0 33 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  3];.  pOut = out
320f0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
32100 4f 70 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  Op);.  assert( p
32110 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In1->flags & MEM
32120 5f 49 6e 74 20 29 3b 0a 20 20 61 73 73 65 72 74  _Int );.  assert
32130 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20  ( pIn3->flags & 
32140 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 78 20 3d  MEM_Int );.  x =
32150 20 70 49 6e 31 2d 3e 75 2e 69 3b 0a 20 20 69 66   pIn1->u.i;.  if
32160 28 20 78 3c 3d 30 20 7c 7c 20 73 71 6c 69 74 65  ( x<=0 || sqlite
32170 33 41 64 64 49 6e 74 36 34 28 26 78 2c 20 70 49  3AddInt64(&x, pI
32180 6e 33 2d 3e 75 2e 69 3e 30 3f 70 49 6e 33 2d 3e  n3->u.i>0?pIn3->
32190 75 2e 69 3a 30 29 20 29 7b 0a 20 20 20 20 2f 2a  u.i:0) ){.    /*
321a0 20 49 66 20 74 68 65 20 4c 49 4d 49 54 20 69 73   If the LIMIT is
321b0 20 6c 65 73 73 20 74 68 61 6e 20 6f 72 20 65 71   less than or eq
321c0 75 61 6c 20 74 6f 20 7a 65 72 6f 2c 20 6c 6f 6f  ual to zero, loo
321d0 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
321e0 0a 20 20 20 20 2a 2a 20 69 73 20 64 6f 63 75 6d  .    ** is docum
321f0 65 6e 74 65 64 2e 20 20 42 75 74 20 61 6c 73 6f  ented.  But also
32200 2c 20 69 66 20 74 68 65 20 4c 49 4d 49 54 2b 4f  , if the LIMIT+O
32210 46 46 53 45 54 20 65 78 63 65 65 64 73 20 32 5e  FFSET exceeds 2^
32220 36 33 20 74 68 65 6e 0a 20 20 20 20 2a 2a 20 61  63 then.    ** a
32230 6c 73 6f 20 6c 6f 6f 70 20 66 6f 72 65 76 65 72  lso loop forever
32240 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
32250 75 6d 65 6e 74 65 64 2e 20 20 49 6e 20 66 61 63  umented.  In fac
32260 74 2c 20 6f 6e 65 20 63 6f 75 6c 64 20 61 72 67  t, one could arg
32270 75 65 0a 20 20 20 20 2a 2a 20 74 68 61 74 20 74  ue.    ** that t
32280 68 65 20 6c 6f 6f 70 20 73 68 6f 75 6c 64 20 74  he loop should t
32290 65 72 6d 69 6e 61 74 65 2e 20 20 42 75 74 20 61  erminate.  But a
322a0 73 73 75 6d 69 6e 67 20 31 20 62 69 6c 6c 69 6f  ssuming 1 billio
322b0 6e 20 69 74 65 72 61 74 69 6f 6e 73 0a 20 20 20  n iterations.   
322c0 20 2a 2a 20 70 65 72 20 73 65 63 6f 6e 64 20 28   ** per second (
322d0 66 61 72 20 65 78 63 65 65 64 69 6e 67 20 74 68  far exceeding th
322e0 65 20 63 61 70 61 62 69 6c 69 74 69 65 73 20 6f  e capabilities o
322f0 66 20 61 6e 79 20 63 75 72 72 65 6e 74 20 68 61  f any current ha
32300 72 64 77 61 72 65 29 0a 20 20 20 20 2a 2a 20 69  rdware).    ** i
32310 74 20 77 6f 75 6c 64 20 74 61 6b 65 20 6e 65 61  t would take nea
32320 72 6c 79 20 33 30 30 20 79 65 61 72 73 20 74 6f  rly 300 years to
32330 20 61 63 74 75 61 6c 6c 79 20 72 65 61 63 68 20   actually reach 
32340 74 68 65 20 6c 69 6d 69 74 2e 20 20 53 6f 0a 20  the limit.  So. 
32350 20 20 20 2a 2a 20 6c 6f 6f 70 69 6e 67 20 66 6f     ** looping fo
32360 72 65 76 65 72 20 69 73 20 61 20 72 65 61 73 6f  rever is a reaso
32370 6e 61 62 6c 65 20 61 70 70 72 6f 78 69 6d 61 74  nable approximat
32380 69 6f 6e 2e 20 2a 2f 0a 20 20 20 20 70 4f 75 74  ion. */.    pOut
32390 2d 3e 75 2e 69 20 3d 20 2d 31 3b 0a 20 20 7d 65  ->u.i = -1;.  }e
323a0 6c 73 65 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  lse{.    pOut->u
323b0 2e 69 20 3d 20 78 3b 0a 20 20 7d 0a 20 20 62 72  .i = x;.  }.  br
323c0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
323d0 65 3a 20 49 66 4e 6f 74 5a 65 72 6f 20 50 31 20  e: IfNotZero P1 
323e0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
323f0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
32400 30 20 74 68 65 6e 20 72 5b 50 31 5d 2d 2d 2c 20  0 then r[P1]--, 
32410 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
32420 67 69 73 74 65 72 20 50 31 20 6d 75 73 74 20 63  gister P1 must c
32430 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67 65  ontain an intege
32440 72 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 74 65  r.  If the conte
32450 6e 74 20 6f 66 20 72 65 67 69 73 74 65 72 20 50  nt of register P
32460 31 20 69 73 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c  1 is.** initiall
32470 79 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a  y greater than z
32480 65 72 6f 2c 20 74 68 65 6e 20 64 65 63 72 65 6d  ero, then decrem
32490 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ent the value in
324a0 20 72 65 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a   register P1..**
324b0 20 49 66 20 69 74 20 69 73 20 6e 6f 6e 2d 7a 65   If it is non-ze
324c0 72 6f 20 28 6e 65 67 61 74 69 76 65 20 6f 72 20  ro (negative or 
324d0 70 6f 73 69 74 69 76 65 29 20 61 6e 64 20 74 68  positive) and th
324e0 65 6e 20 61 6c 73 6f 20 6a 75 6d 70 20 74 6f 20  en also jump to 
324f0 50 32 2e 20 20 0a 2a 2a 20 49 66 20 72 65 67 69  P2.  .** If regi
32500 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74 69  ster P1 is initi
32510 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76 65  ally zero, leave
32520 20 69 74 20 75 6e 63 68 61 6e 67 65 64 20 61 6e   it unchanged an
32530 64 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  d fall through..
32540 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 4e 6f 74  */.case OP_IfNot
32550 5a 65 72 6f 3a 20 7b 20 20 20 20 20 20 20 20 2f  Zero: {        /
32560 2a 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20  * jump, in1 */. 
32570 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
32580 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
32590 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 26 4d 45  ( pIn1->flags&ME
325a0 4d 5f 49 6e 74 20 29 3b 0a 20 20 56 64 62 65 42  M_Int );.  VdbeB
325b0 72 61 6e 63 68 54 61 6b 65 6e 28 70 49 6e 31 2d  ranchTaken(pIn1-
325c0 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a 20 20 69 66  >u.i<0, 2);.  if
325d0 28 20 70 49 6e 31 2d 3e 75 2e 69 20 29 7b 0a 20  ( pIn1->u.i ){. 
325e0 20 20 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e      if( pIn1->u.
325f0 69 3e 30 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d  i>0 ) pIn1->u.i-
32600 2d 3b 0a 20 20 20 20 20 67 6f 74 6f 20 6a 75 6d  -;.     goto jum
32610 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62  p_to_p2;.  }.  b
32620 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
32630 64 65 3a 20 44 65 63 72 4a 75 6d 70 5a 65 72 6f  de: DecrJumpZero
32640 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
32650 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 28 2d 2d  Synopsis: if (--
32660 72 5b 50 31 5d 29 3d 3d 30 20 67 6f 74 6f 20 50  r[P1])==0 goto P
32670 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74 65 72  2.**.** Register
32680 20 50 31 20 6d 75 73 74 20 68 6f 6c 64 20 61 6e   P1 must hold an
32690 20 69 6e 74 65 67 65 72 2e 20 20 44 65 63 72 65   integer.  Decre
326a0 6d 65 6e 74 20 74 68 65 20 76 61 6c 75 65 20 69  ment the value i
326b0 6e 20 50 31 0a 2a 2a 20 61 6e 64 20 6a 75 6d 70  n P1.** and jump
326c0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 6e 65   to P2 if the ne
326d0 77 20 76 61 6c 75 65 20 69 73 20 65 78 61 63 74  w value is exact
326e0 6c 79 20 7a 65 72 6f 2e 0a 2a 2f 0a 63 61 73 65  ly zero..*/.case
326f0 20 4f 50 5f 44 65 63 72 4a 75 6d 70 5a 65 72 6f   OP_DecrJumpZero
32700 3a 20 7b 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70  : {      /* jump
32710 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e 31 20  , in1 */.  pIn1 
32720 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
32730 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
32740 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 20  ->flags&MEM_Int 
32750 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 75  );.  if( pIn1->u
32760 2e 69 3e 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  .i>SMALLEST_INT6
32770 34 20 29 20 70 49 6e 31 2d 3e 75 2e 69 2d 2d 3b  4 ) pIn1->u.i--;
32780 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b  .  VdbeBranchTak
32790 65 6e 28 70 49 6e 31 2d 3e 75 2e 69 3d 3d 30 2c  en(pIn1->u.i==0,
327a0 20 32 29 3b 0a 20 20 69 66 28 20 70 49 6e 31 2d   2);.  if( pIn1-
327b0 3e 75 2e 69 3d 3d 30 20 29 20 67 6f 74 6f 20 6a  >u.i==0 ) goto j
327c0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65  ump_to_p2;.  bre
327d0 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  ak;.}.../* Opcod
327e0 65 3a 20 41 67 67 53 74 65 70 30 20 2a 20 50 32  e: AggStep0 * P2
327f0 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
32800 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b 50  opsis: accum=r[P
32810 33 5d 20 73 74 65 70 28 72 5b 50 32 40 50 35 5d  3] step(r[P2@P5]
32820 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63 75 74 65 20  ).**.** Execute 
32830 74 68 65 20 73 74 65 70 20 66 75 6e 63 74 69 6f  the step functio
32840 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67 61  n for an aggrega
32850 74 65 2e 20 20 54 68 65 0a 2a 2a 20 66 75 6e 63  te.  The.** func
32860 74 69 6f 6e 20 68 61 73 20 50 35 20 61 72 67 75  tion has P5 argu
32870 6d 65 6e 74 73 2e 20 20 20 50 34 20 69 73 20 61  ments.   P4 is a
32880 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
32890 46 75 6e 63 44 65 66 0a 2a 2a 20 73 74 72 75 63  FuncDef.** struc
328a0 74 75 72 65 20 74 68 61 74 20 73 70 65 63 69 66  ture that specif
328b0 69 65 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e  ies the function
328c0 2e 20 20 52 65 67 69 73 74 65 72 20 50 33 20 69  .  Register P3 i
328d0 73 20 74 68 65 0a 2a 2a 20 61 63 63 75 6d 75 6c  s the.** accumul
328e0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
328f0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
32900 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
32910 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
32920 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
32930 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67  /./* Opcode: Agg
32940 53 74 65 70 20 2a 20 50 32 20 50 33 20 50 34 20  Step * P2 P3 P4 
32950 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
32960 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74 65 70  accum=r[P3] step
32970 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
32980 20 45 78 65 63 75 74 65 20 74 68 65 20 73 74 65   Execute the ste
32990 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72 20 61  p function for a
329a0 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20 54 68  n aggregate.  Th
329b0 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 68 61  e.** function ha
329c0 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73 2e 20  s P5 arguments. 
329d0 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65    P4 is a pointe
329e0 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
329f0 63 6f 6e 74 65 78 74 0a 2a 2a 20 6f 62 6a 65 63  context.** objec
32a00 74 20 74 68 61 74 20 69 73 20 75 73 65 64 20 74  t that is used t
32a10 6f 20 72 75 6e 20 74 68 65 20 66 75 6e 63 74 69  o run the functi
32a20 6f 6e 2e 20 20 52 65 67 69 73 74 65 72 20 50 33  on.  Register P3
32a30 20 69 73 0a 2a 2a 20 61 73 20 74 68 65 20 61 63   is.** as the ac
32a40 63 75 6d 75 6c 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a  cumulator..**.**
32a50 20 54 68 65 20 50 35 20 61 72 67 75 6d 65 6e 74   The P5 argument
32a60 73 20 61 72 65 20 74 61 6b 65 6e 20 66 72 6f 6d  s are taken from
32a70 20 72 65 67 69 73 74 65 72 20 50 32 20 61 6e 64   register P2 and
32a80 20 69 74 73 0a 2a 2a 20 73 75 63 63 65 73 73 6f   its.** successo
32a90 72 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  rs..**.** This o
32aa0 70 63 6f 64 65 20 69 73 20 69 6e 69 74 69 61 6c  pcode is initial
32ab0 6c 79 20 63 6f 64 65 64 20 61 73 20 4f 50 5f 41  ly coded as OP_A
32ac0 67 67 53 74 65 70 30 2e 20 20 4f 6e 20 66 69 72  ggStep0.  On fir
32ad0 73 74 20 65 76 61 6c 75 61 74 69 6f 6e 2c 0a 2a  st evaluation,.*
32ae0 2a 20 74 68 65 20 46 75 6e 63 44 65 66 20 73 74  * the FuncDef st
32af0 6f 72 65 64 20 69 6e 20 50 34 20 69 73 20 63 6f  ored in P4 is co
32b00 6e 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20  nverted into an 
32b10 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20  sqlite3_context 
32b20 61 6e 64 0a 2a 2a 20 74 68 65 20 6f 70 63 6f 64  and.** the opcod
32b30 65 20 69 73 20 63 68 61 6e 67 65 64 2e 20 20 49  e is changed.  I
32b40 6e 20 74 68 69 73 20 77 61 79 2c 20 74 68 65 20  n this way, the 
32b50 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 6f  initialization o
32b60 66 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  f the.** sqlite3
32b70 5f 63 6f 6e 74 65 78 74 20 6f 6e 6c 79 20 68 61  _context only ha
32b80 70 70 65 6e 73 20 6f 6e 63 65 2c 20 69 6e 73 74  ppens once, inst
32b90 65 61 64 20 6f 66 20 6f 6e 20 65 61 63 68 20 63  ead of on each c
32ba0 61 6c 6c 20 74 6f 20 74 68 65 0a 2a 2a 20 73 74  all to the.** st
32bb0 65 70 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ep function..*/.
32bc0 63 61 73 65 20 4f 50 5f 41 67 67 53 74 65 70 30  case OP_AggStep0
32bd0 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 0a 20 20 73  : {.  int n;.  s
32be0 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a  qlite3_context *
32bf0 70 43 74 78 3b 0a 0a 20 20 61 73 73 65 72 74 28  pCtx;..  assert(
32c00 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34   pOp->p4type==P4
32c10 5f 46 55 4e 43 44 45 46 20 29 3b 0a 20 20 6e 20  _FUNCDEF );.  n 
32c20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 61 73 73  = pOp->p5;.  ass
32c30 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
32c40 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
32c50 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
32c60 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
32c70 20 6e 3d 3d 30 20 7c 7c 20 28 70 4f 70 2d 3e 70   n==0 || (pOp->p
32c80 32 3e 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 6e  2>0 && pOp->p2+n
32c90 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
32ca0 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 29 20 29 3b  ->nCursor)+1) );
32cb0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
32cc0 70 33 3c 70 4f 70 2d 3e 70 32 20 7c 7c 20 70 4f  p3<pOp->p2 || pO
32cd0 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 32 2b 6e  p->p3>=pOp->p2+n
32ce0 20 29 3b 0a 20 20 70 43 74 78 20 3d 20 73 71 6c   );.  pCtx = sql
32cf0 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
32d00 4e 28 64 62 2c 20 73 69 7a 65 6f 66 28 2a 70 43  N(db, sizeof(*pC
32d10 74 78 29 20 2b 20 28 6e 2d 31 29 2a 73 69 7a 65  tx) + (n-1)*size
32d20 6f 66 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  of(sqlite3_value
32d30 2a 29 29 3b 0a 20 20 69 66 28 20 70 43 74 78 3d  *));.  if( pCtx=
32d40 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
32d50 3b 0a 20 20 70 43 74 78 2d 3e 70 4d 65 6d 20 3d  ;.  pCtx->pMem =
32d60 20 30 3b 0a 20 20 70 43 74 78 2d 3e 70 46 75 6e   0;.  pCtx->pFun
32d70 63 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 46 75 6e  c = pOp->p4.pFun
32d80 63 3b 0a 20 20 70 43 74 78 2d 3e 69 4f 70 20 3d  c;.  pCtx->iOp =
32d90 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
32da0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 56 64 62 65  );.  pCtx->pVdbe
32db0 20 3d 20 70 3b 0a 20 20 70 43 74 78 2d 3e 61 72   = p;.  pCtx->ar
32dc0 67 63 20 3d 20 6e 3b 0a 20 20 70 4f 70 2d 3e 70  gc = n;.  pOp->p
32dd0 34 74 79 70 65 20 3d 20 50 34 5f 46 55 4e 43 43  4type = P4_FUNCC
32de0 54 58 3b 0a 20 20 70 4f 70 2d 3e 70 34 2e 70 43  TX;.  pOp->p4.pC
32df0 74 78 20 3d 20 70 43 74 78 3b 0a 20 20 70 4f 70  tx = pCtx;.  pOp
32e00 2d 3e 6f 70 63 6f 64 65 20 3d 20 4f 50 5f 41 67  ->opcode = OP_Ag
32e10 67 53 74 65 70 3b 0a 20 20 2f 2a 20 46 61 6c 6c  gStep;.  /* Fall
32e20 20 74 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50   through into OP
32e30 5f 41 67 67 53 74 65 70 20 2a 2f 0a 7d 0a 63 61  _AggStep */.}.ca
32e40 73 65 20 4f 50 5f 41 67 67 53 74 65 70 3a 20 7b  se OP_AggStep: {
32e50 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c 69  .  int i;.  sqli
32e60 74 65 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74  te3_context *pCt
32e70 78 3b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a  x;.  Mem *pMem;.
32e80 20 20 4d 65 6d 20 74 3b 0a 0a 20 20 61 73 73 65    Mem t;..  asse
32e90 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
32ea0 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b 0a 20  =P4_FUNCCTX );. 
32eb0 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70 34 2e   pCtx = pOp->p4.
32ec0 70 43 74 78 3b 0a 20 20 70 4d 65 6d 20 3d 20 26  pCtx;.  pMem = &
32ed0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 0a  aMem[pOp->p3];..
32ee0 20 20 2f 2a 20 49 66 20 74 68 69 73 20 66 75 6e    /* If this fun
32ef0 63 74 69 6f 6e 20 69 73 20 69 6e 73 69 64 65 20  ction is inside 
32f00 6f 66 20 61 20 74 72 69 67 67 65 72 2c 20 74 68  of a trigger, th
32f10 65 20 72 65 67 69 73 74 65 72 20 61 72 72 61 79  e register array
32f20 20 69 6e 20 61 4d 65 6d 5b 5d 0a 20 20 2a 2a 20   in aMem[].  ** 
32f30 6d 69 67 68 74 20 63 68 61 6e 67 65 20 66 72 6f  might change fro
32f40 6d 20 6f 6e 65 20 65 76 61 6c 75 61 74 69 6f 6e  m one evaluation
32f50 20 74 6f 20 74 68 65 20 6e 65 78 74 2e 20 20 54   to the next.  T
32f60 68 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66  he next block of
32f70 20 63 6f 64 65 0a 20 20 2a 2a 20 63 68 65 63 6b   code.  ** check
32f80 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
32f90 72 65 67 69 73 74 65 72 20 61 72 72 61 79 20 68  register array h
32fa0 61 73 20 63 68 61 6e 67 65 64 2c 20 61 6e 64 20  as changed, and 
32fb0 69 66 20 73 6f 20 69 74 0a 20 20 2a 2a 20 72 65  if so it.  ** re
32fc0 69 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  initializes the 
32fd0 72 65 6c 61 76 61 6e 74 20 70 61 72 74 73 20 6f  relavant parts o
32fe0 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f 63 6f  f the sqlite3_co
32ff0 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 2a 2f 0a  ntext object */.
33000 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4d 65 6d    if( pCtx->pMem
33010 20 21 3d 20 70 4d 65 6d 20 29 7b 0a 20 20 20 20   != pMem ){.    
33020 70 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 70 4d 65  pCtx->pMem = pMe
33030 6d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70 43 74  m;.    for(i=pCt
33040 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d 30 3b  x->argc-1; i>=0;
33050 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72 67 76   i--) pCtx->argv
33060 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  [i] = &aMem[pOp-
33070 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 23 69 66  >p2+i];.  }..#if
33080 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
33090 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 43  .  for(i=0; i<pC
330a0 74 78 2d 3e 61 72 67 63 3b 20 69 2b 2b 29 7b 0a  tx->argc; i++){.
330b0 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
330c0 73 56 61 6c 69 64 28 70 43 74 78 2d 3e 61 72 67  sValid(pCtx->arg
330d0 76 5b 69 5d 29 20 29 3b 0a 20 20 20 20 52 45 47  v[i]) );.    REG
330e0 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
330f0 3e 70 32 2b 69 2c 20 70 43 74 78 2d 3e 61 72 67  >p2+i, pCtx->arg
33100 76 5b 69 5d 29 3b 0a 20 20 7d 0a 23 65 6e 64 69  v[i]);.  }.#endi
33110 66 0a 0a 20 20 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a  f..  pMem->n++;.
33120 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
33130 49 6e 69 74 28 26 74 2c 20 64 62 2c 20 4d 45 4d  Init(&t, db, MEM
33140 5f 4e 75 6c 6c 29 3b 0a 20 20 70 43 74 78 2d 3e  _Null);.  pCtx->
33150 70 4f 75 74 20 3d 20 26 74 3b 0a 20 20 70 43 74  pOut = &t;.  pCt
33160 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20 3d  x->fErrorOrAux =
33170 20 30 3b 0a 20 20 70 43 74 78 2d 3e 73 6b 69 70   0;.  pCtx->skip
33180 46 6c 61 67 20 3d 20 30 3b 0a 20 20 28 70 43 74  Flag = 0;.  (pCt
33190 78 2d 3e 70 46 75 6e 63 2d 3e 78 53 46 75 6e 63  x->pFunc->xSFunc
331a0 29 28 70 43 74 78 2c 70 43 74 78 2d 3e 61 72 67  )(pCtx,pCtx->arg
331b0 63 2c 70 43 74 78 2d 3e 61 72 67 76 29 3b 20 2f  c,pCtx->argv); /
331c0 2a 20 49 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32  * IMP: R-24505-2
331d0 33 32 33 30 20 2a 2f 0a 20 20 69 66 28 20 70 43  3230 */.  if( pC
331e0 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41 75 78 20  tx->fErrorOrAux 
331f0 29 7b 0a 20 20 20 20 69 66 28 20 70 43 74 78 2d  ){.    if( pCtx-
33200 3e 69 73 45 72 72 6f 72 20 29 7b 0a 20 20 20 20  >isError ){.    
33210 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
33220 6f 72 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69  or(p, "%s", sqli
33230 74 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26  te3_value_text(&
33240 74 29 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20  t));.      rc = 
33250 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20  pCtx->isError;. 
33260 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
33270 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65 28 26  VdbeMemRelease(&
33280 74 29 3b 0a 20 20 20 20 69 66 28 20 72 63 20 29  t);.    if( rc )
33290 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
332a0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 65 6c 73  to_error;.  }els
332b0 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 74  e{.    assert( t
332c0 2e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c  .flags==MEM_Null
332d0 20 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 43   );.  }.  if( pC
332e0 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20 29 7b 0a  tx->skipFlag ){.
332f0 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b      assert( pOp[
33300 2d 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43  -1].opcode==OP_C
33310 6f 6c 6c 53 65 71 20 29 3b 0a 20 20 20 20 69 20  ollSeq );.    i 
33320 3d 20 70 4f 70 5b 2d 31 5d 2e 70 31 3b 0a 20 20  = pOp[-1].p1;.  
33330 20 20 69 66 28 20 69 20 29 20 73 71 6c 69 74 65    if( i ) sqlite
33340 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
33350 28 26 61 4d 65 6d 5b 69 5d 2c 20 31 29 3b 0a 20  (&aMem[i], 1);. 
33360 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f   }.  break;.}../
33370 2a 20 4f 70 63 6f 64 65 3a 20 41 67 67 46 69 6e  * Opcode: AggFin
33380 61 6c 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a  al P1 P2 * P4 *.
33390 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63  ** Synopsis: acc
333a0 75 6d 3d 72 5b 50 31 5d 20 4e 3d 50 32 0a 2a 2a  um=r[P1] N=P2.**
333b0 0a 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20  .** Execute the 
333c0 66 69 6e 61 6c 69 7a 65 72 20 66 75 6e 63 74 69  finalizer functi
333d0 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67 72 65 67  on for an aggreg
333e0 61 74 65 2e 20 20 50 31 20 69 73 0a 2a 2a 20 74  ate.  P1 is.** t
333f0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
33400 6f 6e 20 74 68 61 74 20 69 73 20 74 68 65 20 61  on that is the a
33410 63 63 75 6d 75 6c 61 74 6f 72 20 66 6f 72 20 74  ccumulator for t
33420 68 65 20 61 67 67 72 65 67 61 74 65 2e 0a 2a 2a  he aggregate..**
33430 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e 75  .** P2 is the nu
33440 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
33450 73 20 74 68 61 74 20 74 68 65 20 73 74 65 70 20  s that the step 
33460 66 75 6e 63 74 69 6f 6e 20 74 61 6b 65 73 20 61  function takes a
33470 6e 64 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f  nd.** P4 is a po
33480 69 6e 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e  inter to the Fun
33490 63 44 65 66 20 66 6f 72 20 74 68 69 73 20 66 75  cDef for this fu
334a0 6e 63 74 69 6f 6e 2e 20 20 54 68 65 20 50 32 0a  nction.  The P2.
334b0 2a 2a 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6e  ** argument is n
334c0 6f 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ot used by this 
334d0 6f 70 63 6f 64 65 2e 20 20 49 74 20 69 73 20 6f  opcode.  It is o
334e0 6e 6c 79 20 74 68 65 72 65 20 74 6f 20 64 69 73  nly there to dis
334f0 61 6d 62 69 67 75 61 74 65 0a 2a 2a 20 66 75 6e  ambiguate.** fun
33500 63 74 69 6f 6e 73 20 74 68 61 74 20 63 61 6e 20  ctions that can 
33510 74 61 6b 65 20 76 61 72 79 69 6e 67 20 6e 75 6d  take varying num
33520 62 65 72 73 20 6f 66 20 61 72 67 75 6d 65 6e 74  bers of argument
33530 73 2e 20 20 54 68 65 0a 2a 2a 20 50 34 20 61 72  s.  The.** P4 ar
33540 67 75 6d 65 6e 74 20 69 73 20 6f 6e 6c 79 20 6e  gument is only n
33550 65 65 64 65 64 20 66 6f 72 20 74 68 65 20 64 65  eeded for the de
33560 67 65 6e 65 72 61 74 65 20 63 61 73 65 20 77 68  generate case wh
33570 65 72 65 0a 2a 2a 20 74 68 65 20 73 74 65 70 20  ere.** the step 
33580 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 6e 6f 74  function was not
33590 20 70 72 65 76 69 6f 75 73 6c 79 20 63 61 6c 6c   previously call
335a0 65 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41  ed..*/.case OP_A
335b0 67 67 46 69 6e 61 6c 3a 20 7b 0a 20 20 4d 65 6d  ggFinal: {.  Mem
335c0 20 2a 70 4d 65 6d 3b 0a 20 20 61 73 73 65 72 74   *pMem;.  assert
335d0 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26 20 70  ( pOp->p1>0 && p
335e0 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p1<=(p->nMem
335f0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
33600 20 29 3b 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d   );.  pMem = &aM
33610 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
33620 73 73 65 72 74 28 20 28 70 4d 65 6d 2d 3e 66 6c  ssert( (pMem->fl
33630 61 67 73 20 26 20 7e 28 4d 45 4d 5f 4e 75 6c 6c  ags & ~(MEM_Null
33640 7c 4d 45 4d 5f 41 67 67 29 29 3d 3d 30 20 29 3b  |MEM_Agg))==0 );
33650 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
33660 64 62 65 4d 65 6d 46 69 6e 61 6c 69 7a 65 28 70  dbeMemFinalize(p
33670 4d 65 6d 2c 20 70 4f 70 2d 3e 70 34 2e 70 46 75  Mem, pOp->p4.pFu
33680 6e 63 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  nc);.  if( rc ){
33690 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
336a0 45 72 72 6f 72 28 70 2c 20 22 25 73 22 2c 20 73  Error(p, "%s", s
336b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
336c0 74 28 70 4d 65 6d 29 29 3b 0a 20 20 20 20 67 6f  t(pMem));.    go
336d0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
336e0 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c  error;.  }.  sql
336f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e  ite3VdbeChangeEn
33700 63 6f 64 69 6e 67 28 70 4d 65 6d 2c 20 65 6e 63  coding(pMem, enc
33710 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54 45  oding);.  UPDATE
33720 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4d  _MAX_BLOBSIZE(pM
33730 65 6d 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74  em);.  if( sqlit
33740 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28  e3VdbeMemTooBig(
33750 70 4d 65 6d 29 20 29 7b 0a 20 20 20 20 67 6f 74  pMem) ){.    got
33760 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20  o too_big;.  }. 
33770 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
33780 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
33790 41 4c 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 68  AL./* Opcode: Ch
337a0 65 63 6b 70 6f 69 6e 74 20 50 31 20 50 32 20 50  eckpoint P1 P2 P
337b0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 65 63  3 * *.**.** Chec
337c0 6b 70 6f 69 6e 74 20 64 61 74 61 62 61 73 65 20  kpoint database 
337d0 50 31 2e 20 54 68 69 73 20 69 73 20 61 20 6e 6f  P1. This is a no
337e0 2d 6f 70 20 69 66 20 50 31 20 69 73 20 6e 6f 74  -op if P1 is not
337f0 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 0a 2a 2a   currently in.**
33800 20 57 41 4c 20 6d 6f 64 65 2e 20 50 61 72 61 6d   WAL mode. Param
33810 65 74 65 72 20 50 32 20 69 73 20 6f 6e 65 20 6f  eter P2 is one o
33820 66 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f  f SQLITE_CHECKPO
33830 49 4e 54 5f 50 41 53 53 49 56 45 2c 20 46 55 4c  INT_PASSIVE, FUL
33840 4c 2c 0a 2a 2a 20 52 45 53 54 41 52 54 2c 20 6f  L,.** RESTART, o
33850 72 20 54 52 55 4e 43 41 54 45 2e 20 20 57 72 69  r TRUNCATE.  Wri
33860 74 65 20 31 20 6f 72 20 30 20 69 6e 74 6f 20 6d  te 1 or 0 into m
33870 65 6d 5b 50 33 5d 20 69 66 20 74 68 65 20 63 68  em[P3] if the ch
33880 65 63 6b 70 6f 69 6e 74 20 72 65 74 75 72 6e 73  eckpoint returns
33890 0a 2a 2a 20 53 51 4c 49 54 45 5f 42 55 53 59 20  .** SQLITE_BUSY 
338a0 6f 72 20 6e 6f 74 2c 20 72 65 73 70 65 63 74 69  or not, respecti
338b0 76 65 6c 79 2e 20 20 57 72 69 74 65 20 74 68 65  vely.  Write the
338c0 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
338d0 20 69 6e 20 74 68 65 0a 2a 2a 20 57 41 4c 20 61   in the.** WAL a
338e0 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70 6f  fter the checkpo
338f0 69 6e 74 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b  int into mem[P3+
33900 31 5d 20 61 6e 64 20 74 68 65 20 6e 75 6d 62 65  1] and the numbe
33910 72 20 6f 66 20 70 61 67 65 73 0a 2a 2a 20 69 6e  r of pages.** in
33920 20 74 68 65 20 57 41 4c 20 74 68 61 74 20 68 61   the WAL that ha
33930 76 65 20 62 65 65 6e 20 63 68 65 63 6b 70 6f 69  ve been checkpoi
33940 6e 74 65 64 20 61 66 74 65 72 20 74 68 65 20 63  nted after the c
33950 68 65 63 6b 70 6f 69 6e 74 0a 2a 2a 20 63 6f 6d  heckpoint.** com
33960 70 6c 65 74 65 73 20 69 6e 74 6f 20 6d 65 6d 5b  pletes into mem[
33970 50 33 2b 32 5d 2e 20 20 48 6f 77 65 76 65 72 20  P3+2].  However 
33980 6f 6e 20 61 6e 20 65 72 72 6f 72 2c 20 6d 65 6d  on an error, mem
33990 5b 50 33 2b 31 5d 20 61 6e 64 0a 2a 2a 20 6d 65  [P3+1] and.** me
339a0 6d 5b 50 33 2b 32 5d 20 61 72 65 20 69 6e 69 74  m[P3+2] are init
339b0 69 61 6c 69 7a 65 64 20 74 6f 20 2d 31 2e 0a 2a  ialized to -1..*
339c0 2f 0a 63 61 73 65 20 4f 50 5f 43 68 65 63 6b 70  /.case OP_Checkp
339d0 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 69 3b  oint: {.  int i;
339e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
339f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
33a00 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 69  p counter */.  i
33a10 6e 74 20 61 52 65 73 5b 33 5d 3b 20 20 20 20 20  nt aRes[3];     
33a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33a30 2a 20 52 65 73 75 6c 74 73 20 2a 2f 0a 20 20 4d  * Results */.  M
33a40 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20 20 20 20  em *pMem;       
33a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
33a60 2a 20 57 72 69 74 65 20 72 65 73 75 6c 74 73 20  * Write results 
33a70 68 65 72 65 20 2a 2f 0a 0a 20 20 61 73 73 65 72  here */..  asser
33a80 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
33a90 30 20 29 3b 0a 20 20 61 52 65 73 5b 30 5d 20 3d  0 );.  aRes[0] =
33aa0 20 30 3b 0a 20 20 61 52 65 73 5b 31 5d 20 3d 20   0;.  aRes[1] = 
33ab0 61 52 65 73 5b 32 5d 20 3d 20 2d 31 3b 0a 20 20  aRes[2] = -1;.  
33ac0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d  assert( pOp->p2=
33ad0 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49  =SQLITE_CHECKPOI
33ae0 4e 54 5f 50 41 53 53 49 56 45 0a 20 20 20 20 20  NT_PASSIVE.     
33af0 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 53 51    || pOp->p2==SQ
33b00 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f  LITE_CHECKPOINT_
33b10 46 55 4c 4c 0a 20 20 20 20 20 20 20 7c 7c 20 70  FULL.       || p
33b20 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43  Op->p2==SQLITE_C
33b30 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
33b40 54 0a 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d  T.       || pOp-
33b50 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43  >p2==SQLITE_CHEC
33b60 4b 50 4f 49 4e 54 5f 54 52 55 4e 43 41 54 45 0a  KPOINT_TRUNCATE.
33b70 20 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69    );.  rc = sqli
33b80 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 64 62  te3Checkpoint(db
33b90 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e  , pOp->p1, pOp->
33ba0 70 32 2c 20 26 61 52 65 73 5b 31 5d 2c 20 26 61  p2, &aRes[1], &a
33bb0 52 65 73 5b 32 5d 29 3b 0a 20 20 69 66 28 20 72  Res[2]);.  if( r
33bc0 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63 21  c ){.    if( rc!
33bd0 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 20 67  =SQLITE_BUSY ) g
33be0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
33bf0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20 3d  _error;.    rc =
33c00 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20   SQLITE_OK;.    
33c10 61 52 65 73 5b 30 5d 20 3d 20 31 3b 0a 20 20 7d  aRes[0] = 1;.  }
33c20 0a 20 20 66 6f 72 28 69 3d 30 2c 20 70 4d 65 6d  .  for(i=0, pMem
33c30 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
33c40 5d 3b 20 69 3c 33 3b 20 69 2b 2b 2c 20 70 4d 65  ]; i<3; i++, pMe
33c50 6d 2b 2b 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  m++){.    sqlite
33c60 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
33c70 28 70 4d 65 6d 2c 20 28 69 36 34 29 61 52 65 73  (pMem, (i64)aRes
33c80 5b 69 5d 29 3b 0a 20 20 7d 20 20 20 20 0a 20 20  [i]);.  }    .  
33c90 62 72 65 61 6b 3b 0a 7d 3b 20 20 0a 23 65 6e 64  break;.};  .#end
33ca0 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
33cb0 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 0a 2f  TE_OMIT_PRAGMA./
33cc0 2a 20 4f 70 63 6f 64 65 3a 20 4a 6f 75 72 6e 61  * Opcode: Journa
33cd0 6c 4d 6f 64 65 20 50 31 20 50 32 20 50 33 20 2a  lMode P1 P2 P3 *
33ce0 20 2a 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 65 20   *.**.** Change 
33cf0 74 68 65 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65  the journal mode
33d00 20 6f 66 20 64 61 74 61 62 61 73 65 20 50 31 20   of database P1 
33d10 74 6f 20 50 33 2e 20 50 33 20 6d 75 73 74 20 62  to P3. P3 must b
33d20 65 20 6f 6e 65 20 6f 66 20 74 68 65 0a 2a 2a 20  e one of the.** 
33d30 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
33d40 45 5f 58 58 58 20 76 61 6c 75 65 73 2e 20 49 66  E_XXX values. If
33d50 20 63 68 61 6e 67 69 6e 67 20 62 65 74 77 65 65   changing betwee
33d60 6e 20 74 68 65 20 76 61 72 69 6f 75 73 20 72 6f  n the various ro
33d70 6c 6c 62 61 63 6b 0a 2a 2a 20 6d 6f 64 65 73 20  llback.** modes 
33d80 28 64 65 6c 65 74 65 2c 20 74 72 75 6e 63 61 74  (delete, truncat
33d90 65 2c 20 70 65 72 73 69 73 74 2c 20 6f 66 66 20  e, persist, off 
33da0 61 6e 64 20 6d 65 6d 6f 72 79 29 2c 20 74 68 69  and memory), thi
33db0 73 20 69 73 20 61 20 73 69 6d 70 6c 65 0a 2a 2a  s is a simple.**
33dc0 20 6f 70 65 72 61 74 69 6f 6e 2e 20 4e 6f 20 49   operation. No I
33dd0 4f 20 69 73 20 72 65 71 75 69 72 65 64 2e 0a 2a  O is required..*
33de0 2a 0a 2a 2a 20 49 66 20 63 68 61 6e 67 69 6e 67  *.** If changing
33df0 20 69 6e 74 6f 20 6f 72 20 6f 75 74 20 6f 66 20   into or out of 
33e00 57 41 4c 20 6d 6f 64 65 20 74 68 65 20 70 72 6f  WAL mode the pro
33e10 63 65 64 75 72 65 20 69 73 20 6d 6f 72 65 20 63  cedure is more c
33e20 6f 6d 70 6c 69 63 61 74 65 64 2e 0a 2a 2a 0a 2a  omplicated..**.*
33e30 2a 20 57 72 69 74 65 20 61 20 73 74 72 69 6e 67  * Write a string
33e40 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
33e50 66 69 6e 61 6c 20 6a 6f 75 72 6e 61 6c 2d 6d 6f  final journal-mo
33e60 64 65 20 74 6f 20 72 65 67 69 73 74 65 72 20 50  de to register P
33e70 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4a 6f  2..*/.case OP_Jo
33e80 75 72 6e 61 6c 4d 6f 64 65 3a 20 7b 20 20 20 20  urnalMode: {    
33e90 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 42 74 72  /* out2 */.  Btr
33ea0 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
33eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
33ec0 42 74 72 65 65 20 74 6f 20 63 68 61 6e 67 65 20  Btree to change 
33ed0 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20  journal mode of 
33ee0 2a 2f 0a 20 20 50 61 67 65 72 20 2a 70 50 61 67  */.  Pager *pPag
33ef0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
33f00 20 20 20 20 20 2f 2a 20 50 61 67 65 72 20 61 73       /* Pager as
33f10 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 70 42  sociated with pB
33f20 74 20 2a 2f 0a 20 20 69 6e 74 20 65 4e 65 77 3b  t */.  int eNew;
33f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f40 20 20 20 20 20 20 20 2f 2a 20 4e 65 77 20 6a 6f         /* New jo
33f50 75 72 6e 61 6c 20 6d 6f 64 65 20 2a 2f 0a 20 20  urnal mode */.  
33f60 69 6e 74 20 65 4f 6c 64 3b 20 20 20 20 20 20 20  int eOld;       
33f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33f80 2f 2a 20 54 68 65 20 6f 6c 64 20 6a 6f 75 72 6e  /* The old journ
33f90 61 6c 20 6d 6f 64 65 20 2a 2f 0a 23 69 66 6e 64  al mode */.#ifnd
33fa0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
33fb0 41 4c 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  AL.  const char 
33fc0 2a 7a 46 69 6c 65 6e 61 6d 65 3b 20 20 20 20 20  *zFilename;     
33fd0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
33fe0 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 66 6f  database file fo
33ff0 72 20 70 50 61 67 65 72 20 2a 2f 0a 23 65 6e 64  r pPager */.#end
34000 69 66 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  if..  pOut = out
34010 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
34020 4f 70 29 3b 0a 20 20 65 4e 65 77 20 3d 20 70 4f  Op);.  eNew = pO
34030 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28  p->p3;.  assert(
34040 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34050 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 20  RNALMODE_DELETE 
34060 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d  .       || eNew=
34070 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
34080 44 45 5f 54 52 55 4e 43 41 54 45 20 0a 20 20 20  DE_TRUNCATE .   
34090 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
340a0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
340b0 45 52 53 49 53 54 20 0a 20 20 20 20 20 20 20 7c  ERSIST .       |
340c0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
340d0 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 0a 20 20  URNALMODE_OFF.  
340e0 20 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41       || eNew==PA
340f0 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
34100 4d 45 4d 4f 52 59 0a 20 20 20 20 20 20 20 7c 7c  MEMORY.       ||
34110 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34120 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
34130 20 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47      || eNew==PAG
34140 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
34150 55 45 52 59 0a 20 20 29 3b 0a 20 20 61 73 73 65  UERY.  );.  asse
34160 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
34170 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44  & pOp->p1<db->nD
34180 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  b );.  assert( p
34190 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
341a0 0a 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ..  pBt = db->aD
341b0 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
341c0 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
341d0 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
341e0 29 3b 0a 20 20 65 4f 6c 64 20 3d 20 73 71 6c 69  );.  eOld = sqli
341f0 74 65 33 50 61 67 65 72 47 65 74 4a 6f 75 72 6e  te3PagerGetJourn
34200 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 3b 0a  alMode(pPager);.
34210 20 20 69 66 28 20 65 4e 65 77 3d 3d 50 41 47 45    if( eNew==PAGE
34220 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55  R_JOURNALMODE_QU
34230 45 52 59 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  ERY ) eNew = eOl
34240 64 3b 0a 20 20 69 66 28 20 21 73 71 6c 69 74 65  d;.  if( !sqlite
34250 33 50 61 67 65 72 4f 6b 54 6f 43 68 61 6e 67 65  3PagerOkToChange
34260 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
34270 65 72 29 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c  er) ) eNew = eOl
34280 64 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d;..#ifndef SQLI
34290 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 7a 46  TE_OMIT_WAL.  zF
342a0 69 6c 65 6e 61 6d 65 20 3d 20 73 71 6c 69 74 65  ilename = sqlite
342b0 33 50 61 67 65 72 46 69 6c 65 6e 61 6d 65 28 70  3PagerFilename(p
342c0 50 61 67 65 72 2c 20 31 29 3b 0a 0a 20 20 2f 2a  Pager, 1);..  /*
342d0 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 61 20   Do not allow a 
342e0 74 72 61 6e 73 69 74 69 6f 6e 20 74 6f 20 6a 6f  transition to jo
342f0 75 72 6e 61 6c 5f 6d 6f 64 65 3d 57 41 4c 20 66  urnal_mode=WAL f
34300 6f 72 20 61 20 64 61 74 61 62 61 73 65 0a 20 20  or a database.  
34310 2a 2a 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20  ** in temporary 
34320 73 74 6f 72 61 67 65 20 6f 72 20 69 66 20 74 68  storage or if th
34330 65 20 56 46 53 20 64 6f 65 73 20 6e 6f 74 20 73  e VFS does not s
34340 75 70 70 6f 72 74 20 73 68 61 72 65 64 20 6d 65  upport shared me
34350 6d 6f 72 79 20 0a 20 20 2a 2f 0a 20 20 69 66 28  mory .  */.  if(
34360 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
34370 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 0a 20 20 20  RNALMODE_WAL.   
34380 26 26 20 28 73 71 6c 69 74 65 33 53 74 72 6c 65  && (sqlite3Strle
34390 6e 33 30 28 7a 46 69 6c 65 6e 61 6d 65 29 3d 3d  n30(zFilename)==
343a0 30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  0           /* T
343b0 65 6d 70 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20  emp file */.    
343c0 20 20 20 7c 7c 20 21 73 71 6c 69 74 65 33 50 61     || !sqlite3Pa
343d0 67 65 72 57 61 6c 53 75 70 70 6f 72 74 65 64 28  gerWalSupported(
343e0 70 50 61 67 65 72 29 29 20 20 20 2f 2a 20 4e 6f  pPager))   /* No
343f0 20 73 68 61 72 65 64 2d 6d 65 6d 6f 72 79 20 73   shared-memory s
34400 75 70 70 6f 72 74 20 2a 2f 0a 20 20 29 7b 0a 20  upport */.  ){. 
34410 20 20 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a     eNew = eOld;.
34420 20 20 7d 0a 0a 20 20 69 66 28 20 28 65 4e 65 77    }..  if( (eNew
34430 21 3d 65 4f 6c 64 29 0a 20 20 20 26 26 20 28 65  !=eOld).   && (e
34440 4f 6c 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e  Old==PAGER_JOURN
34450 41 4c 4d 4f 44 45 5f 57 41 4c 20 7c 7c 20 65 4e  ALMODE_WAL || eN
34460 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  ew==PAGER_JOURNA
34470 4c 4d 4f 44 45 5f 57 41 4c 29 0a 20 20 29 7b 0a  LMODE_WAL).  ){.
34480 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75 74      if( !db->aut
34490 6f 43 6f 6d 6d 69 74 20 7c 7c 20 64 62 2d 3e 6e  oCommit || db->n
344a0 56 64 62 65 52 65 61 64 3e 31 20 29 7b 0a 20 20  VdbeRead>1 ){.  
344b0 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
344c0 45 52 52 4f 52 3b 0a 20 20 20 20 20 20 73 71 6c  ERROR;.      sql
344d0 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
344e0 0a 20 20 20 20 20 20 20 20 20 20 22 63 61 6e 6e  .          "cann
344f0 6f 74 20 63 68 61 6e 67 65 20 25 73 20 77 61 6c  ot change %s wal
34500 20 6d 6f 64 65 20 66 72 6f 6d 20 77 69 74 68 69   mode from withi
34510 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22  n a transaction"
34520 2c 0a 20 20 20 20 20 20 20 20 20 20 28 65 4e 65  ,.          (eNe
34530 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
34540 4d 4f 44 45 5f 57 41 4c 20 3f 20 22 69 6e 74 6f  MODE_WAL ? "into
34550 22 20 3a 20 22 6f 75 74 20 6f 66 22 29 0a 20 20  " : "out of").  
34560 20 20 20 20 29 3b 0a 20 20 20 20 20 20 67 6f 74      );.      got
34570 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
34580 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  rror;.    }else{
34590 0a 20 0a 20 20 20 20 20 20 69 66 28 20 65 4f 6c  . .      if( eOl
345a0 64 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  d==PAGER_JOURNAL
345b0 4d 4f 44 45 5f 57 41 4c 20 29 7b 0a 20 20 20 20  MODE_WAL ){.    
345c0 20 20 20 20 2f 2a 20 49 66 20 6c 65 61 76 69 6e      /* If leavin
345d0 67 20 57 41 4c 20 6d 6f 64 65 2c 20 63 6c 6f 73  g WAL mode, clos
345e0 65 20 74 68 65 20 6c 6f 67 20 66 69 6c 65 2e 20  e the log file. 
345f0 49 66 20 73 75 63 63 65 73 73 66 75 6c 2c 20 74  If successful, t
34600 68 65 20 63 61 6c 6c 0a 20 20 20 20 20 20 20 20  he call.        
34610 2a 2a 20 74 6f 20 50 61 67 65 72 43 6c 6f 73 65  ** to PagerClose
34620 57 61 6c 28 29 20 63 68 65 63 6b 70 6f 69 6e 74  Wal() checkpoint
34630 73 20 61 6e 64 20 64 65 6c 65 74 65 73 20 74 68  s and deletes th
34640 65 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f  e write-ahead-lo
34650 67 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  g .        ** fi
34660 6c 65 2e 20 41 6e 20 45 58 43 4c 55 53 49 56 45  le. An EXCLUSIVE
34670 20 6c 6f 63 6b 20 6d 61 79 20 73 74 69 6c 6c 20   lock may still 
34680 62 65 20 68 65 6c 64 20 6f 6e 20 74 68 65 20 64  be held on the d
34690 61 74 61 62 61 73 65 20 66 69 6c 65 20 0a 20 20  atabase file .  
346a0 20 20 20 20 20 20 2a 2a 20 61 66 74 65 72 20 61        ** after a
346b0 20 73 75 63 63 65 73 73 66 75 6c 20 72 65 74 75   successful retu
346c0 72 6e 2e 20 0a 20 20 20 20 20 20 20 20 2a 2f 0a  rn. .        */.
346d0 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
346e0 69 74 65 33 50 61 67 65 72 43 6c 6f 73 65 57 61  ite3PagerCloseWa
346f0 6c 28 70 50 61 67 65 72 2c 20 64 62 29 3b 0a 20  l(pPager, db);. 
34700 20 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53         if( rc==S
34710 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
34720 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
34730 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
34740 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
34750 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
34760 7d 65 6c 73 65 20 69 66 28 20 65 4f 6c 64 3d 3d  }else if( eOld==
34770 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34780 45 5f 4d 45 4d 4f 52 59 20 29 7b 0a 20 20 20 20  E_MEMORY ){.    
34790 20 20 20 20 2f 2a 20 43 61 6e 6e 6f 74 20 74 72      /* Cannot tr
347a0 61 6e 73 69 74 69 6f 6e 20 64 69 72 65 63 74 6c  ansition directl
347b0 79 20 66 72 6f 6d 20 4d 45 4d 4f 52 59 20 74 6f  y from MEMORY to
347c0 20 57 41 4c 2e 20 20 55 73 65 20 6d 6f 64 65 20   WAL.  Use mode 
347d0 4f 46 46 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  OFF.        ** a
347e0 73 20 61 6e 20 69 6e 74 65 72 6d 65 64 69 61 74  s an intermediat
347f0 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 71 6c  e */.        sql
34800 69 74 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72  ite3PagerSetJour
34810 6e 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  nalMode(pPager, 
34820 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
34830 45 5f 4f 46 46 29 3b 0a 20 20 20 20 20 20 7d 0a  E_OFF);.      }.
34840 20 20 0a 20 20 20 20 20 20 2f 2a 20 4f 70 65 6e    .      /* Open
34850 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f   a transaction o
34860 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  n the database f
34870 69 6c 65 2e 20 52 65 67 61 72 64 6c 65 73 73 20  ile. Regardless 
34880 6f 66 20 74 68 65 20 6a 6f 75 72 6e 61 6c 0a 20  of the journal. 
34890 20 20 20 20 20 2a 2a 20 6d 6f 64 65 2c 20 74 68       ** mode, th
348a0 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  is transaction a
348b0 6c 77 61 79 73 20 75 73 65 73 20 61 20 72 6f 6c  lways uses a rol
348c0 6c 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 2e 0a 20  lback journal.. 
348d0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73       */.      as
348e0 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
348f0 65 65 49 73 49 6e 54 72 61 6e 73 28 70 42 74 29  eeIsInTrans(pBt)
34900 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28  ==0 );.      if(
34910 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
34920 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73  {.        rc = s
34930 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 56 65  qlite3BtreeSetVe
34940 72 73 69 6f 6e 28 70 42 74 2c 20 28 65 4e 65 77  rsion(pBt, (eNew
34950 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
34960 4f 44 45 5f 57 41 4c 20 3f 20 32 20 3a 20 31 29  ODE_WAL ? 2 : 1)
34970 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
34980 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69  .  }.#endif /* i
34990 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
349a0 54 5f 57 41 4c 20 2a 2f 0a 0a 20 20 69 66 28 20  T_WAL */..  if( 
349b0 72 63 20 29 20 65 4e 65 77 20 3d 20 65 4f 6c 64  rc ) eNew = eOld
349c0 3b 0a 20 20 65 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  eNew = sqlit
349d0 65 33 50 61 67 65 72 53 65 74 4a 6f 75 72 6e 61  e3PagerSetJourna
349e0 6c 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4e  lMode(pPager, eN
349f0 65 77 29 3b 0a 0a 20 20 70 4f 75 74 2d 3e 66 6c  ew);..  pOut->fl
34a00 61 67 73 20 3d 20 4d 45 4d 5f 53 74 72 7c 4d 45  ags = MEM_Str|ME
34a10 4d 5f 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72  M_Static|MEM_Ter
34a20 6d 3b 0a 20 20 70 4f 75 74 2d 3e 7a 20 3d 20 28  m;.  pOut->z = (
34a30 63 68 61 72 20 2a 29 73 71 6c 69 74 65 33 4a 6f  char *)sqlite3Jo
34a40 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4e  urnalModename(eN
34a50 65 77 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d  ew);.  pOut->n =
34a60 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
34a70 28 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 70 4f 75  (pOut->z);.  pOu
34a80 74 2d 3e 65 6e 63 20 3d 20 53 51 4c 49 54 45 5f  t->enc = SQLITE_
34a90 55 54 46 38 3b 0a 20 20 73 71 6c 69 74 65 33 56  UTF8;.  sqlite3V
34aa0 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
34ab0 67 28 70 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67  g(pOut, encoding
34ac0 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
34ad0 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
34ae0 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a  error;.  break;.
34af0 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  };.#endif /* SQL
34b00 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20  ITE_OMIT_PRAGMA 
34b10 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  */..#if !defined
34b20 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 41 43  (SQLITE_OMIT_VAC
34b30 55 55 4d 29 20 26 26 20 21 64 65 66 69 6e 65 64  UUM) && !defined
34b40 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 54 54  (SQLITE_OMIT_ATT
34b50 41 43 48 29 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ACH)./* Opcode: 
34b60 56 61 63 75 75 6d 20 50 31 20 2a 20 2a 20 2a 20  Vacuum P1 * * * 
34b70 2a 0a 2a 2a 0a 2a 2a 20 56 61 63 75 75 6d 20 74  *.**.** Vacuum t
34b80 68 65 20 65 6e 74 69 72 65 20 64 61 74 61 62 61  he entire databa
34b90 73 65 20 50 31 2e 20 20 50 31 20 69 73 20 30 20  se P1.  P1 is 0 
34ba0 66 6f 72 20 22 6d 61 69 6e 22 2c 20 61 6e 64 20  for "main", and 
34bb0 32 20 6f 72 20 6d 6f 72 65 0a 2a 2a 20 66 6f 72  2 or more.** for
34bc0 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61 74   an attached dat
34bd0 61 62 61 73 65 2e 20 20 54 68 65 20 22 74 65 6d  abase.  The "tem
34be0 70 22 20 64 61 74 61 62 61 73 65 20 6d 61 79 20  p" database may 
34bf0 6e 6f 74 20 62 65 20 76 61 63 75 75 6d 65 64 2e  not be vacuumed.
34c00 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 61 63 75  .*/.case OP_Vacu
34c10 75 6d 3a 20 7b 0a 20 20 61 73 73 65 72 74 28 20  um: {.  assert( 
34c20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
34c30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
34c40 52 75 6e 56 61 63 75 75 6d 28 26 70 2d 3e 7a 45  RunVacuum(&p->zE
34c50 72 72 4d 73 67 2c 20 64 62 2c 20 70 4f 70 2d 3e  rrMsg, db, pOp->
34c60 70 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20  p1);.  if( rc ) 
34c70 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34c80 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
34c90 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  ;.}.#endif..#if 
34ca0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
34cb0 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
34cc0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 63 72  ./* Opcode: Incr
34cd0 56 61 63 75 75 6d 20 50 31 20 50 32 20 2a 20 2a  Vacuum P1 P2 * *
34ce0 20 2a 0a 2a 2a 0a 2a 2a 20 50 65 72 66 6f 72 6d   *.**.** Perform
34cf0 20 61 20 73 69 6e 67 6c 65 20 73 74 65 70 20 6f   a single step o
34d00 66 20 74 68 65 20 69 6e 63 72 65 6d 65 6e 74 61  f the incrementa
34d10 6c 20 76 61 63 75 75 6d 20 70 72 6f 63 65 64 75  l vacuum procedu
34d20 72 65 20 6f 6e 0a 2a 2a 20 74 68 65 20 50 31 20  re on.** the P1 
34d30 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
34d40 20 76 61 63 75 75 6d 20 68 61 73 20 66 69 6e 69   vacuum has fini
34d50 73 68 65 64 2c 20 6a 75 6d 70 20 74 6f 20 69 6e  shed, jump to in
34d60 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 50 32 2e  struction.** P2.
34d70 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c 6c   Otherwise, fall
34d80 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
34d90 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
34da0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 63  ..*/.case OP_Inc
34db0 72 56 61 63 75 75 6d 3a 20 7b 20 20 20 20 20 20  rVacuum: {      
34dc0 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 42    /* jump */.  B
34dd0 74 72 65 65 20 2a 70 42 74 3b 0a 0a 20 20 61 73  tree *pBt;..  as
34de0 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30  sert( pOp->p1>=0
34df0 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e   && pOp->p1<db->
34e00 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28  nDb );.  assert(
34e10 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62   DbMaskTest(p->b
34e20 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e 70  treeMask, pOp->p
34e30 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
34e40 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
34e50 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44  ;.  pBt = db->aD
34e60 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 3b 0a  b[pOp->p1].pBt;.
34e70 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
34e80 72 65 65 49 6e 63 72 56 61 63 75 75 6d 28 70 42  reeIncrVacuum(pB
34e90 74 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  t);.  VdbeBranch
34ea0 54 61 6b 65 6e 28 72 63 3d 3d 53 51 4c 49 54 45  Taken(rc==SQLITE
34eb0 5f 44 4f 4e 45 2c 32 29 3b 0a 20 20 69 66 28 20  _DONE,2);.  if( 
34ec0 72 63 20 29 7b 0a 20 20 20 20 69 66 28 20 72 63  rc ){.    if( rc
34ed0 21 3d 53 51 4c 49 54 45 5f 44 4f 4e 45 20 29 20  !=SQLITE_DONE ) 
34ee0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34ef0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 72 63 20  o_error;.    rc 
34f00 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20  = SQLITE_OK;.   
34f10 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
34f20 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
34f30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f  .#endif../* Opco
34f40 64 65 3a 20 45 78 70 69 72 65 20 50 31 20 2a 20  de: Expire P1 * 
34f50 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 43 61 75 73  * * *.**.** Caus
34f60 65 20 70 72 65 63 6f 6d 70 69 6c 65 64 20 73 74  e precompiled st
34f70 61 74 65 6d 65 6e 74 73 20 74 6f 20 65 78 70 69  atements to expi
34f80 72 65 2e 20 20 57 68 65 6e 20 61 6e 20 65 78 70  re.  When an exp
34f90 69 72 65 64 20 73 74 61 74 65 6d 65 6e 74 0a 2a  ired statement.*
34fa0 2a 20 69 73 20 65 78 65 63 75 74 65 64 20 75 73  * is executed us
34fb0 69 6e 67 20 73 71 6c 69 74 65 33 5f 73 74 65 70  ing sqlite3_step
34fc0 28 29 20 69 74 20 77 69 6c 6c 20 65 69 74 68 65  () it will eithe
34fd0 72 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 0a  r automatically.
34fe0 2a 2a 20 72 65 70 72 65 70 61 72 65 20 69 74 73  ** reprepare its
34ff0 65 6c 66 20 28 69 66 20 69 74 20 77 61 73 20 6f  elf (if it was o
35000 72 69 67 69 6e 61 6c 6c 79 20 63 72 65 61 74 65  riginally create
35010 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
35020 70 72 65 70 61 72 65 5f 76 32 28 29 29 0a 2a 2a  prepare_v2()).**
35030 20 6f 72 20 69 74 20 77 69 6c 6c 20 66 61 69 6c   or it will fail
35040 20 77 69 74 68 20 53 51 4c 49 54 45 5f 53 43 48   with SQLITE_SCH
35050 45 4d 41 2e 0a 2a 2a 20 0a 2a 2a 20 49 66 20 50  EMA..** .** If P
35060 31 20 69 73 20 30 2c 20 74 68 65 6e 20 61 6c 6c  1 is 0, then all
35070 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
35080 62 65 63 6f 6d 65 20 65 78 70 69 72 65 64 2e 20  become expired. 
35090 49 66 20 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72  If P1 is non-zer
350a0 6f 2c 0a 2a 2a 20 74 68 65 6e 20 6f 6e 6c 79 20  o,.** then only 
350b0 74 68 65 20 63 75 72 72 65 6e 74 6c 79 20 65 78  the currently ex
350c0 65 63 75 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  ecuting statemen
350d0 74 20 69 73 20 65 78 70 69 72 65 64 2e 0a 2a 2f  t is expired..*/
350e0 0a 63 61 73 65 20 4f 50 5f 45 78 70 69 72 65 3a  .case OP_Expire:
350f0 20 7b 0a 20 20 69 66 28 20 21 70 4f 70 2d 3e 70   {.  if( !pOp->p
35100 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  1 ){.    sqlite3
35110 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
35120 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
35130 7d 65 6c 73 65 7b 0a 20 20 20 20 70 2d 3e 65 78  }else{.    p->ex
35140 70 69 72 65 64 20 3d 20 31 3b 0a 20 20 7d 0a 20  pired = 1;.  }. 
35150 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64   break;.}..#ifnd
35160 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
35170 48 41 52 45 44 5f 43 41 43 48 45 0a 2f 2a 20 4f  HARED_CACHE./* O
35180 70 63 6f 64 65 3a 20 54 61 62 6c 65 4c 6f 63 6b  pcode: TableLock
35190 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
351a0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 44 62 3d  * Synopsis: iDb=
351b0 50 31 20 72 6f 6f 74 3d 50 32 20 77 72 69 74 65  P1 root=P2 write
351c0 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f 62 74 61 69 6e  =P3.**.** Obtain
351d0 20 61 20 6c 6f 63 6b 20 6f 6e 20 61 20 70 61 72   a lock on a par
351e0 74 69 63 75 6c 61 72 20 74 61 62 6c 65 2e 20 54  ticular table. T
351f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  his instruction 
35200 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
35210 6e 0a 2a 2a 20 74 68 65 20 73 68 61 72 65 64 2d  n.** the shared-
35220 63 61 63 68 65 20 66 65 61 74 75 72 65 20 69 73  cache feature is
35230 20 65 6e 61 62 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a   enabled. .**.**
35240 20 50 31 20 69 73 20 74 68 65 20 69 6e 64 65 78   P1 is the index
35250 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
35260 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
35270 5d 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  ] of the databas
35280 65 0a 2a 2a 20 6f 6e 20 77 68 69 63 68 20 74 68  e.** on which th
35290 65 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69 72  e lock is acquir
352a0 65 64 2e 20 20 41 20 72 65 61 64 6c 6f 63 6b 20  ed.  A readlock 
352b0 69 73 20 6f 62 74 61 69 6e 65 64 20 69 66 20 50  is obtained if P
352c0 33 3d 3d 30 20 6f 72 0a 2a 2a 20 61 20 77 72 69  3==0 or.** a wri
352d0 74 65 20 6c 6f 63 6b 20 69 66 20 50 33 3d 3d 31  te lock if P3==1
352e0 2e 0a 2a 2a 0a 2a 2a 20 50 32 20 63 6f 6e 74 61  ..**.** P2 conta
352f0 69 6e 73 20 74 68 65 20 72 6f 6f 74 2d 70 61 67  ins the root-pag
35300 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74  e of the table t
35310 6f 20 6c 6f 63 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34  o lock..**.** P4
35320 20 63 6f 6e 74 61 69 6e 73 20 61 20 70 6f 69 6e   contains a poin
35330 74 65 72 20 74 6f 20 74 68 65 20 6e 61 6d 65 20  ter to the name 
35340 6f 66 20 74 68 65 20 74 61 62 6c 65 20 62 65 69  of the table bei
35350 6e 67 20 6c 6f 63 6b 65 64 2e 20 54 68 69 73 20  ng locked. This 
35360 69 73 20 6f 6e 6c 79 0a 2a 2a 20 75 73 65 64 20  is only.** used 
35370 74 6f 20 67 65 6e 65 72 61 74 65 20 61 6e 20 65  to generate an e
35380 72 72 6f 72 20 6d 65 73 73 61 67 65 20 69 66 20  rror message if 
35390 74 68 65 20 6c 6f 63 6b 20 63 61 6e 6e 6f 74 20  the lock cannot 
353a0 62 65 20 6f 62 74 61 69 6e 65 64 2e 0a 2a 2f 0a  be obtained..*/.
353b0 63 61 73 65 20 4f 50 5f 54 61 62 6c 65 4c 6f 63  case OP_TableLoc
353c0 6b 3a 20 7b 0a 20 20 75 38 20 69 73 57 72 69 74  k: {.  u8 isWrit
353d0 65 4c 6f 63 6b 20 3d 20 28 75 38 29 70 4f 70 2d  eLock = (u8)pOp-
353e0 3e 70 33 3b 0a 20 20 69 66 28 20 69 73 57 72 69  >p3;.  if( isWri
353f0 74 65 4c 6f 63 6b 20 7c 7c 20 30 3d 3d 28 64 62  teLock || 0==(db
35400 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 52  ->flags&SQLITE_R
35410 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 29 20  eadUncommitted) 
35420 29 7b 0a 20 20 20 20 69 6e 74 20 70 31 20 3d 20  ){.    int p1 = 
35430 70 4f 70 2d 3e 70 31 3b 20 0a 20 20 20 20 61 73  pOp->p1; .    as
35440 73 65 72 74 28 20 70 31 3e 3d 30 20 26 26 20 70  sert( p1>=0 && p
35450 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 20  1<db->nDb );.   
35460 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b 54   assert( DbMaskT
35470 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b  est(p->btreeMask
35480 2c 20 70 31 29 20 29 3b 0a 20 20 20 20 61 73 73  , p1) );.    ass
35490 65 72 74 28 20 69 73 57 72 69 74 65 4c 6f 63 6b  ert( isWriteLock
354a0 3d 3d 30 20 7c 7c 20 69 73 57 72 69 74 65 4c 6f  ==0 || isWriteLo
354b0 63 6b 3d 3d 31 20 29 3b 0a 20 20 20 20 72 63 20  ck==1 );.    rc 
354c0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c 6f  = sqlite3BtreeLo
354d0 63 6b 54 61 62 6c 65 28 64 62 2d 3e 61 44 62 5b  ckTable(db->aDb[
354e0 70 31 5d 2e 70 42 74 2c 20 70 4f 70 2d 3e 70 32  p1].pBt, pOp->p2
354f0 2c 20 69 73 57 72 69 74 65 4c 6f 63 6b 29 3b 0a  , isWriteLock);.
35500 20 20 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20      if( rc ){.  
35510 20 20 20 20 69 66 28 20 28 72 63 26 30 78 46 46      if( (rc&0xFF
35520 29 3d 3d 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44  )==SQLITE_LOCKED
35530 20 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73   ){.        cons
35540 74 20 63 68 61 72 20 2a 7a 20 3d 20 70 4f 70 2d  t char *z = pOp-
35550 3e 70 34 2e 7a 3b 0a 20 20 20 20 20 20 20 20 73  >p4.z;.        s
35560 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72 28  qlite3VdbeError(
35570 70 2c 20 22 64 61 74 61 62 61 73 65 20 74 61 62  p, "database tab
35580 6c 65 20 69 73 20 6c 6f 63 6b 65 64 3a 20 25 73  le is locked: %s
35590 22 2c 20 7a 29 3b 0a 20 20 20 20 20 20 7d 0a 20  ", z);.      }. 
355a0 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
355b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
355c0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
355d0 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
355e0 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f  ITE_OMIT_SHARED_
355f0 43 41 43 48 45 20 2a 2f 0a 0a 23 69 66 6e 64 65  CACHE */..#ifnde
35600 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
35610 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70  RTUALTABLE./* Op
35620 63 6f 64 65 3a 20 56 42 65 67 69 6e 20 2a 20 2a  code: VBegin * *
35630 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34   * P4 *.**.** P4
35640 20 6d 61 79 20 62 65 20 61 20 70 6f 69 6e 74 65   may be a pointe
35650 72 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f  r to an sqlite3_
35660 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 20  vtab structure. 
35670 49 66 20 73 6f 2c 20 63 61 6c 6c 20 74 68 65 20  If so, call the 
35680 0a 2a 2a 20 78 42 65 67 69 6e 20 6d 65 74 68 6f  .** xBegin metho
35690 64 20 66 6f 72 20 74 68 61 74 20 74 61 62 6c 65  d for that table
356a0 2e 0a 2a 2a 0a 2a 2a 20 41 6c 73 6f 2c 20 77 68  ..**.** Also, wh
356b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 50 34 20  ether or not P4 
356c0 69 73 20 73 65 74 2c 20 63 68 65 63 6b 20 74 68  is set, check th
356d0 61 74 20 74 68 69 73 20 69 73 20 6e 6f 74 20 62  at this is not b
356e0 65 69 6e 67 20 63 61 6c 6c 65 64 20 66 72 6f 6d  eing called from
356f0 0a 2a 2a 20 77 69 74 68 69 6e 20 61 20 63 61 6c  .** within a cal
35700 6c 62 61 63 6b 20 74 6f 20 61 20 76 69 72 74 75  lback to a virtu
35710 61 6c 20 74 61 62 6c 65 20 78 53 79 6e 63 28 29  al table xSync()
35720 20 6d 65 74 68 6f 64 2e 20 49 66 20 69 74 20 69   method. If it i
35730 73 2c 20 74 68 65 20 65 72 72 6f 72 0a 2a 2a 20  s, the error.** 
35740 63 6f 64 65 20 77 69 6c 6c 20 62 65 20 73 65 74  code will be set
35750 20 74 6f 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   to SQLITE_LOCKE
35760 44 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 42  D..*/.case OP_VB
35770 65 67 69 6e 3a 20 7b 0a 20 20 56 54 61 62 6c 65  egin: {.  VTable
35780 20 2a 70 56 54 61 62 3b 0a 20 20 70 56 54 61 62   *pVTab;.  pVTab
35790 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62   = pOp->p4.pVtab
357a0 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
357b0 56 74 61 62 42 65 67 69 6e 28 64 62 2c 20 70 56  VtabBegin(db, pV
357c0 54 61 62 29 3b 0a 20 20 69 66 28 20 70 56 54 61  Tab);.  if( pVTa
357d0 62 20 29 20 73 71 6c 69 74 65 33 56 74 61 62 49  b ) sqlite3VtabI
357e0 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20 70  mportErrmsg(p, p
357f0 56 54 61 62 2d 3e 70 56 74 61 62 29 3b 0a 20 20  VTab->pVtab);.  
35800 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35810 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35820 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35830 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35840 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35850 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35860 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35870 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35880 56 43 72 65 61 74 65 20 50 31 20 50 32 20 2a 20  VCreate P1 P2 * 
35890 2a 20 2a 0a 2a 2a 0a 2a 2a 20 50 32 20 69 73 20  * *.**.** P2 is 
358a0 61 20 72 65 67 69 73 74 65 72 20 74 68 61 74 20  a register that 
358b0 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 20 6f  holds the name o
358c0 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
358d0 65 20 69 6e 20 64 61 74 61 62 61 73 65 20 0a 2a  e in database .*
358e0 2a 20 50 31 2e 20 43 61 6c 6c 20 74 68 65 20 78  * P1. Call the x
358f0 43 72 65 61 74 65 20 6d 65 74 68 6f 64 20 66 6f  Create method fo
35900 72 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2f  r that table..*/
35910 0a 63 61 73 65 20 4f 50 5f 56 43 72 65 61 74 65  .case OP_VCreate
35920 3a 20 7b 0a 20 20 4d 65 6d 20 73 4d 65 6d 3b 20  : {.  Mem sMem; 
35930 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20           /* For 
35940 73 74 6f 72 69 6e 67 20 74 68 65 20 72 65 63 6f  storing the reco
35950 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
35960 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
35970 20 2a 7a 54 61 62 3b 20 20 2f 2a 20 4e 61 6d 65   *zTab;  /* Name
35980 20 6f 66 20 74 68 65 20 76 69 72 74 75 61 6c 20   of the virtual 
35990 74 61 62 6c 65 20 2a 2f 0a 0a 20 20 6d 65 6d 73  table */..  mems
359a0 65 74 28 26 73 4d 65 6d 2c 20 30 2c 20 73 69 7a  et(&sMem, 0, siz
359b0 65 6f 66 28 73 4d 65 6d 29 29 3b 0a 20 20 73 4d  eof(sMem));.  sM
359c0 65 6d 2e 64 62 20 3d 20 64 62 3b 0a 20 20 2f 2a  em.db = db;.  /*
359d0 20 42 65 63 61 75 73 65 20 50 32 20 69 73 20 61   Because P2 is a
359e0 6c 77 61 79 73 20 61 20 73 74 61 74 69 63 20 73  lways a static s
359f0 74 72 69 6e 67 2c 20 69 74 20 69 73 20 69 6d 70  tring, it is imp
35a00 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68 65 0a  ossible for the.
35a10 20 20 2a 2a 20 73 71 6c 69 74 65 33 56 64 62 65    ** sqlite3Vdbe
35a20 4d 65 6d 43 6f 70 79 28 29 20 74 6f 20 66 61 69  MemCopy() to fai
35a30 6c 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28  l */.  assert( (
35a40 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
35a50 61 67 73 20 26 20 4d 45 4d 5f 53 74 72 29 21 3d  ags & MEM_Str)!=
35a60 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 28  0 );.  assert( (
35a70 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 2e 66 6c  aMem[pOp->p2].fl
35a80 61 67 73 20 26 20 4d 45 4d 5f 53 74 61 74 69 63  ags & MEM_Static
35a90 29 21 3d 30 20 29 3b 0a 20 20 72 63 20 3d 20 73  )!=0 );.  rc = s
35aa0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f 70  qlite3VdbeMemCop
35ab0 79 28 26 73 4d 65 6d 2c 20 26 61 4d 65 6d 5b 70  y(&sMem, &aMem[p
35ac0 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 61 73 73 65  Op->p2]);.  asse
35ad0 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
35ae0 4b 20 29 3b 0a 20 20 7a 54 61 62 20 3d 20 28 63  K );.  zTab = (c
35af0 6f 6e 73 74 20 63 68 61 72 2a 29 73 71 6c 69 74  onst char*)sqlit
35b00 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 26 73  e3_value_text(&s
35b10 4d 65 6d 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Mem);.  assert( 
35b20 7a 54 61 62 20 7c 7c 20 64 62 2d 3e 6d 61 6c 6c  zTab || db->mall
35b30 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20 20 69 66  ocFailed );.  if
35b40 28 20 7a 54 61 62 20 29 7b 0a 20 20 20 20 72 63  ( zTab ){.    rc
35b50 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 43 61   = sqlite3VtabCa
35b60 6c 6c 43 72 65 61 74 65 28 64 62 2c 20 70 4f 70  llCreate(db, pOp
35b70 2d 3e 70 31 2c 20 7a 54 61 62 2c 20 26 70 2d 3e  ->p1, zTab, &p->
35b80 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a 20 20  zErrMsg);.  }.  
35b90 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65  sqlite3VdbeMemRe
35ba0 6c 65 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20  lease(&sMem);.  
35bb0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
35bc0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
35bd0 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e  ;.  break;.}.#en
35be0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
35bf0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
35c00 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
35c10 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
35c20 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
35c30 56 44 65 73 74 72 6f 79 20 50 31 20 2a 20 2a 20  VDestroy P1 * * 
35c40 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73  P4 *.**.** P4 is
35c50 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
35c60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
35c70 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 43 61  database P1.  Ca
35c80 6c 6c 20 74 68 65 20 78 44 65 73 74 72 6f 79 20  ll the xDestroy 
35c90 6d 65 74 68 6f 64 0a 2a 2a 20 6f 66 20 74 68 61  method.** of tha
35ca0 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
35cb0 20 4f 50 5f 56 44 65 73 74 72 6f 79 3a 20 7b 0a   OP_VDestroy: {.
35cc0 20 20 64 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b    db->nVDestroy+
35cd0 2b 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  +;.  rc = sqlite
35ce0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
35cf0 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f  (db, pOp->p1, pO
35d00 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 64 62 2d 3e  p->p4.z);.  db->
35d10 6e 56 44 65 73 74 72 6f 79 2d 2d 3b 0a 20 20 69  nVDestroy--;.  i
35d20 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
35d30 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
35d40 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
35d50 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
35d60 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
35d70 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
35d80 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
35d90 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
35da0 4f 70 65 6e 20 50 31 20 2a 20 2a 20 50 34 20 2a  Open P1 * * P4 *
35db0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70  .**.** P4 is a p
35dc0 6f 69 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74  ointer to a virt
35dd0 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74  ual table object
35de0 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61  , an sqlite3_vta
35df0 62 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20  b structure..** 
35e00 50 31 20 69 73 20 61 20 63 75 72 73 6f 72 20 6e  P1 is a cursor n
35e10 75 6d 62 65 72 2e 20 20 54 68 69 73 20 6f 70 63  umber.  This opc
35e20 6f 64 65 20 6f 70 65 6e 73 20 61 20 63 75 72 73  ode opens a curs
35e30 6f 72 20 74 6f 20 74 68 65 20 76 69 72 74 75 61  or to the virtua
35e40 6c 0a 2a 2a 20 74 61 62 6c 65 20 61 6e 64 20 73  l.** table and s
35e50 74 6f 72 65 73 20 74 68 61 74 20 63 75 72 73 6f  tores that curso
35e60 72 20 69 6e 20 50 31 2e 0a 2a 2f 0a 63 61 73 65  r in P1..*/.case
35e70 20 4f 50 5f 56 4f 70 65 6e 3a 20 7b 0a 20 20 56   OP_VOpen: {.  V
35e80 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b  dbeCursor *pCur;
35e90 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 5f  .  sqlite3_vtab_
35ea0 63 75 72 73 6f 72 20 2a 70 56 43 75 72 3b 0a 20  cursor *pVCur;. 
35eb0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70   sqlite3_vtab *p
35ec0 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71  Vtab;.  const sq
35ed0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d  lite3_module *pM
35ee0 6f 64 75 6c 65 3b 0a 0a 20 20 61 73 73 65 72 74  odule;..  assert
35ef0 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20 29  ( p->bIsReader )
35f00 3b 0a 20 20 70 43 75 72 20 3d 20 30 3b 0a 20 20  ;.  pCur = 0;.  
35f10 70 56 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 74  pVCur = 0;.  pVt
35f20 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74  ab = pOp->p4.pVt
35f30 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 69 66 28  ab->pVtab;.  if(
35f40 20 70 56 74 61 62 3d 3d 30 20 7c 7c 20 4e 45 56   pVtab==0 || NEV
35f50 45 52 28 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c  ER(pVtab->pModul
35f60 65 3d 3d 30 29 20 29 7b 0a 20 20 20 20 72 63 20  e==0) ){.    rc 
35f70 3d 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 3b  = SQLITE_LOCKED;
35f80 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f  .    goto abort_
35f90 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
35fa0 7d 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56  }.  pModule = pV
35fb0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20  tab->pModule;.  
35fc0 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4f  rc = pModule->xO
35fd0 70 65 6e 28 70 56 74 61 62 2c 20 26 70 56 43 75  pen(pVtab, &pVCu
35fe0 72 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61  r);.  sqlite3Vta
35ff0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c  bImportErrmsg(p,
36000 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72   pVtab);.  if( r
36010 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
36020 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20  ue_to_error;..  
36030 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20 73 71  /* Initialize sq
36040 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
36050 72 20 62 61 73 65 20 63 6c 61 73 73 20 2a 2f 0a  r base class */.
36060 20 20 70 56 43 75 72 2d 3e 70 56 74 61 62 20 3d    pVCur->pVtab =
36070 20 70 56 74 61 62 3b 0a 0a 20 20 2f 2a 20 49 6e   pVtab;..  /* In
36080 69 74 69 61 6c 69 7a 65 20 76 64 62 65 20 63 75  itialize vdbe cu
36090 72 73 6f 72 20 6f 62 6a 65 63 74 20 2a 2f 0a 20  rsor object */. 
360a0 20 70 43 75 72 20 3d 20 61 6c 6c 6f 63 61 74 65   pCur = allocate
360b0 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
360c0 31 2c 20 30 2c 20 2d 31 2c 20 43 55 52 54 59 50  1, 0, -1, CURTYP
360d0 45 5f 56 54 41 42 29 3b 0a 20 20 69 66 28 20 70  E_VTAB);.  if( p
360e0 43 75 72 20 29 7b 0a 20 20 20 20 70 43 75 72 2d  Cur ){.    pCur-
360f0 3e 75 63 2e 70 56 43 75 72 20 3d 20 70 56 43 75  >uc.pVCur = pVCu
36100 72 3b 0a 20 20 20 20 70 56 74 61 62 2d 3e 6e 52  r;.    pVtab->nR
36110 65 66 2b 2b 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  ef++;.  }else{. 
36120 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6d     assert( db->m
36130 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 3b 0a 20  allocFailed );. 
36140 20 20 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6c 6f     pModule->xClo
36150 73 65 28 70 56 43 75 72 29 3b 0a 20 20 20 20 67  se(pVCur);.    g
36160 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a  oto no_mem;.  }.
36170 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69    break;.}.#endi
36180 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
36190 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f  _VIRTUALTABLE */
361a0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
361b0 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
361c0 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 46  LE./* Opcode: VF
361d0 69 6c 74 65 72 20 50 31 20 50 32 20 50 33 20 50  ilter P1 P2 P3 P
361e0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
361f0 20 69 70 6c 61 6e 3d 72 5b 50 33 5d 20 7a 70 6c   iplan=r[P3] zpl
36200 61 6e 3d 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 31  an='P4'.**.** P1
36210 20 69 73 20 61 20 63 75 72 73 6f 72 20 6f 70 65   is a cursor ope
36220 6e 65 64 20 75 73 69 6e 67 20 56 4f 70 65 6e 2e  ned using VOpen.
36230 20 20 50 32 20 69 73 20 61 6e 20 61 64 64 72 65    P2 is an addre
36240 73 73 20 74 6f 20 6a 75 6d 70 20 74 6f 20 69 66  ss to jump to if
36250 0a 2a 2a 20 74 68 65 20 66 69 6c 74 65 72 65 64  .** the filtered
36260 20 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65   result set is e
36270 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  mpty..**.** P4 i
36280 73 20 65 69 74 68 65 72 20 4e 55 4c 4c 20 6f 72  s either NULL or
36290 20 61 20 73 74 72 69 6e 67 20 74 68 61 74 20 77   a string that w
362a0 61 73 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  as generated by 
362b0 74 68 65 20 78 42 65 73 74 49 6e 64 65 78 0a 2a  the xBestIndex.*
362c0 2a 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  * method of the 
362d0 6d 6f 64 75 6c 65 2e 20 20 54 68 65 20 69 6e 74  module.  The int
362e0 65 72 70 72 65 74 61 74 69 6f 6e 20 6f 66 20 74  erpretation of t
362f0 68 65 20 50 34 20 73 74 72 69 6e 67 20 69 73 20  he P4 string is 
36300 6c 65 66 74 0a 2a 2a 20 74 6f 20 74 68 65 20 6d  left.** to the m
36310 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
36320 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  tion..**.** This
36330 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20   opcode invokes 
36340 74 68 65 20 78 46 69 6c 74 65 72 20 6d 65 74 68  the xFilter meth
36350 6f 64 20 6f 6e 20 74 68 65 20 76 69 72 74 75 61  od on the virtua
36360 6c 20 74 61 62 6c 65 20 73 70 65 63 69 66 69 65  l table specifie
36370 64 0a 2a 2a 20 62 79 20 50 31 2e 20 20 54 68 65  d.** by P1.  The
36380 20 69 6e 74 65 67 65 72 20 71 75 65 72 79 20 70   integer query p
36390 6c 61 6e 20 70 61 72 61 6d 65 74 65 72 20 74 6f  lan parameter to
363a0 20 78 46 69 6c 74 65 72 20 69 73 20 73 74 6f 72   xFilter is stor
363b0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 0a 2a  ed in register.*
363c0 2a 20 50 33 2e 20 52 65 67 69 73 74 65 72 20 50  * P3. Register P
363d0 33 2b 31 20 73 74 6f 72 65 73 20 74 68 65 20 61  3+1 stores the a
363e0 72 67 63 20 70 61 72 61 6d 65 74 65 72 20 74 6f  rgc parameter to
363f0 20 62 65 20 70 61 73 73 65 64 20 74 6f 20 74 68   be passed to th
36400 65 0a 2a 2a 20 78 46 69 6c 74 65 72 20 6d 65 74  e.** xFilter met
36410 68 6f 64 2e 20 52 65 67 69 73 74 65 72 73 20 50  hod. Registers P
36420 33 2b 32 2e 2e 50 33 2b 31 2b 61 72 67 63 20 61  3+2..P3+1+argc a
36430 72 65 20 74 68 65 20 61 72 67 63 0a 2a 2a 20 61  re the argc.** a
36440 64 64 69 74 69 6f 6e 61 6c 20 70 61 72 61 6d 65  dditional parame
36450 74 65 72 73 20 77 68 69 63 68 20 61 72 65 20 70  ters which are p
36460 61 73 73 65 64 20 74 6f 0a 2a 2a 20 78 46 69 6c  assed to.** xFil
36470 74 65 72 20 61 73 20 61 72 67 76 2e 20 52 65 67  ter as argv. Reg
36480 69 73 74 65 72 20 50 33 2b 32 20 62 65 63 6f 6d  ister P3+2 becom
36490 65 73 20 61 72 67 76 5b 30 5d 20 77 68 65 6e 20  es argv[0] when 
364a0 70 61 73 73 65 64 20 74 6f 20 78 46 69 6c 74 65  passed to xFilte
364b0 72 2e 0a 2a 2a 0a 2a 2a 20 41 20 6a 75 6d 70 20  r..**.** A jump 
364c0 69 73 20 6d 61 64 65 20 74 6f 20 50 32 20 69 66  is made to P2 if
364d0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
364e0 61 66 74 65 72 20 66 69 6c 74 65 72 69 6e 67 20  after filtering 
364f0 77 6f 75 6c 64 20 62 65 20 65 6d 70 74 79 2e 0a  would be empty..
36500 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 46 69 6c 74  */.case OP_VFilt
36510 65 72 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20  er: {   /* jump 
36520 2a 2f 0a 20 20 69 6e 74 20 6e 41 72 67 3b 0a 20  */.  int nArg;. 
36530 20 69 6e 74 20 69 51 75 65 72 79 3b 0a 20 20 63   int iQuery;.  c
36540 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
36550 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
36560 4d 65 6d 20 2a 70 51 75 65 72 79 3b 0a 20 20 4d  Mem *pQuery;.  M
36570 65 6d 20 2a 70 41 72 67 63 3b 0a 20 20 73 71 6c  em *pArgc;.  sql
36580 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f 72  ite3_vtab_cursor
36590 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69 74   *pVCur;.  sqlit
365a0 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a  e3_vtab *pVtab;.
365b0 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43    VdbeCursor *pC
365c0 75 72 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a 20  ur;.  int res;. 
365d0 20 69 6e 74 20 69 3b 0a 20 20 4d 65 6d 20 2a 2a   int i;.  Mem **
365e0 61 70 41 72 67 3b 0a 0a 20 20 70 51 75 65 72 79  apArg;..  pQuery
365f0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
36600 5d 3b 0a 20 20 70 41 72 67 63 20 3d 20 26 70 51  ];.  pArgc = &pQ
36610 75 65 72 79 5b 31 5d 3b 0a 20 20 70 43 75 72 20  uery[1];.  pCur 
36620 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
36630 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 6d  p1];.  assert( m
36640 65 6d 49 73 56 61 6c 69 64 28 70 51 75 65 72 79  emIsValid(pQuery
36650 29 20 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ) );.  REGISTER_
36660 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20 70  TRACE(pOp->p3, p
36670 51 75 65 72 79 29 3b 0a 20 20 61 73 73 65 72 74  Query);.  assert
36680 28 20 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65  ( pCur->eCurType
36690 3d 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  ==CURTYPE_VTAB )
366a0 3b 0a 20 20 70 56 43 75 72 20 3d 20 70 43 75 72  ;.  pVCur = pCur
366b0 2d 3e 75 63 2e 70 56 43 75 72 3b 0a 20 20 70 56  ->uc.pVCur;.  pV
366c0 74 61 62 20 3d 20 70 56 43 75 72 2d 3e 70 56 74  tab = pVCur->pVt
366d0 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20  ab;.  pModule = 
366e0 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a  pVtab->pModule;.
366f0 0a 20 20 2f 2a 20 47 72 61 62 20 74 68 65 20 69  .  /* Grab the i
36700 6e 64 65 78 20 6e 75 6d 62 65 72 20 61 6e 64 20  ndex number and 
36710 61 72 67 63 20 70 61 72 61 6d 65 74 65 72 73 20  argc parameters 
36720 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 51  */.  assert( (pQ
36730 75 65 72 79 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f  uery->flags&MEM_
36740 49 6e 74 29 21 3d 30 20 26 26 20 70 41 72 67 63  Int)!=0 && pArgc
36750 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
36760 20 29 3b 0a 20 20 6e 41 72 67 20 3d 20 28 69 6e   );.  nArg = (in
36770 74 29 70 41 72 67 63 2d 3e 75 2e 69 3b 0a 20 20  t)pArgc->u.i;.  
36780 69 51 75 65 72 79 20 3d 20 28 69 6e 74 29 70 51  iQuery = (int)pQ
36790 75 65 72 79 2d 3e 75 2e 69 3b 0a 0a 20 20 2f 2a  uery->u.i;..  /*
367a0 20 49 6e 76 6f 6b 65 20 74 68 65 20 78 46 69 6c   Invoke the xFil
367b0 74 65 72 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  ter method */.  
367c0 72 65 73 20 3d 20 30 3b 0a 20 20 61 70 41 72 67  res = 0;.  apArg
367d0 20 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 66   = p->apArg;.  f
367e0 6f 72 28 69 20 3d 20 30 3b 20 69 3c 6e 41 72 67  or(i = 0; i<nArg
367f0 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61 70 41 72  ; i++){.    apAr
36800 67 5b 69 5d 20 3d 20 26 70 41 72 67 63 5b 69 2b  g[i] = &pArgc[i+
36810 31 5d 3b 0a 20 20 7d 0a 20 20 72 63 20 3d 20 70  1];.  }.  rc = p
36820 4d 6f 64 75 6c 65 2d 3e 78 46 69 6c 74 65 72 28  Module->xFilter(
36830 70 56 43 75 72 2c 20 69 51 75 65 72 79 2c 20 70  pVCur, iQuery, p
36840 4f 70 2d 3e 70 34 2e 7a 2c 20 6e 41 72 67 2c 20  Op->p4.z, nArg, 
36850 61 70 41 72 67 29 3b 0a 20 20 73 71 6c 69 74 65  apArg);.  sqlite
36860 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
36870 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20 20 69  g(p, pVtab);.  i
36880 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
36890 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
368a0 0a 20 20 72 65 73 20 3d 20 70 4d 6f 64 75 6c 65  .  res = pModule
368b0 2d 3e 78 45 6f 66 28 70 56 43 75 72 29 3b 0a 20  ->xEof(pVCur);. 
368c0 20 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d   pCur->nullRow =
368d0 20 30 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   0;.  VdbeBranch
368e0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
368f0 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
36900 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
36910 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20  break;.}.#endif 
36920 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  /* SQLITE_OMIT_V
36930 49 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a  IRTUALTABLE */..
36940 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
36950 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
36960 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 6f 6c  ./* Opcode: VCol
36970 75 6d 6e 20 50 31 20 50 32 20 50 33 20 2a 20 2a  umn P1 P2 P3 * *
36980 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
36990 50 33 5d 3d 76 63 6f 6c 75 6d 6e 28 50 32 29 0a  P3]=vcolumn(P2).
369a0 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
369b0 76 61 6c 75 65 20 6f 66 20 74 68 65 20 50 32 2d  value of the P2-
369c0 74 68 20 63 6f 6c 75 6d 6e 20 6f 66 0a 2a 2a 20  th column of.** 
369d0 74 68 65 20 72 6f 77 20 6f 66 20 74 68 65 20 76  the row of the v
369e0 69 72 74 75 61 6c 2d 74 61 62 6c 65 20 74 68 61  irtual-table tha
369f0 74 20 74 68 65 20 0a 2a 2a 20 50 31 20 63 75 72  t the .** P1 cur
36a00 73 6f 72 20 69 73 20 70 6f 69 6e 74 69 6e 67 20  sor is pointing 
36a10 74 6f 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72  to into register
36a20 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P3..*/.case OP_
36a30 56 43 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 73 71 6c  VColumn: {.  sql
36a40 69 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62  ite3_vtab *pVtab
36a50 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65  ;.  const sqlite
36a60 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c  3_module *pModul
36a70 65 3b 0a 20 20 4d 65 6d 20 2a 70 44 65 73 74 3b  e;.  Mem *pDest;
36a80 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  .  sqlite3_conte
36a90 78 74 20 73 43 6f 6e 74 65 78 74 3b 0a 0a 20 20  xt sContext;..  
36aa0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 75 72  VdbeCursor *pCur
36ab0 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
36ac0 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
36ad0 70 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d  pCur->eCurType==
36ae0 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a  CURTYPE_VTAB );.
36af0 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
36b00 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
36b10 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
36b20 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70 44  nCursor) );.  pD
36b30 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  est = &aMem[pOp-
36b40 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p3];.  memAbout
36b50 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65 73  ToChange(p, pDes
36b60 74 29 3b 0a 20 20 69 66 28 20 70 43 75 72 2d 3e  t);.  if( pCur->
36b70 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20 73  nullRow ){.    s
36b80 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
36b90 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 20  Null(pDest);.   
36ba0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 70 56   break;.  }.  pV
36bb0 74 61 62 20 3d 20 70 43 75 72 2d 3e 75 63 2e 70  tab = pCur->uc.p
36bc0 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20 20 70  VCur->pVtab;.  p
36bd0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
36be0 70 4d 6f 64 75 6c 65 3b 0a 20 20 61 73 73 65 72  pModule;.  asser
36bf0 74 28 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c  t( pModule->xCol
36c00 75 6d 6e 20 29 3b 0a 20 20 6d 65 6d 73 65 74 28  umn );.  memset(
36c10 26 73 43 6f 6e 74 65 78 74 2c 20 30 2c 20 73 69  &sContext, 0, si
36c20 7a 65 6f 66 28 73 43 6f 6e 74 65 78 74 29 29 3b  zeof(sContext));
36c30 0a 20 20 73 43 6f 6e 74 65 78 74 2e 70 4f 75 74  .  sContext.pOut
36c40 20 3d 20 70 44 65 73 74 3b 0a 20 20 4d 65 6d 53   = pDest;.  MemS
36c50 65 74 54 79 70 65 46 6c 61 67 28 70 44 65 73 74  etTypeFlag(pDest
36c60 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20 20 72  , MEM_Null);.  r
36c70 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 43 6f  c = pModule->xCo
36c80 6c 75 6d 6e 28 70 43 75 72 2d 3e 75 63 2e 70 56  lumn(pCur->uc.pV
36c90 43 75 72 2c 20 26 73 43 6f 6e 74 65 78 74 2c 20  Cur, &sContext, 
36ca0 70 4f 70 2d 3e 70 32 29 3b 0a 20 20 73 71 6c 69  pOp->p2);.  sqli
36cb0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
36cc0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
36cd0 20 69 66 28 20 73 43 6f 6e 74 65 78 74 2e 69 73   if( sContext.is
36ce0 45 72 72 6f 72 20 29 7b 0a 20 20 20 20 72 63 20  Error ){.    rc 
36cf0 3d 20 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72  = sContext.isErr
36d00 6f 72 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  or;.  }.  sqlite
36d10 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
36d20 69 6e 67 28 70 44 65 73 74 2c 20 65 6e 63 6f 64  ing(pDest, encod
36d30 69 6e 67 29 3b 0a 20 20 52 45 47 49 53 54 45 52  ing);.  REGISTER
36d40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
36d50 70 44 65 73 74 29 3b 0a 20 20 55 50 44 41 54 45  pDest);.  UPDATE
36d60 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 44  _MAX_BLOBSIZE(pD
36d70 65 73 74 29 3b 0a 0a 20 20 69 66 28 20 73 71 6c  est);..  if( sql
36d80 69 74 65 33 56 64 62 65 4d 65 6d 54 6f 6f 42 69  ite3VdbeMemTooBi
36d90 67 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20  g(pDest) ){.    
36da0 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20  goto too_big;.  
36db0 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74  }.  if( rc ) got
36dc0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
36dd0 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  rror;.  break;.}
36de0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
36df0 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36e00 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
36e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
36e20 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f  UALTABLE./* Opco
36e30 64 65 3a 20 56 4e 65 78 74 20 50 31 20 50 32 20  de: VNext P1 P2 
36e40 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 41 64 76 61  * * *.**.** Adva
36e50 6e 63 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  nce virtual tabl
36e60 65 20 50 31 20 74 6f 20 74 68 65 20 6e 65 78 74  e P1 to the next
36e70 20 72 6f 77 20 69 6e 20 69 74 73 20 72 65 73 75   row in its resu
36e80 6c 74 20 73 65 74 20 61 6e 64 0a 2a 2a 20 6a 75  lt set and.** ju
36e90 6d 70 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f  mp to instructio
36ea0 6e 20 50 32 2e 20 20 4f 72 2c 20 69 66 20 74 68  n P2.  Or, if th
36eb0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
36ec0 68 61 73 20 72 65 61 63 68 65 64 0a 2a 2a 20 74  has reached.** t
36ed0 68 65 20 65 6e 64 20 6f 66 20 69 74 73 20 72 65  he end of its re
36ee0 73 75 6c 74 20 73 65 74 2c 20 74 68 65 6e 20 66  sult set, then f
36ef0 61 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74  all through to t
36f00 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74  he next instruct
36f10 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ion..*/.case OP_
36f20 56 4e 65 78 74 3a 20 7b 20 20 20 2f 2a 20 6a 75  VNext: {   /* ju
36f30 6d 70 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  mp */.  sqlite3_
36f40 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
36f50 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
36f60 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
36f70 69 6e 74 20 72 65 73 3b 0a 20 20 56 64 62 65 43  int res;.  VdbeC
36f80 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 0a 20 20  ursor *pCur;..  
36f90 72 65 73 20 3d 20 30 3b 0a 20 20 70 43 75 72 20  res = 0;.  pCur 
36fa0 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
36fb0 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
36fc0 43 75 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43  Cur->eCurType==C
36fd0 55 52 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20  URTYPE_VTAB );. 
36fe0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
36ff0 6f 77 20 29 7b 0a 20 20 20 20 62 72 65 61 6b 3b  ow ){.    break;
37000 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d 20 70  .  }.  pVtab = p
37010 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d 3e 70  Cur->uc.pVCur->p
37020 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c 65 20  Vtab;.  pModule 
37030 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65  = pVtab->pModule
37040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64  ;.  assert( pMod
37050 75 6c 65 2d 3e 78 4e 65 78 74 20 29 3b 0a 0a 20  ule->xNext );.. 
37060 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 78   /* Invoke the x
37070 4e 65 78 74 28 29 20 6d 65 74 68 6f 64 20 6f 66  Next() method of
37080 20 74 68 65 20 6d 6f 64 75 6c 65 2e 20 54 68 65   the module. The
37090 72 65 20 69 73 20 6e 6f 20 77 61 79 20 66 6f 72  re is no way for
370a0 20 74 68 65 0a 20 20 2a 2a 20 75 6e 64 65 72 6c   the.  ** underl
370b0 79 69 6e 67 20 69 6d 70 6c 65 6d 65 6e 74 61 74  ying implementat
370c0 69 6f 6e 20 74 6f 20 72 65 74 75 72 6e 20 61 6e  ion to return an
370d0 20 65 72 72 6f 72 20 69 66 20 6f 6e 65 20 6f 63   error if one oc
370e0 63 75 72 73 20 64 75 72 69 6e 67 0a 20 20 2a 2a  curs during.  **
370f0 20 78 4e 65 78 74 28 29 2e 20 49 6e 73 74 65 61   xNext(). Instea
37100 64 2c 20 69 66 20 61 6e 20 65 72 72 6f 72 20 6f  d, if an error o
37110 63 63 75 72 73 2c 20 74 72 75 65 20 69 73 20 72  ccurs, true is r
37120 65 74 75 72 6e 65 64 20 28 69 6e 64 69 63 61 74  eturned (indicat
37130 69 6e 67 20 74 68 61 74 20 0a 20 20 2a 2a 20 64  ing that .  ** d
37140 61 74 61 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ata is available
37150 29 20 61 6e 64 20 74 68 65 20 65 72 72 6f 72 20  ) and the error 
37160 63 6f 64 65 20 72 65 74 75 72 6e 65 64 20 77 68  code returned wh
37170 65 6e 20 78 43 6f 6c 75 6d 6e 20 6f 72 0a 20 20  en xColumn or.  
37180 2a 2a 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d 65  ** some other me
37190 74 68 6f 64 20 69 73 20 6e 65 78 74 20 69 6e 76  thod is next inv
371a0 6f 6b 65 64 20 6f 6e 20 74 68 65 20 73 61 76 65  oked on the save
371b0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 63   virtual table c
371c0 75 72 73 6f 72 2e 0a 20 20 2a 2f 0a 20 20 72 63  ursor..  */.  rc
371d0 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 4e 65 78   = pModule->xNex
371e0 74 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  t(pCur->uc.pVCur
371f0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
37200 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
37210 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
37220 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
37230 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65  e_to_error;.  re
37240 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
37250 66 28 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72  f(pCur->uc.pVCur
37260 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68 54  );.  VdbeBranchT
37270 61 6b 65 6e 28 21 72 65 73 2c 32 29 3b 0a 20 20  aken(!res,2);.  
37280 69 66 28 20 21 72 65 73 20 29 7b 0a 20 20 20 20  if( !res ){.    
37290 2f 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 64  /* If there is d
372a0 61 74 61 2c 20 6a 75 6d 70 20 74 6f 20 50 32 20  ata, jump to P2 
372b0 2a 2f 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  */.    goto jump
372c0 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63 6b  _to_p2_and_check
372d0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
372e0 20 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b    }.  goto check
372f0 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a  _for_interrupt;.
37300 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
37310 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
37320 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  ABLE */..#ifndef
37330 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
37340 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f 70 63  TUALTABLE./* Opc
37350 6f 64 65 3a 20 56 52 65 6e 61 6d 65 20 50 31 20  ode: VRename P1 
37360 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 50  * * P4 *.**.** P
37370 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  4 is a pointer t
37380 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  o a virtual tabl
37390 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71 6c  e object, an sql
373a0 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63 74  ite3_vtab struct
373b0 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70 63  ure..** This opc
373c0 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20  ode invokes the 
373d0 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78 52  corresponding xR
373e0 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e 20 54 68  ename method. Th
373f0 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 72 65  e value.** in re
37400 67 69 73 74 65 72 20 50 31 20 69 73 20 70 61 73  gister P1 is pas
37410 73 65 64 20 61 73 20 74 68 65 20 7a 4e 61 6d 65  sed as the zName
37420 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
37430 20 78 52 65 6e 61 6d 65 20 6d 65 74 68 6f 64 2e   xRename method.
37440 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 52 65 6e  .*/.case OP_VRen
37450 61 6d 65 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33  ame: {.  sqlite3
37460 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20  _vtab *pVtab;.  
37470 4d 65 6d 20 2a 70 4e 61 6d 65 3b 0a 0a 20 20 70  Mem *pName;..  p
37480 56 74 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  Vtab = pOp->p4.p
37490 56 74 61 62 2d 3e 70 56 74 61 62 3b 0a 20 20 70  Vtab->pVtab;.  p
374a0 4e 61 6d 65 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Name = &aMem[pOp
374b0 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
374c0 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 2d   pVtab->pModule-
374d0 3e 78 52 65 6e 61 6d 65 20 29 3b 0a 20 20 61 73  >xRename );.  as
374e0 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
374f0 28 70 4e 61 6d 65 29 20 29 3b 0a 20 20 61 73 73  (pName) );.  ass
37500 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
37510 3d 3d 30 20 29 3b 0a 20 20 52 45 47 49 53 54 45  ==0 );.  REGISTE
37520 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c  R_TRACE(pOp->p1,
37530 20 70 4e 61 6d 65 29 3b 0a 20 20 61 73 73 65 72   pName);.  asser
37540 74 28 20 70 4e 61 6d 65 2d 3e 66 6c 61 67 73 20  t( pName->flags 
37550 26 20 4d 45 4d 5f 53 74 72 20 29 3b 0a 20 20 74  & MEM_Str );.  t
37560 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d 3e  estcase( pName->
37570 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
37580 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20   );.  testcase( 
37590 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d 53 51 4c 49  pName->enc==SQLI
375a0 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20 20  TE_UTF16BE );.  
375b0 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65 2d  testcase( pName-
375c0 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  >enc==SQLITE_UTF
375d0 31 36 4c 45 20 29 3b 0a 20 20 72 63 20 3d 20 73  16LE );.  rc = s
375e0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
375f0 45 6e 63 6f 64 69 6e 67 28 70 4e 61 6d 65 2c 20  Encoding(pName, 
37600 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20  SQLITE_UTF8);.  
37610 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
37620 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
37630 3b 0a 20 20 72 63 20 3d 20 70 56 74 61 62 2d 3e  ;.  rc = pVtab->
37640 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e 61 6d 65  pModule->xRename
37650 28 70 56 74 61 62 2c 20 70 4e 61 6d 65 2d 3e 7a  (pVtab, pName->z
37660 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
37670 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
37680 70 56 74 61 62 29 3b 0a 20 20 70 2d 3e 65 78 70  pVtab);.  p->exp
37690 69 72 65 64 20 3d 20 30 3b 0a 20 20 69 66 28 20  ired = 0;.  if( 
376a0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
376b0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
376c0 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a  break;.}.#endif.
376d0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
376e0 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
376f0 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 55 70  E./* Opcode: VUp
37700 64 61 74 65 20 50 31 20 50 32 20 50 33 20 50 34  date P1 P2 P3 P4
37710 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
37720 20 64 61 74 61 3d 72 5b 50 33 40 50 32 5d 0a 2a   data=r[P3@P2].*
37730 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69  *.** P4 is a poi
37740 6e 74 65 72 20 74 6f 20 61 20 76 69 72 74 75 61  nter to a virtua
37750 6c 20 74 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20  l table object, 
37760 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
37770 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 20 54 68  structure..** Th
37780 69 73 20 6f 70 63 6f 64 65 20 69 6e 76 6f 6b 65  is opcode invoke
37790 73 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64  s the correspond
377a0 69 6e 67 20 78 55 70 64 61 74 65 20 6d 65 74 68  ing xUpdate meth
377b0 6f 64 2e 20 50 32 20 76 61 6c 75 65 73 0a 2a 2a  od. P2 values.**
377c0 20 61 72 65 20 63 6f 6e 74 69 67 75 6f 75 73 20   are contiguous 
377d0 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 73 74 61  memory cells sta
377e0 72 74 69 6e 67 20 61 74 20 50 33 20 74 6f 20 70  rting at P3 to p
377f0 61 73 73 20 74 6f 20 74 68 65 20 78 55 70 64 61  ass to the xUpda
37800 74 65 20 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f  te .** invocatio
37810 6e 2e 20 54 68 65 20 76 61 6c 75 65 20 69 6e 20  n. The value in 
37820 72 65 67 69 73 74 65 72 20 28 50 33 2b 50 32 2d  register (P3+P2-
37830 31 29 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  1) corresponds t
37840 6f 20 74 68 65 20 0a 2a 2a 20 70 32 74 68 20 65  o the .** p2th e
37850 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 61 72  lement of the ar
37860 67 76 20 61 72 72 61 79 20 70 61 73 73 65 64 20  gv array passed 
37870 74 6f 20 78 55 70 64 61 74 65 2e 0a 2a 2a 0a 2a  to xUpdate..**.*
37880 2a 20 54 68 65 20 78 55 70 64 61 74 65 20 6d 65  * The xUpdate me
37890 74 68 6f 64 20 77 69 6c 6c 20 64 6f 20 61 20 44  thod will do a D
378a0 45 4c 45 54 45 20 6f 72 20 61 6e 20 49 4e 53 45  ELETE or an INSE
378b0 52 54 20 6f 72 20 62 6f 74 68 2e 0a 2a 2a 20 54  RT or both..** T
378c0 68 65 20 61 72 67 76 5b 30 5d 20 65 6c 65 6d 65  he argv[0] eleme
378d0 6e 74 20 28 77 68 69 63 68 20 63 6f 72 72 65 73  nt (which corres
378e0 70 6f 6e 64 73 20 74 6f 20 6d 65 6d 6f 72 79 20  ponds to memory 
378f0 63 65 6c 6c 20 50 33 29 0a 2a 2a 20 69 73 20 74  cell P3).** is t
37900 68 65 20 72 6f 77 69 64 20 6f 66 20 61 20 72 6f  he rowid of a ro
37910 77 20 74 6f 20 64 65 6c 65 74 65 2e 20 20 49 66  w to delete.  If
37920 20 61 72 67 76 5b 30 5d 20 69 73 20 4e 55 4c 4c   argv[0] is NULL
37930 20 74 68 65 6e 20 6e 6f 20 0a 2a 2a 20 64 65 6c   then no .** del
37940 65 74 69 6f 6e 20 6f 63 63 75 72 73 2e 20 20 54  etion occurs.  T
37950 68 65 20 61 72 67 76 5b 31 5d 20 65 6c 65 6d 65  he argv[1] eleme
37960 6e 74 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  nt is the rowid 
37970 6f 66 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72  of the new .** r
37980 6f 77 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65  ow.  This can be
37990 20 4e 55 4c 4c 20 74 6f 20 68 61 76 65 20 74 68   NULL to have th
379a0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
379b0 73 65 6c 65 63 74 20 74 68 65 20 6e 65 77 20 0a  select the new .
379c0 2a 2a 20 72 6f 77 69 64 20 66 6f 72 20 69 74 73  ** rowid for its
379d0 65 6c 66 2e 20 20 54 68 65 20 73 75 62 73 65 71  elf.  The subseq
379e0 75 65 6e 74 20 65 6c 65 6d 65 6e 74 73 20 69 6e  uent elements in
379f0 20 74 68 65 20 61 72 72 61 79 20 61 72 65 20 0a   the array are .
37a00 2a 2a 20 74 68 65 20 76 61 6c 75 65 73 20 6f 66  ** the values of
37a10 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20   columns in the 
37a20 6e 65 77 20 72 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49  new row..**.** I
37a30 66 20 50 32 3d 3d 31 20 74 68 65 6e 20 6e 6f 20  f P2==1 then no 
37a40 69 6e 73 65 72 74 20 69 73 20 70 65 72 66 6f 72  insert is perfor
37a50 6d 65 64 2e 20 20 61 72 67 76 5b 30 5d 20 69 73  med.  argv[0] is
37a60 20 74 68 65 20 72 6f 77 69 64 20 6f 66 0a 2a 2a   the rowid of.**
37a70 20 61 20 72 6f 77 20 74 6f 20 64 65 6c 65 74 65   a row to delete
37a80 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61 20  ..**.** P1 is a 
37a90 62 6f 6f 6c 65 61 6e 20 66 6c 61 67 2e 20 49 66  boolean flag. If
37aa0 20 69 74 20 69 73 20 73 65 74 20 74 6f 20 74 72   it is set to tr
37ab0 75 65 20 61 6e 64 20 74 68 65 20 78 55 70 64 61  ue and the xUpda
37ac0 74 65 20 63 61 6c 6c 0a 2a 2a 20 69 73 20 73 75  te call.** is su
37ad0 63 63 65 73 73 66 75 6c 2c 20 74 68 65 6e 20 74  ccessful, then t
37ae0 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65  he value returne
37af0 64 20 62 79 20 73 71 6c 69 74 65 33 5f 6c 61 73  d by sqlite3_las
37b00 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 29  t_insert_rowid()
37b10 20 0a 2a 2a 20 69 73 20 73 65 74 20 74 6f 20 74   .** is set to t
37b20 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
37b30 72 6f 77 69 64 20 66 6f 72 20 74 68 65 20 72 6f  rowid for the ro
37b40 77 20 6a 75 73 74 20 69 6e 73 65 72 74 65 64 2e  w just inserted.
37b50 0a 2a 2a 0a 2a 2a 20 50 35 20 69 73 20 74 68 65  .**.** P5 is the
37b60 20 65 72 72 6f 72 20 61 63 74 69 6f 6e 73 20 28   error actions (
37b70 4f 45 5f 52 65 70 6c 61 63 65 2c 20 4f 45 5f 46  OE_Replace, OE_F
37b80 61 69 6c 2c 20 4f 45 5f 49 67 6e 6f 72 65 2c 20  ail, OE_Ignore, 
37b90 65 74 63 29 20 74 6f 0a 2a 2a 20 61 70 70 6c 79  etc) to.** apply
37ba0 20 69 6e 20 74 68 65 20 63 61 73 65 20 6f 66 20   in the case of 
37bb0 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69  a constraint fai
37bc0 6c 75 72 65 20 6f 6e 20 61 6e 20 69 6e 73 65 72  lure on an inser
37bd0 74 20 6f 72 20 75 70 64 61 74 65 2e 0a 2a 2f 0a  t or update..*/.
37be0 63 61 73 65 20 4f 50 5f 56 55 70 64 61 74 65 3a  case OP_VUpdate:
37bf0 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61   {.  sqlite3_vta
37c00 62 20 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73  b *pVtab;.  cons
37c10 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65  t sqlite3_module
37c20 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74   *pModule;.  int
37c30 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20 69 3b 0a   nArg;.  int i;.
37c40 20 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 72    sqlite_int64 r
37c50 6f 77 69 64 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70  owid;.  Mem **ap
37c60 41 72 67 3b 0a 20 20 4d 65 6d 20 2a 70 58 3b 0a  Arg;.  Mem *pX;.
37c70 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
37c80 70 32 3d 3d 31 20 20 20 20 20 20 20 20 7c 7c 20  p2==1        || 
37c90 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 46 61 69 6c  pOp->p5==OE_Fail
37ca0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
37cb0 45 5f 52 6f 6c 6c 62 61 63 6b 20 0a 20 20 20 20  E_Rollback .    
37cc0 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f     || pOp->p5==O
37cd0 45 5f 41 62 6f 72 74 20 7c 7c 20 70 4f 70 2d 3e  E_Abort || pOp->
37ce0 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 7c 7c  p5==OE_Ignore ||
37cf0 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 65 70   pOp->p5==OE_Rep
37d00 6c 61 63 65 0a 20 20 29 3b 0a 20 20 61 73 73 65  lace.  );.  asse
37d10 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d  rt( p->readOnly=
37d20 3d 30 20 29 3b 0a 20 20 70 56 74 61 62 20 3d 20  =0 );.  pVtab = 
37d30 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
37d40 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
37d50 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
37d60 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
37d70 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
37d80 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
37d90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37da0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
37db0 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
37dc0 70 4d 6f 64 75 6c 65 3b 0a 20 20 6e 41 72 67 20  pModule;.  nArg 
37dd0 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73 73  = pOp->p2;.  ass
37de0 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
37df0 3d 3d 50 34 5f 56 54 41 42 20 29 3b 0a 20 20 69  ==P4_VTAB );.  i
37e00 66 28 20 41 4c 57 41 59 53 28 70 4d 6f 64 75 6c  f( ALWAYS(pModul
37e10 65 2d 3e 78 55 70 64 61 74 65 29 20 29 7b 0a 20  e->xUpdate) ){. 
37e20 20 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66     u8 vtabOnConf
37e30 6c 69 63 74 20 3d 20 64 62 2d 3e 76 74 61 62 4f  lict = db->vtabO
37e40 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20 20 61  nConflict;.    a
37e50 70 41 72 67 20 3d 20 70 2d 3e 61 70 41 72 67 3b  pArg = p->apArg;
37e60 0a 20 20 20 20 70 58 20 3d 20 26 61 4d 65 6d 5b  .    pX = &aMem[
37e70 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 66 6f  pOp->p3];.    fo
37e80 72 28 69 3d 30 3b 20 69 3c 6e 41 72 67 3b 20 69  r(i=0; i<nArg; i
37e90 2b 2b 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  ++){.      asser
37ea0 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 58  t( memIsValid(pX
37eb0 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d 41 62  ) );.      memAb
37ec0 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70  outToChange(p, p
37ed0 58 29 3b 0a 20 20 20 20 20 20 61 70 41 72 67 5b  X);.      apArg[
37ee0 69 5d 20 3d 20 70 58 3b 0a 20 20 20 20 20 20 70  i] = pX;.      p
37ef0 58 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20 64  X++;.    }.    d
37f00 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63  b->vtabOnConflic
37f10 74 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a 20 20 20  t = pOp->p5;.   
37f20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78   rc = pModule->x
37f30 55 70 64 61 74 65 28 70 56 74 61 62 2c 20 6e 41  Update(pVtab, nA
37f40 72 67 2c 20 61 70 41 72 67 2c 20 26 72 6f 77 69  rg, apArg, &rowi
37f50 64 29 3b 0a 20 20 20 20 64 62 2d 3e 76 74 61 62  d);.    db->vtab
37f60 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 76 74 61  OnConflict = vta
37f70 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b 0a 20 20 20  bOnConflict;.   
37f80 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
37f90 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
37fa0 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  b);.    if( rc==
37fb0 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 70 4f 70  SQLITE_OK && pOp
37fc0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 20 20 61 73  ->p1 ){.      as
37fd0 73 65 72 74 28 20 6e 41 72 67 3e 31 20 26 26 20  sert( nArg>1 && 
37fe0 61 70 41 72 67 5b 30 5d 20 26 26 20 28 61 70 41  apArg[0] && (apA
37ff0 72 67 5b 30 5d 2d 3e 66 6c 61 67 73 26 4d 45 4d  rg[0]->flags&MEM
38000 5f 4e 75 6c 6c 29 20 29 3b 0a 20 20 20 20 20 20  _Null) );.      
38010 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d 20  db->lastRowid = 
38020 72 6f 77 69 64 3b 0a 20 20 20 20 7d 0a 20 20 20  rowid;.    }.   
38030 20 69 66 28 20 28 72 63 26 30 78 66 66 29 3d 3d   if( (rc&0xff)==
38040 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
38050 54 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70 56 74  T && pOp->p4.pVt
38060 61 62 2d 3e 62 43 6f 6e 73 74 72 61 69 6e 74 20  ab->bConstraint 
38070 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 4f 70  ){.      if( pOp
38080 2d 3e 70 35 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20  ->p5==OE_Ignore 
38090 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
380a0 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 20  SQLITE_OK;.     
380b0 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
380c0 70 2d 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d  p->errorAction =
380d0 20 28 28 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52   ((pOp->p5==OE_R
380e0 65 70 6c 61 63 65 29 20 3f 20 4f 45 5f 41 62 6f  eplace) ? OE_Abo
380f0 72 74 20 3a 20 70 4f 70 2d 3e 70 35 29 3b 0a 20  rt : pOp->p5);. 
38100 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
38110 7b 0a 20 20 20 20 20 20 70 2d 3e 6e 43 68 61 6e  {.      p->nChan
38120 67 65 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ge++;.    }.    
38130 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
38140 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
38150 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
38160 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
38170 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
38180 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  BLE */..#ifndef 
38190 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
381a0 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20 4f 70  ER_PRAGMAS./* Op
381b0 63 6f 64 65 3a 20 50 61 67 65 63 6f 75 6e 74 20  code: Pagecount 
381c0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a  P1 P2 * * *.**.*
381d0 2a 20 57 72 69 74 65 20 74 68 65 20 63 75 72 72  * Write the curr
381e0 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  ent number of pa
381f0 67 65 73 20 69 6e 20 64 61 74 61 62 61 73 65 20  ges in database 
38200 50 31 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c  P1 to memory cel
38210 6c 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  l P2..*/.case OP
38220 5f 50 61 67 65 63 6f 75 6e 74 3a 20 7b 20 20 20  _Pagecount: {   
38230 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
38240 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74   */.  pOut = out
38250 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
38260 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69  Op);.  pOut->u.i
38270 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 4c   = sqlite3BtreeL
38280 61 73 74 50 61 67 65 28 64 62 2d 3e 61 44 62 5b  astPage(db->aDb[
38290 70 4f 70 2d 3e 70 31 5d 2e 70 42 74 29 3b 0a 20  pOp->p1].pBt);. 
382a0 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66   break;.}.#endif
382b0 0a 0a 0a 23 69 66 6e 64 65 66 20 20 53 51 4c 49  ...#ifndef  SQLI
382c0 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
382d0 41 47 4d 41 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a  AGMAS./* Opcode:
382e0 20 4d 61 78 50 67 63 6e 74 20 50 31 20 50 32 20   MaxPgcnt P1 P2 
382f0 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 72 79  P3 * *.**.** Try
38300 20 74 6f 20 73 65 74 20 74 68 65 20 6d 61 78 69   to set the maxi
38310 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
38320 6f 72 20 64 61 74 61 62 61 73 65 20 50 31 20 74  or database