/ Hex Artifact Content
Login

Artifact 2d90c42f2117b36e92c3af6a9c9f380b22e6e3b8:


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 20  put operand */. 
4ae0: 20 69 6e 74 20 2a 61 50 65 72 6d 75 74 65 20 3d   int *aPermute =
4af0: 20 30 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50   0;         /* P
4b00: 65 72 6d 75 74 61 74 69 6f 6e 20 6f 66 20 63 6f  ermutation of co
4b10: 6c 75 6d 6e 73 20 66 6f 72 20 4f 50 5f 43 6f 6d  lumns for OP_Com
4b20: 70 61 72 65 20 2a 2f 0a 20 20 69 36 34 20 6c 61  pare */.  i64 la
4b30: 73 74 52 6f 77 69 64 20 3d 20 64 62 2d 3e 6c 61  stRowid = db->la
4b40: 73 74 52 6f 77 69 64 3b 20 20 2f 2a 20 53 61 76  stRowid;  /* Sav
4b50: 65 64 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  ed value of the 
4b60: 6c 61 73 74 20 69 6e 73 65 72 74 20 52 4f 57 49  last insert ROWI
4b70: 44 20 2a 2f 0a 23 69 66 64 65 66 20 56 44 42 45  D */.#ifdef VDBE
4b80: 5f 50 52 4f 46 49 4c 45 0a 20 20 75 36 34 20 73  _PROFILE.  u64 s
4b90: 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20 20  tart;           
4ba0: 20 20 20 20 20 20 2f 2a 20 43 50 55 20 63 6c 6f        /* CPU clo
4bb0: 63 6b 20 63 6f 75 6e 74 20 61 74 20 73 74 61 72  ck count at star
4bc0: 74 20 6f 66 20 6f 70 63 6f 64 65 20 2a 2f 0a 23  t of opcode */.#
4bd0: 65 6e 64 69 66 0a 20 20 2f 2a 2a 2a 20 49 4e 53  endif.  /*** INS
4be0: 45 52 54 20 53 54 41 43 4b 20 55 4e 49 4f 4e 20  ERT STACK UNION 
4bf0: 48 45 52 45 20 2a 2a 2a 2f 0a 0a 20 20 61 73 73  HERE ***/..  ass
4c00: 65 72 74 28 20 70 2d 3e 6d 61 67 69 63 3d 3d 56  ert( p->magic==V
4c10: 44 42 45 5f 4d 41 47 49 43 5f 52 55 4e 20 29 3b  DBE_MAGIC_RUN );
4c20: 20 20 2f 2a 20 73 71 6c 69 74 65 33 5f 73 74 65    /* sqlite3_ste
4c30: 70 28 29 20 76 65 72 69 66 69 65 73 20 74 68 69  p() verifies thi
4c40: 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 56 64  s */.  sqlite3Vd
4c50: 62 65 45 6e 74 65 72 28 70 29 3b 0a 20 20 69 66  beEnter(p);.  if
4c60: 28 20 70 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f  ( p->rc==SQLITE_
4c70: 4e 4f 4d 45 4d 20 29 7b 0a 20 20 20 20 2f 2a 20  NOMEM ){.    /* 
4c80: 54 68 69 73 20 68 61 70 70 65 6e 73 20 69 66 20  This happens if 
4c90: 61 20 6d 61 6c 6c 6f 63 28 29 20 69 6e 73 69 64  a malloc() insid
4ca0: 65 20 61 20 63 61 6c 6c 20 74 6f 20 73 71 6c 69  e a call to sqli
4cb0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28  te3_column_text(
4cc0: 29 20 6f 72 0a 20 20 20 20 2a 2a 20 73 71 6c 69  ) or.    ** sqli
4cd0: 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 31  te3_column_text1
4ce0: 36 28 29 20 66 61 69 6c 65 64 2e 20 20 2a 2f 0a  6() failed.  */.
4cf0: 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b      goto no_mem;
4d00: 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70  .  }.  assert( p
4d10: 2d 3e 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->rc==SQLITE_OK 
4d20: 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66 29 3d  || (p->rc&0xff)=
4d30: 3d 53 51 4c 49 54 45 5f 42 55 53 59 20 29 3b 0a  =SQLITE_BUSY );.
4d40: 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
4d50: 52 65 61 64 65 72 20 7c 7c 20 70 2d 3e 72 65 61  Reader || p->rea
4d60: 64 4f 6e 6c 79 21 3d 30 20 29 3b 0a 20 20 70 2d  dOnly!=0 );.  p-
4d70: 3e 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b  >rc = SQLITE_OK;
4d80: 0a 20 20 70 2d 3e 69 43 75 72 72 65 6e 74 54 69  .  p->iCurrentTi
4d90: 6d 65 20 3d 20 30 3b 0a 20 20 61 73 73 65 72 74  me = 0;.  assert
4da0: 28 20 70 2d 3e 65 78 70 6c 61 69 6e 3d 3d 30 20  ( p->explain==0 
4db0: 29 3b 0a 20 20 70 2d 3e 70 52 65 73 75 6c 74 53  );.  p->pResultS
4dc0: 65 74 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75  et = 0;.  db->bu
4dd0: 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20  syHandler.nBusy 
4de0: 3d 20 30 3b 0a 20 20 69 66 28 20 64 62 2d 3e 75  = 0;.  if( db->u
4df0: 31 2e 69 73 49 6e 74 65 72 72 75 70 74 65 64 20  1.isInterrupted 
4e00: 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
4e10: 5f 74 6f 5f 69 6e 74 65 72 72 75 70 74 3b 0a 20  _to_interrupt;. 
4e20: 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54 72   sqlite3VdbeIOTr
4e30: 61 63 65 53 71 6c 28 70 29 3b 0a 23 69 66 6e 64  aceSql(p);.#ifnd
4e40: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
4e50: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
4e60: 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 6f 67  .  if( db->xProg
4e70: 72 65 73 73 20 29 7b 0a 20 20 20 20 75 33 32 20  ress ){.    u32 
4e80: 69 50 72 69 6f 72 20 3d 20 70 2d 3e 61 43 6f 75  iPrior = p->aCou
4e90: 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d 54  nter[SQLITE_STMT
4ea0: 53 54 41 54 55 53 5f 56 4d 5f 53 54 45 50 5d 3b  STATUS_VM_STEP];
4eb0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 30 20 3c  .    assert( 0 <
4ec0: 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70   db->nProgressOp
4ed0: 73 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65  s );.    nProgre
4ee0: 73 73 4c 69 6d 69 74 20 3d 20 64 62 2d 3e 6e 50  ssLimit = db->nP
4ef0: 72 6f 67 72 65 73 73 4f 70 73 20 2d 20 28 69 50  rogressOps - (iP
4f00: 72 69 6f 72 20 25 20 64 62 2d 3e 6e 50 72 6f 67  rior % db->nProg
4f10: 72 65 73 73 4f 70 73 29 3b 0a 20 20 7d 0a 23 65  ressOps);.  }.#e
4f20: 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
4f30: 54 45 5f 44 45 42 55 47 0a 20 20 73 71 6c 69 74  TE_DEBUG.  sqlit
4f40: 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c  e3BeginBenignMal
4f50: 6c 6f 63 28 29 3b 0a 20 20 69 66 28 20 70 2d 3e  loc();.  if( p->
4f60: 70 63 3d 3d 30 0a 20 20 20 26 26 20 28 70 2d 3e  pc==0.   && (p->
4f70: 64 62 2d 3e 66 6c 61 67 73 20 26 20 28 53 51 4c  db->flags & (SQL
4f80: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c  ITE_VdbeListing|
4f90: 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 7c 53  SQLITE_VdbeEQP|S
4fa0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 29  QLITE_VdbeTrace)
4fb0: 29 21 3d 30 0a 20 20 29 7b 0a 20 20 20 20 69 6e  )!=0.  ){.    in
4fc0: 74 20 69 3b 0a 20 20 20 20 69 6e 74 20 6f 6e 63  t i;.    int onc
4fd0: 65 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  e = 1;.    sqlit
4fe0: 65 33 56 64 62 65 50 72 69 6e 74 53 71 6c 28 70  e3VdbePrintSql(p
4ff0: 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e 64 62  );.    if( p->db
5000: 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45  ->flags & SQLITE
5010: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 29 7b 0a  _VdbeListing ){.
5020: 20 20 20 20 20 20 70 72 69 6e 74 66 28 22 56 44        printf("VD
5030: 42 45 20 50 72 6f 67 72 61 6d 20 4c 69 73 74 69  BE Program Listi
5040: 6e 67 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20 66  ng:\n");.      f
5050: 6f 72 28 69 3d 30 3b 20 69 3c 70 2d 3e 6e 4f 70  or(i=0; i<p->nOp
5060: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
5070: 73 71 6c 69 74 65 33 56 64 62 65 50 72 69 6e 74  sqlite3VdbePrint
5080: 4f 70 28 73 74 64 6f 75 74 2c 20 69 2c 20 26 61  Op(stdout, i, &a
5090: 4f 70 5b 69 5d 29 3b 0a 20 20 20 20 20 20 7d 0a  Op[i]);.      }.
50a0: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 2d      }.    if( p-
50b0: 3e 64 62 2d 3e 66 6c 61 67 73 20 26 20 53 51 4c  >db->flags & SQL
50c0: 49 54 45 5f 56 64 62 65 45 51 50 20 29 7b 0a 20  ITE_VdbeEQP ){. 
50d0: 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c       for(i=0; i<
50e0: 70 2d 3e 6e 4f 70 3b 20 69 2b 2b 29 7b 0a 20 20  p->nOp; i++){.  
50f0: 20 20 20 20 20 20 69 66 28 20 61 4f 70 5b 69 5d        if( aOp[i]
5100: 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 78 70 6c  .opcode==OP_Expl
5110: 61 69 6e 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ain ){.         
5120: 20 69 66 28 20 6f 6e 63 65 20 29 20 70 72 69 6e   if( once ) prin
5130: 74 66 28 22 56 44 42 45 20 51 75 65 72 79 20 50  tf("VDBE Query P
5140: 6c 61 6e 3a 5c 6e 22 29 3b 0a 20 20 20 20 20 20  lan:\n");.      
5150: 20 20 20 20 70 72 69 6e 74 66 28 22 25 73 5c 6e      printf("%s\n
5160: 22 2c 20 61 4f 70 5b 69 5d 2e 70 34 2e 7a 29 3b  ", aOp[i].p4.z);
5170: 0a 20 20 20 20 20 20 20 20 20 20 6f 6e 63 65 20  .          once 
5180: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  = 0;.        }. 
5190: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
51a0: 20 69 66 28 20 70 2d 3e 64 62 2d 3e 66 6c 61 67   if( p->db->flag
51b0: 73 20 26 20 53 51 4c 49 54 45 5f 56 64 62 65 54  s & SQLITE_VdbeT
51c0: 72 61 63 65 20 29 20 20 70 72 69 6e 74 66 28 22  race )  printf("
51d0: 56 44 42 45 20 54 72 61 63 65 3a 5c 6e 22 29 3b  VDBE Trace:\n");
51e0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 45 6e  .  }.  sqlite3En
51f0: 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 3b  dBenignMalloc();
5200: 0a 23 65 6e 64 69 66 0a 20 20 66 6f 72 28 70 4f  .#endif.  for(pO
5210: 70 3d 26 61 4f 70 5b 70 2d 3e 70 63 5d 3b 20 31  p=&aOp[p->pc]; 1
5220: 3b 20 70 4f 70 2b 2b 29 7b 0a 20 20 20 20 2f 2a  ; pOp++){.    /*
5230: 20 45 72 72 6f 72 73 20 61 72 65 20 64 65 74 65   Errors are dete
5240: 63 74 65 64 20 62 79 20 69 6e 64 69 76 69 64 75  cted by individu
5250: 61 6c 20 6f 70 63 6f 64 65 73 2c 20 77 69 74 68  al opcodes, with
5260: 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 0a 20 20   an immediate.  
5270: 20 20 2a 2a 20 6a 75 6d 70 73 20 74 6f 20 61 62    ** jumps to ab
5280: 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
5290: 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72 74 28  . */.    assert(
52a0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
52b0: 3b 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ;..    assert( p
52c0: 4f 70 3e 3d 61 4f 70 20 26 26 20 70 4f 70 3c 26  Op>=aOp && pOp<&
52d0: 61 4f 70 5b 70 2d 3e 6e 4f 70 5d 29 3b 0a 23 69  aOp[p->nOp]);.#i
52e0: 66 64 65 66 20 56 44 42 45 5f 50 52 4f 46 49 4c  fdef VDBE_PROFIL
52f0: 45 0a 20 20 20 20 73 74 61 72 74 20 3d 20 73 71  E.    start = sq
5300: 6c 69 74 65 33 48 77 74 69 6d 65 28 29 3b 0a 23  lite3Hwtime();.#
5310: 65 6e 64 69 66 0a 20 20 20 20 6e 56 6d 53 74 65  endif.    nVmSte
5320: 70 2b 2b 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  p++;.#ifdef SQLI
5330: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
5340: 43 41 4e 53 54 41 54 55 53 0a 20 20 20 20 69 66  CANSTATUS.    if
5350: 28 20 70 2d 3e 61 6e 45 78 65 63 20 29 20 70 2d  ( p->anExec ) p-
5360: 3e 61 6e 45 78 65 63 5b 28 69 6e 74 29 28 70 4f  >anExec[(int)(pO
5370: 70 2d 61 4f 70 29 5d 2b 2b 3b 0a 23 65 6e 64 69  p-aOp)]++;.#endi
5380: 66 0a 0a 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 61  f..    /* Only a
5390: 6c 6c 6f 77 20 74 72 61 63 69 6e 67 20 69 66 20  llow tracing if 
53a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73 20  SQLITE_DEBUG is 
53b0: 64 65 66 69 6e 65 64 2e 0a 20 20 20 20 2a 2f 0a  defined..    */.
53c0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
53d0: 42 55 47 0a 20 20 20 20 69 66 28 20 64 62 2d 3e  BUG.    if( db->
53e0: 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 56  flags & SQLITE_V
53f0: 64 62 65 54 72 61 63 65 20 29 7b 0a 20 20 20 20  dbeTrace ){.    
5400: 20 20 73 71 6c 69 74 65 33 56 64 62 65 50 72 69    sqlite3VdbePri
5410: 6e 74 4f 70 28 73 74 64 6f 75 74 2c 20 28 69 6e  ntOp(stdout, (in
5420: 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 2c 20 70  t)(pOp - aOp), p
5430: 4f 70 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  Op);.    }.#endi
5440: 66 0a 20 20 20 20 20 20 0a 0a 20 20 20 20 2f 2a  f.      ..    /*
5450: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66   Check to see if
5460: 20 77 65 20 6e 65 65 64 20 74 6f 20 73 69 6d 75   we need to simu
5470: 6c 61 74 65 20 61 6e 20 69 6e 74 65 72 72 75 70  late an interrup
5480: 74 2e 20 20 54 68 69 73 20 6f 6e 6c 79 20 68 61  t.  This only ha
5490: 70 70 65 6e 73 0a 20 20 20 20 2a 2a 20 69 66 20  ppens.    ** if 
54a0: 77 65 20 68 61 76 65 20 61 20 73 70 65 63 69 61  we have a specia
54b0: 6c 20 74 65 73 74 20 62 75 69 6c 64 2e 0a 20 20  l test build..  
54c0: 20 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49    */.#ifdef SQLI
54d0: 54 45 5f 54 45 53 54 0a 20 20 20 20 69 66 28 20  TE_TEST.    if( 
54e0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
54f0: 74 5f 63 6f 75 6e 74 3e 30 20 29 7b 0a 20 20 20  t_count>0 ){.   
5500: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72     sqlite3_inter
5510: 72 75 70 74 5f 63 6f 75 6e 74 2d 2d 3b 0a 20 20  rupt_count--;.  
5520: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
5530: 69 6e 74 65 72 72 75 70 74 5f 63 6f 75 6e 74 3d  interrupt_count=
5540: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
5550: 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28  lite3_interrupt(
5560: 64 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  db);.      }.   
5570: 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 2f   }.#endif..    /
5580: 2a 20 53 61 6e 69 74 79 20 63 68 65 63 6b 69 6e  * Sanity checkin
5590: 67 20 6f 6e 20 6f 74 68 65 72 20 6f 70 65 72 61  g on other opera
55a0: 6e 64 73 20 2a 2f 0a 23 69 66 64 65 66 20 53 51  nds */.#ifdef SQ
55b0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b  LITE_DEBUG.    {
55c0: 0a 20 20 20 20 20 20 75 38 20 6f 70 50 72 6f 70  .      u8 opProp
55d0: 65 72 74 79 20 3d 20 73 71 6c 69 74 65 33 4f 70  erty = sqlite3Op
55e0: 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 70 4f 70  codeProperty[pOp
55f0: 2d 3e 6f 70 63 6f 64 65 5d 3b 0a 20 20 20 20 20  ->opcode];.     
5600: 20 69 66 28 20 28 6f 70 50 72 6f 70 65 72 74 79   if( (opProperty
5610: 20 26 20 4f 50 46 4c 47 5f 49 4e 31 29 21 3d 30   & OPFLG_IN1)!=0
5620: 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
5630: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 29 3b  rt( pOp->p1>0 );
5640: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
5650: 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e 4d   pOp->p1<=(p->nM
5660: 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f  em+1 - p->nCurso
5670: 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73  r) );.        as
5680: 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64  sert( memIsValid
5690: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 29  (&aMem[pOp->p1])
56a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
56b0: 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
56c0: 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
56d0: 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  s(&aMem[pOp->p1]
56e0: 29 20 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47  ) );.        REG
56f0: 49 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d  ISTER_TRACE(pOp-
5700: 3e 70 31 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  >p1, &aMem[pOp->
5710: 70 31 5d 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  p1]);.      }.  
5720: 20 20 20 20 69 66 28 20 28 6f 70 50 72 6f 70 65      if( (opPrope
5730: 72 74 79 20 26 20 4f 50 46 4c 47 5f 49 4e 32 29  rty & OPFLG_IN2)
5740: 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 61  !=0 ){.        a
5750: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30  ssert( pOp->p2>0
5760: 20 29 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65   );.        asse
5770: 72 74 28 20 70 4f 70 2d 3e 70 32 3c 3d 28 70 2d  rt( pOp->p2<=(p-
5780: 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
5790: 72 73 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20  rsor) );.       
57a0: 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
57b0: 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
57c0: 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20 61  2]) );.        a
57d0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 56 64  ssert( sqlite3Vd
57e0: 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69  beCheckMemInvari
57f0: 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e  ants(&aMem[pOp->
5800: 70 32 5d 29 20 29 3b 0a 20 20 20 20 20 20 20 20  p2]) );.        
5810: 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
5820: 4f 70 2d 3e 70 32 2c 20 26 61 4d 65 6d 5b 70 4f  Op->p2, &aMem[pO
5830: 70 2d 3e 70 32 5d 29 3b 0a 20 20 20 20 20 20 7d  p->p2]);.      }
5840: 0a 20 20 20 20 20 20 69 66 28 20 28 6f 70 50 72  .      if( (opPr
5850: 6f 70 65 72 74 79 20 26 20 4f 50 46 4c 47 5f 49  operty & OPFLG_I
5860: 4e 33 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  N3)!=0 ){.      
5870: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
5880: 33 3e 30 20 29 3b 0a 20 20 20 20 20 20 20 20 61  3>0 );.        a
5890: 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 3d  ssert( pOp->p3<=
58a0: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
58b0: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 20 20  nCursor) );.    
58c0: 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
58d0: 73 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70  sValid(&aMem[pOp
58e0: 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20 20  ->p3]) );.      
58f0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
5900: 33 56 64 62 65 43 68 65 63 6b 4d 65 6d 49 6e 76  3VdbeCheckMemInv
5910: 61 72 69 61 6e 74 73 28 26 61 4d 65 6d 5b 70 4f  ariants(&aMem[pO
5920: 70 2d 3e 70 33 5d 29 20 29 3b 0a 20 20 20 20 20  p->p3]) );.     
5930: 20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43     REGISTER_TRAC
5940: 45 28 70 4f 70 2d 3e 70 33 2c 20 26 61 4d 65 6d  E(pOp->p3, &aMem
5950: 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20 20 20  [pOp->p3]);.    
5960: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 6f    }.      if( (o
5970: 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46 4c  pProperty & OPFL
5980: 47 5f 4f 55 54 32 29 21 3d 30 20 29 7b 0a 20 20  G_OUT2)!=0 ){.  
5990: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f        assert( pO
59a0: 70 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 20 20 20  p->p2>0 );.     
59b0: 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e     assert( pOp->
59c0: 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d  p2<=(p->nMem+1 -
59d0: 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a   p->nCursor) );.
59e0: 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74          memAbout
59f0: 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d 65  ToChange(p, &aMe
5a00: 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b 0a 20 20 20  m[pOp->p2]);.   
5a10: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
5a20: 6f 70 50 72 6f 70 65 72 74 79 20 26 20 4f 50 46  opProperty & OPF
5a30: 4c 47 5f 4f 55 54 33 29 21 3d 30 20 29 7b 0a 20  LG_OUT3)!=0 ){. 
5a40: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
5a50: 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
5a60: 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d      assert( pOp-
5a70: 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  >p3<=(p->nMem+1 
5a80: 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b  - p->nCursor) );
5a90: 0a 20 20 20 20 20 20 20 20 6d 65 6d 41 62 6f 75  .        memAbou
5aa0: 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 26 61 4d  tToChange(p, &aM
5ab0: 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29 3b 0a 20 20  em[pOp->p3]);.  
5ac0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 65 6e 64      }.    }.#end
5ad0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
5ae0: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
5af0: 64 65 66 69 6e 65 64 28 56 44 42 45 5f 50 52 4f  defined(VDBE_PRO
5b00: 46 49 4c 45 29 0a 20 20 20 20 70 4f 72 69 67 4f  FILE).    pOrigO
5b10: 70 20 3d 20 70 4f 70 3b 0a 23 65 6e 64 69 66 0a  p = pOp;.#endif.
5b20: 20 20 0a 20 20 20 20 73 77 69 74 63 68 28 20 70    .    switch( p
5b30: 4f 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 0a 2f  Op->opcode ){../
5b40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
5b80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a  *************.**
5b90: 20 57 68 61 74 20 66 6f 6c 6c 6f 77 73 20 69 73   What follows is
5ba0: 20 61 20 6d 61 73 73 69 76 65 20 73 77 69 74 63   a massive switc
5bb0: 68 20 73 74 61 74 65 6d 65 6e 74 20 77 68 65 72  h statement wher
5bc0: 65 20 65 61 63 68 20 63 61 73 65 20 69 6d 70 6c  e each case impl
5bd0: 65 6d 65 6e 74 73 20 61 0a 2a 2a 20 73 65 70 61  ements a.** sepa
5be0: 72 61 74 65 20 69 6e 73 74 72 75 63 74 69 6f 6e  rate instruction
5bf0: 20 69 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20   in the virtual 
5c00: 6d 61 63 68 69 6e 65 2e 20 20 49 66 20 77 65 20  machine.  If we 
5c10: 66 6f 6c 6c 6f 77 20 74 68 65 20 75 73 75 61 6c  follow the usual
5c20: 0a 2a 2a 20 69 6e 64 65 6e 74 61 74 69 6f 6e 20  .** indentation 
5c30: 63 6f 6e 76 65 6e 74 69 6f 6e 73 2c 20 65 61 63  conventions, eac
5c40: 68 20 63 61 73 65 20 73 68 6f 75 6c 64 20 62 65  h case should be
5c50: 20 69 6e 64 65 6e 74 65 64 20 62 79 20 36 20 73   indented by 6 s
5c60: 70 61 63 65 73 2e 20 20 42 75 74 0a 2a 2a 20 74  paces.  But.** t
5c70: 68 61 74 20 69 73 20 61 20 6c 6f 74 20 6f 66 20  hat is a lot of 
5c80: 77 61 73 74 65 64 20 73 70 61 63 65 20 6f 6e 20  wasted space on 
5c90: 74 68 65 20 6c 65 66 74 20 6d 61 72 67 69 6e 2e  the left margin.
5ca0: 20 20 53 6f 20 74 68 65 20 63 6f 64 65 20 77 69    So the code wi
5cb0: 74 68 69 6e 0a 2a 2a 20 74 68 65 20 73 77 69 74  thin.** the swit
5cc0: 63 68 20 73 74 61 74 65 6d 65 6e 74 20 77 69 6c  ch statement wil
5cd0: 6c 20 62 72 65 61 6b 20 77 69 74 68 20 63 6f 6e  l break with con
5ce0: 76 65 6e 74 69 6f 6e 20 61 6e 64 20 62 65 20 66  vention and be f
5cf0: 6c 75 73 68 2d 6c 65 66 74 2e 20 41 6e 6f 74 68  lush-left. Anoth
5d00: 65 72 0a 2a 2a 20 62 69 67 20 63 6f 6d 6d 65 6e  er.** big commen
5d10: 74 20 28 73 69 6d 69 6c 61 72 20 74 6f 20 74 68  t (similar to th
5d20: 69 73 20 6f 6e 65 29 20 77 69 6c 6c 20 6d 61 72  is one) will mar
5d30: 6b 20 74 68 65 20 70 6f 69 6e 74 20 69 6e 20 74  k the point in t
5d40: 68 65 20 63 6f 64 65 20 77 68 65 72 65 0a 2a 2a  he code where.**
5d50: 20 77 65 20 74 72 61 6e 73 69 74 69 6f 6e 20 62   we transition b
5d60: 61 63 6b 20 74 6f 20 6e 6f 72 6d 61 6c 20 69 6e  ack to normal in
5d70: 64 65 6e 74 61 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  dentation..**.**
5d80: 20 54 68 65 20 66 6f 72 6d 61 74 74 69 6e 67 20   The formatting 
5d90: 6f 66 20 65 61 63 68 20 63 61 73 65 20 69 73 20  of each case is 
5da0: 69 6d 70 6f 72 74 61 6e 74 2e 20 20 54 68 65 20  important.  The 
5db0: 6d 61 6b 65 66 69 6c 65 20 66 6f 72 20 53 51 4c  makefile for SQL
5dc0: 69 74 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 73  ite.** generates
5dd0: 20 74 77 6f 20 43 20 66 69 6c 65 73 20 22 6f 70   two C files "op
5de0: 63 6f 64 65 73 2e 68 22 20 61 6e 64 20 22 6f 70  codes.h" and "op
5df0: 63 6f 64 65 73 2e 63 22 20 62 79 20 73 63 61 6e  codes.c" by scan
5e00: 6e 69 6e 67 20 74 68 69 73 0a 2a 2a 20 66 69 6c  ning this.** fil
5e10: 65 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 6c 69  e looking for li
5e20: 6e 65 73 20 74 68 61 74 20 62 65 67 69 6e 20 77  nes that begin w
5e30: 69 74 68 20 22 63 61 73 65 20 4f 50 5f 22 2e 20  ith "case OP_". 
5e40: 20 54 68 65 20 6f 70 63 6f 64 65 73 2e 68 20 66   The opcodes.h f
5e50: 69 6c 65 73 0a 2a 2a 20 77 69 6c 6c 20 62 65 20  iles.** will be 
5e60: 66 69 6c 6c 65 64 20 77 69 74 68 20 23 64 65 66  filled with #def
5e70: 69 6e 65 73 20 74 68 61 74 20 67 69 76 65 20 75  ines that give u
5e80: 6e 69 71 75 65 20 69 6e 74 65 67 65 72 20 76 61  nique integer va
5e90: 6c 75 65 73 20 74 6f 20 65 61 63 68 0a 2a 2a 20  lues to each.** 
5ea0: 6f 70 63 6f 64 65 20 61 6e 64 20 74 68 65 20 6f  opcode and the o
5eb0: 70 63 6f 64 65 73 2e 63 20 66 69 6c 65 20 69 73  pcodes.c file is
5ec0: 20 66 69 6c 6c 65 64 20 77 69 74 68 20 61 6e 20   filled with an 
5ed0: 61 72 72 61 79 20 6f 66 20 73 74 72 69 6e 67 73  array of strings
5ee0: 20 77 68 65 72 65 0a 2a 2a 20 65 61 63 68 20 73   where.** each s
5ef0: 74 72 69 6e 67 20 69 73 20 74 68 65 20 73 79 6d  tring is the sym
5f00: 62 6f 6c 69 63 20 6e 61 6d 65 20 66 6f 72 20 74  bolic name for t
5f10: 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
5f20: 20 6f 70 63 6f 64 65 2e 20 20 49 66 20 74 68 65   opcode.  If the
5f30: 0a 2a 2a 20 63 61 73 65 20 73 74 61 74 65 6d 65  .** case stateme
5f40: 6e 74 20 69 73 20 66 6f 6c 6c 6f 77 65 64 20 62  nt is followed b
5f50: 79 20 61 20 63 6f 6d 6d 65 6e 74 20 6f 66 20 74  y a comment of t
5f60: 68 65 20 66 6f 72 6d 20 22 2f 23 20 73 61 6d 65  he form "/# same
5f70: 20 61 73 20 2e 2e 2e 20 23 2f 22 0a 2a 2a 20 74   as ... #/".** t
5f80: 68 61 74 20 63 6f 6d 6d 65 6e 74 20 69 73 20 75  hat comment is u
5f90: 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  sed to determine
5fa0: 20 74 68 65 20 70 61 72 74 69 63 75 6c 61 72 20   the particular 
5fb0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 70 63  value of the opc
5fc0: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72  ode..**.** Other
5fd0: 20 6b 65 79 77 6f 72 64 73 20 69 6e 20 74 68 65   keywords in the
5fe0: 20 63 6f 6d 6d 65 6e 74 20 74 68 61 74 20 66 6f   comment that fo
5ff0: 6c 6c 6f 77 73 20 65 61 63 68 20 63 61 73 65 20  llows each case 
6000: 61 72 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 63  are used to.** c
6010: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 4f 50 46  onstruct the OPF
6020: 4c 47 5f 49 4e 49 54 49 41 4c 49 5a 45 52 20 76  LG_INITIALIZER v
6030: 61 6c 75 65 20 74 68 61 74 20 69 6e 69 74 69 61  alue that initia
6040: 6c 69 7a 65 73 20 6f 70 63 6f 64 65 50 72 6f 70  lizes opcodeProp
6050: 65 72 74 79 5b 5d 2e 0a 2a 2a 20 4b 65 79 77 6f  erty[]..** Keywo
6060: 72 64 73 20 69 6e 63 6c 75 64 65 3a 20 69 6e 31  rds include: in1
6070: 2c 20 69 6e 32 2c 20 69 6e 33 2c 20 6f 75 74 32  , in2, in3, out2
6080: 2c 20 6f 75 74 33 2e 20 20 53 65 65 0a 2a 2a 20  , out3.  See.** 
6090: 74 68 65 20 6d 6b 6f 70 63 6f 64 65 68 2e 61 77  the mkopcodeh.aw
60a0: 6b 20 73 63 72 69 70 74 20 66 6f 72 20 61 64 64  k script for add
60b0: 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74  itional informat
60c0: 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 44 6f 63 75 6d  ion..**.** Docum
60d0: 65 6e 74 61 74 69 6f 6e 20 61 62 6f 75 74 20 56  entation about V
60e0: 44 42 45 20 6f 70 63 6f 64 65 73 20 69 73 20 67  DBE opcodes is g
60f0: 65 6e 65 72 61 74 65 64 20 62 79 20 73 63 61 6e  enerated by scan
6100: 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 0a 2a  ning this file.*
6110: 2a 20 66 6f 72 20 6c 69 6e 65 73 20 6f 66 20 74  * for lines of t
6120: 68 61 74 20 63 6f 6e 74 61 69 6e 20 22 4f 70 63  hat contain "Opc
6130: 6f 64 65 3a 22 2e 20 20 54 68 61 74 20 6c 69 6e  ode:".  That lin
6140: 65 20 61 6e 64 20 61 6c 6c 20 73 75 62 73 65 71  e and all subseq
6150: 75 65 6e 74 0a 2a 2a 20 63 6f 6d 6d 65 6e 74 20  uent.** comment 
6160: 6c 69 6e 65 73 20 61 72 65 20 75 73 65 64 20 69  lines are used i
6170: 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e  n the generation
6180: 20 6f 66 20 74 68 65 20 6f 70 63 6f 64 65 2e 68   of the opcode.h
6190: 74 6d 6c 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  tml documentatio
61a0: 6e 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a  n.** file..**.**
61b0: 20 53 55 4d 4d 41 52 59 3a 0a 2a 2a 0a 2a 2a 20   SUMMARY:.**.** 
61c0: 20 20 20 20 46 6f 72 6d 61 74 74 69 6e 67 20 69      Formatting i
61d0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 73  s important to s
61e0: 63 72 69 70 74 73 20 74 68 61 74 20 73 63 61 6e  cripts that scan
61f0: 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2a 20 20   this file..**  
6200: 20 20 20 44 6f 20 6e 6f 74 20 64 65 76 69 61 74     Do not deviat
6210: 65 20 66 72 6f 6d 20 74 68 65 20 66 6f 72 6d 61  e from the forma
6220: 74 74 69 6e 67 20 73 74 79 6c 65 20 63 75 72 72  tting style curr
6230: 65 6e 74 6c 79 20 69 6e 20 75 73 65 2e 0a 2a 2a  ently in use..**
6240: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
6250: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6260: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6270: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
6280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
6290: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 47 6f 74  ./* Opcode:  Got
62a0: 6f 20 2a 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a  o * P2 * * *.**.
62b0: 2a 2a 20 41 6e 20 75 6e 63 6f 6e 64 69 74 69 6f  ** An unconditio
62c0: 6e 61 6c 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  nal jump to addr
62d0: 65 73 73 20 50 32 2e 0a 2a 2a 20 54 68 65 20 6e  ess P2..** The n
62e0: 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  ext instruction 
62f0: 65 78 65 63 75 74 65 64 20 77 69 6c 6c 20 62 65  executed will be
6300: 20 0a 2a 2a 20 74 68 65 20 6f 6e 65 20 61 74 20   .** the one at 
6310: 69 6e 64 65 78 20 50 32 20 66 72 6f 6d 20 74 68  index P2 from th
6320: 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 0a 2a  e beginning of.*
6330: 2a 20 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a  * the program..*
6340: 2a 0a 2a 2a 20 54 68 65 20 50 31 20 70 61 72 61  *.** The P1 para
6350: 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 61 63 74  meter is not act
6360: 75 61 6c 6c 79 20 75 73 65 64 20 62 79 20 74 68  ually used by th
6370: 69 73 20 6f 70 63 6f 64 65 2e 20 20 48 6f 77 65  is opcode.  Howe
6380: 76 65 72 2c 20 69 74 0a 2a 2a 20 69 73 20 73 6f  ver, it.** is so
6390: 6d 65 74 69 6d 65 73 20 73 65 74 20 74 6f 20 31  metimes set to 1
63a0: 20 69 6e 73 74 65 61 64 20 6f 66 20 30 20 61 73   instead of 0 as
63b0: 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 63   a hint to the c
63c0: 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c  ommand-line shel
63d0: 6c 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20 47  l.** that this G
63e0: 6f 74 6f 20 69 73 20 74 68 65 20 62 6f 74 74 6f  oto is the botto
63f0: 6d 20 6f 66 20 61 20 6c 6f 6f 70 20 61 6e 64 20  m of a loop and 
6400: 74 68 61 74 20 74 68 65 20 6c 69 6e 65 73 20 66  that the lines f
6410: 72 6f 6d 20 50 32 20 64 6f 77 6e 0a 2a 2a 20 74  rom P2 down.** t
6420: 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 69  o the current li
6430: 6e 65 20 73 68 6f 75 6c 64 20 62 65 20 69 6e 64  ne should be ind
6440: 65 6e 74 65 64 20 66 6f 72 20 45 58 50 4c 41 49  ented for EXPLAI
6450: 4e 20 6f 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73  N output..*/.cas
6460: 65 20 4f 50 5f 47 6f 74 6f 3a 20 7b 20 20 20 20  e OP_Goto: {    
6470: 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70           /* jump
6480: 20 2a 2f 0a 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61   */.jump_to_p2_a
6490: 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74  nd_check_for_int
64a0: 65 72 72 75 70 74 3a 0a 20 20 70 4f 70 20 3d 20  errupt:.  pOp = 
64b0: 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20 31  &aOp[pOp->p2 - 1
64c0: 5d 3b 0a 0a 20 20 2f 2a 20 4f 70 63 6f 64 65 73  ];..  /* Opcodes
64d0: 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20 61   that are used a
64e0: 73 20 74 68 65 20 62 6f 74 74 6f 6d 20 6f 66 20  s the bottom of 
64f0: 61 20 6c 6f 6f 70 20 28 4f 50 5f 4e 65 78 74 2c  a loop (OP_Next,
6500: 20 4f 50 5f 50 72 65 76 2c 0a 20 20 2a 2a 20 4f   OP_Prev,.  ** O
6510: 50 5f 56 4e 65 78 74 2c 20 4f 50 5f 52 6f 77 53  P_VNext, OP_RowS
6520: 65 74 4e 65 78 74 2c 20 6f 72 20 4f 50 5f 53 6f  etNext, or OP_So
6530: 72 74 65 72 4e 65 78 74 29 20 61 6c 6c 20 6a 75  rterNext) all ju
6540: 6d 70 20 68 65 72 65 20 75 70 6f 6e 0a 20 20 2a  mp here upon.  *
6550: 2a 20 63 6f 6d 70 6c 65 74 69 6f 6e 2e 20 20 43  * completion.  C
6560: 68 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 73  heck to see if s
6570: 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70 74  qlite3_interrupt
6580: 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
6590: 65 64 0a 20 20 2a 2a 20 6f 72 20 69 66 20 74 68  ed.  ** or if th
65a0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
65b0: 61 63 6b 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ack needs to be 
65c0: 69 6e 76 6f 6b 65 64 2e 20 0a 20 20 2a 2a 0a 20  invoked. .  **. 
65d0: 20 2a 2a 20 54 68 69 73 20 63 6f 64 65 20 75 73   ** This code us
65e0: 65 73 20 75 6e 73 74 72 75 63 74 75 72 65 64 20  es unstructured 
65f0: 22 67 6f 74 6f 22 20 73 74 61 74 65 6d 65 6e 74  "goto" statement
6600: 73 20 61 6e 64 20 64 6f 65 73 20 6e 6f 74 20 6c  s and does not l
6610: 6f 6f 6b 20 63 6c 65 61 6e 2e 0a 20 20 2a 2a 20  ook clean..  ** 
6620: 42 75 74 20 74 68 61 74 20 69 73 20 6e 6f 74 20  But that is not 
6630: 64 75 65 20 74 6f 20 73 6c 6f 70 70 79 20 63 6f  due to sloppy co
6640: 64 69 6e 67 20 68 61 62 69 74 73 2e 20 54 68 65  ding habits. The
6650: 20 63 6f 64 65 20 69 73 20 77 72 69 74 74 65 6e   code is written
6660: 20 74 68 69 73 0a 20 20 2a 2a 20 77 61 79 20 66   this.  ** way f
6670: 6f 72 20 70 65 72 66 6f 72 6d 61 6e 63 65 2c 20  or performance, 
6680: 74 6f 20 61 76 6f 69 64 20 68 61 76 69 6e 67 20  to avoid having 
6690: 74 6f 20 72 75 6e 20 74 68 65 20 69 6e 74 65 72  to run the inter
66a0: 72 75 70 74 20 61 6e 64 20 70 72 6f 67 72 65 73  rupt and progres
66b0: 73 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 6f 6e  s.  ** checks on
66c0: 20 65 76 65 72 79 20 6f 70 63 6f 64 65 2e 20 20   every opcode.  
66d0: 54 68 69 73 20 68 65 6c 70 73 20 73 71 6c 69 74  This helps sqlit
66e0: 65 33 5f 73 74 65 70 28 29 20 74 6f 20 72 75 6e  e3_step() to run
66f0: 20 61 62 6f 75 74 20 31 2e 35 25 0a 20 20 2a 2a   about 1.5%.  **
6700: 20 66 61 73 74 65 72 20 61 63 63 6f 72 64 69 6e   faster accordin
6710: 67 20 74 6f 20 22 76 61 6c 67 72 69 6e 64 20 2d  g to "valgrind -
6720: 2d 74 6f 6f 6c 3d 63 61 63 68 65 67 72 69 6e 64  -tool=cachegrind
6730: 22 20 2a 2f 0a 63 68 65 63 6b 5f 66 6f 72 5f 69  " */.check_for_i
6740: 6e 74 65 72 72 75 70 74 3a 0a 20 20 69 66 28 20  nterrupt:.  if( 
6750: 64 62 2d 3e 75 31 2e 69 73 49 6e 74 65 72 72 75  db->u1.isInterru
6760: 70 74 65 64 20 29 20 67 6f 74 6f 20 61 62 6f 72  pted ) goto abor
6770: 74 5f 64 75 65 5f 74 6f 5f 69 6e 74 65 72 72 75  t_due_to_interru
6780: 70 74 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  pt;.#ifndef SQLI
6790: 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45 53 53  TE_OMIT_PROGRESS
67a0: 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 2f 2a 20 43  _CALLBACK.  /* C
67b0: 61 6c 6c 20 74 68 65 20 70 72 6f 67 72 65 73 73  all the progress
67c0: 20 63 61 6c 6c 62 61 63 6b 20 69 66 20 69 74 20   callback if it 
67d0: 69 73 20 63 6f 6e 66 69 67 75 72 65 64 20 61 6e  is configured an
67e0: 64 20 74 68 65 20 72 65 71 75 69 72 65 64 20 6e  d the required n
67f0: 75 6d 62 65 72 0a 20 20 2a 2a 20 6f 66 20 56 44  umber.  ** of VD
6800: 42 45 20 6f 70 73 20 68 61 76 65 20 62 65 65 6e  BE ops have been
6810: 20 65 78 65 63 75 74 65 64 20 28 65 69 74 68 65   executed (eithe
6820: 72 20 73 69 6e 63 65 20 74 68 69 73 20 69 6e 76  r since this inv
6830: 6f 63 61 74 69 6f 6e 20 6f 66 0a 20 20 2a 2a 20  ocation of.  ** 
6840: 73 71 6c 69 74 65 33 56 64 62 65 45 78 65 63 28  sqlite3VdbeExec(
6850: 29 20 6f 72 20 73 69 6e 63 65 20 6c 61 73 74 20  ) or since last 
6860: 74 69 6d 65 20 74 68 65 20 70 72 6f 67 72 65 73  time the progres
6870: 73 20 63 61 6c 6c 62 61 63 6b 20 77 61 73 20 63  s callback was c
6880: 61 6c 6c 65 64 29 2e 0a 20 20 2a 2a 20 49 66 20  alled)..  ** If 
6890: 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c  the progress cal
68a0: 6c 62 61 63 6b 20 72 65 74 75 72 6e 73 20 6e 6f  lback returns no
68b0: 6e 2d 7a 65 72 6f 2c 20 65 78 69 74 20 74 68 65  n-zero, exit the
68c0: 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65   virtual machine
68d0: 20 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 74   with.  ** a ret
68e0: 75 72 6e 20 63 6f 64 65 20 53 51 4c 49 54 45 5f  urn code SQLITE_
68f0: 41 42 4f 52 54 2e 0a 20 20 2a 2f 0a 20 20 69 66  ABORT..  */.  if
6900: 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73 21  ( db->xProgress!
6910: 3d 30 20 26 26 20 6e 56 6d 53 74 65 70 3e 3d 6e  =0 && nVmStep>=n
6920: 50 72 6f 67 72 65 73 73 4c 69 6d 69 74 20 29 7b  ProgressLimit ){
6930: 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d  .    assert( db-
6940: 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 21 3d 30  >nProgressOps!=0
6950: 20 29 3b 0a 20 20 20 20 6e 50 72 6f 67 72 65 73   );.    nProgres
6960: 73 4c 69 6d 69 74 20 3d 20 6e 56 6d 53 74 65 70  sLimit = nVmStep
6970: 20 2b 20 64 62 2d 3e 6e 50 72 6f 67 72 65 73 73   + db->nProgress
6980: 4f 70 73 20 2d 20 28 6e 56 6d 53 74 65 70 25 64  Ops - (nVmStep%d
6990: 62 2d 3e 6e 50 72 6f 67 72 65 73 73 4f 70 73 29  b->nProgressOps)
69a0: 3b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 78 50  ;.    if( db->xP
69b0: 72 6f 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f  rogress(db->pPro
69c0: 67 72 65 73 73 41 72 67 29 20 29 7b 0a 20 20 20  gressArg) ){.   
69d0: 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 49     rc = SQLITE_I
69e0: 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 20 20  NTERRUPT;.      
69f0: 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
6a00: 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
6a10: 20 7d 0a 23 65 6e 64 69 66 0a 20 20 0a 20 20 62   }.#endif.  .  b
6a20: 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
6a30: 64 65 3a 20 20 47 6f 73 75 62 20 50 31 20 50 32  de:  Gosub P1 P2
6a40: 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69   * * *.**.** Wri
6a50: 74 65 20 74 68 65 20 63 75 72 72 65 6e 74 20 61  te the current a
6a60: 64 64 72 65 73 73 20 6f 6e 74 6f 20 72 65 67 69  ddress onto regi
6a70: 73 74 65 72 20 50 31 0a 2a 2a 20 61 6e 64 20 74  ster P1.** and t
6a80: 68 65 6e 20 6a 75 6d 70 20 74 6f 20 61 64 64 72  hen jump to addr
6a90: 65 73 73 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20  ess P2..*/.case 
6aa0: 4f 50 5f 47 6f 73 75 62 3a 20 7b 20 20 20 20 20  OP_Gosub: {     
6ab0: 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
6ac0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
6ad0: 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70 31  >p1>0 && pOp->p1
6ae0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
6af0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
6b00: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
6b10: 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p1];.  assert(
6b20: 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28   VdbeMemDynamic(
6b30: 70 49 6e 31 29 3d 3d 30 20 29 3b 0a 20 20 6d 65  pIn1)==0 );.  me
6b40: 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
6b50: 2c 20 70 49 6e 31 29 3b 0a 20 20 70 49 6e 31 2d  , pIn1);.  pIn1-
6b60: 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74  >flags = MEM_Int
6b70: 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20 3d 20  ;.  pIn1->u.i = 
6b80: 28 69 6e 74 29 28 70 4f 70 2d 61 4f 70 29 3b 0a  (int)(pOp-aOp);.
6b90: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
6ba0: 28 70 4f 70 2d 3e 70 31 2c 20 70 49 6e 31 29 3b  (pOp->p1, pIn1);
6bb0: 0a 0a 20 20 2f 2a 20 4d 6f 73 74 20 6a 75 6d 70  ..  /* Most jump
6bc0: 20 6f 70 65 72 61 74 69 6f 6e 73 20 64 6f 20 61   operations do a
6bd0: 20 67 6f 74 6f 20 74 6f 20 74 68 69 73 20 73 70   goto to this sp
6be0: 6f 74 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 75  ot in order to u
6bf0: 70 64 61 74 65 0a 20 20 2a 2a 20 74 68 65 20 70  pdate.  ** the p
6c00: 4f 70 20 70 6f 69 6e 74 65 72 2e 20 2a 2f 0a 6a  Op pointer. */.j
6c10: 75 6d 70 5f 74 6f 5f 70 32 3a 0a 20 20 70 4f 70  ump_to_p2:.  pOp
6c20: 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20   = &aOp[pOp->p2 
6c30: 2d 20 31 5d 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  - 1];.  break;.}
6c40: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 52 65  ../* Opcode:  Re
6c50: 74 75 72 6e 20 50 31 20 2a 20 2a 20 2a 20 2a 0a  turn P1 * * * *.
6c60: 2a 2a 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 74 68  **.** Jump to th
6c70: 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
6c80: 6f 6e 20 61 66 74 65 72 20 74 68 65 20 61 64 64  on after the add
6c90: 72 65 73 73 20 69 6e 20 72 65 67 69 73 74 65 72  ress in register
6ca0: 20 50 31 2e 20 20 41 66 74 65 72 0a 2a 2a 20 74   P1.  After.** t
6cb0: 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74 65  he jump, registe
6cc0: 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e 64  r P1 becomes und
6cd0: 65 66 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  efined..*/.case 
6ce0: 4f 50 5f 52 65 74 75 72 6e 3a 20 7b 20 20 20 20  OP_Return: {    
6cf0: 20 20 20 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f         /* in1 */
6d00: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
6d10: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
6d20: 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73 3d  rt( pIn1->flags=
6d30: 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 70 4f  =MEM_Int );.  pO
6d40: 70 20 3d 20 26 61 4f 70 5b 70 49 6e 31 2d 3e 75  p = &aOp[pIn1->u
6d50: 2e 69 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66 6c 61  .i];.  pIn1->fla
6d60: 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66 69 6e  gs = MEM_Undefin
6d70: 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  ed;.  break;.}..
6d80: 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 69 74 43  /* Opcode: InitC
6d90: 6f 72 6f 75 74 69 6e 65 20 50 31 20 50 32 20 50  oroutine P1 P2 P
6da0: 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 53 65 74 20  3 * *.**.** Set 
6db0: 75 70 20 72 65 67 69 73 74 65 72 20 50 31 20 73  up register P1 s
6dc0: 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 59  o that it will Y
6dd0: 69 65 6c 64 20 74 6f 20 74 68 65 20 63 6f 72 6f  ield to the coro
6de0: 75 74 69 6e 65 0a 2a 2a 20 6c 6f 63 61 74 65 64  utine.** located
6df0: 20 61 74 20 61 64 64 72 65 73 73 20 50 33 2e 0a   at address P3..
6e00: 2a 2a 0a 2a 2a 20 49 66 20 50 32 21 3d 30 20 74  **.** If P2!=0 t
6e10: 68 65 6e 20 74 68 65 20 63 6f 72 6f 75 74 69 6e  hen the coroutin
6e20: 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
6e30: 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 66 6f 6c   immediately fol
6e40: 6c 6f 77 73 0a 2a 2a 20 74 68 69 73 20 6f 70 63  lows.** this opc
6e50: 6f 64 65 2e 20 20 53 6f 20 6a 75 6d 70 20 6f 76  ode.  So jump ov
6e60: 65 72 20 74 68 65 20 63 6f 72 6f 75 74 69 6e 65  er the coroutine
6e70: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
6e80: 74 6f 0a 2a 2a 20 61 64 64 72 65 73 73 20 50 32  to.** address P2
6e90: 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f  ..**.** See also
6ea0: 3a 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65 0a 2a  : EndCoroutine.*
6eb0: 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 69 74 43 6f  /.case OP_InitCo
6ec0: 72 6f 75 74 69 6e 65 3a 20 7b 20 20 20 20 20 2f  routine: {     /
6ed0: 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73 73 65  * jump */.  asse
6ee0: 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20 26 26  rt( pOp->p1>0 &&
6ef0: 20 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e 6e    pOp->p1<=(p->n
6f00: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
6f10: 6f 72 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  or) );.  assert(
6f20: 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 26 26 20 70   pOp->p2>=0 && p
6f30: 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70 20 29 3b  Op->p2<p->nOp );
6f40: 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
6f50: 70 33 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 33  p3>=0 && pOp->p3
6f60: 3c 70 2d 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 75  <p->nOp );.  pOu
6f70: 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  t = &aMem[pOp->p
6f80: 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 21 56  1];.  assert( !V
6f90: 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63 28 70 4f  dbeMemDynamic(pO
6fa0: 75 74 29 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 75  ut) );.  pOut->u
6fb0: 2e 69 20 3d 20 70 4f 70 2d 3e 70 33 20 2d 20 31  .i = pOp->p3 - 1
6fc0: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
6fd0: 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 69 66 28  = MEM_Int;.  if(
6fe0: 20 70 4f 70 2d 3e 70 32 20 29 20 67 6f 74 6f 20   pOp->p2 ) goto 
6ff0: 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72  jump_to_p2;.  br
7000: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7010: 65 3a 20 20 45 6e 64 43 6f 72 6f 75 74 69 6e 65  e:  EndCoroutine
7020: 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a   P1 * * * *.**.*
7030: 2a 20 54 68 65 20 69 6e 73 74 72 75 63 74 69 6f  * The instructio
7040: 6e 20 61 74 20 74 68 65 20 61 64 64 72 65 73 73  n at the address
7050: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
7060: 69 73 20 61 20 59 69 65 6c 64 2e 0a 2a 2a 20 4a  is a Yield..** J
7070: 75 6d 70 20 74 6f 20 74 68 65 20 50 32 20 70 61  ump to the P2 pa
7080: 72 61 6d 65 74 65 72 20 6f 66 20 74 68 61 74 20  rameter of that 
7090: 59 69 65 6c 64 2e 0a 2a 2a 20 41 66 74 65 72 20  Yield..** After 
70a0: 74 68 65 20 6a 75 6d 70 2c 20 72 65 67 69 73 74  the jump, regist
70b0: 65 72 20 50 31 20 62 65 63 6f 6d 65 73 20 75 6e  er P1 becomes un
70c0: 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a 2a 2a 20 53  defined..**.** S
70d0: 65 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72  ee also: InitCor
70e0: 6f 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f  outine.*/.case O
70f0: 50 5f 45 6e 64 43 6f 72 6f 75 74 69 6e 65 3a 20  P_EndCoroutine: 
7100: 7b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  {           /* i
7110: 6e 31 20 2a 2f 0a 20 20 56 64 62 65 4f 70 20 2a  n1 */.  VdbeOp *
7120: 70 43 61 6c 6c 65 72 3b 0a 20 20 70 49 6e 31 20  pCaller;.  pIn1 
7130: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
7140: 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 31  ;.  assert( pIn1
7150: 2d 3e 66 6c 61 67 73 3d 3d 4d 45 4d 5f 49 6e 74  ->flags==MEM_Int
7160: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49   );.  assert( pI
7170: 6e 31 2d 3e 75 2e 69 3e 3d 30 20 26 26 20 70 49  n1->u.i>=0 && pI
7180: 6e 31 2d 3e 75 2e 69 3c 70 2d 3e 6e 4f 70 20 29  n1->u.i<p->nOp )
7190: 3b 0a 20 20 70 43 61 6c 6c 65 72 20 3d 20 26 61  ;.  pCaller = &a
71a0: 4f 70 5b 70 49 6e 31 2d 3e 75 2e 69 5d 3b 0a 20  Op[pIn1->u.i];. 
71b0: 20 61 73 73 65 72 74 28 20 70 43 61 6c 6c 65 72   assert( pCaller
71c0: 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 59 69 65  ->opcode==OP_Yie
71d0: 6c 64 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  ld );.  assert( 
71e0: 70 43 61 6c 6c 65 72 2d 3e 70 32 3e 3d 30 20 26  pCaller->p2>=0 &
71f0: 26 20 70 43 61 6c 6c 65 72 2d 3e 70 32 3c 70 2d  & pCaller->p2<p-
7200: 3e 6e 4f 70 20 29 3b 0a 20 20 70 4f 70 20 3d 20  >nOp );.  pOp = 
7210: 26 61 4f 70 5b 70 43 61 6c 6c 65 72 2d 3e 70 32  &aOp[pCaller->p2
7220: 20 2d 20 31 5d 3b 0a 20 20 70 49 6e 31 2d 3e 66   - 1];.  pIn1->f
7230: 6c 61 67 73 20 3d 20 4d 45 4d 5f 55 6e 64 65 66  lags = MEM_Undef
7240: 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ined;.  break;.}
7250: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 59 69  ../* Opcode:  Yi
7260: 65 6c 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  eld P1 P2 * * *.
7270: 2a 2a 0a 2a 2a 20 53 77 61 70 20 74 68 65 20 70  **.** Swap the p
7280: 72 6f 67 72 61 6d 20 63 6f 75 6e 74 65 72 20 77  rogram counter w
7290: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 69 6e  ith the value in
72a0: 20 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 54   register P1.  T
72b0: 68 69 73 0a 2a 2a 20 68 61 73 20 74 68 65 20 65  his.** has the e
72c0: 66 66 65 63 74 20 6f 66 20 79 69 65 6c 64 69 6e  ffect of yieldin
72d0: 67 20 74 6f 20 61 20 63 6f 72 6f 75 74 69 6e 65  g to a coroutine
72e0: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 63  ..**.** If the c
72f0: 6f 72 6f 75 74 69 6e 65 20 74 68 61 74 20 69 73  oroutine that is
7300: 20 6c 61 75 6e 63 68 65 64 20 62 79 20 74 68 69   launched by thi
7310: 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 65 6e  s instruction en
7320: 64 73 20 77 69 74 68 0a 2a 2a 20 59 69 65 6c 64  ds with.** Yield
7330: 20 6f 72 20 52 65 74 75 72 6e 20 74 68 65 6e 20   or Return then 
7340: 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 68 65 20  continue to the 
7350: 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  next instruction
7360: 2e 20 20 42 75 74 20 69 66 0a 2a 2a 20 74 68 65  .  But if.** the
7370: 20 63 6f 72 6f 75 74 69 6e 65 20 6c 61 75 6e 63   coroutine launc
7380: 68 65 64 20 62 79 20 74 68 69 73 20 69 6e 73 74  hed by this inst
7390: 72 75 63 74 69 6f 6e 20 65 6e 64 73 20 77 69 74  ruction ends wit
73a0: 68 0a 2a 2a 20 45 6e 64 43 6f 72 6f 75 74 69 6e  h.** EndCoroutin
73b0: 65 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  e, then jump to 
73c0: 50 32 20 72 61 74 68 65 72 20 74 68 61 6e 20 63  P2 rather than c
73d0: 6f 6e 74 69 6e 75 69 6e 67 20 77 69 74 68 20 74  ontinuing with t
73e0: 68 65 0a 2a 2a 20 6e 65 78 74 20 69 6e 73 74 72  he.** next instr
73f0: 75 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65  uction..**.** Se
7400: 65 20 61 6c 73 6f 3a 20 49 6e 69 74 43 6f 72 6f  e also: InitCoro
7410: 75 74 69 6e 65 0a 2a 2f 0a 63 61 73 65 20 4f 50  utine.*/.case OP
7420: 5f 59 69 65 6c 64 3a 20 7b 20 20 20 20 20 20 20  _Yield: {       
7430: 20 20 20 20 20 2f 2a 20 69 6e 31 2c 20 6a 75 6d       /* in1, jum
7440: 70 20 2a 2f 0a 20 20 69 6e 74 20 70 63 44 65 73  p */.  int pcDes
7450: 74 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  t;.  pIn1 = &aMe
7460: 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
7470: 73 65 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e  sert( VdbeMemDyn
7480: 61 6d 69 63 28 70 49 6e 31 29 3d 3d 30 20 29 3b  amic(pIn1)==0 );
7490: 0a 20 20 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d  .  pIn1->flags =
74a0: 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 70 63 44 65   MEM_Int;.  pcDe
74b0: 73 74 20 3d 20 28 69 6e 74 29 70 49 6e 31 2d 3e  st = (int)pIn1->
74c0: 75 2e 69 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69  u.i;.  pIn1->u.i
74d0: 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61   = (int)(pOp - a
74e0: 4f 70 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  Op);.  REGISTER_
74f0: 54 52 41 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70  TRACE(pOp->p1, p
7500: 49 6e 31 29 3b 0a 20 20 70 4f 70 20 3d 20 26 61  In1);.  pOp = &a
7510: 4f 70 5b 70 63 44 65 73 74 5d 3b 0a 20 20 62 72  Op[pcDest];.  br
7520: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
7530: 65 3a 20 20 48 61 6c 74 49 66 4e 75 6c 6c 20 20  e:  HaltIfNull  
7540: 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
7550: 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66 20 72  * Synopsis: if r
7560: 5b 50 33 5d 3d 6e 75 6c 6c 20 68 61 6c 74 0a 2a  [P3]=null halt.*
7570: 2a 0a 2a 2a 20 43 68 65 63 6b 20 74 68 65 20 76  *.** Check the v
7580: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7590: 20 50 33 2e 20 20 49 66 20 69 74 20 69 73 20 4e   P3.  If it is N
75a0: 55 4c 4c 20 74 68 65 6e 20 48 61 6c 74 20 75 73  ULL then Halt us
75b0: 69 6e 67 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72  ing.** parameter
75c0: 20 50 31 2c 20 50 32 2c 20 61 6e 64 20 50 34 20   P1, P2, and P4 
75d0: 61 73 20 69 66 20 74 68 69 73 20 77 65 72 65 20  as if this were 
75e0: 61 20 48 61 6c 74 20 69 6e 73 74 72 75 63 74 69  a Halt instructi
75f0: 6f 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 76  on.  If the.** v
7600: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
7610: 20 50 33 20 69 73 20 6e 6f 74 20 4e 55 4c 4c 2c   P3 is not NULL,
7620: 20 74 68 65 6e 20 74 68 69 73 20 72 6f 75 74 69   then this routi
7630: 6e 65 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  ne is a no-op..*
7640: 2a 20 54 68 65 20 50 35 20 70 61 72 61 6d 65 74  * The P5 paramet
7650: 65 72 20 73 68 6f 75 6c 64 20 62 65 20 31 2e 0a  er should be 1..
7660: 2a 2f 0a 63 61 73 65 20 4f 50 5f 48 61 6c 74 49  */.case OP_HaltI
7670: 66 4e 75 6c 6c 3a 20 7b 20 20 20 20 20 20 2f 2a  fNull: {      /*
7680: 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
7690: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
76a0: 0a 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c  .  if( (pIn3->fl
76b0: 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
76c0: 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 2f 2a  =0 ) break;.  /*
76d0: 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 6e   Fall through in
76e0: 74 6f 20 4f 50 5f 48 61 6c 74 20 2a 2f 0a 7d 0a  to OP_Halt */.}.
76f0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 20 48 61 6c  ./* Opcode:  Hal
7700: 74 20 50 31 20 50 32 20 2a 20 50 34 20 50 35 0a  t P1 P2 * P4 P5.
7710: 2a 2a 0a 2a 2a 20 45 78 69 74 20 69 6d 6d 65 64  **.** Exit immed
7720: 69 61 74 65 6c 79 2e 20 20 41 6c 6c 20 6f 70 65  iately.  All ope
7730: 6e 20 63 75 72 73 6f 72 73 2c 20 65 74 63 20 61  n cursors, etc a
7740: 72 65 20 63 6c 6f 73 65 64 0a 2a 2a 20 61 75 74  re closed.** aut
7750: 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 2a 2a 0a 2a  omatically..**.*
7760: 2a 20 50 31 20 69 73 20 74 68 65 20 72 65 73 75  * P1 is the resu
7770: 6c 74 20 63 6f 64 65 20 72 65 74 75 72 6e 65 64  lt code returned
7780: 20 62 79 20 73 71 6c 69 74 65 33 5f 65 78 65 63   by sqlite3_exec
7790: 28 29 2c 20 73 71 6c 69 74 65 33 5f 72 65 73 65  (), sqlite3_rese
77a0: 74 28 29 2c 0a 2a 2a 20 6f 72 20 73 71 6c 69 74  t(),.** or sqlit
77b0: 65 33 5f 66 69 6e 61 6c 69 7a 65 28 29 2e 20 20  e3_finalize().  
77c0: 46 6f 72 20 61 20 6e 6f 72 6d 61 6c 20 68 61 6c  For a normal hal
77d0: 74 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62  t, this should b
77e0: 65 20 53 51 4c 49 54 45 5f 4f 4b 20 28 30 29 2e  e SQLITE_OK (0).
77f0: 0a 2a 2a 20 46 6f 72 20 65 72 72 6f 72 73 2c 20  .** For errors, 
7800: 69 74 20 63 61 6e 20 62 65 20 73 6f 6d 65 20 6f  it can be some o
7810: 74 68 65 72 20 76 61 6c 75 65 2e 20 20 49 66 20  ther value.  If 
7820: 50 31 21 3d 30 20 74 68 65 6e 20 50 32 20 77 69  P1!=0 then P2 wi
7830: 6c 6c 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a 20  ll determine.** 
7840: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
7850: 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 63  o rollback the c
7860: 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74 69  urrent transacti
7870: 6f 6e 2e 20 20 44 6f 20 6e 6f 74 20 72 6f 6c 6c  on.  Do not roll
7880: 62 61 63 6b 0a 2a 2a 20 69 66 20 50 32 3d 3d 4f  back.** if P2==O
7890: 45 5f 46 61 69 6c 2e 20 44 6f 20 74 68 65 20 72  E_Fail. Do the r
78a0: 6f 6c 6c 62 61 63 6b 20 69 66 20 50 32 3d 3d 4f  ollback if P2==O
78b0: 45 5f 52 6f 6c 6c 62 61 63 6b 2e 20 20 49 66 20  E_Rollback.  If 
78c0: 50 32 3d 3d 4f 45 5f 41 62 6f 72 74 2c 0a 2a 2a  P2==OE_Abort,.**
78d0: 20 74 68 65 6e 20 62 61 63 6b 20 6f 75 74 20 61   then back out a
78e0: 6c 6c 20 63 68 61 6e 67 65 73 20 74 68 61 74 20  ll changes that 
78f0: 68 61 76 65 20 6f 63 63 75 72 72 65 64 20 64 75  have occurred du
7900: 72 69 6e 67 20 74 68 69 73 20 65 78 65 63 75 74  ring this execut
7910: 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a 20 56 44  ion of the.** VD
7920: 42 45 2c 20 62 75 74 20 64 6f 20 6e 6f 74 20 72  BE, but do not r
7930: 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
7940: 73 61 63 74 69 6f 6e 2e 20 0a 2a 2a 0a 2a 2a 20  saction. .**.** 
7950: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 6e 75 6c  If P4 is not nul
7960: 6c 20 74 68 65 6e 20 69 74 20 69 73 20 61 6e 20  l then it is an 
7970: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74  error message st
7980: 72 69 6e 67 2e 0a 2a 2a 0a 2a 2a 20 50 35 20 69  ring..**.** P5 i
7990: 73 20 61 20 76 61 6c 75 65 20 62 65 74 77 65 65  s a value betwee
79a0: 6e 20 30 20 61 6e 64 20 34 2c 20 69 6e 63 6c 75  n 0 and 4, inclu
79b0: 73 69 76 65 2c 20 74 68 61 74 20 6d 6f 64 69 66  sive, that modif
79c0: 69 65 73 20 74 68 65 20 50 34 20 73 74 72 69 6e  ies the P4 strin
79d0: 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 30 3a 20 20  g..**.**    0:  
79e0: 28 6e 6f 20 63 68 61 6e 67 65 29 0a 2a 2a 20 20  (no change).**  
79f0: 20 20 31 3a 20 20 4e 4f 54 20 4e 55 4c 4c 20 63    1:  NOT NULL c
7a00: 6f 6e 74 72 61 69 6e 74 20 66 61 69 6c 65 64 3a  ontraint failed:
7a10: 20 50 34 0a 2a 2a 20 20 20 20 32 3a 20 20 55 4e   P4.**    2:  UN
7a20: 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
7a30: 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 20 20 20  failed: P4.**   
7a40: 20 33 3a 20 20 43 48 45 43 4b 20 63 6f 6e 73 74   3:  CHECK const
7a50: 72 61 69 6e 74 20 66 61 69 6c 65 64 3a 20 50 34  raint failed: P4
7a60: 0a 2a 2a 20 20 20 20 34 3a 20 20 46 4f 52 45 49  .**    4:  FOREI
7a70: 47 4e 20 4b 45 59 20 63 6f 6e 73 74 72 61 69 6e  GN KEY constrain
7a80: 74 20 66 61 69 6c 65 64 3a 20 50 34 0a 2a 2a 0a  t failed: P4.**.
7a90: 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
7aa0: 7a 65 72 6f 20 61 6e 64 20 50 34 20 69 73 20 4e  zero and P4 is N
7ab0: 55 4c 4c 2c 20 74 68 65 6e 20 65 76 65 72 79 74  ULL, then everyt
7ac0: 68 69 6e 67 20 61 66 74 65 72 20 74 68 65 20 22  hing after the "
7ad0: 3a 22 20 69 73 0a 2a 2a 20 6f 6d 69 74 74 65 64  :" is.** omitted
7ae0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 20 69 73  ..**.** There is
7af0: 20 61 6e 20 69 6d 70 6c 69 65 64 20 22 48 61 6c   an implied "Hal
7b00: 74 20 30 20 30 20 30 22 20 69 6e 73 74 72 75 63  t 0 0 0" instruc
7b10: 74 69 6f 6e 20 69 6e 73 65 72 74 65 64 20 61 74  tion inserted at
7b20: 20 74 68 65 20 76 65 72 79 20 65 6e 64 20 6f 66   the very end of
7b30: 0a 2a 2a 20 65 76 65 72 79 20 70 72 6f 67 72 61  .** every progra
7b40: 6d 2e 20 20 53 6f 20 61 20 6a 75 6d 70 20 70 61  m.  So a jump pa
7b50: 73 74 20 74 68 65 20 6c 61 73 74 20 69 6e 73 74  st the last inst
7b60: 72 75 63 74 69 6f 6e 20 6f 66 20 74 68 65 20 70  ruction of the p
7b70: 72 6f 67 72 61 6d 0a 2a 2a 20 69 73 20 74 68 65  rogram.** is the
7b80: 20 73 61 6d 65 20 61 73 20 65 78 65 63 75 74 69   same as executi
7b90: 6e 67 20 48 61 6c 74 2e 0a 2a 2f 0a 63 61 73 65  ng Halt..*/.case
7ba0: 20 4f 50 5f 48 61 6c 74 3a 20 7b 0a 20 20 56 64   OP_Halt: {.  Vd
7bb0: 62 65 46 72 61 6d 65 20 2a 70 46 72 61 6d 65 3b  beFrame *pFrame;
7bc0: 0a 20 20 69 6e 74 20 70 63 78 3b 0a 0a 20 20 70  .  int pcx;..  p
7bd0: 63 78 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  cx = (int)(pOp -
7be0: 20 61 4f 70 29 3b 0a 20 20 69 66 28 20 70 4f 70   aOp);.  if( pOp
7bf0: 2d 3e 70 31 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ->p1==SQLITE_OK 
7c00: 26 26 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a  && p->pFrame ){.
7c10: 20 20 20 20 2f 2a 20 48 61 6c 74 20 74 68 65 20      /* Halt the 
7c20: 73 75 62 2d 70 72 6f 67 72 61 6d 2e 20 52 65 74  sub-program. Ret
7c30: 75 72 6e 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  urn control to t
7c40: 68 65 20 70 61 72 65 6e 74 20 66 72 61 6d 65 2e  he parent frame.
7c50: 20 2a 2f 0a 20 20 20 20 70 46 72 61 6d 65 20 3d   */.    pFrame =
7c60: 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20 20 20   p->pFrame;.    
7c70: 70 2d 3e 70 46 72 61 6d 65 20 3d 20 70 46 72 61  p->pFrame = pFra
7c80: 6d 65 2d 3e 70 50 61 72 65 6e 74 3b 0a 20 20 20  me->pParent;.   
7c90: 20 70 2d 3e 6e 46 72 61 6d 65 2d 2d 3b 0a 20 20   p->nFrame--;.  
7ca0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7cb0: 43 68 61 6e 67 65 73 28 64 62 2c 20 70 2d 3e 6e  Changes(db, p->n
7cc0: 43 68 61 6e 67 65 29 3b 0a 20 20 20 20 70 63 78  Change);.    pcx
7cd0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 46 72   = sqlite3VdbeFr
7ce0: 61 6d 65 52 65 73 74 6f 72 65 28 70 46 72 61 6d  ameRestore(pFram
7cf0: 65 29 3b 0a 20 20 20 20 6c 61 73 74 52 6f 77 69  e);.    lastRowi
7d00: 64 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69  d = db->lastRowi
7d10: 64 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e  d;.    if( pOp->
7d20: 70 32 3d 3d 4f 45 5f 49 67 6e 6f 72 65 20 29 7b  p2==OE_Ignore ){
7d30: 0a 20 20 20 20 20 20 2f 2a 20 49 6e 73 74 72 75  .      /* Instru
7d40: 63 74 69 6f 6e 20 70 63 78 20 69 73 20 74 68 65  ction pcx is the
7d50: 20 4f 50 5f 50 72 6f 67 72 61 6d 20 74 68 61 74   OP_Program that
7d60: 20 69 6e 76 6f 6b 65 64 20 74 68 65 20 73 75 62   invoked the sub
7d70: 2d 70 72 6f 67 72 61 6d 20 0a 20 20 20 20 20 20  -program .      
7d80: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69  ** currently bei
7d90: 6e 67 20 68 61 6c 74 65 64 2e 20 49 66 20 74 68  ng halted. If th
7da0: 65 20 70 32 20 69 6e 73 74 72 75 63 74 69 6f 6e  e p2 instruction
7db0: 20 6f 66 20 74 68 69 73 20 4f 50 5f 48 61 6c 74   of this OP_Halt
7dc0: 0a 20 20 20 20 20 20 2a 2a 20 69 6e 73 74 72 75  .      ** instru
7dd0: 63 74 69 6f 6e 20 69 73 20 73 65 74 20 74 6f 20  ction is set to 
7de0: 4f 45 5f 49 67 6e 6f 72 65 2c 20 74 68 65 6e 20  OE_Ignore, then 
7df0: 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61 6d 20  the sub-program 
7e00: 69 73 20 74 68 72 6f 77 69 6e 67 0a 20 20 20 20  is throwing.    
7e10: 20 20 2a 2a 20 61 6e 20 49 47 4e 4f 52 45 20 65    ** an IGNORE e
7e20: 78 63 65 70 74 69 6f 6e 2e 20 49 6e 20 74 68 69  xception. In thi
7e30: 73 20 63 61 73 65 20 6a 75 6d 70 20 74 6f 20 74  s case jump to t
7e40: 68 65 20 61 64 64 72 65 73 73 20 73 70 65 63 69  he address speci
7e50: 66 69 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  fied.      ** as
7e60: 20 74 68 65 20 70 32 20 6f 66 20 74 68 65 20 63   the p2 of the c
7e70: 61 6c 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61  alling OP_Progra
7e80: 6d 2e 20 20 2a 2f 0a 20 20 20 20 20 20 70 63 78  m.  */.      pcx
7e90: 20 3d 20 70 2d 3e 61 4f 70 5b 70 63 78 5d 2e 70   = p->aOp[pcx].p
7ea0: 32 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 61  2-1;.    }.    a
7eb0: 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b 0a 20 20 20  Op = p->aOp;.   
7ec0: 20 61 4d 65 6d 20 3d 20 70 2d 3e 61 4d 65 6d 3b   aMem = p->aMem;
7ed0: 0a 20 20 20 20 70 4f 70 20 3d 20 26 61 4f 70 5b  .    pOp = &aOp[
7ee0: 70 63 78 5d 3b 0a 20 20 20 20 62 72 65 61 6b 3b  pcx];.    break;
7ef0: 0a 20 20 7d 0a 20 20 70 2d 3e 72 63 20 3d 20 70  .  }.  p->rc = p
7f00: 4f 70 2d 3e 70 31 3b 0a 20 20 70 2d 3e 65 72 72  Op->p1;.  p->err
7f10: 6f 72 41 63 74 69 6f 6e 20 3d 20 28 75 38 29 70  orAction = (u8)p
7f20: 4f 70 2d 3e 70 32 3b 0a 20 20 70 2d 3e 70 63 20  Op->p2;.  p->pc 
7f30: 3d 20 70 63 78 3b 0a 20 20 61 73 73 65 72 74 28  = pcx;.  assert(
7f40: 20 70 4f 70 2d 3e 70 35 3e 3d 30 20 26 26 20 70   pOp->p5>=0 && p
7f50: 4f 70 2d 3e 70 35 3c 3d 34 20 29 3b 0a 20 20 69  Op->p5<=4 );.  i
7f60: 66 28 20 70 2d 3e 72 63 20 29 7b 0a 20 20 20 20  f( p->rc ){.    
7f70: 69 66 28 20 70 4f 70 2d 3e 70 35 20 29 7b 0a 20  if( pOp->p5 ){. 
7f80: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
7f90: 74 20 63 68 61 72 20 2a 20 63 6f 6e 73 74 20 61  t char * const a
7fa0: 7a 54 79 70 65 5b 5d 20 3d 20 7b 20 22 4e 4f 54  zType[] = { "NOT
7fb0: 20 4e 55 4c 4c 22 2c 20 22 55 4e 49 51 55 45 22   NULL", "UNIQUE"
7fc0: 2c 20 22 43 48 45 43 4b 22 2c 0a 20 20 20 20 20  , "CHECK",.     
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ff0: 20 20 20 20 20 20 20 20 22 46 4f 52 45 49 47 4e          "FOREIGN
8000: 20 4b 45 59 22 20 7d 3b 0a 20 20 20 20 20 20 74   KEY" };.      t
8010: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35  estcase( pOp->p5
8020: 3d 3d 31 20 29 3b 0a 20 20 20 20 20 20 74 65 73  ==1 );.      tes
8030: 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d  tcase( pOp->p5==
8040: 32 20 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63  2 );.      testc
8050: 61 73 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 33 20  ase( pOp->p5==3 
8060: 29 3b 0a 20 20 20 20 20 20 74 65 73 74 63 61 73  );.      testcas
8070: 65 28 20 70 4f 70 2d 3e 70 35 3d 3d 34 20 29 3b  e( pOp->p5==4 );
8080: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
8090: 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 20 63  beError(p, "%s c
80a0: 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65 64  onstraint failed
80b0: 22 2c 20 61 7a 54 79 70 65 5b 70 4f 70 2d 3e 70  ", azType[pOp->p
80c0: 35 2d 31 5d 29 3b 0a 20 20 20 20 20 20 69 66 28  5-1]);.      if(
80d0: 20 70 4f 70 2d 3e 70 34 2e 7a 20 29 7b 0a 20 20   pOp->p4.z ){.  
80e0: 20 20 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67        p->zErrMsg
80f0: 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74   = sqlite3MPrint
8100: 66 28 64 62 2c 20 22 25 7a 3a 20 25 73 22 2c 20  f(db, "%z: %s", 
8110: 70 2d 3e 7a 45 72 72 4d 73 67 2c 20 70 4f 70 2d  p->zErrMsg, pOp-
8120: 3e 70 34 2e 7a 29 3b 0a 20 20 20 20 20 20 7d 0a  >p4.z);.      }.
8130: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
8140: 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f   sqlite3VdbeErro
8150: 72 28 70 2c 20 22 25 73 22 2c 20 70 4f 70 2d 3e  r(p, "%s", pOp->
8160: 70 34 2e 7a 29 3b 0a 20 20 20 20 7d 0a 20 20 20  p4.z);.    }.   
8170: 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 70 4f 70   sqlite3_log(pOp
8180: 2d 3e 70 31 2c 20 22 61 62 6f 72 74 20 61 74 20  ->p1, "abort at 
8190: 25 64 20 69 6e 20 5b 25 73 5d 3a 20 25 73 22 2c  %d in [%s]: %s",
81a0: 20 70 63 78 2c 20 70 2d 3e 7a 53 71 6c 2c 20 70   pcx, p->zSql, p
81b0: 2d 3e 7a 45 72 72 4d 73 67 29 3b 0a 20 20 7d 0a  ->zErrMsg);.  }.
81c0: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64    rc = sqlite3Vd
81d0: 62 65 48 61 6c 74 28 70 29 3b 0a 20 20 61 73 73  beHalt(p);.  ass
81e0: 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ert( rc==SQLITE_
81f0: 42 55 53 59 20 7c 7c 20 72 63 3d 3d 53 51 4c 49  BUSY || rc==SQLI
8200: 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d 3d 53 51 4c  TE_OK || rc==SQL
8210: 49 54 45 5f 45 52 52 4f 52 20 29 3b 0a 20 20 69  ITE_ERROR );.  i
8220: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 42 55  f( rc==SQLITE_BU
8230: 53 59 20 29 7b 0a 20 20 20 20 70 2d 3e 72 63 20  SY ){.    p->rc 
8240: 3d 20 53 51 4c 49 54 45 5f 42 55 53 59 3b 0a 20  = SQLITE_BUSY;. 
8250: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
8260: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
8270: 4b 20 7c 7c 20 28 70 2d 3e 72 63 26 30 78 66 66  K || (p->rc&0xff
8280: 29 3d 3d 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52  )==SQLITE_CONSTR
8290: 41 49 4e 54 20 29 3b 0a 20 20 20 20 61 73 73 65  AINT );.    asse
82a0: 72 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  rt( rc==SQLITE_O
82b0: 4b 20 7c 7c 20 64 62 2d 3e 6e 44 65 66 65 72 72  K || db->nDeferr
82c0: 65 64 43 6f 6e 73 3e 30 20 7c 7c 20 64 62 2d 3e  edCons>0 || db->
82d0: 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
82e0: 3e 30 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 70  >0 );.    rc = p
82f0: 2d 3e 72 63 20 3f 20 53 51 4c 49 54 45 5f 45 52  ->rc ? SQLITE_ER
8300: 52 4f 52 20 3a 20 53 51 4c 49 54 45 5f 44 4f 4e  ROR : SQLITE_DON
8310: 45 3b 0a 20 20 7d 0a 20 20 67 6f 74 6f 20 76 64  E;.  }.  goto vd
8320: 62 65 5f 72 65 74 75 72 6e 3b 0a 7d 0a 0a 2f 2a  be_return;.}../*
8330: 20 4f 70 63 6f 64 65 3a 20 49 6e 74 65 67 65 72   Opcode: Integer
8340: 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20   P1 P2 * * *.** 
8350: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
8360: 50 31 0a 2a 2a 0a 2a 2a 20 54 68 65 20 33 32 2d  P1.**.** The 32-
8370: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
8380: 65 20 50 31 20 69 73 20 77 72 69 74 74 65 6e 20  e P1 is written 
8390: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
83a0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 6e 74  ..*/.case OP_Int
83b0: 65 67 65 72 3a 20 7b 20 20 20 20 20 20 20 20 20  eger: {         
83c0: 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  /* out2 */.  pOu
83d0: 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
83e0: 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
83f0: 75 74 2d 3e 75 2e 69 20 3d 20 70 4f 70 2d 3e 70  ut->u.i = pOp->p
8400: 31 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  1;.  break;.}../
8410: 2a 20 4f 70 63 6f 64 65 3a 20 49 6e 74 36 34 20  * Opcode: Int64 
8420: 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53  * P2 * P4 *.** S
8430: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 50  ynopsis: r[P2]=P
8440: 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61 20  4.**.** P4 is a 
8450: 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 36 34 2d  pointer to a 64-
8460: 62 69 74 20 69 6e 74 65 67 65 72 20 76 61 6c 75  bit integer valu
8470: 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68 61 74  e..** Write that
8480: 20 76 61 6c 75 65 20 69 6e 74 6f 20 72 65 67 69   value into regi
8490: 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63 61 73 65  ster P2..*/.case
84a0: 20 4f 50 5f 49 6e 74 36 34 3a 20 7b 20 20 20 20   OP_Int64: {    
84b0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
84c0: 2f 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  /.  pOut = out2P
84d0: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
84e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
84f0: 2d 3e 70 34 2e 70 49 36 34 21 3d 30 20 29 3b 0a  ->p4.pI64!=0 );.
8500: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 2a 70    pOut->u.i = *p
8510: 4f 70 2d 3e 70 34 2e 70 49 36 34 3b 0a 20 20 62  Op->p4.pI64;.  b
8520: 72 65 61 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  reak;.}..#ifndef
8530: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f   SQLITE_OMIT_FLO
8540: 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 2f 2a 20 4f  ATING_POINT./* O
8550: 70 63 6f 64 65 3a 20 52 65 61 6c 20 2a 20 50 32  pcode: Real * P2
8560: 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70   * P4 *.** Synop
8570: 73 69 73 3a 20 72 5b 50 32 5d 3d 50 34 0a 2a 2a  sis: r[P2]=P4.**
8580: 0a 2a 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .** P4 is a poin
8590: 74 65 72 20 74 6f 20 61 20 36 34 2d 62 69 74 20  ter to a 64-bit 
85a0: 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74 20 76  floating point v
85b0: 61 6c 75 65 2e 0a 2a 2a 20 57 72 69 74 65 20 74  alue..** Write t
85c0: 68 61 74 20 76 61 6c 75 65 20 69 6e 74 6f 20 72  hat value into r
85d0: 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f 0a 63  egister P2..*/.c
85e0: 61 73 65 20 4f 50 5f 52 65 61 6c 3a 20 7b 20 20  ase OP_Real: {  
85f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
8600: 65 20 61 73 20 54 4b 5f 46 4c 4f 41 54 2c 20 6f  e as TK_FLOAT, o
8610: 75 74 32 20 2a 2f 0a 20 20 70 4f 75 74 20 3d 20  ut2 */.  pOut = 
8620: 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
8630: 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d 3e  , pOp);.  pOut->
8640: 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 52 65 61 6c  flags = MEM_Real
8650: 3b 0a 20 20 61 73 73 65 72 74 28 20 21 73 71 6c  ;.  assert( !sql
8660: 69 74 65 33 49 73 4e 61 4e 28 2a 70 4f 70 2d 3e  ite3IsNaN(*pOp->
8670: 70 34 2e 70 52 65 61 6c 29 20 29 3b 0a 20 20 70  p4.pReal) );.  p
8680: 4f 75 74 2d 3e 75 2e 72 20 3d 20 2a 70 4f 70 2d  Out->u.r = *pOp-
8690: 3e 70 34 2e 70 52 65 61 6c 3b 0a 20 20 62 72 65  >p4.pReal;.  bre
86a0: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ak;.}.#endif../*
86b0: 20 4f 70 63 6f 64 65 3a 20 53 74 72 69 6e 67 38   Opcode: String8
86c0: 20 2a 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20   * P2 * P4 *.** 
86d0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d  Synopsis: r[P2]=
86e0: 27 50 34 27 0a 2a 2a 0a 2a 2a 20 50 34 20 70 6f  'P4'.**.** P4 po
86f0: 69 6e 74 73 20 74 6f 20 61 20 6e 75 6c 20 74 65  ints to a nul te
8700: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
8710: 74 72 69 6e 67 2e 20 54 68 69 73 20 6f 70 63 6f  tring. This opco
8720: 64 65 20 69 73 20 74 72 61 6e 73 66 6f 72 6d 65  de is transforme
8730: 64 20 0a 2a 2a 20 69 6e 74 6f 20 61 20 53 74 72  d .** into a Str
8740: 69 6e 67 20 6f 70 63 6f 64 65 20 62 65 66 6f 72  ing opcode befor
8750: 65 20 69 74 20 69 73 20 65 78 65 63 75 74 65 64  e it is executed
8760: 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 74   for the first t
8770: 69 6d 65 2e 20 20 44 75 72 69 6e 67 0a 2a 2a 20  ime.  During.** 
8780: 74 68 69 73 20 74 72 61 6e 73 66 6f 72 6d 61 74  this transformat
8790: 69 6f 6e 2c 20 74 68 65 20 6c 65 6e 67 74 68 20  ion, the length 
87a0: 6f 66 20 73 74 72 69 6e 67 20 50 34 20 69 73 20  of string P4 is 
87b0: 63 6f 6d 70 75 74 65 64 20 61 6e 64 20 73 74 6f  computed and sto
87c0: 72 65 64 0a 2a 2a 20 61 73 20 74 68 65 20 50 31  red.** as the P1
87d0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a 63   parameter..*/.c
87e0: 61 73 65 20 4f 50 5f 53 74 72 69 6e 67 38 3a 20  ase OP_String8: 
87f0: 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d  {         /* sam
8800: 65 20 61 73 20 54 4b 5f 53 54 52 49 4e 47 2c 20  e as TK_STRING, 
8810: 6f 75 74 32 20 2a 2f 0a 20 20 61 73 73 65 72 74  out2 */.  assert
8820: 28 20 70 4f 70 2d 3e 70 34 2e 7a 21 3d 30 20 29  ( pOp->p4.z!=0 )
8830: 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50  ;.  pOut = out2P
8840: 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70  rerelease(p, pOp
8850: 29 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  );.  pOp->opcode
8860: 20 3d 20 4f 50 5f 53 74 72 69 6e 67 3b 0a 20 20   = OP_String;.  
8870: 70 4f 70 2d 3e 70 31 20 3d 20 73 71 6c 69 74 65  pOp->p1 = sqlite
8880: 33 53 74 72 6c 65 6e 33 30 28 70 4f 70 2d 3e 70  3Strlen30(pOp->p
8890: 34 2e 7a 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53  4.z);..#ifndef S
88a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
88b0: 0a 20 20 69 66 28 20 65 6e 63 6f 64 69 6e 67 21  .  if( encoding!
88c0: 3d 53 51 4c 49 54 45 5f 55 54 46 38 20 29 7b 0a  =SQLITE_UTF8 ){.
88d0: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
88e0: 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70 4f  VdbeMemSetStr(pO
88f0: 75 74 2c 20 70 4f 70 2d 3e 70 34 2e 7a 2c 20 2d  ut, pOp->p4.z, -
8900: 31 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  1, SQLITE_UTF8, 
8910: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
8920: 20 20 20 20 61 73 73 65 72 74 28 20 72 63 3d 3d      assert( rc==
8930: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 63 3d  SQLITE_OK || rc=
8940: 3d 53 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 29  =SQLITE_TOOBIG )
8950: 3b 0a 20 20 20 20 69 66 28 20 53 51 4c 49 54 45  ;.    if( SQLITE
8960: 5f 4f 4b 21 3d 73 71 6c 69 74 65 33 56 64 62 65  _OK!=sqlite3Vdbe
8970: 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
8980: 4f 75 74 2c 20 65 6e 63 6f 64 69 6e 67 29 20 29  Out, encoding) )
8990: 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20   goto no_mem;.  
89a0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 2d 3e    assert( pOut->
89b0: 73 7a 4d 61 6c 6c 6f 63 3e 30 20 26 26 20 70 4f  szMalloc>0 && pO
89c0: 75 74 2d 3e 7a 4d 61 6c 6c 6f 63 3d 3d 70 4f 75  ut->zMalloc==pOu
89d0: 74 2d 3e 7a 20 29 3b 0a 20 20 20 20 61 73 73 65  t->z );.    asse
89e0: 72 74 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d  rt( VdbeMemDynam
89f0: 69 63 28 70 4f 75 74 29 3d 3d 30 20 29 3b 0a 20  ic(pOut)==0 );. 
8a00: 20 20 20 70 4f 75 74 2d 3e 73 7a 4d 61 6c 6c 6f     pOut->szMallo
8a10: 63 20 3d 20 30 3b 0a 20 20 20 20 70 4f 75 74 2d  c = 0;.    pOut-
8a20: 3e 66 6c 61 67 73 20 7c 3d 20 4d 45 4d 5f 53 74  >flags |= MEM_St
8a30: 61 74 69 63 3b 0a 20 20 20 20 69 66 28 20 70 4f  atic;.    if( pO
8a40: 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 44 59  p->p4type==P4_DY
8a50: 4e 41 4d 49 43 20 29 7b 0a 20 20 20 20 20 20 73  NAMIC ){.      s
8a60: 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
8a70: 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b 0a 20 20 20   pOp->p4.z);.   
8a80: 20 7d 0a 20 20 20 20 70 4f 70 2d 3e 70 34 74 79   }.    pOp->p4ty
8a90: 70 65 20 3d 20 50 34 5f 44 59 4e 41 4d 49 43 3b  pe = P4_DYNAMIC;
8aa0: 0a 20 20 20 20 70 4f 70 2d 3e 70 34 2e 7a 20 3d  .    pOp->p4.z =
8ab0: 20 70 4f 75 74 2d 3e 7a 3b 0a 20 20 20 20 70 4f   pOut->z;.    pO
8ac0: 70 2d 3e 70 31 20 3d 20 70 4f 75 74 2d 3e 6e 3b  p->p1 = pOut->n;
8ad0: 0a 20 20 7d 0a 20 20 74 65 73 74 63 61 73 65 28  .  }.  testcase(
8ae0: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 54 4f 4f 42   rc==SQLITE_TOOB
8af0: 49 47 20 29 3b 0a 23 65 6e 64 69 66 0a 20 20 69  IG );.#endif.  i
8b00: 66 28 20 70 4f 70 2d 3e 70 31 3e 64 62 2d 3e 61  f( pOp->p1>db->a
8b10: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c 49 4d  Limit[SQLITE_LIM
8b20: 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a 20 20  IT_LENGTH] ){.  
8b30: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
8b40: 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 72 63    }.  assert( rc
8b50: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a 20  ==SQLITE_OK );. 
8b60: 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68   /* Fall through
8b70: 20 74 6f 20 74 68 65 20 6e 65 78 74 20 63 61 73   to the next cas
8b80: 65 2c 20 4f 50 5f 53 74 72 69 6e 67 20 2a 2f 0a  e, OP_String */.
8b90: 7d 0a 20 20 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  }.  ./* Opcode: 
8ba0: 53 74 72 69 6e 67 20 50 31 20 50 32 20 50 33 20  String P1 P2 P3 
8bb0: 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
8bc0: 73 3a 20 72 5b 50 32 5d 3d 27 50 34 27 20 28 6c  s: r[P2]='P4' (l
8bd0: 65 6e 3d 50 31 29 0a 2a 2a 0a 2a 2a 20 54 68 65  en=P1).**.** The
8be0: 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 50 34   string value P4
8bf0: 20 6f 66 20 6c 65 6e 67 74 68 20 50 31 20 28 62   of length P1 (b
8c00: 79 74 65 73 29 20 69 73 20 73 74 6f 72 65 64 20  ytes) is stored 
8c10: 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  in register P2..
8c20: 2a 2a 0a 2a 2a 20 49 66 20 50 33 20 69 73 20 6e  **.** If P3 is n
8c30: 6f 74 20 7a 65 72 6f 20 61 6e 64 20 74 68 65 20  ot zero and the 
8c40: 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73  content of regis
8c50: 74 65 72 20 50 33 20 69 73 20 65 71 75 61 6c 20  ter P3 is equal 
8c60: 74 6f 20 50 35 2c 20 74 68 65 6e 0a 2a 2a 20 74  to P5, then.** t
8c70: 68 65 20 64 61 74 61 74 79 70 65 20 6f 66 20 74  he datatype of t
8c80: 68 65 20 72 65 67 69 73 74 65 72 20 50 32 20 69  he register P2 i
8c90: 73 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20 42  s converted to B
8ca0: 4c 4f 42 2e 20 20 54 68 65 20 63 6f 6e 74 65 6e  LOB.  The conten
8cb0: 74 20 69 73 0a 2a 2a 20 74 68 65 20 73 61 6d 65  t is.** the same
8cc0: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 62 79 74   sequence of byt
8cd0: 65 73 2c 20 69 74 20 69 73 20 6d 65 72 65 6c 79  es, it is merely
8ce0: 20 69 6e 74 65 72 70 72 65 74 65 64 20 61 73 20   interpreted as 
8cf0: 61 20 42 4c 4f 42 20 69 6e 73 74 65 61 64 0a 2a  a BLOB instead.*
8d00: 2a 20 6f 66 20 61 20 73 74 72 69 6e 67 2c 20 61  * of a string, a
8d10: 73 20 69 66 20 69 74 20 68 61 64 20 62 65 65 6e  s if it had been
8d20: 20 43 41 53 54 2e 20 20 49 6e 20 6f 74 68 65 72   CAST.  In other
8d30: 20 77 6f 72 64 73 3a 0a 2a 2a 0a 2a 2a 20 69 66   words:.**.** if
8d40: 28 20 50 33 21 3d 30 20 61 6e 64 20 72 65 67 5b  ( P3!=0 and reg[
8d50: 50 33 5d 3d 3d 50 35 20 29 20 72 65 67 5b 50 32  P3]==P5 ) reg[P2
8d60: 5d 20 3a 3d 20 43 41 53 54 28 72 65 67 5b 50 32  ] := CAST(reg[P2
8d70: 5d 20 61 73 20 42 4c 4f 42 29 0a 2a 2f 0a 63 61  ] as BLOB).*/.ca
8d80: 73 65 20 4f 50 5f 53 74 72 69 6e 67 3a 20 7b 20  se OP_String: { 
8d90: 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32           /* out2
8da0: 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f   */.  assert( pO
8db0: 70 2d 3e 70 34 2e 7a 21 3d 30 20 29 3b 0a 20 20  p->p4.z!=0 );.  
8dc0: 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
8dd0: 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
8de0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
8df0: 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61 74 69  EM_Str|MEM_Stati
8e00: 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70 4f  c|MEM_Term;.  pO
8e10: 75 74 2d 3e 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e  ut->z = pOp->p4.
8e20: 7a 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 70  z;.  pOut->n = p
8e30: 4f 70 2d 3e 70 31 3b 0a 20 20 70 4f 75 74 2d 3e  Op->p1;.  pOut->
8e40: 65 6e 63 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a  enc = encoding;.
8e50: 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f    UPDATE_MAX_BLO
8e60: 42 53 49 5a 45 28 70 4f 75 74 29 3b 0a 23 69 66  BSIZE(pOut);.#if
8e70: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4c 49 4b 45  ndef SQLITE_LIKE
8e80: 5f 44 4f 45 53 4e 54 5f 4d 41 54 43 48 5f 42 4c  _DOESNT_MATCH_BL
8e90: 4f 42 53 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70  OBS.  if( pOp->p
8ea0: 33 3e 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72  3>0 ){.    asser
8eb0: 74 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e  t( pOp->p3<=(p->
8ec0: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
8ed0: 73 6f 72 29 20 29 3b 0a 20 20 20 20 70 49 6e 33  sor) );.    pIn3
8ee0: 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
8ef0: 5d 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  ];.    assert( p
8f00: 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  In3->flags & MEM
8f10: 5f 49 6e 74 20 29 3b 0a 20 20 20 20 69 66 28 20  _Int );.    if( 
8f20: 70 49 6e 33 2d 3e 75 2e 69 3d 3d 70 4f 70 2d 3e  pIn3->u.i==pOp->
8f30: 70 35 20 29 20 70 4f 75 74 2d 3e 66 6c 61 67 73  p5 ) pOut->flags
8f40: 20 3d 20 4d 45 4d 5f 42 6c 6f 62 7c 4d 45 4d 5f   = MEM_Blob|MEM_
8f50: 53 74 61 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b  Static|MEM_Term;
8f60: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 62 72  .  }.#endif.  br
8f70: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
8f80: 65 3a 20 4e 75 6c 6c 20 50 31 20 50 32 20 50 33  e: Null P1 P2 P3
8f90: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
8fa0: 3a 20 72 5b 50 32 2e 2e 50 33 5d 3d 4e 55 4c 4c  : r[P2..P3]=NULL
8fb0: 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 61 20 4e  .**.** Write a N
8fc0: 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69 73 74 65  ULL into registe
8fd0: 72 73 20 50 32 2e 20 20 49 66 20 50 33 20 67 72  rs P2.  If P3 gr
8fe0: 65 61 74 65 72 20 74 68 61 6e 20 50 32 2c 20 74  eater than P2, t
8ff0: 68 65 6e 20 61 6c 73 6f 20 77 72 69 74 65 0a 2a  hen also write.*
9000: 2a 20 4e 55 4c 4c 20 69 6e 74 6f 20 72 65 67 69  * NULL into regi
9010: 73 74 65 72 20 50 33 20 61 6e 64 20 65 76 65 72  ster P3 and ever
9020: 79 20 72 65 67 69 73 74 65 72 20 69 6e 20 62 65  y register in be
9030: 74 77 65 65 6e 20 50 32 20 61 6e 64 20 50 33 2e  tween P2 and P3.
9040: 20 20 49 66 20 50 33 0a 2a 2a 20 69 73 20 6c 65    If P3.** is le
9050: 73 73 20 74 68 61 6e 20 50 32 20 28 74 79 70 69  ss than P2 (typi
9060: 63 61 6c 6c 79 20 50 33 20 69 73 20 7a 65 72 6f  cally P3 is zero
9070: 29 20 74 68 65 6e 20 6f 6e 6c 79 20 72 65 67 69  ) then only regi
9080: 73 74 65 72 20 50 32 20 69 73 0a 2a 2a 20 73 65  ster P2 is.** se
9090: 74 20 74 6f 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  t to NULL..**.**
90a0: 20 49 66 20 74 68 65 20 50 31 20 76 61 6c 75 65   If the P1 value
90b0: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
90c0: 65 6e 20 61 6c 73 6f 20 73 65 74 20 74 68 65 20  en also set the 
90d0: 4d 45 4d 5f 43 6c 65 61 72 65 64 20 66 6c 61 67  MEM_Cleared flag
90e0: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 4e 55 4c 4c   so that.** NULL
90f0: 20 76 61 6c 75 65 73 20 77 69 6c 6c 20 6e 6f 74   values will not
9100: 20 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 20 65   compare equal e
9110: 76 65 6e 20 69 66 20 53 51 4c 49 54 45 5f 4e 55  ven if SQLITE_NU
9120: 4c 4c 45 51 20 69 73 20 73 65 74 20 6f 6e 0a 2a  LLEQ is set on.*
9130: 2a 20 4f 50 5f 4e 65 20 6f 72 20 4f 50 5f 45 71  * OP_Ne or OP_Eq
9140: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 75 6c  ..*/.case OP_Nul
9150: 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  l: {           /
9160: 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74 20  * out2 */.  int 
9170: 63 6e 74 3b 0a 20 20 75 31 36 20 6e 75 6c 6c 46  cnt;.  u16 nullF
9180: 6c 61 67 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75  lag;.  pOut = ou
9190: 74 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20  t2Prerelease(p, 
91a0: 70 4f 70 29 3b 0a 20 20 63 6e 74 20 3d 20 70 4f  pOp);.  cnt = pO
91b0: 70 2d 3e 70 33 2d 70 4f 70 2d 3e 70 32 3b 0a 20  p->p3-pOp->p2;. 
91c0: 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 33   assert( pOp->p3
91d0: 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70  <=(p->nMem+1 - p
91e0: 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20  ->nCursor) );.  
91f0: 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 6e 75  pOut->flags = nu
9200: 6c 6c 46 6c 61 67 20 3d 20 70 4f 70 2d 3e 70 31  llFlag = pOp->p1
9210: 20 3f 20 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d   ? (MEM_Null|MEM
9220: 5f 43 6c 65 61 72 65 64 29 20 3a 20 4d 45 4d 5f  _Cleared) : MEM_
9230: 4e 75 6c 6c 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20  Null;.  pOut->n 
9240: 3d 20 30 3b 0a 20 20 77 68 69 6c 65 28 20 63 6e  = 0;.  while( cn
9250: 74 3e 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2b  t>0 ){.    pOut+
9260: 2b 3b 0a 20 20 20 20 6d 65 6d 41 62 6f 75 74 54  +;.    memAboutT
9270: 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29  oChange(p, pOut)
9280: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9290: 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74  eMemSetNull(pOut
92a0: 29 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  );.    pOut->fla
92b0: 67 73 20 3d 20 6e 75 6c 6c 46 6c 61 67 3b 0a 20  gs = nullFlag;. 
92c0: 20 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 30 3b 0a     pOut->n = 0;.
92d0: 20 20 20 20 63 6e 74 2d 2d 3b 0a 20 20 7d 0a 20      cnt--;.  }. 
92e0: 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
92f0: 63 6f 64 65 3a 20 53 6f 66 74 4e 75 6c 6c 20 50  code: SoftNull P
9300: 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e  1 * * * *.** Syn
9310: 6f 70 73 69 73 3a 20 72 5b 50 31 5d 3d 4e 55 4c  opsis: r[P1]=NUL
9320: 4c 0a 2a 2a 0a 2a 2a 20 53 65 74 20 72 65 67 69  L.**.** Set regi
9330: 73 74 65 72 20 50 31 20 74 6f 20 68 61 76 65 20  ster P1 to have 
9340: 74 68 65 20 76 61 6c 75 65 20 4e 55 4c 4c 20 61  the value NULL a
9350: 73 20 73 65 65 6e 20 62 79 20 74 68 65 20 4f 50  s seen by the OP
9360: 5f 4d 61 6b 65 52 65 63 6f 72 64 0a 2a 2a 20 69  _MakeRecord.** i
9370: 6e 73 74 72 75 63 74 69 6f 6e 2c 20 62 75 74 20  nstruction, but 
9380: 64 6f 20 6e 6f 74 20 66 72 65 65 20 61 6e 79 20  do not free any 
9390: 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62 20 6d  string or blob m
93a0: 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74 65 64  emory associated
93b0: 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 72 65 67   with.** the reg
93c0: 69 73 74 65 72 2c 20 73 6f 20 74 68 61 74 20 69  ister, so that i
93d0: 66 20 74 68 65 20 76 61 6c 75 65 20 77 61 73 20  f the value was 
93e0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
93f0: 20 74 68 61 74 20 77 61 73 0a 2a 2a 20 70 72 65   that was.** pre
9400: 76 69 6f 75 73 6c 79 20 63 6f 70 69 65 64 20 75  viously copied u
9410: 73 69 6e 67 20 4f 50 5f 53 43 6f 70 79 2c 20 74  sing OP_SCopy, t
9420: 68 65 20 63 6f 70 69 65 73 20 77 69 6c 6c 20 63  he copies will c
9430: 6f 6e 74 69 6e 75 65 20 74 6f 20 62 65 20 76 61  ontinue to be va
9440: 6c 69 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  lid..*/.case OP_
9450: 53 6f 66 74 4e 75 6c 6c 3a 20 7b 0a 20 20 61 73  SoftNull: {.  as
9460: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
9470: 26 26 20 70 4f 70 2d 3e 70 31 3c 3d 28 70 2d 3e  && pOp->p1<=(p->
9480: 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
9490: 73 6f 72 29 20 29 3b 0a 20 20 70 4f 75 74 20 3d  sor) );.  pOut =
94a0: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
94b0: 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
94c0: 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 7c 4d 45   (pOut->flags|ME
94d0: 4d 5f 4e 75 6c 6c 29 26 7e 4d 45 4d 5f 55 6e 64  M_Null)&~MEM_Und
94e0: 65 66 69 6e 65 64 3b 0a 20 20 62 72 65 61 6b 3b  efined;.  break;
94f0: 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 42  .}../* Opcode: B
9500: 6c 6f 62 20 50 31 20 50 32 20 2a 20 50 34 20 2a  lob P1 P2 * P4 *
9510: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
9520: 50 32 5d 3d 50 34 20 28 6c 65 6e 3d 50 31 29 0a  P2]=P4 (len=P1).
9530: 2a 2a 0a 2a 2a 20 50 34 20 70 6f 69 6e 74 73 20  **.** P4 points 
9540: 74 6f 20 61 20 62 6c 6f 62 20 6f 66 20 64 61 74  to a blob of dat
9550: 61 20 50 31 20 62 79 74 65 73 20 6c 6f 6e 67 2e  a P1 bytes long.
9560: 20 20 53 74 6f 72 65 20 74 68 69 73 0a 2a 2a 20    Store this.** 
9570: 62 6c 6f 62 20 69 6e 20 72 65 67 69 73 74 65 72  blob in register
9580: 20 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f   P2..*/.case OP_
9590: 42 6c 6f 62 3a 20 7b 20 20 20 20 20 20 20 20 20  Blob: {         
95a0: 20 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a         /* out2 *
95b0: 2f 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  /.  assert( pOp-
95c0: 3e 70 31 20 3c 3d 20 53 51 4c 49 54 45 5f 4d 41  >p1 <= SQLITE_MA
95d0: 58 5f 4c 45 4e 47 54 48 20 29 3b 0a 20 20 70 4f  X_LENGTH );.  pO
95e0: 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65  ut = out2Prerele
95f0: 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 73  ase(p, pOp);.  s
9600: 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
9610: 53 74 72 28 70 4f 75 74 2c 20 70 4f 70 2d 3e 70  Str(pOut, pOp->p
9620: 34 2e 7a 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  4.z, pOp->p1, 0,
9630: 20 30 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63   0);.  pOut->enc
9640: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
9650: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
9660: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
9670: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
9680: 20 56 61 72 69 61 62 6c 65 20 50 31 20 50 32 20   Variable P1 P2 
9690: 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  * P4 *.** Synops
96a0: 69 73 3a 20 72 5b 50 32 5d 3d 70 61 72 61 6d 65  is: r[P2]=parame
96b0: 74 65 72 28 50 31 2c 50 34 29 0a 2a 2a 0a 2a 2a  ter(P1,P4).**.**
96c0: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 76 61   Transfer the va
96d0: 6c 75 65 73 20 6f 66 20 62 6f 75 6e 64 20 70 61  lues of bound pa
96e0: 72 61 6d 65 74 65 72 20 50 31 20 69 6e 74 6f 20  rameter P1 into 
96f0: 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a 0a 2a  register P2.**.*
9700: 2a 20 49 66 20 74 68 65 20 70 61 72 61 6d 65 74  * If the paramet
9710: 65 72 20 69 73 20 6e 61 6d 65 64 2c 20 74 68 65  er is named, the
9720: 6e 20 69 74 73 20 6e 61 6d 65 20 61 70 70 65 61  n its name appea
9730: 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 20 54 68 65  rs in P4..** The
9740: 20 50 34 20 76 61 6c 75 65 20 69 73 20 75 73 65   P4 value is use
9750: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 62 69 6e  d by sqlite3_bin
9760: 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d 65  d_parameter_name
9770: 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  ()..*/.case OP_V
9780: 61 72 69 61 62 6c 65 3a 20 7b 20 20 20 20 20 20  ariable: {      
9790: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
97a0: 0a 20 20 4d 65 6d 20 2a 70 56 61 72 3b 20 20 20  .  Mem *pVar;   
97b0: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 62 65 69      /* Value bei
97c0: 6e 67 20 74 72 61 6e 73 66 65 72 72 65 64 20 2a  ng transferred *
97d0: 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  /..  assert( pOp
97e0: 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
97f0: 31 3c 3d 70 2d 3e 6e 56 61 72 20 29 3b 0a 20 20  1<=p->nVar );.  
9800: 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 2e  assert( pOp->p4.
9810: 7a 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  z==0 || pOp->p4.
9820: 7a 3d 3d 70 2d 3e 61 7a 56 61 72 5b 70 4f 70 2d  z==p->azVar[pOp-
9830: 3e 70 31 2d 31 5d 20 29 3b 0a 20 20 70 56 61 72  >p1-1] );.  pVar
9840: 20 3d 20 26 70 2d 3e 61 56 61 72 5b 70 4f 70 2d   = &p->aVar[pOp-
9850: 3e 70 31 20 2d 20 31 5d 3b 0a 20 20 69 66 28 20  >p1 - 1];.  if( 
9860: 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 54 6f  sqlite3VdbeMemTo
9870: 6f 42 69 67 28 70 56 61 72 29 20 29 7b 0a 20 20  oBig(pVar) ){.  
9880: 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a    goto too_big;.
9890: 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74    }.  pOut = out
98a0: 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
98b0: 4f 70 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  Op);.  sqlite3Vd
98c0: 62 65 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79  beMemShallowCopy
98d0: 28 70 4f 75 74 2c 20 70 56 61 72 2c 20 4d 45 4d  (pOut, pVar, MEM
98e0: 5f 53 74 61 74 69 63 29 3b 0a 20 20 55 50 44 41  _Static);.  UPDA
98f0: 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28  TE_MAX_BLOBSIZE(
9900: 70 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  pOut);.  break;.
9910: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4d 6f  }../* Opcode: Mo
9920: 76 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ve P1 P2 P3 * *.
9930: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9940: 32 40 50 33 5d 3d 72 5b 50 31 40 50 33 5d 0a 2a  2@P3]=r[P1@P3].*
9950: 2a 0a 2a 2a 20 4d 6f 76 65 20 74 68 65 20 50 33  *.** Move the P3
9960: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
9970: 74 65 72 20 50 31 2e 2e 50 31 2b 50 33 2d 31 20  ter P1..P1+P3-1 
9980: 6f 76 65 72 20 69 6e 74 6f 0a 2a 2a 20 72 65 67  over into.** reg
9990: 69 73 74 65 72 73 20 50 32 2e 2e 50 32 2b 50 33  isters P2..P2+P3
99a0: 2d 31 2e 20 20 52 65 67 69 73 74 65 72 73 20 50  -1.  Registers P
99b0: 31 2e 2e 50 31 2b 50 33 2d 31 20 61 72 65 0a 2a  1..P1+P3-1 are.*
99c0: 2a 20 6c 65 66 74 20 68 6f 6c 64 69 6e 67 20 61  * left holding a
99d0: 20 4e 55 4c 4c 2e 20 20 49 74 20 69 73 20 61 6e   NULL.  It is an
99e0: 20 65 72 72 6f 72 20 66 6f 72 20 72 65 67 69 73   error for regis
99f0: 74 65 72 20 72 61 6e 67 65 73 0a 2a 2a 20 50 31  ter ranges.** P1
9a00: 2e 2e 50 31 2b 50 33 2d 31 20 61 6e 64 20 50 32  ..P1+P3-1 and P2
9a10: 2e 2e 50 32 2b 50 33 2d 31 20 74 6f 20 6f 76 65  ..P2+P3-1 to ove
9a20: 72 6c 61 70 2e 20 20 49 74 20 69 73 20 61 6e 20  rlap.  It is an 
9a30: 65 72 72 6f 72 0a 2a 2a 20 66 6f 72 20 50 33 20  error.** for P3 
9a40: 74 6f 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20  to be less than 
9a50: 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 6f  1..*/.case OP_Mo
9a60: 76 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b 20 20  ve: {.  int n;  
9a70: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
9a80: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
9a90: 6c 65 66 74 20 74 6f 20 63 6f 70 79 20 2a 2f 0a  left to copy */.
9aa0: 20 20 69 6e 74 20 70 31 3b 20 20 20 20 20 20 20    int p1;       
9ab0: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
9ac0: 6f 20 63 6f 70 79 20 66 72 6f 6d 20 2a 2f 0a 20  o copy from */. 
9ad0: 20 69 6e 74 20 70 32 3b 20 20 20 20 20 20 20 20   int p2;        
9ae0: 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f    /* Register to
9af0: 20 63 6f 70 79 20 74 6f 20 2a 2f 0a 0a 20 20 6e   copy to */..  n
9b00: 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 70 31   = pOp->p3;.  p1
9b10: 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70 32   = pOp->p1;.  p2
9b20: 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 61 73   = pOp->p2;.  as
9b30: 73 65 72 74 28 20 6e 3e 30 20 26 26 20 70 31 3e  sert( n>0 && p1>
9b40: 30 20 26 26 20 70 32 3e 30 20 29 3b 0a 20 20 61  0 && p2>0 );.  a
9b50: 73 73 65 72 74 28 20 70 31 2b 6e 3c 3d 70 32 20  ssert( p1+n<=p2 
9b60: 7c 7c 20 70 32 2b 6e 3c 3d 70 31 20 29 3b 0a 0a  || p2+n<=p1 );..
9b70: 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
9b80: 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d  1];.  pOut = &aM
9b90: 65 6d 5b 70 32 5d 3b 0a 20 20 64 6f 7b 0a 20 20  em[p2];.  do{.  
9ba0: 20 20 61 73 73 65 72 74 28 20 70 4f 75 74 3c 3d    assert( pOut<=
9bb0: 26 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65 6d 2b 31  &aMem[(p->nMem+1
9bc0: 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 5d 20   - p->nCursor)] 
9bd0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
9be0: 49 6e 31 3c 3d 26 61 4d 65 6d 5b 28 70 2d 3e 6e  In1<=&aMem[(p->n
9bf0: 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
9c00: 6f 72 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65  or)] );.    asse
9c10: 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
9c20: 49 6e 31 29 20 29 3b 0a 20 20 20 20 6d 65 6d 41  In1) );.    memA
9c30: 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c 20  boutToChange(p, 
9c40: 70 4f 75 74 29 3b 0a 20 20 20 20 73 71 6c 69 74  pOut);.    sqlit
9c50: 65 33 56 64 62 65 4d 65 6d 4d 6f 76 65 28 70 4f  e3VdbeMemMove(pO
9c60: 75 74 2c 20 70 49 6e 31 29 3b 0a 23 69 66 64 65  ut, pIn1);.#ifde
9c70: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20  f SQLITE_DEBUG. 
9c80: 20 20 20 69 66 28 20 70 4f 75 74 2d 3e 70 53 63     if( pOut->pSc
9c90: 6f 70 79 46 72 6f 6d 3e 3d 26 61 4d 65 6d 5b 70  opyFrom>=&aMem[p
9ca0: 31 5d 20 26 26 20 70 4f 75 74 2d 3e 70 53 63 6f  1] && pOut->pSco
9cb0: 70 79 46 72 6f 6d 3c 70 4f 75 74 20 29 7b 0a 20  pyFrom<pOut ){. 
9cc0: 20 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70       pOut->pScop
9cd0: 79 46 72 6f 6d 20 2b 3d 20 70 4f 70 2d 3e 70 32  yFrom += pOp->p2
9ce0: 20 2d 20 70 31 3b 0a 20 20 20 20 7d 0a 23 65 6e   - p1;.    }.#en
9cf0: 64 69 66 0a 20 20 20 20 44 65 65 70 68 65 6d 65  dif.    Deepheme
9d00: 72 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 20 20  ralize(pOut);.  
9d10: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
9d20: 28 70 32 2b 2b 2c 20 70 4f 75 74 29 3b 0a 20 20  (p2++, pOut);.  
9d30: 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 20 20 70 4f    pIn1++;.    pO
9d40: 75 74 2b 2b 3b 0a 20 20 7d 77 68 69 6c 65 28 20  ut++;.  }while( 
9d50: 2d 2d 6e 20 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  --n );.  break;.
9d60: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 43 6f  }../* Opcode: Co
9d70: 70 79 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  py P1 P2 P3 * *.
9d80: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
9d90: 32 40 50 33 2b 31 5d 3d 72 5b 50 31 40 50 33 2b  2@P3+1]=r[P1@P3+
9da0: 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20  1].**.** Make a 
9db0: 63 6f 70 79 20 6f 66 20 72 65 67 69 73 74 65 72  copy of register
9dc0: 73 20 50 31 2e 2e 50 31 2b 50 33 20 69 6e 74 6f  s P1..P1+P3 into
9dd0: 20 72 65 67 69 73 74 65 72 73 20 50 32 2e 2e 50   registers P2..P
9de0: 32 2b 50 33 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  2+P3..**.** This
9df0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6d 61 6b   instruction mak
9e00: 65 73 20 61 20 64 65 65 70 20 63 6f 70 79 20 6f  es a deep copy o
9e10: 66 20 74 68 65 20 76 61 6c 75 65 2e 20 20 41 20  f the value.  A 
9e20: 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 69 73 20  duplicate.** is 
9e30: 6d 61 64 65 20 6f 66 20 61 6e 79 20 73 74 72 69  made of any stri
9e40: 6e 67 20 6f 72 20 62 6c 6f 62 20 63 6f 6e 73 74  ng or blob const
9e50: 61 6e 74 2e 20 20 53 65 65 20 61 6c 73 6f 20 4f  ant.  See also O
9e60: 50 5f 53 43 6f 70 79 2e 0a 2a 2f 0a 63 61 73 65  P_SCopy..*/.case
9e70: 20 4f 50 5f 43 6f 70 79 3a 20 7b 0a 20 20 69 6e   OP_Copy: {.  in
9e80: 74 20 6e 3b 0a 0a 20 20 6e 20 3d 20 70 4f 70 2d  t n;..  n = pOp-
9e90: 3e 70 33 3b 0a 20 20 70 49 6e 31 20 3d 20 26 61  >p3;.  pIn1 = &a
9ea0: 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
9eb0: 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
9ec0: 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72 74 28  ->p2];.  assert(
9ed0: 20 70 4f 75 74 21 3d 70 49 6e 31 20 29 3b 0a 20   pOut!=pIn1 );. 
9ee0: 20 77 68 69 6c 65 28 20 31 20 29 7b 0a 20 20 20   while( 1 ){.   
9ef0: 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
9f00: 68 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c  hallowCopy(pOut,
9f10: 20 70 49 6e 31 2c 20 4d 45 4d 5f 45 70 68 65 6d   pIn1, MEM_Ephem
9f20: 29 3b 0a 20 20 20 20 44 65 65 70 68 65 6d 65 72  );.    Deephemer
9f30: 61 6c 69 7a 65 28 70 4f 75 74 29 3b 0a 23 69 66  alize(pOut);.#if
9f40: 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
9f50: 0a 20 20 20 20 70 4f 75 74 2d 3e 70 53 63 6f 70  .    pOut->pScop
9f60: 79 46 72 6f 6d 20 3d 20 30 3b 0a 23 65 6e 64 69  yFrom = 0;.#endi
9f70: 66 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f 54  f.    REGISTER_T
9f80: 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 70 4f 70  RACE(pOp->p2+pOp
9f90: 2d 3e 70 33 2d 6e 2c 20 70 4f 75 74 29 3b 0a 20  ->p3-n, pOut);. 
9fa0: 20 20 20 69 66 28 20 28 6e 2d 2d 29 3d 3d 30 20     if( (n--)==0 
9fb0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 70 4f 75  ) break;.    pOu
9fc0: 74 2b 2b 3b 0a 20 20 20 20 70 49 6e 31 2b 2b 3b  t++;.    pIn1++;
9fd0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
9fe0: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 43 6f 70  ./* Opcode: SCop
9ff0: 79 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  y P1 P2 * * *.**
a000: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d   Synopsis: r[P2]
a010: 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 4d 61 6b  =r[P1].**.** Mak
a020: 65 20 61 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79  e a shallow copy
a030: 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
a040: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a050: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73  ..**.** This ins
a060: 74 72 75 63 74 69 6f 6e 20 6d 61 6b 65 73 20 61  truction makes a
a070: 20 73 68 61 6c 6c 6f 77 20 63 6f 70 79 20 6f 66   shallow copy of
a080: 20 74 68 65 20 76 61 6c 75 65 2e 20 20 49 66 20   the value.  If 
a090: 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20  the value.** is 
a0a0: 61 20 73 74 72 69 6e 67 20 6f 72 20 62 6c 6f 62  a string or blob
a0b0: 2c 20 74 68 65 6e 20 74 68 65 20 63 6f 70 79 20  , then the copy 
a0c0: 69 73 20 6f 6e 6c 79 20 61 20 70 6f 69 6e 74 65  is only a pointe
a0d0: 72 20 74 6f 20 74 68 65 0a 2a 2a 20 6f 72 69 67  r to the.** orig
a0e0: 69 6e 61 6c 20 61 6e 64 20 68 65 6e 63 65 20 69  inal and hence i
a0f0: 66 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 63  f the original c
a100: 68 61 6e 67 65 73 20 73 6f 20 77 69 6c 6c 20 74  hanges so will t
a110: 68 65 20 63 6f 70 79 2e 0a 2a 2a 20 57 6f 72 73  he copy..** Wors
a120: 65 2c 20 69 66 20 74 68 65 20 6f 72 69 67 69 6e  e, if the origin
a130: 61 6c 20 69 73 20 64 65 61 6c 6c 6f 63 61 74 65  al is deallocate
a140: 64 2c 20 74 68 65 20 63 6f 70 79 20 62 65 63 6f  d, the copy beco
a150: 6d 65 73 20 69 6e 76 61 6c 69 64 2e 0a 2a 2a 20  mes invalid..** 
a160: 54 68 75 73 20 74 68 65 20 70 72 6f 67 72 61 6d  Thus the program
a170: 20 6d 75 73 74 20 67 75 61 72 61 6e 74 65 65 20   must guarantee 
a180: 74 68 61 74 20 74 68 65 20 6f 72 69 67 69 6e 61  that the origina
a190: 6c 20 77 69 6c 6c 20 6e 6f 74 20 63 68 61 6e 67  l will not chang
a1a0: 65 0a 2a 2a 20 64 75 72 69 6e 67 20 74 68 65 20  e.** during the 
a1b0: 6c 69 66 65 74 69 6d 65 20 6f 66 20 74 68 65 20  lifetime of the 
a1c0: 63 6f 70 79 2e 20 20 55 73 65 20 4f 50 5f 43 6f  copy.  Use OP_Co
a1d0: 70 79 20 74 6f 20 6d 61 6b 65 20 61 20 63 6f 6d  py to make a com
a1e0: 70 6c 65 74 65 0a 2a 2a 20 63 6f 70 79 2e 0a 2a  plete.** copy..*
a1f0: 2f 0a 63 61 73 65 20 4f 50 5f 53 43 6f 70 79 3a  /.case OP_SCopy:
a200: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a   {            /*
a210: 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49 6e 31 20   out2 */.  pIn1 
a220: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
a230: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a240: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
a250: 65 72 74 28 20 70 4f 75 74 21 3d 70 49 6e 31 20  ert( pOut!=pIn1 
a260: 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65  );.  sqlite3Vdbe
a270: 4d 65 6d 53 68 61 6c 6c 6f 77 43 6f 70 79 28 70  MemShallowCopy(p
a280: 4f 75 74 2c 20 70 49 6e 31 2c 20 4d 45 4d 5f 45  Out, pIn1, MEM_E
a290: 70 68 65 6d 29 3b 0a 23 69 66 64 65 66 20 53 51  phem);.#ifdef SQ
a2a0: 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69 66 28  LITE_DEBUG.  if(
a2b0: 20 70 4f 75 74 2d 3e 70 53 63 6f 70 79 46 72 6f   pOut->pScopyFro
a2c0: 6d 3d 3d 30 20 29 20 70 4f 75 74 2d 3e 70 53 63  m==0 ) pOut->pSc
a2d0: 6f 70 79 46 72 6f 6d 20 3d 20 70 49 6e 31 3b 0a  opyFrom = pIn1;.
a2e0: 23 65 6e 64 69 66 0a 20 20 62 72 65 61 6b 3b 0a  #endif.  break;.
a2f0: 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 6e  }../* Opcode: In
a300: 74 43 6f 70 79 20 50 31 20 50 32 20 2a 20 2a 20  tCopy P1 P2 * * 
a310: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
a320: 5b 50 32 5d 3d 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a  [P2]=r[P1].**.**
a330: 20 54 72 61 6e 73 66 65 72 20 74 68 65 20 69 6e   Transfer the in
a340: 74 65 67 65 72 20 76 61 6c 75 65 20 68 65 6c 64  teger value held
a350: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20   in register P1 
a360: 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
a370: 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 73 20  ..**.** This is 
a380: 61 6e 20 6f 70 74 69 6d 69 7a 65 64 20 76 65 72  an optimized ver
a390: 73 69 6f 6e 20 6f 66 20 53 43 6f 70 79 20 74 68  sion of SCopy th
a3a0: 61 74 20 77 6f 72 6b 73 20 6f 6e 6c 79 20 66 6f  at works only fo
a3b0: 72 20 69 6e 74 65 67 65 72 0a 2a 2a 20 76 61 6c  r integer.** val
a3c0: 75 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ues..*/.case OP_
a3d0: 49 6e 74 43 6f 70 79 3a 20 7b 20 20 20 20 20 20  IntCopy: {      
a3e0: 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
a3f0: 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
a400: 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65  pOp->p1];.  asse
a410: 72 74 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  rt( (pIn1->flags
a420: 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
a430: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
a440: 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 73 71 6c  [pOp->p2];.  sql
a450: 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 49 6e  ite3VdbeMemSetIn
a460: 74 36 34 28 70 4f 75 74 2c 20 70 49 6e 31 2d 3e  t64(pOut, pIn1->
a470: 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  u.i);.  break;.}
a480: 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73  ../* Opcode: Res
a490: 75 6c 74 52 6f 77 20 50 31 20 50 32 20 2a 20 2a  ultRow P1 P2 * *
a4a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
a4b0: 6f 75 74 70 75 74 3d 72 5b 50 31 40 50 32 5d 0a  output=r[P1@P2].
a4c0: 2a 2a 0a 2a 2a 20 54 68 65 20 72 65 67 69 73 74  **.** The regist
a4d0: 65 72 73 20 50 31 20 74 68 72 6f 75 67 68 20 50  ers P1 through P
a4e0: 31 2b 50 32 2d 31 20 63 6f 6e 74 61 69 6e 20 61  1+P2-1 contain a
a4f0: 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 0a 2a   single row of.*
a500: 2a 20 72 65 73 75 6c 74 73 2e 20 54 68 69 73 20  * results. This 
a510: 6f 70 63 6f 64 65 20 63 61 75 73 65 73 20 74 68  opcode causes th
a520: 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28 29  e sqlite3_step()
a530: 20 63 61 6c 6c 20 74 6f 20 74 65 72 6d 69 6e 61   call to termina
a540: 74 65 0a 2a 2a 20 77 69 74 68 20 61 6e 20 53 51  te.** with an SQ
a550: 4c 49 54 45 5f 52 4f 57 20 72 65 74 75 72 6e 20  LITE_ROW return 
a560: 63 6f 64 65 20 61 6e 64 20 69 74 20 73 65 74 73  code and it sets
a570: 20 75 70 20 74 68 65 20 73 71 6c 69 74 65 33 5f   up the sqlite3_
a580: 73 74 6d 74 0a 2a 2a 20 73 74 72 75 63 74 75 72  stmt.** structur
a590: 65 20 74 6f 20 70 72 6f 76 69 64 65 20 61 63 63  e to provide acc
a5a0: 65 73 73 20 74 6f 20 74 68 65 20 72 28 50 31 29  ess to the r(P1)
a5b0: 2e 2e 72 28 50 31 2b 50 32 2d 31 29 20 76 61 6c  ..r(P1+P2-1) val
a5c0: 75 65 73 20 61 73 0a 2a 2a 20 74 68 65 20 72 65  ues as.** the re
a5d0: 73 75 6c 74 20 72 6f 77 2e 0a 2a 2f 0a 63 61 73  sult row..*/.cas
a5e0: 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 3a 20  e OP_ResultRow: 
a5f0: 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20  {.  Mem *pMem;. 
a600: 20 69 6e 74 20 69 3b 0a 20 20 61 73 73 65 72 74   int i;.  assert
a610: 28 20 70 2d 3e 6e 52 65 73 43 6f 6c 75 6d 6e 3d  ( p->nResColumn=
a620: 3d 70 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 61 73  =pOp->p2 );.  as
a630: 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 30 20  sert( pOp->p1>0 
a640: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
a650: 2d 3e 70 31 2b 70 4f 70 2d 3e 70 32 3c 3d 28 70  ->p1+pOp->p2<=(p
a660: 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
a670: 75 72 73 6f 72 29 2b 31 20 29 3b 0a 0a 23 69 66  ursor)+1 );..#if
a680: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
a690: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
a6a0: 43 4b 0a 20 20 2f 2a 20 52 75 6e 20 74 68 65 20  CK.  /* Run the 
a6b0: 70 72 6f 67 72 65 73 73 20 63 6f 75 6e 74 65 72  progress counter
a6c0: 20 6a 75 73 74 20 62 65 66 6f 72 65 20 72 65 74   just before ret
a6d0: 75 72 6e 69 6e 67 2e 0a 20 20 2a 2f 0a 20 20 69  urning..  */.  i
a6e0: 66 28 20 64 62 2d 3e 78 50 72 6f 67 72 65 73 73  f( db->xProgress
a6f0: 21 3d 30 0a 20 20 20 26 26 20 6e 56 6d 53 74 65  !=0.   && nVmSte
a700: 70 3e 3d 6e 50 72 6f 67 72 65 73 73 4c 69 6d 69  p>=nProgressLimi
a710: 74 0a 20 20 20 26 26 20 64 62 2d 3e 78 50 72 6f  t.   && db->xPro
a720: 67 72 65 73 73 28 64 62 2d 3e 70 50 72 6f 67 72  gress(db->pProgr
a730: 65 73 73 41 72 67 29 21 3d 30 0a 20 20 29 7b 0a  essArg)!=0.  ){.
a740: 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
a750: 49 4e 54 45 52 52 55 50 54 3b 0a 20 20 20 20 67  INTERRUPT;.    g
a760: 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
a770: 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 23 65 6e 64  _error;.  }.#end
a780: 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 69 73  if..  /* If this
a790: 20 73 74 61 74 65 6d 65 6e 74 20 68 61 73 20 76   statement has v
a7a0: 69 6f 6c 61 74 65 64 20 69 6d 6d 65 64 69 61 74  iolated immediat
a7b0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f  e foreign key co
a7c0: 6e 73 74 72 61 69 6e 74 73 2c 20 64 6f 0a 20 20  nstraints, do.  
a7d0: 2a 2a 20 6e 6f 74 20 72 65 74 75 72 6e 20 74 68  ** not return th
a7e0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f 77 73  e number of rows
a7f0: 20 6d 6f 64 69 66 69 65 64 2e 20 41 6e 64 20 64   modified. And d
a800: 6f 20 6e 6f 74 20 52 45 4c 45 41 53 45 20 74 68  o not RELEASE th
a810: 65 20 73 74 61 74 65 6d 65 6e 74 0a 20 20 2a 2a  e statement.  **
a820: 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 49 74   transaction. It
a830: 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 6f 6c   needs to be rol
a840: 6c 65 64 20 62 61 63 6b 2e 20 20 2a 2f 0a 20 20  led back.  */.  
a850: 69 66 28 20 53 51 4c 49 54 45 5f 4f 4b 21 3d 28  if( SQLITE_OK!=(
a860: 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
a870: 43 68 65 63 6b 46 6b 28 70 2c 20 30 29 29 20 29  CheckFk(p, 0)) )
a880: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 64 62  {.    assert( db
a890: 2d 3e 66 6c 61 67 73 26 53 51 4c 49 54 45 5f 43  ->flags&SQLITE_C
a8a0: 6f 75 6e 74 52 6f 77 73 20 29 3b 0a 20 20 20 20  ountRows );.    
a8b0: 61 73 73 65 72 74 28 20 70 2d 3e 75 73 65 73 53  assert( p->usesS
a8c0: 74 6d 74 4a 6f 75 72 6e 61 6c 20 29 3b 0a 20 20  tmtJournal );.  
a8d0: 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
a8e0: 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
a8f0: 20 20 2f 2a 20 49 66 20 74 68 65 20 53 51 4c 49    /* If the SQLI
a900: 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 66 6c 61  TE_CountRows fla
a910: 67 20 69 73 20 73 65 74 20 69 6e 20 73 71 6c 69  g is set in sqli
a920: 74 65 33 2e 66 6c 61 67 73 20 6d 61 73 6b 2c 20  te3.flags mask, 
a930: 74 68 65 6e 20 0a 20 20 2a 2a 20 44 4d 4c 20 73  then .  ** DML s
a940: 74 61 74 65 6d 65 6e 74 73 20 69 6e 76 6f 6b 65  tatements invoke
a950: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 74 6f 20   this opcode to 
a960: 72 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62 65  return the numbe
a970: 72 20 6f 66 20 72 6f 77 73 20 0a 20 20 2a 2a 20  r of rows .  ** 
a980: 6d 6f 64 69 66 69 65 64 20 74 6f 20 74 68 65 20  modified to the 
a990: 75 73 65 72 2e 20 54 68 69 73 20 69 73 20 74 68  user. This is th
a9a0: 65 20 6f 6e 6c 79 20 77 61 79 20 74 68 61 74 20  e only way that 
a9b0: 61 20 56 4d 20 74 68 61 74 0a 20 20 2a 2a 20 6f  a VM that.  ** o
a9c0: 70 65 6e 73 20 61 20 73 74 61 74 65 6d 65 6e 74  pens a statement
a9d0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6d 61 79   transaction may
a9e0: 20 69 6e 76 6f 6b 65 20 74 68 69 73 20 6f 70 63   invoke this opc
a9f0: 6f 64 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49  ode..  **.  ** I
aa00: 6e 20 63 61 73 65 20 74 68 69 73 20 69 73 20 73  n case this is s
aa10: 75 63 68 20 61 20 73 74 61 74 65 6d 65 6e 74 2c  uch a statement,
aa20: 20 63 6c 6f 73 65 20 61 6e 79 20 73 74 61 74 65   close any state
aa30: 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e  ment transaction
aa40: 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 20 62 79 20  .  ** opened by 
aa50: 74 68 69 73 20 56 4d 20 62 65 66 6f 72 65 20 72  this VM before r
aa60: 65 74 75 72 6e 69 6e 67 20 63 6f 6e 74 72 6f 6c  eturning control
aa70: 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20 54 68   to the user. Th
aa80: 69 73 20 69 73 20 74 6f 0a 20 20 2a 2a 20 65 6e  is is to.  ** en
aa90: 73 75 72 65 20 74 68 61 74 20 73 74 61 74 65 6d  sure that statem
aaa0: 65 6e 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73  ent-transactions
aab0: 20 61 72 65 20 61 6c 77 61 79 73 20 6e 65 73 74   are always nest
aac0: 65 64 2c 20 6e 6f 74 20 6f 76 65 72 6c 61 70 70  ed, not overlapp
aad0: 69 6e 67 2e 0a 20 20 2a 2a 20 49 66 20 74 68 65  ing..  ** If the
aae0: 20 6f 70 65 6e 20 73 74 61 74 65 6d 65 6e 74 2d   open statement-
aaf0: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
ab00: 6f 74 20 63 6c 6f 73 65 64 20 68 65 72 65 2c 20  ot closed here, 
ab10: 74 68 65 6e 20 74 68 65 20 75 73 65 72 0a 20 20  then the user.  
ab20: 2a 2a 20 6d 61 79 20 73 74 65 70 20 61 6e 6f 74  ** may step anot
ab30: 68 65 72 20 56 4d 20 74 68 61 74 20 6f 70 65 6e  her VM that open
ab40: 73 20 69 74 73 20 6f 77 6e 20 73 74 61 74 65 6d  s its own statem
ab50: 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  ent transaction.
ab60: 20 54 68 69 73 0a 20 20 2a 2a 20 6d 61 79 20 6c   This.  ** may l
ab70: 65 61 64 20 74 6f 20 6f 76 65 72 6c 61 70 70 69  ead to overlappi
ab80: 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 74 72 61  ng statement tra
ab90: 6e 73 61 63 74 69 6f 6e 73 2e 0a 20 20 2a 2a 0a  nsactions..  **.
aba0: 20 20 2a 2a 20 54 68 65 20 73 74 61 74 65 6d 65    ** The stateme
abb0: 6e 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69  nt transaction i
abc0: 73 20 6e 65 76 65 72 20 61 20 74 6f 70 2d 6c 65  s never a top-le
abd0: 76 65 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  vel transaction.
abe0: 20 20 48 65 6e 63 65 0a 20 20 2a 2a 20 74 68 65    Hence.  ** the
abf0: 20 52 45 4c 45 41 53 45 20 63 61 6c 6c 20 62 65   RELEASE call be
ac00: 6c 6f 77 20 63 61 6e 20 6e 65 76 65 72 20 66 61  low can never fa
ac10: 69 6c 2e 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72  il..  */.  asser
ac20: 74 28 20 70 2d 3e 69 53 74 61 74 65 6d 65 6e 74  t( p->iStatement
ac30: 3d 3d 30 20 7c 7c 20 64 62 2d 3e 66 6c 61 67 73  ==0 || db->flags
ac40: 26 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77  &SQLITE_CountRow
ac50: 73 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69  s );.  rc = sqli
ac60: 74 65 33 56 64 62 65 43 6c 6f 73 65 53 74 61 74  te3VdbeCloseStat
ac70: 65 6d 65 6e 74 28 70 2c 20 53 41 56 45 50 4f 49  ement(p, SAVEPOI
ac80: 4e 54 5f 52 45 4c 45 41 53 45 29 3b 0a 20 20 61  NT_RELEASE);.  a
ac90: 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c 49 54  ssert( rc==SQLIT
aca0: 45 5f 4f 4b 20 29 3b 0a 0a 20 20 2f 2a 20 49 6e  E_OK );..  /* In
acb0: 76 61 6c 69 64 61 74 65 20 61 6c 6c 20 65 70 68  validate all eph
acc0: 65 6d 65 72 61 6c 20 63 75 72 73 6f 72 20 72 6f  emeral cursor ro
acd0: 77 20 63 61 63 68 65 73 20 2a 2f 0a 20 20 70 2d  w caches */.  p-
ace0: 3e 63 61 63 68 65 43 74 72 20 3d 20 28 70 2d 3e  >cacheCtr = (p->
acf0: 63 61 63 68 65 43 74 72 20 2b 20 32 29 7c 31 3b  cacheCtr + 2)|1;
ad00: 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65  ..  /* Make sure
ad10: 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20   the results of 
ad20: 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
ad30: 61 72 65 20 5c 30 30 30 20 74 65 72 6d 69 6e 61  are \000 termina
ad40: 74 65 64 0a 20 20 2a 2a 20 61 6e 64 20 68 61 76  ted.  ** and hav
ad50: 65 20 61 6e 20 61 73 73 69 67 6e 65 64 20 74 79  e an assigned ty
ad60: 70 65 2e 20 20 54 68 65 20 72 65 73 75 6c 74 73  pe.  The results
ad70: 20 61 72 65 20 64 65 2d 65 70 68 65 6d 65 72 61   are de-ephemera
ad80: 6c 69 7a 65 64 20 61 73 0a 20 20 2a 2a 20 61 20  lized as.  ** a 
ad90: 73 69 64 65 20 65 66 66 65 63 74 2e 0a 20 20 2a  side effect..  *
ada0: 2f 0a 20 20 70 4d 65 6d 20 3d 20 70 2d 3e 70 52  /.  pMem = p->pR
adb0: 65 73 75 6c 74 53 65 74 20 3d 20 26 61 4d 65 6d  esultSet = &aMem
adc0: 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 66 6f 72  [pOp->p1];.  for
add0: 28 69 3d 30 3b 20 69 3c 70 4f 70 2d 3e 70 32 3b  (i=0; i<pOp->p2;
ade0: 20 69 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72   i++){.    asser
adf0: 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 70  t( memIsValid(&p
ae00: 4d 65 6d 5b 69 5d 29 20 29 3b 0a 20 20 20 20 44  Mem[i]) );.    D
ae10: 65 65 70 68 65 6d 65 72 61 6c 69 7a 65 28 26 70  eephemeralize(&p
ae20: 4d 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 61 73 73  Mem[i]);.    ass
ae30: 65 72 74 28 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c  ert( (pMem[i].fl
ae40: 61 67 73 20 26 20 4d 45 4d 5f 45 70 68 65 6d 29  ags & MEM_Ephem)
ae50: 3d 3d 30 0a 20 20 20 20 20 20 20 20 20 20 20 20  ==0.            
ae60: 7c 7c 20 28 70 4d 65 6d 5b 69 5d 2e 66 6c 61 67  || (pMem[i].flag
ae70: 73 20 26 20 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d  s & (MEM_Str|MEM
ae80: 5f 42 6c 6f 62 29 29 3d 3d 30 20 29 3b 0a 20 20  _Blob))==0 );.  
ae90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
aea0: 4e 75 6c 54 65 72 6d 69 6e 61 74 65 28 26 70 4d  NulTerminate(&pM
aeb0: 65 6d 5b 69 5d 29 3b 0a 20 20 20 20 52 45 47 49  em[i]);.    REGI
aec0: 53 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e  STER_TRACE(pOp->
aed0: 70 31 2b 69 2c 20 26 70 4d 65 6d 5b 69 5d 29 3b  p1+i, &pMem[i]);
aee0: 0a 20 20 7d 0a 20 20 69 66 28 20 64 62 2d 3e 6d  .  }.  if( db->m
aef0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 29 20 67 6f  allocFailed ) go
af00: 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 0a 20 20 69 66  to no_mem;..  if
af10: 28 20 64 62 2d 3e 6d 54 72 61 63 65 20 26 20 53  ( db->mTrace & S
af20: 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f 57 20  QLITE_TRACE_ROW 
af30: 29 7b 0a 20 20 20 20 64 62 2d 3e 78 54 72 61 63  ){.    db->xTrac
af40: 65 28 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52  e(SQLITE_TRACE_R
af50: 4f 57 2c 20 64 62 2d 3e 70 54 72 61 63 65 41 72  OW, db->pTraceAr
af60: 67 2c 20 70 2c 20 30 29 3b 0a 20 20 7d 0a 0a 20  g, p, 0);.  }.. 
af70: 20 2f 2a 20 52 65 74 75 72 6e 20 53 51 4c 49 54   /* Return SQLIT
af80: 45 5f 52 4f 57 0a 20 20 2a 2f 0a 20 20 70 2d 3e  E_ROW.  */.  p->
af90: 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
afa0: 20 61 4f 70 29 20 2b 20 31 3b 0a 20 20 72 63 20   aOp) + 1;.  rc 
afb0: 3d 20 53 51 4c 49 54 45 5f 52 4f 57 3b 0a 20 20  = SQLITE_ROW;.  
afc0: 67 6f 74 6f 20 76 64 62 65 5f 72 65 74 75 72 6e  goto vdbe_return
afd0: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
afe0: 43 6f 6e 63 61 74 20 50 31 20 50 32 20 50 33 20  Concat P1 P2 P3 
aff0: 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
b000: 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 2b 72 5b 50   r[P3]=r[P2]+r[P
b010: 31 5d 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65  1].**.** Add the
b020: 20 74 65 78 74 20 69 6e 20 72 65 67 69 73 74 65   text in registe
b030: 72 20 50 31 20 6f 6e 74 6f 20 74 68 65 20 65 6e  r P1 onto the en
b040: 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 69 6e  d of the text in
b050: 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 32 20  .** register P2 
b060: 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72 65  and store the re
b070: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
b080: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
b090: 72 20 74 68 65 20 50 31 20 6f 72 20 50 32 20 74  r the P1 or P2 t
b0a0: 65 78 74 20 61 72 65 20 4e 55 4c 4c 20 74 68 65  ext are NULL the
b0b0: 6e 20 73 74 6f 72 65 20 4e 55 4c 4c 20 69 6e 20  n store NULL in 
b0c0: 50 33 2e 0a 2a 2a 0a 2a 2a 20 20 20 50 33 20 3d  P3..**.**   P3 =
b0d0: 20 50 32 20 7c 7c 20 50 31 0a 2a 2a 0a 2a 2a 20   P2 || P1.**.** 
b0e0: 49 74 20 69 73 20 69 6c 6c 65 67 61 6c 20 66 6f  It is illegal fo
b0f0: 72 20 50 31 20 61 6e 64 20 50 33 20 74 6f 20 62  r P1 and P3 to b
b100: 65 20 74 68 65 20 73 61 6d 65 20 72 65 67 69 73  e the same regis
b110: 74 65 72 2e 20 53 6f 6d 65 74 69 6d 65 73 2c 0a  ter. Sometimes,.
b120: 2a 2a 20 69 66 20 50 33 20 69 73 20 74 68 65 20  ** if P3 is the 
b130: 73 61 6d 65 20 72 65 67 69 73 74 65 72 20 61 73  same register as
b140: 20 50 32 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65   P2, the impleme
b150: 6e 74 61 74 69 6f 6e 20 69 73 20 61 62 6c 65 0a  ntation is able.
b160: 2a 2a 20 74 6f 20 61 76 6f 69 64 20 61 20 6d 65  ** to avoid a me
b170: 6d 63 70 79 28 29 2e 0a 2a 2f 0a 63 61 73 65 20  mcpy()..*/.case 
b180: 4f 50 5f 43 6f 6e 63 61 74 3a 20 7b 20 20 20 20  OP_Concat: {    
b190: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
b1a0: 73 20 54 4b 5f 43 4f 4e 43 41 54 2c 20 69 6e 31  s TK_CONCAT, in1
b1b0: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20  , in2, out3 */. 
b1c0: 20 69 36 34 20 6e 42 79 74 65 3b 0a 0a 20 20 70   i64 nByte;..  p
b1d0: 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In1 = &aMem[pOp-
b1e0: 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d 20 26  >p1];.  pIn2 = &
b1f0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20  aMem[pOp->p2];. 
b200: 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f   pOut = &aMem[pO
b210: 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72 74  p->p3];.  assert
b220: 28 20 70 49 6e 31 21 3d 70 4f 75 74 20 29 3b 0a  ( pIn1!=pOut );.
b230: 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
b240: 67 73 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73  gs | pIn2->flags
b250: 29 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b 0a  ) & MEM_Null ){.
b260: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
b270: 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
b280: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b290: 20 20 69 66 28 20 45 78 70 61 6e 64 42 6c 6f 62    if( ExpandBlob
b2a0: 28 70 49 6e 31 29 20 7c 7c 20 45 78 70 61 6e 64  (pIn1) || Expand
b2b0: 42 6c 6f 62 28 70 49 6e 32 29 20 29 20 67 6f 74  Blob(pIn2) ) got
b2c0: 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 53 74 72 69  o no_mem;.  Stri
b2d0: 6e 67 69 66 79 28 70 49 6e 31 2c 20 65 6e 63 6f  ngify(pIn1, enco
b2e0: 64 69 6e 67 29 3b 0a 20 20 53 74 72 69 6e 67 69  ding);.  Stringi
b2f0: 66 79 28 70 49 6e 32 2c 20 65 6e 63 6f 64 69 6e  fy(pIn2, encodin
b300: 67 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 70 49  g);.  nByte = pI
b310: 6e 31 2d 3e 6e 20 2b 20 70 49 6e 32 2d 3e 6e 3b  n1->n + pIn2->n;
b320: 0a 20 20 69 66 28 20 6e 42 79 74 65 3e 64 62 2d  .  if( nByte>db-
b330: 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
b340: 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
b350: 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
b360: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 73 71 6c 69  ;.  }.  if( sqli
b370: 74 65 33 56 64 62 65 4d 65 6d 47 72 6f 77 28 70  te3VdbeMemGrow(p
b380: 4f 75 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 2b  Out, (int)nByte+
b390: 32 2c 20 70 4f 75 74 3d 3d 70 49 6e 32 29 20 29  2, pOut==pIn2) )
b3a0: 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
b3b0: 6d 3b 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54  m;.  }.  MemSetT
b3c0: 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45  ypeFlag(pOut, ME
b3d0: 4d 5f 53 74 72 29 3b 0a 20 20 69 66 28 20 70 4f  M_Str);.  if( pO
b3e0: 75 74 21 3d 70 49 6e 32 20 29 7b 0a 20 20 20 20  ut!=pIn2 ){.    
b3f0: 6d 65 6d 63 70 79 28 70 4f 75 74 2d 3e 7a 2c 20  memcpy(pOut->z, 
b400: 70 49 6e 32 2d 3e 7a 2c 20 70 49 6e 32 2d 3e 6e  pIn2->z, pIn2->n
b410: 29 3b 0a 20 20 7d 0a 20 20 6d 65 6d 63 70 79 28  );.  }.  memcpy(
b420: 26 70 4f 75 74 2d 3e 7a 5b 70 49 6e 32 2d 3e 6e  &pOut->z[pIn2->n
b430: 5d 2c 20 70 49 6e 31 2d 3e 7a 2c 20 70 49 6e 31  ], pIn1->z, pIn1
b440: 2d 3e 6e 29 3b 0a 20 20 70 4f 75 74 2d 3e 7a 5b  ->n);.  pOut->z[
b450: 6e 42 79 74 65 5d 3d 30 3b 0a 20 20 70 4f 75 74  nByte]=0;.  pOut
b460: 2d 3e 7a 5b 6e 42 79 74 65 2b 31 5d 20 3d 20 30  ->z[nByte+1] = 0
b470: 3b 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20  ;.  pOut->flags 
b480: 7c 3d 20 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20 70  |= MEM_Term;.  p
b490: 4f 75 74 2d 3e 6e 20 3d 20 28 69 6e 74 29 6e 42  Out->n = (int)nB
b4a0: 79 74 65 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e 63  yte;.  pOut->enc
b4b0: 20 3d 20 65 6e 63 6f 64 69 6e 67 3b 0a 20 20 55   = encoding;.  U
b4c0: 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49  PDATE_MAX_BLOBSI
b4d0: 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72 65 61  ZE(pOut);.  brea
b4e0: 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
b4f0: 20 41 64 64 20 50 31 20 50 32 20 50 33 20 2a 20   Add P1 P2 P3 * 
b500: 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
b510: 5b 50 33 5d 3d 72 5b 50 31 5d 2b 72 5b 50 32 5d  [P3]=r[P1]+r[P2]
b520: 0a 2a 2a 0a 2a 2a 20 41 64 64 20 74 68 65 20 76  .**.** Add the v
b530: 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72  alue in register
b540: 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c 75 65   P1 to the value
b550: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a   in register P2.
b560: 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65  ** and store the
b570: 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73   result in regis
b580: 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69  ter P3..** If ei
b590: 74 68 65 72 20 69 6e 70 75 74 20 69 73 20 4e 55  ther input is NU
b5a0: 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74 20 69  LL, the result i
b5b0: 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70  s NULL..*/./* Op
b5c0: 63 6f 64 65 3a 20 4d 75 6c 74 69 70 6c 79 20 50  code: Multiply P
b5d0: 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
b5e0: 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72  ynopsis: r[P3]=r
b5f0: 5b 50 31 5d 2a 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  [P1]*r[P2].**.**
b600: 0a 2a 2a 20 4d 75 6c 74 69 70 6c 79 20 74 68 65  .** Multiply the
b610: 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
b620: 65 72 20 50 31 20 62 79 20 74 68 65 20 76 61 6c  er P1 by the val
b630: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b640: 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20 74  2.** and store t
b650: 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  he result in reg
b660: 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66 20  ister P3..** If 
b670: 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73 20  either input is 
b680: 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c 74  NULL, the result
b690: 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a 20   is NULL..*/./* 
b6a0: 4f 70 63 6f 64 65 3a 20 53 75 62 74 72 61 63 74  Opcode: Subtract
b6b0: 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
b6c0: 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d   Synopsis: r[P3]
b6d0: 3d 72 5b 50 32 5d 2d 72 5b 50 31 5d 0a 2a 2a 0a  =r[P2]-r[P1].**.
b6e0: 2a 2a 20 53 75 62 74 72 61 63 74 20 74 68 65 20  ** Subtract the 
b6f0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
b700: 72 20 50 31 20 66 72 6f 6d 20 74 68 65 20 76 61  r P1 from the va
b710: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
b720: 50 32 0a 2a 2a 20 61 6e 64 20 73 74 6f 72 65 20  P2.** and store 
b730: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
b740: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
b750: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
b760: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
b770: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
b780: 20 4f 70 63 6f 64 65 3a 20 44 69 76 69 64 65 20   Opcode: Divide 
b790: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
b7a0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
b7b0: 72 5b 50 32 5d 2f 72 5b 50 31 5d 0a 2a 2a 0a 2a  r[P2]/r[P1].**.*
b7c0: 2a 20 44 69 76 69 64 65 20 74 68 65 20 76 61 6c  * Divide the val
b7d0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
b7e0: 31 20 62 79 20 74 68 65 20 76 61 6c 75 65 20 69  1 by the value i
b7f0: 6e 20 72 65 67 69 73 74 65 72 20 50 32 0a 2a 2a  n register P2.**
b800: 20 61 6e 64 20 73 74 6f 72 65 20 74 68 65 20 72   and store the r
b810: 65 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65  esult in registe
b820: 72 20 50 33 20 28 50 33 3d 50 32 2f 50 31 29 2e  r P3 (P3=P2/P1).
b830: 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e   If the value in
b840: 20 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31   .** register P1
b850: 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 74   is zero, then t
b860: 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55 4c  he result is NUL
b870: 4c 2e 20 49 66 20 65 69 74 68 65 72 20 69 6e 70  L. If either inp
b880: 75 74 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20  ut is .** NULL, 
b890: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
b8a0: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
b8b0: 3a 20 52 65 6d 61 69 6e 64 65 72 20 50 31 20 50  : Remainder P1 P
b8c0: 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  2 P3 * *.** Syno
b8d0: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 72 5b 50 32  psis: r[P3]=r[P2
b8e0: 5d 25 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 43 6f  ]%r[P1].**.** Co
b8f0: 6d 70 75 74 65 20 74 68 65 20 72 65 6d 61 69 6e  mpute the remain
b900: 64 65 72 20 61 66 74 65 72 20 69 6e 74 65 67 65  der after intege
b910: 72 20 72 65 67 69 73 74 65 72 20 50 32 20 69 73  r register P2 is
b920: 20 64 69 76 69 64 65 64 20 62 79 20 0a 2a 2a 20   divided by .** 
b930: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
b940: 73 74 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74  store the result
b950: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e   in register P3.
b960: 20 0a 2a 2a 20 49 66 20 74 68 65 20 76 61 6c 75   .** If the valu
b970: 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
b980: 20 69 73 20 7a 65 72 6f 20 74 68 65 20 72 65 73   is zero the res
b990: 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 20  ult is NULL..** 
b9a0: 49 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e  If either operan
b9b0: 64 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  d is NULL, the r
b9c0: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
b9d0: 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64 3a 20 20  /.case OP_Add:  
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 50   /* same as TK_P
ba00: 4c 55 53 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  LUS, in1, in2, o
ba10: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
ba20: 75 62 74 72 61 63 74 3a 20 20 20 20 20 20 20 20  ubtract:        
ba30: 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73        /* same as
ba40: 20 54 4b 5f 4d 49 4e 55 53 2c 20 69 6e 31 2c 20   TK_MINUS, in1, 
ba50: 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63 61 73  in2, out3 */.cas
ba60: 65 20 4f 50 5f 4d 75 6c 74 69 70 6c 79 3a 20 20  e OP_Multiply:  
ba70: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
ba80: 61 6d 65 20 61 73 20 54 4b 5f 53 54 41 52 2c 20  ame as TK_STAR, 
ba90: 69 6e 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a  in1, in2, out3 *
baa0: 2f 0a 63 61 73 65 20 4f 50 5f 44 69 76 69 64 65  /.case OP_Divide
bab0: 3a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  :               
bac0: 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 53   /* same as TK_S
bad0: 4c 41 53 48 2c 20 69 6e 31 2c 20 69 6e 32 2c 20  LASH, in1, in2, 
bae0: 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f  out3 */.case OP_
baf0: 52 65 6d 61 69 6e 64 65 72 3a 20 7b 20 20 20 20  Remainder: {    
bb00: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
bb10: 73 20 54 4b 5f 52 45 4d 2c 20 69 6e 31 2c 20 69  s TK_REM, in1, i
bb20: 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 20 20 63 68  n2, out3 */.  ch
bb30: 61 72 20 62 49 6e 74 69 6e 74 3b 20 20 20 2f 2a  ar bIntint;   /*
bb40: 20 53 74 61 72 74 65 64 20 6f 75 74 20 61 73 20   Started out as 
bb50: 74 77 6f 20 69 6e 74 65 67 65 72 20 6f 70 65 72  two integer oper
bb60: 61 6e 64 73 20 2a 2f 0a 20 20 75 31 36 20 66 6c  ands */.  u16 fl
bb70: 61 67 73 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6d  ags;      /* Com
bb80: 62 69 6e 65 64 20 4d 45 4d 5f 2a 20 66 6c 61 67  bined MEM_* flag
bb90: 73 20 66 72 6f 6d 20 62 6f 74 68 20 69 6e 70 75  s from both inpu
bba0: 74 73 20 2a 2f 0a 20 20 75 31 36 20 74 79 70 65  ts */.  u16 type
bbb0: 31 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 65 72  1;      /* Numer
bbc0: 69 63 20 74 79 70 65 20 6f 66 20 6c 65 66 74 20  ic type of left 
bbd0: 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20 75 31 36  operand */.  u16
bbe0: 20 74 79 70 65 32 3b 20 20 20 20 20 20 2f 2a 20   type2;      /* 
bbf0: 4e 75 6d 65 72 69 63 20 74 79 70 65 20 6f 66 20  Numeric type of 
bc00: 72 69 67 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f  right operand */
bc10: 0a 20 20 69 36 34 20 69 41 3b 20 20 20 20 20 20  .  i64 iA;      
bc20: 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61     /* Integer va
bc30: 6c 75 65 20 6f 66 20 6c 65 66 74 20 6f 70 65 72  lue of left oper
bc40: 61 6e 64 20 2a 2f 0a 20 20 69 36 34 20 69 42 3b  and */.  i64 iB;
bc50: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 74 65           /* Inte
bc60: 67 65 72 20 76 61 6c 75 65 20 6f 66 20 72 69 67  ger value of rig
bc70: 68 74 20 6f 70 65 72 61 6e 64 20 2a 2f 0a 20 20  ht operand */.  
bc80: 64 6f 75 62 6c 65 20 72 41 3b 20 20 20 20 20 20  double rA;      
bc90: 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65 20 6f 66  /* Real value of
bca0: 20 6c 65 66 74 20 6f 70 65 72 61 6e 64 20 2a 2f   left operand */
bcb0: 0a 20 20 64 6f 75 62 6c 65 20 72 42 3b 20 20 20  .  double rB;   
bcc0: 20 20 20 2f 2a 20 52 65 61 6c 20 76 61 6c 75 65     /* Real value
bcd0: 20 6f 66 20 72 69 67 68 74 20 6f 70 65 72 61 6e   of right operan
bce0: 64 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d 20 26  d */..  pIn1 = &
bcf0: 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20  aMem[pOp->p1];. 
bd00: 20 74 79 70 65 31 20 3d 20 6e 75 6d 65 72 69 63   type1 = numeric
bd10: 54 79 70 65 28 70 49 6e 31 29 3b 0a 20 20 70 49  Type(pIn1);.  pI
bd20: 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n2 = &aMem[pOp->
bd30: 70 32 5d 3b 0a 20 20 74 79 70 65 32 20 3d 20 6e  p2];.  type2 = n
bd40: 75 6d 65 72 69 63 54 79 70 65 28 70 49 6e 32 29  umericType(pIn2)
bd50: 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d  ;.  pOut = &aMem
bd60: 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 66 6c 61  [pOp->p3];.  fla
bd70: 67 73 20 3d 20 70 49 6e 31 2d 3e 66 6c 61 67 73  gs = pIn1->flags
bd80: 20 7c 20 70 49 6e 32 2d 3e 66 6c 61 67 73 3b 0a   | pIn2->flags;.
bd90: 20 20 69 66 28 20 28 66 6c 61 67 73 20 26 20 4d    if( (flags & M
bda0: 45 4d 5f 4e 75 6c 6c 29 21 3d 30 20 29 20 67 6f  EM_Null)!=0 ) go
bdb0: 74 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65  to arithmetic_re
bdc0: 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20  sult_is_null;.  
bdd0: 69 66 28 20 28 74 79 70 65 31 20 26 20 74 79 70  if( (type1 & typ
bde0: 65 32 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30  e2 & MEM_Int)!=0
bdf0: 20 29 7b 0a 20 20 20 20 69 41 20 3d 20 70 49 6e   ){.    iA = pIn
be00: 31 2d 3e 75 2e 69 3b 0a 20 20 20 20 69 42 20 3d  1->u.i;.    iB =
be10: 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20 20 20 20   pIn2->u.i;.    
be20: 62 49 6e 74 69 6e 74 20 3d 20 31 3b 0a 20 20 20  bIntint = 1;.   
be30: 20 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70   switch( pOp->op
be40: 63 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 63 61  code ){.      ca
be50: 73 65 20 4f 50 5f 41 64 64 3a 20 20 20 20 20 20  se OP_Add:      
be60: 20 69 66 28 20 73 71 6c 69 74 65 33 41 64 64 49   if( sqlite3AddI
be70: 6e 74 36 34 28 26 69 42 2c 69 41 29 20 29 20 67  nt64(&iB,iA) ) g
be80: 6f 74 6f 20 66 70 5f 6d 61 74 68 3b 20 20 62 72  oto fp_math;  br
be90: 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
bea0: 4f 50 5f 53 75 62 74 72 61 63 74 3a 20 20 69 66  OP_Subtract:  if
beb0: 28 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36  ( sqlite3SubInt6
bec0: 34 28 26 69 42 2c 69 41 29 20 29 20 67 6f 74 6f  4(&iB,iA) ) goto
bed0: 20 66 70 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b   fp_math;  break
bee0: 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f  ;.      case OP_
bef0: 4d 75 6c 74 69 70 6c 79 3a 20 20 69 66 28 20 73  Multiply:  if( s
bf00: 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 26  qlite3MulInt64(&
bf10: 69 42 2c 69 41 29 20 29 20 67 6f 74 6f 20 66 70  iB,iA) ) goto fp
bf20: 5f 6d 61 74 68 3b 20 20 62 72 65 61 6b 3b 0a 20  _math;  break;. 
bf30: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 44 69 76       case OP_Div
bf40: 69 64 65 3a 20 7b 0a 20 20 20 20 20 20 20 20 69  ide: {.        i
bf50: 66 28 20 69 41 3d 3d 30 20 29 20 67 6f 74 6f 20  f( iA==0 ) goto 
bf60: 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75 6c  arithmetic_resul
bf70: 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20  t_is_null;.     
bf80: 20 20 20 69 66 28 20 69 41 3d 3d 2d 31 20 26 26     if( iA==-1 &&
bf90: 20 69 42 3d 3d 53 4d 41 4c 4c 45 53 54 5f 49 4e   iB==SMALLEST_IN
bfa0: 54 36 34 20 29 20 67 6f 74 6f 20 66 70 5f 6d 61  T64 ) goto fp_ma
bfb0: 74 68 3b 0a 20 20 20 20 20 20 20 20 69 42 20 2f  th;.        iB /
bfc0: 3d 20 69 41 3b 0a 20 20 20 20 20 20 20 20 62 72  = iA;.        br
bfd0: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
bfe0: 20 20 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20     default: {.  
bff0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
c000: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c010: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c020: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
c030: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
c040: 20 20 20 20 20 20 20 69 42 20 25 3d 20 69 41 3b         iB %= iA;
c050: 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
c060: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c070: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 42    pOut->u.i = iB
c080: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c090: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c0a0: 6e 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  nt);.  }else{.  
c0b0: 20 20 62 49 6e 74 69 6e 74 20 3d 20 30 3b 0a 66    bIntint = 0;.f
c0c0: 70 5f 6d 61 74 68 3a 0a 20 20 20 20 72 41 20 3d  p_math:.    rA =
c0d0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 61 6c   sqlite3VdbeReal
c0e0: 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 20  Value(pIn1);.   
c0f0: 20 72 42 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rB = sqlite3Vdb
c100: 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e 32 29  eRealValue(pIn2)
c110: 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20 70 4f  ;.    switch( pO
c120: 70 2d 3e 6f 70 63 6f 64 65 20 29 7b 0a 20 20 20  p->opcode ){.   
c130: 20 20 20 63 61 73 65 20 4f 50 5f 41 64 64 3a 20     case OP_Add: 
c140: 20 20 20 20 20 20 20 20 72 42 20 2b 3d 20 72 41          rB += rA
c150: 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20  ;       break;. 
c160: 20 20 20 20 20 63 61 73 65 20 4f 50 5f 53 75 62       case OP_Sub
c170: 74 72 61 63 74 3a 20 20 20 20 72 42 20 2d 3d 20  tract:    rB -= 
c180: 72 41 3b 20 20 20 20 20 20 20 62 72 65 61 6b 3b  rA;       break;
c190: 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50 5f 4d  .      case OP_M
c1a0: 75 6c 74 69 70 6c 79 3a 20 20 20 20 72 42 20 2a  ultiply:    rB *
c1b0: 3d 20 72 41 3b 20 20 20 20 20 20 20 62 72 65 61  = rA;       brea
c1c0: 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 4f 50  k;.      case OP
c1d0: 5f 44 69 76 69 64 65 3a 20 7b 0a 20 20 20 20 20  _Divide: {.     
c1e0: 20 20 20 2f 2a 20 28 64 6f 75 62 6c 65 29 30 20     /* (double)0 
c1f0: 49 6e 20 63 61 73 65 20 6f 66 20 53 51 4c 49 54  In case of SQLIT
c200: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
c210: 50 4f 49 4e 54 2e 2e 2e 20 2a 2f 0a 20 20 20 20  POINT... */.    
c220: 20 20 20 20 69 66 28 20 72 41 3d 3d 28 64 6f 75      if( rA==(dou
c230: 62 6c 65 29 30 20 29 20 67 6f 74 6f 20 61 72 69  ble)0 ) goto ari
c240: 74 68 6d 65 74 69 63 5f 72 65 73 75 6c 74 5f 69  thmetic_result_i
c250: 73 5f 6e 75 6c 6c 3b 0a 20 20 20 20 20 20 20 20  s_null;.        
c260: 72 42 20 2f 3d 20 72 41 3b 0a 20 20 20 20 20 20  rB /= rA;.      
c270: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d    break;.      }
c280: 0a 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 20  .      default: 
c290: 7b 0a 20 20 20 20 20 20 20 20 69 41 20 3d 20 28  {.        iA = (
c2a0: 69 36 34 29 72 41 3b 0a 20 20 20 20 20 20 20 20  i64)rA;.        
c2b0: 69 42 20 3d 20 28 69 36 34 29 72 42 3b 0a 20 20  iB = (i64)rB;.  
c2c0: 20 20 20 20 20 20 69 66 28 20 69 41 3d 3d 30 20        if( iA==0 
c2d0: 29 20 67 6f 74 6f 20 61 72 69 74 68 6d 65 74 69  ) goto arithmeti
c2e0: 63 5f 72 65 73 75 6c 74 5f 69 73 5f 6e 75 6c 6c  c_result_is_null
c2f0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  ;.        if( iA
c300: 3d 3d 2d 31 20 29 20 69 41 20 3d 20 31 3b 0a 20  ==-1 ) iA = 1;. 
c310: 20 20 20 20 20 20 20 72 42 20 3d 20 28 64 6f 75         rB = (dou
c320: 62 6c 65 29 28 69 42 20 25 20 69 41 29 3b 0a 20  ble)(iB % iA);. 
c330: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
c340: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 23 69 66 64      }.    }.#ifd
c350: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
c360: 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a 20 20  LOATING_POINT.  
c370: 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 42    pOut->u.i = rB
c380: 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79 70 65  ;.    MemSetType
c390: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
c3a0: 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 69  nt);.#else.    i
c3b0: 66 28 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  f( sqlite3IsNaN(
c3c0: 72 42 29 20 29 7b 0a 20 20 20 20 20 20 67 6f 74  rB) ){.      got
c3d0: 6f 20 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73  o arithmetic_res
c3e0: 75 6c 74 5f 69 73 5f 6e 75 6c 6c 3b 0a 20 20 20  ult_is_null;.   
c3f0: 20 7d 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 72   }.    pOut->u.r
c400: 20 3d 20 72 42 3b 0a 20 20 20 20 4d 65 6d 53 65   = rB;.    MemSe
c410: 74 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20  tTypeFlag(pOut, 
c420: 4d 45 4d 5f 52 65 61 6c 29 3b 0a 20 20 20 20 69  MEM_Real);.    i
c430: 66 28 20 28 28 74 79 70 65 31 7c 74 79 70 65 32  f( ((type1|type2
c440: 29 26 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30 20 26  )&MEM_Real)==0 &
c450: 26 20 21 62 49 6e 74 69 6e 74 20 29 7b 0a 20 20  & !bIntint ){.  
c460: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 49      sqlite3VdbeI
c470: 6e 74 65 67 65 72 41 66 66 69 6e 69 74 79 28 70  ntegerAffinity(p
c480: 4f 75 74 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  Out);.    }.#end
c490: 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
c4a0: 0a 61 72 69 74 68 6d 65 74 69 63 5f 72 65 73 75  .arithmetic_resu
c4b0: 6c 74 5f 69 73 5f 6e 75 6c 6c 3a 0a 20 20 73 71  lt_is_null:.  sq
c4c0: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
c4d0: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 62 72 65  ull(pOut);.  bre
c4e0: 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
c4f0: 3a 20 43 6f 6c 6c 53 65 71 20 50 31 20 2a 20 2a  : CollSeq P1 * *
c500: 20 50 34 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20   P4.**.** P4 is 
c510: 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 43  a pointer to a C
c520: 6f 6c 6c 53 65 71 20 73 74 72 75 63 74 2e 20 49  ollSeq struct. I
c530: 66 20 74 68 65 20 6e 65 78 74 20 63 61 6c 6c 20  f the next call 
c540: 74 6f 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  to a user functi
c550: 6f 6e 0a 2a 2a 20 6f 72 20 61 67 67 72 65 67 61  on.** or aggrega
c560: 74 65 20 63 61 6c 6c 73 20 73 71 6c 69 74 65 33  te calls sqlite3
c570: 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29  GetFuncCollSeq()
c580: 2c 20 74 68 69 73 20 63 6f 6c 6c 61 74 69 6f 6e  , this collation
c590: 20 73 65 71 75 65 6e 63 65 20 77 69 6c 6c 0a 2a   sequence will.*
c5a0: 2a 20 62 65 20 72 65 74 75 72 6e 65 64 2e 20 54  * be returned. T
c5b0: 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74  his is used by t
c5c0: 68 65 20 62 75 69 6c 74 2d 69 6e 20 6d 69 6e 28  he built-in min(
c5d0: 29 2c 20 6d 61 78 28 29 20 61 6e 64 20 6e 75 6c  ), max() and nul
c5e0: 6c 69 66 28 29 0a 2a 2a 20 66 75 6e 63 74 69 6f  lif().** functio
c5f0: 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 31 20  ns..**.** If P1 
c600: 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74 68 65  is not zero, the
c610: 6e 20 69 74 20 69 73 20 61 20 72 65 67 69 73 74  n it is a regist
c620: 65 72 20 74 68 61 74 20 61 20 73 75 62 73 65 71  er that a subseq
c630: 75 65 6e 74 20 6d 69 6e 28 29 20 6f 72 0a 2a 2a  uent min() or.**
c640: 20 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65   max() aggregate
c650: 20 77 69 6c 6c 20 73 65 74 20 74 6f 20 31 20 69   will set to 1 i
c660: 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f  f the current ro
c670: 77 20 69 73 20 6e 6f 74 20 74 68 65 20 6d 69 6e  w is not the min
c680: 69 6d 75 6d 20 6f 72 0a 2a 2a 20 6d 61 78 69 6d  imum or.** maxim
c690: 75 6d 2e 20 20 54 68 65 20 50 31 20 72 65 67 69  um.  The P1 regi
c6a0: 73 74 65 72 20 69 73 20 69 6e 69 74 69 61 6c 69  ster is initiali
c6b0: 7a 65 64 20 74 6f 20 30 20 62 79 20 74 68 69 73  zed to 0 by this
c6c0: 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
c6d0: 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61 63  .** The interfac
c6e0: 65 20 75 73 65 64 20 62 79 20 74 68 65 20 69 6d  e used by the im
c6f0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
c700: 74 68 65 20 61 66 6f 72 65 6d 65 6e 74 69 6f 6e  the aforemention
c710: 65 64 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20  ed functions.** 
c720: 74 6f 20 72 65 74 72 69 65 76 65 20 74 68 65 20  to retrieve the 
c730: 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71 75 65 6e  collation sequen
c740: 63 65 20 73 65 74 20 62 79 20 74 68 69 73 20 6f  ce set by this o
c750: 70 63 6f 64 65 20 69 73 20 6e 6f 74 20 61 76 61  pcode is not ava
c760: 69 6c 61 62 6c 65 0a 2a 2a 20 70 75 62 6c 69 63  ilable.** public
c770: 6c 79 2e 20 20 4f 6e 6c 79 20 62 75 69 6c 74 2d  ly.  Only built-
c780: 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 68 61 76  in functions hav
c790: 65 20 61 63 63 65 73 73 20 74 6f 20 74 68 69 73  e access to this
c7a0: 20 66 65 61 74 75 72 65 2e 0a 2a 2f 0a 63 61 73   feature..*/.cas
c7b0: 65 20 4f 50 5f 43 6f 6c 6c 53 65 71 3a 20 7b 0a  e OP_CollSeq: {.
c7c0: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
c7d0: 34 74 79 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45  4type==P4_COLLSE
c7e0: 51 20 29 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  Q );.  if( pOp->
c7f0: 70 31 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  p1 ){.    sqlite
c800: 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
c810: 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 2c  (&aMem[pOp->p1],
c820: 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
c830: 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
c840: 46 75 6e 63 74 69 6f 6e 30 20 50 31 20 50 32 20  Function0 P1 P2 
c850: 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f  P3 P4 P5.** Syno
c860: 70 73 69 73 3a 20 72 5b 50 33 5d 3d 66 75 6e 63  psis: r[P3]=func
c870: 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a 2a 2a  (r[P2@P5]).**.**
c880: 20 49 6e 76 6f 6b 65 20 61 20 75 73 65 72 20 66   Invoke a user f
c890: 75 6e 63 74 69 6f 6e 20 28 50 34 20 69 73 20 61  unction (P4 is a
c8a0: 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 46 75   pointer to a Fu
c8b0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 20 74 68 61  ncDef object tha
c8c0: 74 0a 2a 2a 20 64 65 66 69 6e 65 73 20 74 68 65  t.** defines the
c8d0: 20 66 75 6e 63 74 69 6f 6e 29 20 77 69 74 68 20   function) with 
c8e0: 50 35 20 61 72 67 75 6d 65 6e 74 73 20 74 61 6b  P5 arguments tak
c8f0: 65 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72  en from register
c900: 20 50 32 20 61 6e 64 0a 2a 2a 20 73 75 63 63 65   P2 and.** succe
c910: 73 73 6f 72 73 2e 20 20 54 68 65 20 72 65 73 75  ssors.  The resu
c920: 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  lt of the functi
c930: 6f 6e 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  on is stored in 
c940: 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20  register P3..** 
c950: 52 65 67 69 73 74 65 72 20 50 33 20 6d 75 73 74  Register P3 must
c960: 20 6e 6f 74 20 62 65 20 6f 6e 65 20 6f 66 20 74   not be one of t
c970: 68 65 20 66 75 6e 63 74 69 6f 6e 20 69 6e 70 75  he function inpu
c980: 74 73 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  ts..**.** P1 is 
c990: 61 20 33 32 2d 62 69 74 20 62 69 74 6d 61 73 6b  a 32-bit bitmask
c9a0: 20 69 6e 64 69 63 61 74 69 6e 67 20 77 68 65 74   indicating whet
c9b0: 68 65 72 20 6f 72 20 6e 6f 74 20 65 61 63 68 20  her or not each 
c9c0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
c9d0: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20 77 61 73  .** function was
c9e0: 20 64 65 74 65 72 6d 69 6e 65 64 20 74 6f 20 62   determined to b
c9f0: 65 20 63 6f 6e 73 74 61 6e 74 20 61 74 20 63 6f  e constant at co
ca00: 6d 70 69 6c 65 20 74 69 6d 65 2e 20 49 66 20 74  mpile time. If t
ca10: 68 65 20 66 69 72 73 74 0a 2a 2a 20 61 72 67 75  he first.** argu
ca20: 6d 65 6e 74 20 77 61 73 20 63 6f 6e 73 74 61 6e  ment was constan
ca30: 74 20 74 68 65 6e 20 62 69 74 20 30 20 6f 66 20  t then bit 0 of 
ca40: 50 31 20 69 73 20 73 65 74 2e 20 54 68 69 73 20  P1 is set. This 
ca50: 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 72  is used to deter
ca60: 6d 69 6e 65 0a 2a 2a 20 77 68 65 74 68 65 72 20  mine.** whether 
ca70: 6d 65 74 61 20 64 61 74 61 20 61 73 73 6f 63 69  meta data associ
ca80: 61 74 65 64 20 77 69 74 68 20 61 20 75 73 65 72  ated with a user
ca90: 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
caa0: 6e 74 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  nt using the.** 
cab0: 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75 78 64  sqlite3_set_auxd
cac0: 61 74 61 28 29 20 41 50 49 20 6d 61 79 20 62 65  ata() API may be
cad0: 20 73 61 66 65 6c 79 20 72 65 74 61 69 6e 65 64   safely retained
cae0: 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 0a   until the next.
caf0: 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66  ** invocation of
cb00: 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a 2a   this opcode..**
cb10: 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 75  .** See also: Fu
cb20: 6e 63 74 69 6f 6e 2c 20 41 67 67 53 74 65 70 2c  nction, AggStep,
cb30: 20 41 67 67 46 69 6e 61 6c 0a 2a 2f 0a 2f 2a 20   AggFinal.*/./* 
cb40: 4f 70 63 6f 64 65 3a 20 46 75 6e 63 74 69 6f 6e  Opcode: Function
cb50: 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
cb60: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
cb70: 33 5d 3d 66 75 6e 63 28 72 5b 50 32 40 50 35 5d  3]=func(r[P2@P5]
cb80: 29 0a 2a 2a 0a 2a 2a 20 49 6e 76 6f 6b 65 20 61  ).**.** Invoke a
cb90: 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e 20 28   user function (
cba0: 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
cbb0: 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f  to an sqlite3_co
cbc0: 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 74 68 61  ntext object tha
cbd0: 74 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 61 20  t.** contains a 
cbe0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
cbf0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 72 75  unction to be ru
cc00: 6e 29 20 77 69 74 68 20 50 35 20 61 72 67 75 6d  n) with P5 argum
cc10: 65 6e 74 73 20 74 61 6b 65 6e 0a 2a 2a 20 66 72  ents taken.** fr
cc20: 6f 6d 20 72 65 67 69 73 74 65 72 20 50 32 20 61  om register P2 a
cc30: 6e 64 20 73 75 63 63 65 73 73 6f 72 73 2e 20 20  nd successors.  
cc40: 54 68 65 20 72 65 73 75 6c 74 20 6f 66 20 74 68  The result of th
cc50: 65 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 73 74  e function is st
cc60: 6f 72 65 64 0a 2a 2a 20 69 6e 20 72 65 67 69 73  ored.** in regis
cc70: 74 65 72 20 50 33 2e 20 20 52 65 67 69 73 74 65  ter P3.  Registe
cc80: 72 20 50 33 20 6d 75 73 74 20 6e 6f 74 20 62 65  r P3 must not be
cc90: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 75 6e 63   one of the func
cca0: 74 69 6f 6e 20 69 6e 70 75 74 73 2e 0a 2a 2a 0a  tion inputs..**.
ccb0: 2a 2a 20 50 31 20 69 73 20 61 20 33 32 2d 62 69  ** P1 is a 32-bi
ccc0: 74 20 62 69 74 6d 61 73 6b 20 69 6e 64 69 63 61  t bitmask indica
ccd0: 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20  ting whether or 
cce0: 6e 6f 74 20 65 61 63 68 20 61 72 67 75 6d 65 6e  not each argumen
ccf0: 74 20 74 6f 20 74 68 65 20 0a 2a 2a 20 66 75 6e  t to the .** fun
cd00: 63 74 69 6f 6e 20 77 61 73 20 64 65 74 65 72 6d  ction was determ
cd10: 69 6e 65 64 20 74 6f 20 62 65 20 63 6f 6e 73 74  ined to be const
cd20: 61 6e 74 20 61 74 20 63 6f 6d 70 69 6c 65 20 74  ant at compile t
cd30: 69 6d 65 2e 20 49 66 20 74 68 65 20 66 69 72 73  ime. If the firs
cd40: 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 77 61  t.** argument wa
cd50: 73 20 63 6f 6e 73 74 61 6e 74 20 74 68 65 6e 20  s constant then 
cd60: 62 69 74 20 30 20 6f 66 20 50 31 20 69 73 20 73  bit 0 of P1 is s
cd70: 65 74 2e 20 54 68 69 73 20 69 73 20 75 73 65 64  et. This is used
cd80: 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 0a 2a 2a   to determine.**
cd90: 20 77 68 65 74 68 65 72 20 6d 65 74 61 20 64 61   whether meta da
cda0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
cdb0: 74 68 20 61 20 75 73 65 72 20 66 75 6e 63 74 69  th a user functi
cdc0: 6f 6e 20 61 72 67 75 6d 65 6e 74 20 75 73 69 6e  on argument usin
cdd0: 67 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65 33  g the.** sqlite3
cde0: 5f 73 65 74 5f 61 75 78 64 61 74 61 28 29 20 41  _set_auxdata() A
cdf0: 50 49 20 6d 61 79 20 62 65 20 73 61 66 65 6c 79  PI may be safely
ce00: 20 72 65 74 61 69 6e 65 64 20 75 6e 74 69 6c 20   retained until 
ce10: 74 68 65 20 6e 65 78 74 0a 2a 2a 20 69 6e 76 6f  the next.** invo
ce20: 63 61 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 6f  cation of this o
ce30: 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 51 4c  pcode..**.** SQL
ce40: 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 69   functions are i
ce50: 6e 69 74 69 61 6c 6c 79 20 63 6f 64 65 64 20 61  nitially coded a
ce60: 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 30 20 77  s OP_Function0 w
ce70: 69 74 68 20 50 34 20 70 6f 69 6e 74 69 6e 67 0a  ith P4 pointing.
ce80: 2a 2a 20 74 6f 20 61 20 46 75 6e 63 44 65 66 20  ** to a FuncDef 
ce90: 6f 62 6a 65 63 74 2e 20 20 42 75 74 20 6f 6e 20  object.  But on 
cea0: 66 69 72 73 74 20 65 76 61 6c 75 61 74 69 6f 6e  first evaluation
ceb0: 2c 20 74 68 65 20 50 34 20 6f 70 65 72 61 6e 64  , the P4 operand
cec0: 20 69 73 0a 2a 2a 20 61 75 74 6f 6d 61 74 69 63   is.** automatic
ced0: 61 6c 6c 79 20 63 6f 6e 76 65 72 74 65 64 20 69  ally converted i
cee0: 6e 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 5f 63  nto an sqlite3_c
cef0: 6f 6e 74 65 78 74 20 6f 62 6a 65 63 74 20 61 6e  ontext object an
cf00: 64 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 0a  d the operation.
cf10: 2a 2a 20 63 68 61 6e 67 65 64 20 74 6f 20 74 68  ** changed to th
cf20: 69 73 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20 6f  is OP_Function o
cf30: 70 63 6f 64 65 2e 20 20 49 6e 20 74 68 69 73 20  pcode.  In this 
cf40: 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69 61 6c  way, the initial
cf50: 69 7a 61 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ization of.** th
cf60: 65 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78  e sqlite3_contex
cf70: 74 20 6f 62 6a 65 63 74 20 6f 63 63 75 72 73 20  t object occurs 
cf80: 6f 6e 6c 79 20 6f 6e 63 65 2c 20 72 61 74 68 65  only once, rathe
cf90: 72 20 74 68 61 6e 20 6f 6e 63 65 20 66 6f 72 20  r than once for 
cfa0: 65 61 63 68 0a 2a 2a 20 65 76 61 6c 75 61 74 69  each.** evaluati
cfb0: 6f 6e 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  on of the functi
cfc0: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  on..**.** See al
cfd0: 73 6f 3a 20 46 75 6e 63 74 69 6f 6e 30 2c 20 41  so: Function0, A
cfe0: 67 67 53 74 65 70 2c 20 41 67 67 46 69 6e 61 6c  ggStep, AggFinal
cff0: 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 75 6e 63  .*/.case OP_Func
d000: 74 69 6f 6e 30 3a 20 7b 0a 20 20 69 6e 74 20 6e  tion0: {.  int n
d010: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
d020: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
d030: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d040: 65 3d 3d 50 34 5f 46 55 4e 43 44 45 46 20 29 3b  e==P4_FUNCDEF );
d050: 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e 70 35 3b 0a  .  n = pOp->p5;.
d060: 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
d070: 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c 3d  3>0 && pOp->p3<=
d080: 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e  (p->nMem+1 - p->
d090: 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 61 73  nCursor) );.  as
d0a0: 73 65 72 74 28 20 6e 3d 3d 30 20 7c 7c 20 28 70  sert( n==0 || (p
d0b0: 4f 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d  Op->p2>0 && pOp-
d0c0: 3e 70 32 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  >p2+n<=(p->nMem+
d0d0: 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b  1 - p->nCursor)+
d0e0: 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  1) );.  assert( 
d0f0: 70 4f 70 2d 3e 70 33 3c 70 4f 70 2d 3e 70 32 20  pOp->p3<pOp->p2 
d100: 7c 7c 20 70 4f 70 2d 3e 70 33 3e 3d 70 4f 70 2d  || pOp->p3>=pOp-
d110: 3e 70 32 2b 6e 20 29 3b 0a 20 20 70 43 74 78 20  >p2+n );.  pCtx 
d120: 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  = sqlite3DbMallo
d130: 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a 65 6f  cRawNN(db, sizeo
d140: 66 28 2a 70 43 74 78 29 20 2b 20 28 6e 2d 31 29  f(*pCtx) + (n-1)
d150: 2a 73 69 7a 65 6f 66 28 73 71 6c 69 74 65 33 5f  *sizeof(sqlite3_
d160: 76 61 6c 75 65 2a 29 29 3b 0a 20 20 69 66 28 20  value*));.  if( 
d170: 70 43 74 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCtx==0 ) goto n
d180: 6f 5f 6d 65 6d 3b 0a 20 20 70 43 74 78 2d 3e 70  o_mem;.  pCtx->p
d190: 4f 75 74 20 3d 20 30 3b 0a 20 20 70 43 74 78 2d  Out = 0;.  pCtx-
d1a0: 3e 70 46 75 6e 63 20 3d 20 70 4f 70 2d 3e 70 34  >pFunc = pOp->p4
d1b0: 2e 70 46 75 6e 63 3b 0a 20 20 70 43 74 78 2d 3e  .pFunc;.  pCtx->
d1c0: 69 4f 70 20 3d 20 28 69 6e 74 29 28 70 4f 70 20  iOp = (int)(pOp 
d1d0: 2d 20 61 4f 70 29 3b 0a 20 20 70 43 74 78 2d 3e  - aOp);.  pCtx->
d1e0: 70 56 64 62 65 20 3d 20 70 3b 0a 20 20 70 43 74  pVdbe = p;.  pCt
d1f0: 78 2d 3e 61 72 67 63 20 3d 20 6e 3b 0a 20 20 70  x->argc = n;.  p
d200: 4f 70 2d 3e 70 34 74 79 70 65 20 3d 20 50 34 5f  Op->p4type = P4_
d210: 46 55 4e 43 43 54 58 3b 0a 20 20 70 4f 70 2d 3e  FUNCCTX;.  pOp->
d220: 70 34 2e 70 43 74 78 20 3d 20 70 43 74 78 3b 0a  p4.pCtx = pCtx;.
d230: 20 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 20 3d 20    pOp->opcode = 
d240: 4f 50 5f 46 75 6e 63 74 69 6f 6e 3b 0a 20 20 2f  OP_Function;.  /
d250: 2a 20 46 61 6c 6c 20 74 68 72 6f 75 67 68 20 69  * Fall through i
d260: 6e 74 6f 20 4f 50 5f 46 75 6e 63 74 69 6f 6e 20  nto OP_Function 
d270: 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50 5f 46 75 6e  */.}.case OP_Fun
d280: 63 74 69 6f 6e 3a 20 7b 0a 20 20 69 6e 74 20 69  ction: {.  int i
d290: 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ;.  sqlite3_cont
d2a0: 65 78 74 20 2a 70 43 74 78 3b 0a 0a 20 20 61 73  ext *pCtx;..  as
d2b0: 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
d2c0: 65 3d 3d 50 34 5f 46 55 4e 43 43 54 58 20 29 3b  e==P4_FUNCCTX );
d2d0: 0a 20 20 70 43 74 78 20 3d 20 70 4f 70 2d 3e 70  .  pCtx = pOp->p
d2e0: 34 2e 70 43 74 78 3b 0a 0a 20 20 2f 2a 20 49 66  4.pCtx;..  /* If
d2f0: 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 69   this function i
d300: 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20 74 72  s inside of a tr
d310: 69 67 67 65 72 2c 20 74 68 65 20 72 65 67 69 73  igger, the regis
d320: 74 65 72 20 61 72 72 61 79 20 69 6e 20 61 4d 65  ter array in aMe
d330: 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74 20 63  m[].  ** might c
d340: 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65 20 65  hange from one e
d350: 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74 68 65  valuation to the
d360: 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65 78 74   next.  The next
d370: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 0a 20   block of code. 
d380: 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20 73 65   ** checks to se
d390: 65 20 69 66 20 74 68 65 20 72 65 67 69 73 74 65  e if the registe
d3a0: 72 20 61 72 72 61 79 20 68 61 73 20 63 68 61 6e  r array has chan
d3b0: 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f 20 69  ged, and if so i
d3c0: 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69 61 6c  t.  ** reinitial
d3d0: 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76 61 6e  izes the relavan
d3e0: 74 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 73  t parts of the s
d3f0: 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 6f  qlite3_context o
d400: 62 6a 65 63 74 20 2a 2f 0a 20 20 70 4f 75 74 20  bject */.  pOut 
d410: 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d  = &aMem[pOp->p3]
d420: 3b 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 70 4f  ;.  if( pCtx->pO
d430: 75 74 20 21 3d 20 70 4f 75 74 20 29 7b 0a 20 20  ut != pOut ){.  
d440: 20 20 70 43 74 78 2d 3e 70 4f 75 74 20 3d 20 70    pCtx->pOut = p
d450: 4f 75 74 3b 0a 20 20 20 20 66 6f 72 28 69 3d 70  Out;.    for(i=p
d460: 43 74 78 2d 3e 61 72 67 63 2d 31 3b 20 69 3e 3d  Ctx->argc-1; i>=
d470: 30 3b 20 69 2d 2d 29 20 70 43 74 78 2d 3e 61 72  0; i--) pCtx->ar
d480: 67 76 5b 69 5d 20 3d 20 26 61 4d 65 6d 5b 70 4f  gv[i] = &aMem[pO
d490: 70 2d 3e 70 32 2b 69 5d 3b 0a 20 20 7d 0a 0a 20  p->p2+i];.  }.. 
d4a0: 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67   memAboutToChang
d4b0: 65 28 70 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29  e(p, pCtx->pOut)
d4c0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
d4d0: 44 45 42 55 47 0a 20 20 66 6f 72 28 69 3d 30 3b  DEBUG.  for(i=0;
d4e0: 20 69 3c 70 43 74 78 2d 3e 61 72 67 63 3b 20 69   i<pCtx->argc; i
d4f0: 2b 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  ++){.    assert(
d500: 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 43 74 78   memIsValid(pCtx
d510: 2d 3e 61 72 67 76 5b 69 5d 29 20 29 3b 0a 20 20  ->argv[i]) );.  
d520: 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
d530: 28 70 4f 70 2d 3e 70 32 2b 69 2c 20 70 43 74 78  (pOp->p2+i, pCtx
d540: 2d 3e 61 72 67 76 5b 69 5d 29 3b 0a 20 20 7d 0a  ->argv[i]);.  }.
d550: 23 65 6e 64 69 66 0a 20 20 4d 65 6d 53 65 74 54  #endif.  MemSetT
d560: 79 70 65 46 6c 61 67 28 70 43 74 78 2d 3e 70 4f  ypeFlag(pCtx->pO
d570: 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a 20  ut, MEM_Null);. 
d580: 20 70 43 74 78 2d 3e 66 45 72 72 6f 72 4f 72 41   pCtx->fErrorOrA
d590: 75 78 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 6c 61  ux = 0;.  db->la
d5a0: 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
d5b0: 77 69 64 3b 0a 20 20 28 2a 70 43 74 78 2d 3e 70  wid;.  (*pCtx->p
d5c0: 46 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43  Func->xSFunc)(pC
d5d0: 74 78 2c 20 70 43 74 78 2d 3e 61 72 67 63 2c 20  tx, pCtx->argc, 
d5e0: 70 43 74 78 2d 3e 61 72 67 76 29 3b 2f 2a 20 49  pCtx->argv);/* I
d5f0: 4d 50 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33  MP: R-24505-2323
d600: 30 20 2a 2f 0a 20 20 6c 61 73 74 52 6f 77 69 64  0 */.  lastRowid
d610: 20 3d 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64   = db->lastRowid
d620: 3b 20 20 2f 2a 20 52 65 6d 65 6d 62 65 72 20 72  ;  /* Remember r
d630: 6f 77 69 64 20 63 68 61 6e 67 65 73 20 6d 61 64  owid changes mad
d640: 65 20 62 79 20 78 53 46 75 6e 63 20 2a 2f 0a 0a  e by xSFunc */..
d650: 20 20 2f 2a 20 49 66 20 74 68 65 20 66 75 6e 63    /* If the func
d660: 74 69 6f 6e 20 72 65 74 75 72 6e 65 64 20 61 6e  tion returned an
d670: 20 65 72 72 6f 72 2c 20 74 68 72 6f 77 20 61 6e   error, throw an
d680: 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20 20   exception */.  
d690: 69 66 28 20 70 43 74 78 2d 3e 66 45 72 72 6f 72  if( pCtx->fError
d6a0: 4f 72 41 75 78 20 29 7b 0a 20 20 20 20 69 66 28  OrAux ){.    if(
d6b0: 20 70 43 74 78 2d 3e 69 73 45 72 72 6f 72 20 29   pCtx->isError )
d6c0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
d6d0: 64 62 65 45 72 72 6f 72 28 70 2c 20 22 25 73 22  dbeError(p, "%s"
d6e0: 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  , sqlite3_value_
d6f0: 74 65 78 74 28 70 43 74 78 2d 3e 70 4f 75 74 29  text(pCtx->pOut)
d700: 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 70 43  );.      rc = pC
d710: 74 78 2d 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20  tx->isError;.   
d720: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
d730: 62 65 44 65 6c 65 74 65 41 75 78 44 61 74 61 28  beDeleteAuxData(
d740: 64 62 2c 20 26 70 2d 3e 70 41 75 78 44 61 74 61  db, &p->pAuxData
d750: 2c 20 70 43 74 78 2d 3e 69 4f 70 2c 20 70 4f 70  , pCtx->iOp, pOp
d760: 2d 3e 70 31 29 3b 0a 20 20 20 20 69 66 28 20 72  ->p1);.    if( r
d770: 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
d780: 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d  ue_to_error;.  }
d790: 0a 0a 20 20 2f 2a 20 43 6f 70 79 20 74 68 65 20  ..  /* Copy the 
d7a0: 72 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75  result of the fu
d7b0: 6e 63 74 69 6f 6e 20 69 6e 74 6f 20 72 65 67 69  nction into regi
d7c0: 73 74 65 72 20 50 33 20 2a 2f 0a 20 20 69 66 28  ster P3 */.  if(
d7d0: 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 26 20 28   pOut->flags & (
d7e0: 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f 62  MEM_Str|MEM_Blob
d7f0: 29 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  ) ){.    sqlite3
d800: 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69  VdbeChangeEncodi
d810: 6e 67 28 70 43 74 78 2d 3e 70 4f 75 74 2c 20 65  ng(pCtx->pOut, e
d820: 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69 66  ncoding);.    if
d830: 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d  ( sqlite3VdbeMem
d840: 54 6f 6f 42 69 67 28 70 43 74 78 2d 3e 70 4f 75  TooBig(pCtx->pOu
d850: 74 29 20 29 20 67 6f 74 6f 20 74 6f 6f 5f 62 69  t) ) goto too_bi
d860: 67 3b 0a 20 20 7d 0a 0a 20 20 52 45 47 49 53 54  g;.  }..  REGIST
d870: 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
d880: 2c 20 70 43 74 78 2d 3e 70 4f 75 74 29 3b 0a 20  , pCtx->pOut);. 
d890: 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
d8a0: 53 49 5a 45 28 70 43 74 78 2d 3e 70 4f 75 74 29  SIZE(pCtx->pOut)
d8b0: 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
d8c0: 20 4f 70 63 6f 64 65 3a 20 42 69 74 41 6e 64 20   Opcode: BitAnd 
d8d0: 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
d8e0: 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d  Synopsis: r[P3]=
d8f0: 72 5b 50 31 5d 26 72 5b 50 32 5d 0a 2a 2a 0a 2a  r[P1]&r[P2].**.*
d900: 2a 20 54 61 6b 65 20 74 68 65 20 62 69 74 2d 77  * Take the bit-w
d910: 69 73 65 20 41 4e 44 20 6f 66 20 74 68 65 20 76  ise AND of the v
d920: 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74 65  alues in registe
d930: 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e 64 0a  r P1 and P2 and.
d940: 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65 73  ** store the res
d950: 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ult in register 
d960: 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65 72  P3..** If either
d970: 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c 20   input is NULL, 
d980: 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e 55  the result is NU
d990: 4c 4c 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  LL..*/./* Opcode
d9a0: 3a 20 42 69 74 4f 72 20 50 31 20 50 32 20 50 33  : BitOr P1 P2 P3
d9b0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
d9c0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 31 5d 7c 72 5b  : r[P3]=r[P1]|r[
d9d0: 50 32 5d 0a 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74  P2].**.** Take t
d9e0: 68 65 20 62 69 74 2d 77 69 73 65 20 4f 52 20 6f  he bit-wise OR o
d9f0: 66 20 74 68 65 20 76 61 6c 75 65 73 20 69 6e 20  f the values in 
da00: 72 65 67 69 73 74 65 72 20 50 31 20 61 6e 64 20  register P1 and 
da10: 50 32 20 61 6e 64 0a 2a 2a 20 73 74 6f 72 65 20  P2 and.** store 
da20: 74 68 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65  the result in re
da30: 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 20 49 66  gister P3..** If
da40: 20 65 69 74 68 65 72 20 69 6e 70 75 74 20 69 73   either input is
da50: 20 4e 55 4c 4c 2c 20 74 68 65 20 72 65 73 75 6c   NULL, the resul
da60: 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a 2f 2a  t is NULL..*/./*
da70: 20 4f 70 63 6f 64 65 3a 20 53 68 69 66 74 4c 65   Opcode: ShiftLe
da80: 66 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  ft P1 P2 P3 * *.
da90: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
daa0: 33 5d 3d 72 5b 50 32 5d 3c 3c 72 5b 50 31 5d 0a  3]=r[P2]<<r[P1].
dab0: 2a 2a 0a 2a 2a 20 53 68 69 66 74 20 74 68 65 20  **.** Shift the 
dac0: 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 6e  integer value in
dad0: 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
dae0: 74 68 65 20 6c 65 66 74 20 62 79 20 74 68 65 0a  the left by the.
daf0: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  ** number of bit
db00: 73 20 73 70 65 63 69 66 69 65 64 20 62 79 20 74  s specified by t
db10: 68 65 20 69 6e 74 65 67 65 72 20 69 6e 20 72 65  he integer in re
db20: 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 20 53 74  gister P1..** St
db30: 6f 72 65 20 74 68 65 20 72 65 73 75 6c 74 20 69  ore the result i
db40: 6e 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a  n register P3..*
db50: 2a 20 49 66 20 65 69 74 68 65 72 20 69 6e 70 75  * If either inpu
db60: 74 20 69 73 20 4e 55 4c 4c 2c 20 74 68 65 20 72  t is NULL, the r
db70: 65 73 75 6c 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  esult is NULL..*
db80: 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 68 69  /./* Opcode: Shi
db90: 66 74 52 69 67 68 74 20 50 31 20 50 32 20 50 33  ftRight P1 P2 P3
dba0: 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
dbb0: 3a 20 72 5b 50 33 5d 3d 72 5b 50 32 5d 3e 3e 72  : r[P3]=r[P2]>>r
dbc0: 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 53 68 69 66 74  [P1].**.** Shift
dbd0: 20 74 68 65 20 69 6e 74 65 67 65 72 20 76 61 6c   the integer val
dbe0: 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ue in register P
dbf0: 32 20 74 6f 20 74 68 65 20 72 69 67 68 74 20 62  2 to the right b
dc00: 79 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  y the.** number 
dc10: 6f 66 20 62 69 74 73 20 73 70 65 63 69 66 69 65  of bits specifie
dc20: 64 20 62 79 20 74 68 65 20 69 6e 74 65 67 65 72  d by the integer
dc30: 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 2e   in register P1.
dc40: 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 72 65  .** Store the re
dc50: 73 75 6c 74 20 69 6e 20 72 65 67 69 73 74 65 72  sult in register
dc60: 20 50 33 2e 0a 2a 2a 20 49 66 20 65 69 74 68 65   P3..** If eithe
dc70: 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2c  r input is NULL,
dc80: 20 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 4e   the result is N
dc90: 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ULL..*/.case OP_
dca0: 42 69 74 41 6e 64 3a 20 20 20 20 20 20 20 20 20  BitAnd:         
dcb0: 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20          /* same 
dcc0: 61 73 20 54 4b 5f 42 49 54 41 4e 44 2c 20 69 6e  as TK_BITAND, in
dcd0: 31 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a  1, in2, out3 */.
dce0: 63 61 73 65 20 4f 50 5f 42 69 74 4f 72 3a 20 20  case OP_BitOr:  
dcf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd00: 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 42 49  /* same as TK_BI
dd10: 54 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  TOR, in1, in2, o
dd20: 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  ut3 */.case OP_S
dd30: 68 69 66 74 4c 65 66 74 3a 20 20 20 20 20 20 20  hiftLeft:       
dd40: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
dd50: 73 20 54 4b 5f 4c 53 48 49 46 54 2c 20 69 6e 31  s TK_LSHIFT, in1
dd60: 2c 20 69 6e 32 2c 20 6f 75 74 33 20 2a 2f 0a 63  , in2, out3 */.c
dd70: 61 73 65 20 4f 50 5f 53 68 69 66 74 52 69 67 68  ase OP_ShiftRigh
dd80: 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 2f  t: {           /
dd90: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 52 53 48  * same as TK_RSH
dda0: 49 46 54 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  IFT, in1, in2, o
ddb0: 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 69 41 3b  ut3 */.  i64 iA;
ddc0: 0a 20 20 75 36 34 20 75 41 3b 0a 20 20 69 36 34  .  u64 uA;.  i64
ddd0: 20 69 42 3b 0a 20 20 75 38 20 6f 70 3b 0a 0a 20   iB;.  u8 op;.. 
dde0: 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
ddf0: 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 32 20 3d  p->p1];.  pIn2 =
de00: 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b   &aMem[pOp->p2];
de10: 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
de20: 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69 66 28 20  pOp->p3];.  if( 
de30: 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 7c 20 70  (pIn1->flags | p
de40: 49 6e 32 2d 3e 66 6c 61 67 73 29 20 26 20 4d 45  In2->flags) & ME
de50: 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 73 71  M_Null ){.    sq
de60: 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 4e  lite3VdbeMemSetN
de70: 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 20 20 62  ull(pOut);.    b
de80: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 69 41 20 3d  reak;.  }.  iA =
de90: 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56   sqlite3VdbeIntV
dea0: 61 6c 75 65 28 70 49 6e 32 29 3b 0a 20 20 69 42  alue(pIn2);.  iB
deb0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 49 6e   = sqlite3VdbeIn
dec0: 74 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20  tValue(pIn1);.  
ded0: 6f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  op = pOp->opcode
dee0: 3b 0a 20 20 69 66 28 20 6f 70 3d 3d 4f 50 5f 42  ;.  if( op==OP_B
def0: 69 74 41 6e 64 20 29 7b 0a 20 20 20 20 69 41 20  itAnd ){.    iA 
df00: 26 3d 20 69 42 3b 0a 20 20 7d 65 6c 73 65 20 69  &= iB;.  }else i
df10: 66 28 20 6f 70 3d 3d 4f 50 5f 42 69 74 4f 72 20  f( op==OP_BitOr 
df20: 29 7b 0a 20 20 20 20 69 41 20 7c 3d 20 69 42 3b  ){.    iA |= iB;
df30: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 69 42 21  .  }else if( iB!
df40: 3d 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  =0 ){.    assert
df50: 28 20 6f 70 3d 3d 4f 50 5f 53 68 69 66 74 52 69  ( op==OP_ShiftRi
df60: 67 68 74 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68  ght || op==OP_Sh
df70: 69 66 74 4c 65 66 74 20 29 3b 0a 0a 20 20 20 20  iftLeft );..    
df80: 2f 2a 20 49 66 20 73 68 69 66 74 69 6e 67 20 62  /* If shifting b
df90: 79 20 61 20 6e 65 67 61 74 69 76 65 20 61 6d 6f  y a negative amo
dfa0: 75 6e 74 2c 20 73 68 69 66 74 20 69 6e 20 74 68  unt, shift in th
dfb0: 65 20 6f 74 68 65 72 20 64 69 72 65 63 74 69 6f  e other directio
dfc0: 6e 20 2a 2f 0a 20 20 20 20 69 66 28 20 69 42 3c  n */.    if( iB<
dfd0: 30 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72  0 ){.      asser
dfe0: 74 28 20 4f 50 5f 53 68 69 66 74 52 69 67 68 74  t( OP_ShiftRight
dff0: 3d 3d 4f 50 5f 53 68 69 66 74 4c 65 66 74 2b 31  ==OP_ShiftLeft+1
e000: 20 29 3b 0a 20 20 20 20 20 20 6f 70 20 3d 20 32   );.      op = 2
e010: 2a 4f 50 5f 53 68 69 66 74 4c 65 66 74 20 2b 20  *OP_ShiftLeft + 
e020: 31 20 2d 20 6f 70 3b 0a 20 20 20 20 20 20 69 42  1 - op;.      iB
e030: 20 3d 20 69 42 3e 28 2d 36 34 29 20 3f 20 2d 69   = iB>(-64) ? -i
e040: 42 20 3a 20 36 34 3b 0a 20 20 20 20 7d 0a 0a 20  B : 64;.    }.. 
e050: 20 20 20 69 66 28 20 69 42 3e 3d 36 34 20 29 7b     if( iB>=64 ){
e060: 0a 20 20 20 20 20 20 69 41 20 3d 20 28 69 41 3e  .      iA = (iA>
e070: 3d 30 20 7c 7c 20 6f 70 3d 3d 4f 50 5f 53 68 69  =0 || op==OP_Shi
e080: 66 74 4c 65 66 74 29 20 3f 20 30 20 3a 20 2d 31  ftLeft) ? 0 : -1
e090: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
e0a0: 20 20 20 6d 65 6d 63 70 79 28 26 75 41 2c 20 26     memcpy(&uA, &
e0b0: 69 41 2c 20 73 69 7a 65 6f 66 28 75 41 29 29 3b  iA, sizeof(uA));
e0c0: 0a 20 20 20 20 20 20 69 66 28 20 6f 70 3d 3d 4f  .      if( op==O
e0d0: 50 5f 53 68 69 66 74 4c 65 66 74 20 29 7b 0a 20  P_ShiftLeft ){. 
e0e0: 20 20 20 20 20 20 20 75 41 20 3c 3c 3d 20 69 42         uA <<= iB
e0f0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
e100: 20 20 20 20 20 20 20 75 41 20 3e 3e 3d 20 69 42         uA >>= iB
e110: 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 69 67  ;.        /* Sig
e120: 6e 2d 65 78 74 65 6e 64 20 6f 6e 20 61 20 72 69  n-extend on a ri
e130: 67 68 74 20 73 68 69 66 74 20 6f 66 20 61 20 6e  ght shift of a n
e140: 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20 2a  egative number *
e150: 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 41  /.        if( iA
e160: 3c 30 20 29 20 75 41 20 7c 3d 20 28 28 28 28 75  <0 ) uA |= ((((u
e170: 36 34 29 30 78 66 66 66 66 66 66 66 66 29 3c 3c  64)0xffffffff)<<
e180: 33 32 29 7c 30 78 66 66 66 66 66 66 66 66 29 20  32)|0xffffffff) 
e190: 3c 3c 20 28 36 34 2d 69 42 29 3b 0a 20 20 20 20  << (64-iB);.    
e1a0: 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
e1b0: 28 26 69 41 2c 20 26 75 41 2c 20 73 69 7a 65 6f  (&iA, &uA, sizeo
e1c0: 66 28 69 41 29 29 3b 0a 20 20 20 20 7d 0a 20 20  f(iA));.    }.  
e1d0: 7d 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20  }.  pOut->u.i = 
e1e0: 69 41 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70 65  iA;.  MemSetType
e1f0: 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 49  Flag(pOut, MEM_I
e200: 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  nt);.  break;.}.
e210: 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 64 64 49  ./* Opcode: AddI
e220: 6d 6d 20 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a  mm  P1 P2 * * *.
e230: 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50  ** Synopsis: r[P
e240: 31 5d 3d 72 5b 50 31 5d 2b 50 32 0a 2a 2a 20 0a  1]=r[P1]+P2.** .
e250: 2a 2a 20 41 64 64 20 74 68 65 20 63 6f 6e 73 74  ** Add the const
e260: 61 6e 74 20 50 32 20 74 6f 20 74 68 65 20 76 61  ant P2 to the va
e270: 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
e280: 50 31 2e 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  P1..** The resul
e290: 74 20 69 73 20 61 6c 77 61 79 73 20 61 6e 20 69  t is always an i
e2a0: 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 6f  nteger..**.** To
e2b0: 20 66 6f 72 63 65 20 61 6e 79 20 72 65 67 69 73   force any regis
e2c0: 74 65 72 20 74 6f 20 62 65 20 61 6e 20 69 6e 74  ter to be an int
e2d0: 65 67 65 72 2c 20 6a 75 73 74 20 61 64 64 20 30  eger, just add 0
e2e0: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 64 64  ..*/.case OP_Add
e2f0: 49 6d 6d 3a 20 7b 20 20 20 20 20 20 20 20 20 20  Imm: {          
e300: 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 70 49    /* in1 */.  pI
e310: 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
e320: 70 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54  p1];.  memAboutT
e330: 6f 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29  oChange(p, pIn1)
e340: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
e350: 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70 49 6e  emIntegerify(pIn
e360: 31 29 3b 0a 20 20 70 49 6e 31 2d 3e 75 2e 69 20  1);.  pIn1->u.i 
e370: 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 62 72  += pOp->p2;.  br
e380: 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
e390: 65 3a 20 4d 75 73 74 42 65 49 6e 74 20 50 31 20  e: MustBeInt P1 
e3a0: 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 0a 2a 2a 20  P2 * * *.** .** 
e3b0: 46 6f 72 63 65 20 74 68 65 20 76 61 6c 75 65 20  Force the value 
e3c0: 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 74  in register P1 t
e3d0: 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 2e  o be an integer.
e3e0: 20 20 49 66 20 74 68 65 20 76 61 6c 75 65 0a 2a    If the value.*
e3f0: 2a 20 69 6e 20 50 31 20 69 73 20 6e 6f 74 20 61  * in P1 is not a
e400: 6e 20 69 6e 74 65 67 65 72 20 61 6e 64 20 63 61  n integer and ca
e410: 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65  nnot be converte
e420: 64 20 69 6e 74 6f 20 61 6e 20 69 6e 74 65 67 65  d into an intege
e430: 72 0a 2a 2a 20 77 69 74 68 6f 75 74 20 64 61 74  r.** without dat
e440: 61 20 6c 6f 73 73 2c 20 74 68 65 6e 20 6a 75 6d  a loss, then jum
e450: 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f  p immediately to
e460: 20 50 32 2c 20 6f 72 20 69 66 20 50 32 3d 3d 30   P2, or if P2==0
e470: 0a 2a 2a 20 72 61 69 73 65 20 61 6e 20 53 51 4c  .** raise an SQL
e480: 49 54 45 5f 4d 49 53 4d 41 54 43 48 20 65 78 63  ITE_MISMATCH exc
e490: 65 70 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  eption..*/.case 
e4a0: 4f 50 5f 4d 75 73 74 42 65 49 6e 74 3a 20 7b 20  OP_MustBeInt: { 
e4b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75             /* ju
e4c0: 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
e4d0: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
e4e0: 31 5d 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d  1];.  if( (pIn1-
e4f0: 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
e500: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 61 70 70 6c  )==0 ){.    appl
e510: 79 41 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20  yAffinity(pIn1, 
e520: 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52  SQLITE_AFF_NUMER
e530: 49 43 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  IC, encoding);. 
e540: 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
e550: 65 6e 28 28 70 49 6e 31 2d 3e 66 6c 61 67 73 26  en((pIn1->flags&
e560: 4d 45 4d 5f 49 6e 74 29 3d 3d 30 2c 20 32 29 3b  MEM_Int)==0, 2);
e570: 0a 20 20 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  .    if( (pIn1->
e580: 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29  flags & MEM_Int)
e590: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  ==0 ){.      if(
e5a0: 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 7b 0a 20   pOp->p2==0 ){. 
e5b0: 20 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49         rc = SQLI
e5c0: 54 45 5f 4d 49 53 4d 41 54 43 48 3b 0a 20 20 20  TE_MISMATCH;.   
e5d0: 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f       goto abort_
e5e0: 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
e5f0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
e600: 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
e610: 70 32 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  p2;.      }.    
e620: 7d 0a 20 20 7d 0a 20 20 4d 65 6d 53 65 74 54 79  }.  }.  MemSetTy
e630: 70 65 46 6c 61 67 28 70 49 6e 31 2c 20 4d 45 4d  peFlag(pIn1, MEM
e640: 5f 49 6e 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a  _Int);.  break;.
e650: 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  }..#ifndef SQLIT
e660: 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
e670: 50 4f 49 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  POINT./* Opcode:
e680: 20 52 65 61 6c 41 66 66 69 6e 69 74 79 20 50 31   RealAffinity P1
e690: 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49   * * * *.**.** I
e6a0: 66 20 72 65 67 69 73 74 65 72 20 50 31 20 68 6f  f register P1 ho
e6b0: 6c 64 73 20 61 6e 20 69 6e 74 65 67 65 72 20 63  lds an integer c
e6c0: 6f 6e 76 65 72 74 20 69 74 20 74 6f 20 61 20 72  onvert it to a r
e6d0: 65 61 6c 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a  eal value..**.**
e6e0: 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20   This opcode is 
e6f0: 75 73 65 64 20 77 68 65 6e 20 65 78 74 72 61 63  used when extrac
e700: 74 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ting information
e710: 20 66 72 6f 6d 20 61 20 63 6f 6c 75 6d 6e 20 74   from a column t
e720: 68 61 74 0a 2a 2a 20 68 61 73 20 52 45 41 4c 20  hat.** has REAL 
e730: 61 66 66 69 6e 69 74 79 2e 20 20 53 75 63 68 20  affinity.  Such 
e740: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 20 6d 61  column values ma
e750: 79 20 73 74 69 6c 6c 20 62 65 20 73 74 6f 72 65  y still be store
e760: 64 20 61 73 0a 2a 2a 20 69 6e 74 65 67 65 72 73  d as.** integers
e770: 2c 20 66 6f 72 20 73 70 61 63 65 20 65 66 66 69  , for space effi
e780: 63 69 65 6e 63 79 2c 20 62 75 74 20 61 66 74 65  ciency, but afte
e790: 72 20 65 78 74 72 61 63 74 69 6f 6e 20 77 65 20  r extraction we 
e7a0: 77 61 6e 74 20 74 68 65 6d 0a 2a 2a 20 74 6f 20  want them.** to 
e7b0: 68 61 76 65 20 6f 6e 6c 79 20 61 20 72 65 61 6c  have only a real
e7c0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65 20   value..*/.case 
e7d0: 4f 50 5f 52 65 61 6c 41 66 66 69 6e 69 74 79 3a  OP_RealAffinity:
e7e0: 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20   {              
e7f0: 20 20 20 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20      /* in1 */.  
e800: 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
e810: 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49 6e  ->p1];.  if( pIn
e820: 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49  1->flags & MEM_I
e830: 6e 74 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  nt ){.    sqlite
e840: 33 56 64 62 65 4d 65 6d 52 65 61 6c 69 66 79 28  3VdbeMemRealify(
e850: 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62 72 65  pIn1);.  }.  bre
e860: 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ak;.}.#endif..#i
e870: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
e880: 54 5f 43 41 53 54 0a 2f 2a 20 4f 70 63 6f 64 65  T_CAST./* Opcode
e890: 3a 20 43 61 73 74 20 50 31 20 50 32 20 2a 20 2a  : Cast P1 P2 * *
e8a0: 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
e8b0: 61 66 66 69 6e 69 74 79 28 72 5b 50 31 5d 29 0a  affinity(r[P1]).
e8c0: 2a 2a 0a 2a 2a 20 46 6f 72 63 65 20 74 68 65 20  **.** Force the 
e8d0: 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
e8e0: 72 20 50 31 20 74 6f 20 62 65 20 74 68 65 20 74  r P1 to be the t
e8f0: 79 70 65 20 64 65 66 69 6e 65 64 20 62 79 20 50  ype defined by P
e900: 32 2e 0a 2a 2a 20 0a 2a 2a 20 3c 75 6c 3e 0a 2a  2..** .** <ul>.*
e910: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 37 22  * <li value="97"
e920: 3e 20 54 45 58 54 0a 2a 2a 20 3c 6c 69 20 76 61  > TEXT.** <li va
e930: 6c 75 65 3d 22 39 38 22 3e 20 42 4c 4f 42 0a 2a  lue="98"> BLOB.*
e940: 2a 20 3c 6c 69 20 76 61 6c 75 65 3d 22 39 39 22  * <li value="99"
e950: 3e 20 4e 55 4d 45 52 49 43 0a 2a 2a 20 3c 6c 69  > NUMERIC.** <li
e960: 20 76 61 6c 75 65 3d 22 31 30 30 22 3e 20 49 4e   value="100"> IN
e970: 54 45 47 45 52 0a 2a 2a 20 3c 6c 69 20 76 61 6c  TEGER.** <li val
e980: 75 65 3d 22 31 30 31 22 3e 20 52 45 41 4c 0a 2a  ue="101"> REAL.*
e990: 2a 20 3c 2f 75 6c 3e 0a 2a 2a 0a 2a 2a 20 41 20  * </ul>.**.** A 
e9a0: 4e 55 4c 4c 20 76 61 6c 75 65 20 69 73 20 6e 6f  NULL value is no
e9b0: 74 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  t changed by thi
e9c0: 73 20 72 6f 75 74 69 6e 65 2e 20 20 49 74 20 72  s routine.  It r
e9d0: 65 6d 61 69 6e 73 20 4e 55 4c 4c 2e 0a 2a 2f 0a  emains NULL..*/.
e9e0: 63 61 73 65 20 4f 50 5f 43 61 73 74 3a 20 7b 20  case OP_Cast: { 
e9f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea00: 20 2f 2a 20 69 6e 31 20 2a 2f 0a 20 20 61 73 73   /* in1 */.  ass
ea10: 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 3d 53 51  ert( pOp->p2>=SQ
ea20: 4c 49 54 45 5f 41 46 46 5f 42 4c 4f 42 20 26 26  LITE_AFF_BLOB &&
ea30: 20 70 4f 70 2d 3e 70 32 3c 3d 53 51 4c 49 54 45   pOp->p2<=SQLITE
ea40: 5f 41 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 74  _AFF_REAL );.  t
ea50: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
ea60: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 54 45 58  ==SQLITE_AFF_TEX
ea70: 54 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28  T );.  testcase(
ea80: 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45   pOp->p2==SQLITE
ea90: 5f 41 46 46 5f 42 4c 4f 42 20 29 3b 0a 20 20 74  _AFF_BLOB );.  t
eaa0: 65 73 74 63 61 73 65 28 20 70 4f 70 2d 3e 70 32  estcase( pOp->p2
eab0: 3d 3d 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55 4d  ==SQLITE_AFF_NUM
eac0: 45 52 49 43 20 29 3b 0a 20 20 74 65 73 74 63 61  ERIC );.  testca
ead0: 73 65 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c  se( pOp->p2==SQL
eae0: 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45 52 20  ITE_AFF_INTEGER 
eaf0: 29 3b 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  );.  testcase( p
eb00: 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f 41  Op->p2==SQLITE_A
eb10: 46 46 5f 52 45 41 4c 20 29 3b 0a 20 20 70 49 6e  FF_REAL );.  pIn
eb20: 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
eb30: 31 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f  1];.  memAboutTo
eb40: 43 68 61 6e 67 65 28 70 2c 20 70 49 6e 31 29 3b  Change(p, pIn1);
eb50: 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64 42 6c  .  rc = ExpandBl
eb60: 6f 62 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69  ob(pIn1);.  sqli
eb70: 74 65 33 56 64 62 65 4d 65 6d 43 61 73 74 28 70  te3VdbeMemCast(p
eb80: 49 6e 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 65 6e  In1, pOp->p2, en
eb90: 63 6f 64 69 6e 67 29 3b 0a 20 20 55 50 44 41 54  coding);.  UPDAT
eba0: 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70  E_MAX_BLOBSIZE(p
ebb0: 49 6e 31 29 3b 0a 20 20 69 66 28 20 72 63 20 29  In1);.  if( rc )
ebc0: 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
ebd0: 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61  to_error;.  brea
ebe0: 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53  k;.}.#endif /* S
ebf0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 41 53 54 20  QLITE_OMIT_CAST 
ec00: 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  */../* Opcode: E
ec10: 71 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  q P1 P2 P3 P4 P5
ec20: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
ec30: 20 72 5b 50 33 5d 3d 3d 72 5b 50 31 5d 0a 2a 2a   r[P3]==r[P1].**
ec40: 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65 20  .** Compare the 
ec50: 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73 74  values in regist
ec60: 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20 49  er P1 and P3.  I
ec70: 66 20 72 65 67 28 50 33 29 3d 3d 72 65 67 28 50  f reg(P3)==reg(P
ec80: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
ec90: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
eca0: 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  Or if the SQLITE
ecb0: 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73  _STOREP2 flag is
ecc0: 20 73 65 74 20 69 6e 20 50 35 2c 20 74 68 65 6e   set in P5, then
ecd0: 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 72 65  .** store the re
ece0: 73 75 6c 74 20 6f 66 20 63 6f 6d 70 61 72 69 73  sult of comparis
ecf0: 6f 6e 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  on in register P
ed00: 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c  2..**.** The SQL
ed10: 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20 70 6f 72  ITE_AFF_MASK por
ed20: 74 69 6f 6e 20 6f 66 20 50 35 20 6d 75 73 74 20  tion of P5 must 
ed30: 62 65 20 61 6e 20 61 66 66 69 6e 69 74 79 20 63  be an affinity c
ed40: 68 61 72 61 63 74 65 72 20 2d 0a 2a 2a 20 53 51  haracter -.** SQ
ed50: 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 2c 20 53  LITE_AFF_TEXT, S
ed60: 51 4c 49 54 45 5f 41 46 46 5f 49 4e 54 45 47 45  QLITE_AFF_INTEGE
ed70: 52 2c 20 61 6e 64 20 73 6f 20 66 6f 72 74 68 2e  R, and so forth.
ed80: 20 41 6e 20 61 74 74 65 6d 70 74 20 69 73 20 6d   An attempt is m
ed90: 61 64 65 20 0a 2a 2a 20 74 6f 20 63 6f 65 72 63  ade .** to coerc
eda0: 65 20 62 6f 74 68 20 69 6e 70 75 74 73 20 61 63  e both inputs ac
edb0: 63 6f 72 64 69 6e 67 20 74 6f 20 74 68 69 73 20  cording to this 
edc0: 61 66 66 69 6e 69 74 79 20 62 65 66 6f 72 65 20  affinity before 
edd0: 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
ede0: 6e 20 69 73 20 6d 61 64 65 2e 20 49 66 20 74 68  n is made. If th
edf0: 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
ee00: 4b 20 69 73 20 30 78 30 30 2c 20 74 68 65 6e 20  K is 0x00, then 
ee10: 6e 75 6d 65 72 69 63 0a 2a 2a 20 61 66 66 69 6e  numeric.** affin
ee20: 69 74 79 20 69 73 20 75 73 65 64 2e 20 4e 6f 74  ity is used. Not
ee30: 65 20 74 68 61 74 20 74 68 65 20 61 66 66 69 6e  e that the affin
ee40: 69 74 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  ity conversions 
ee50: 61 72 65 20 73 74 6f 72 65 64 0a 2a 2a 20 62 61  are stored.** ba
ee60: 63 6b 20 69 6e 74 6f 20 74 68 65 20 69 6e 70 75  ck into the inpu
ee70: 74 20 72 65 67 69 73 74 65 72 73 20 50 31 20 61  t registers P1 a
ee80: 6e 64 20 50 33 2e 20 20 53 6f 20 74 68 69 73 20  nd P3.  So this 
ee90: 6f 70 63 6f 64 65 20 63 61 6e 20 63 61 75 73 65  opcode can cause
eea0: 0a 2a 2a 20 70 65 72 73 69 73 74 65 6e 74 20 63  .** persistent c
eeb0: 68 61 6e 67 65 73 20 74 6f 20 72 65 67 69 73 74  hanges to regist
eec0: 65 72 73 20 50 31 20 61 6e 64 20 50 33 2e 0a 2a  ers P1 and P3..*
eed0: 2a 0a 2a 2a 20 4f 6e 63 65 20 61 6e 79 20 63 6f  *.** Once any co
eee0: 6e 76 65 72 73 69 6f 6e 73 20 68 61 76 65 20 74  nversions have t
eef0: 61 6b 65 6e 20 70 6c 61 63 65 2c 20 61 6e 64 20  aken place, and 
ef00: 6e 65 69 74 68 65 72 20 76 61 6c 75 65 20 69 73  neither value is
ef10: 20 4e 55 4c 4c 2c 20 0a 2a 2a 20 74 68 65 20 76   NULL, .** the v
ef20: 61 6c 75 65 73 20 61 72 65 20 63 6f 6d 70 61 72  alues are compar
ef30: 65 64 2e 20 49 66 20 62 6f 74 68 20 76 61 6c 75  ed. If both valu
ef40: 65 73 20 61 72 65 20 62 6c 6f 62 73 20 74 68 65  es are blobs the
ef50: 6e 20 6d 65 6d 63 6d 70 28 29 20 69 73 0a 2a 2a  n memcmp() is.**
ef60: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ef70: 6e 65 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f  ne the results o
ef80: 66 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  f the comparison
ef90: 2e 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65  .  If both value
efa0: 73 0a 2a 2a 20 61 72 65 20 74 65 78 74 2c 20 74  s.** are text, t
efb0: 68 65 6e 20 74 68 65 20 61 70 70 72 6f 70 72 69  hen the appropri
efc0: 61 74 65 20 63 6f 6c 6c 61 74 69 6e 67 20 66 75  ate collating fu
efd0: 6e 63 74 69 6f 6e 20 73 70 65 63 69 66 69 65 64  nction specified
efe0: 20 69 6e 0a 2a 2a 20 50 34 20 69 73 20 75 73 65   in.** P4 is use
eff0: 64 20 74 6f 20 64 6f 20 74 68 65 20 63 6f 6d 70  d to do the comp
f000: 61 72 69 73 6f 6e 2e 20 20 49 66 20 50 34 20 69  arison.  If P4 i
f010: 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64 20  s not specified 
f020: 74 68 65 6e 0a 2a 2a 20 6d 65 6d 63 6d 70 28 29  then.** memcmp()
f030: 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 70   is used to comp
f040: 61 72 65 20 74 65 78 74 20 73 74 72 69 6e 67 2e  are text string.
f050: 20 20 49 66 20 62 6f 74 68 20 76 61 6c 75 65 73    If both values
f060: 20 61 72 65 0a 2a 2a 20 6e 75 6d 65 72 69 63 2c   are.** numeric,
f070: 20 74 68 65 6e 20 61 20 6e 75 6d 65 72 69 63 20   then a numeric 
f080: 63 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 75 73  comparison is us
f090: 65 64 2e 20 49 66 20 74 68 65 20 74 77 6f 20 76  ed. If the two v
f0a0: 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 6f 66 20  alues.** are of 
f0b0: 64 69 66 66 65 72 65 6e 74 20 74 79 70 65 73 2c  different types,
f0c0: 20 74 68 65 6e 20 6e 75 6d 62 65 72 73 20 61 72   then numbers ar
f0d0: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
f0e0: 73 20 74 68 61 6e 0a 2a 2a 20 73 74 72 69 6e 67  s than.** string
f0f0: 73 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72  s and strings ar
f100: 65 20 63 6f 6e 73 69 64 65 72 65 64 20 6c 65 73  e considered les
f110: 73 20 74 68 61 6e 20 62 6c 6f 62 73 2e 0a 2a 2a  s than blobs..**
f120: 0a 2a 2a 20 49 66 20 53 51 4c 49 54 45 5f 4e 55  .** If SQLITE_NU
f130: 4c 4c 45 51 20 69 73 20 73 65 74 20 69 6e 20 50  LLEQ is set in P
f140: 35 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c  5 then the resul
f150: 74 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  t of comparison 
f160: 69 73 20 61 6c 77 61 79 73 20 65 69 74 68 65 72  is always either
f170: 0a 2a 2a 20 74 72 75 65 20 6f 72 20 66 61 6c 73  .** true or fals
f180: 65 20 61 6e 64 20 69 73 20 6e 65 76 65 72 20 4e  e and is never N
f190: 55 4c 4c 2e 20 20 49 66 20 62 6f 74 68 20 6f 70  ULL.  If both op
f1a0: 65 72 61 6e 64 73 20 61 72 65 20 4e 55 4c 4c 20  erands are NULL 
f1b0: 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  then the result.
f1c0: 2a 2a 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e  ** of comparison
f1d0: 20 69 73 20 74 72 75 65 2e 20 20 49 66 20 65 69   is true.  If ei
f1e0: 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
f1f0: 4e 55 4c 4c 20 74 68 65 6e 20 74 68 65 20 72 65  NULL then the re
f200: 73 75 6c 74 20 69 73 20 66 61 6c 73 65 2e 0a 2a  sult is false..*
f210: 2a 20 49 66 20 6e 65 69 74 68 65 72 20 6f 70 65  * If neither ope
f220: 72 61 6e 64 20 69 73 20 4e 55 4c 4c 20 74 68 65  rand is NULL the
f230: 20 72 65 73 75 6c 74 20 69 73 20 74 68 65 20 73   result is the s
f240: 61 6d 65 20 61 73 20 69 74 20 77 6f 75 6c 64 20  ame as it would 
f250: 62 65 20 69 66 0a 2a 2a 20 74 68 65 20 53 51 4c  be if.** the SQL
f260: 49 54 45 5f 4e 55 4c 4c 45 51 20 66 6c 61 67 20  ITE_NULLEQ flag 
f270: 77 65 72 65 20 6f 6d 69 74 74 65 64 20 66 72 6f  were omitted fro
f280: 6d 20 50 35 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62  m P5..**.** If b
f290: 6f 74 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  oth SQLITE_STORE
f2a0: 50 32 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45  P2 and SQLITE_KE
f2b0: 45 50 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65  EPNULL flags are
f2c0: 20 73 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a   set then the.**
f2d0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32   content of r[P2
f2e0: 5d 20 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65  ] is only change
f2f0: 64 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  d if the new val
f300: 75 65 20 69 73 20 4e 55 4c 4c 20 6f 72 20 30 20  ue is NULL or 0 
f310: 28 66 61 6c 73 65 29 2e 0a 2a 2a 20 49 6e 20 6f  (false)..** In o
f320: 74 68 65 72 20 77 6f 72 64 73 2c 20 61 20 70 72  ther words, a pr
f330: 69 6f 72 20 72 5b 50 32 5d 20 76 61 6c 75 65 20  ior r[P2] value 
f340: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72  will not be over
f350: 77 72 69 74 74 65 6e 20 62 79 20 31 20 28 74 72  written by 1 (tr
f360: 75 65 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  ue)..*/./* Opcod
f370: 65 3a 20 4e 65 20 50 31 20 50 32 20 50 33 20 50  e: Ne P1 P2 P3 P
f380: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
f390: 3a 20 49 46 20 72 5b 50 33 5d 21 3d 72 5b 50 31  : IF r[P3]!=r[P1
f3a0: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
f3b0: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
f3c0: 20 45 71 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Eq opcode excep
f3d0: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
f3e0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
f3f0: 68 65 20 6f 70 65 72 61 6e 64 73 20 69 6e 20 72  he operands in r
f400: 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64 20  egisters P1 and 
f410: 50 33 20 61 72 65 20 6e 6f 74 20 65 71 75 61 6c  P3 are not equal
f420: 2e 20 20 53 65 65 20 74 68 65 20 45 71 20 6f 70  .  See the Eq op
f430: 63 6f 64 65 20 66 6f 72 0a 2a 2a 20 61 64 64 69  code for.** addi
f440: 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69  tional informati
f450: 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 62 6f 74  on..**.** If bot
f460: 68 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32  h SQLITE_STOREP2
f470: 20 61 6e 64 20 53 51 4c 49 54 45 5f 4b 45 45 50   and SQLITE_KEEP
f480: 4e 55 4c 4c 20 66 6c 61 67 73 20 61 72 65 20 73  NULL flags are s
f490: 65 74 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 63  et then the.** c
f4a0: 6f 6e 74 65 6e 74 20 6f 66 20 72 5b 50 32 5d 20  ontent of r[P2] 
f4b0: 69 73 20 6f 6e 6c 79 20 63 68 61 6e 67 65 64 20  is only changed 
f4c0: 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c 75 65  if the new value
f4d0: 20 69 73 20 4e 55 4c 4c 20 6f 72 20 31 20 28 74   is NULL or 1 (t
f4e0: 72 75 65 29 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65  rue)..** In othe
f4f0: 72 20 77 6f 72 64 73 2c 20 61 20 70 72 69 6f 72  r words, a prior
f500: 20 72 5b 50 32 5d 20 76 61 6c 75 65 20 77 69 6c   r[P2] value wil
f510: 6c 20 6e 6f 74 20 62 65 20 6f 76 65 72 77 72 69  l not be overwri
f520: 74 74 65 6e 20 62 79 20 30 20 28 66 61 6c 73 65  tten by 0 (false
f530: 29 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  )..*/./* Opcode:
f540: 20 4c 74 20 50 31 20 50 32 20 50 33 20 50 34 20   Lt P1 P2 P3 P4 
f550: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
f560: 49 46 20 72 5b 50 33 5d 3c 72 5b 50 31 5d 0a 2a  IF r[P3]<r[P1].*
f570: 2a 0a 2a 2a 20 43 6f 6d 70 61 72 65 20 74 68 65  *.** Compare the
f580: 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
f590: 74 65 72 20 50 31 20 61 6e 64 20 50 33 2e 20 20  ter P1 and P3.  
f5a0: 49 66 20 72 65 67 28 50 33 29 3c 72 65 67 28 50  If reg(P3)<reg(P
f5b0: 31 29 20 74 68 65 6e 0a 2a 2a 20 6a 75 6d 70 20  1) then.** jump 
f5c0: 74 6f 20 61 64 64 72 65 73 73 20 50 32 2e 20 20  to address P2.  
f5d0: 4f 72 20 69 66 20 74 68 65 20 53 51 4c 49 54 45  Or if the SQLITE
f5e0: 5f 53 54 4f 52 45 50 32 20 66 6c 61 67 20 69 73  _STOREP2 flag is
f5f0: 20 73 65 74 20 69 6e 20 50 35 20 73 74 6f 72 65   set in P5 store
f600: 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 20 6f  .** the result o
f610: 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20 28 30 20  f comparison (0 
f620: 6f 72 20 31 20 6f 72 20 4e 55 4c 4c 29 20 69 6e  or 1 or NULL) in
f630: 74 6f 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a  to register P2..
f640: 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c  **.** If the SQL
f650: 49 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 62  ITE_JUMPIFNULL b
f660: 69 74 20 6f 66 20 50 35 20 69 73 20 73 65 74 20  it of P5 is set 
f670: 61 6e 64 20 65 69 74 68 65 72 20 72 65 67 28 50  and either reg(P
f680: 31 29 20 6f 72 0a 2a 2a 20 72 65 67 28 50 33 29  1) or.** reg(P3)
f690: 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 68   is NULL then th
f6a0: 65 20 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 2e  e take the jump.
f6b0: 20 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f    If the SQLITE_
f6c0: 4a 55 4d 50 49 46 4e 55 4c 4c 20 0a 2a 2a 20 62  JUMPIFNULL .** b
f6d0: 69 74 20 69 73 20 63 6c 65 61 72 20 74 68 65 6e  it is clear then
f6e0: 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 69 66   fall through if
f6f0: 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20   either operand 
f700: 69 73 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54  is NULL..**.** T
f710: 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41  he SQLITE_AFF_MA
f720: 53 4b 20 70 6f 72 74 69 6f 6e 20 6f 66 20 50 35  SK portion of P5
f730: 20 6d 75 73 74 20 62 65 20 61 6e 20 61 66 66 69   must be an affi
f740: 6e 69 74 79 20 63 68 61 72 61 63 74 65 72 20 2d  nity character -
f750: 0a 2a 2a 20 53 51 4c 49 54 45 5f 41 46 46 5f 54  .** SQLITE_AFF_T
f760: 45 58 54 2c 20 53 51 4c 49 54 45 5f 41 46 46 5f  EXT, SQLITE_AFF_
f770: 49 4e 54 45 47 45 52 2c 20 61 6e 64 20 73 6f 20  INTEGER, and so 
f780: 66 6f 72 74 68 2e 20 41 6e 20 61 74 74 65 6d 70  forth. An attemp
f790: 74 20 69 73 20 6d 61 64 65 20 0a 2a 2a 20 74 6f  t is made .** to
f7a0: 20 63 6f 65 72 63 65 20 62 6f 74 68 20 69 6e 70   coerce both inp
f7b0: 75 74 73 20 61 63 63 6f 72 64 69 6e 67 20 74 6f  uts according to
f7c0: 20 74 68 69 73 20 61 66 66 69 6e 69 74 79 20 62   this affinity b
f7d0: 65 66 6f 72 65 20 74 68 65 0a 2a 2a 20 63 6f 6d  efore the.** com
f7e0: 70 61 72 69 73 6f 6e 20 69 73 20 6d 61 64 65 2e  parison is made.
f7f0: 20 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 41   If the SQLITE_A
f800: 46 46 5f 4d 41 53 4b 20 69 73 20 30 78 30 30 2c  FF_MASK is 0x00,
f810: 20 74 68 65 6e 20 6e 75 6d 65 72 69 63 0a 2a 2a   then numeric.**
f820: 20 61 66 66 69 6e 69 74 79 20 69 73 20 75 73 65   affinity is use
f830: 64 2e 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65  d. Note that the
f840: 20 61 66 66 69 6e 69 74 79 20 63 6f 6e 76 65 72   affinity conver
f850: 73 69 6f 6e 73 20 61 72 65 20 73 74 6f 72 65 64  sions are stored
f860: 0a 2a 2a 20 62 61 63 6b 20 69 6e 74 6f 20 74 68  .** back into th
f870: 65 20 69 6e 70 75 74 20 72 65 67 69 73 74 65 72  e input register
f880: 73 20 50 31 20 61 6e 64 20 50 33 2e 20 20 53 6f  s P1 and P3.  So
f890: 20 74 68 69 73 20 6f 70 63 6f 64 65 20 63 61 6e   this opcode can
f8a0: 20 63 61 75 73 65 0a 2a 2a 20 70 65 72 73 69 73   cause.** persis
f8b0: 74 65 6e 74 20 63 68 61 6e 67 65 73 20 74 6f 20  tent changes to 
f8c0: 72 65 67 69 73 74 65 72 73 20 50 31 20 61 6e 64  registers P1 and
f8d0: 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 4f 6e 63 65 20   P3..**.** Once 
f8e0: 61 6e 79 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20  any conversions 
f8f0: 68 61 76 65 20 74 61 6b 65 6e 20 70 6c 61 63 65  have taken place
f900: 2c 20 61 6e 64 20 6e 65 69 74 68 65 72 20 76 61  , and neither va
f910: 6c 75 65 20 69 73 20 4e 55 4c 4c 2c 20 0a 2a 2a  lue is NULL, .**
f920: 20 74 68 65 20 76 61 6c 75 65 73 20 61 72 65 20   the values are 
f930: 63 6f 6d 70 61 72 65 64 2e 20 49 66 20 62 6f 74  compared. If bot
f940: 68 20 76 61 6c 75 65 73 20 61 72 65 20 62 6c 6f  h values are blo
f950: 62 73 20 74 68 65 6e 20 6d 65 6d 63 6d 70 28 29  bs then memcmp()
f960: 20 69 73 0a 2a 2a 20 75 73 65 64 20 74 6f 20 64   is.** used to d
f970: 65 74 65 72 6d 69 6e 65 20 74 68 65 20 72 65 73  etermine the res
f980: 75 6c 74 73 20 6f 66 20 74 68 65 20 63 6f 6d 70  ults of the comp
f990: 61 72 69 73 6f 6e 2e 20 20 49 66 20 62 6f 74 68  arison.  If both
f9a0: 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20 74   values.** are t
f9b0: 65 78 74 2c 20 74 68 65 6e 20 74 68 65 20 61 70  ext, then the ap
f9c0: 70 72 6f 70 72 69 61 74 65 20 63 6f 6c 6c 61 74  propriate collat
f9d0: 69 6e 67 20 66 75 6e 63 74 69 6f 6e 20 73 70 65  ing function spe
f9e0: 63 69 66 69 65 64 20 69 6e 0a 2a 2a 20 50 34 20  cified in.** P4 
f9f0: 69 73 20 20 75 73 65 64 20 74 6f 20 64 6f 20 74  is  used to do t
fa00: 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20  he comparison.  
fa10: 49 66 20 50 34 20 69 73 20 6e 6f 74 20 73 70 65  If P4 is not spe
fa20: 63 69 66 69 65 64 20 74 68 65 6e 0a 2a 2a 20 6d  cified then.** m
fa30: 65 6d 63 6d 70 28 29 20 69 73 20 75 73 65 64 20  emcmp() is used 
fa40: 74 6f 20 63 6f 6d 70 61 72 65 20 74 65 78 74 20  to compare text 
fa50: 73 74 72 69 6e 67 2e 20 20 49 66 20 62 6f 74 68  string.  If both
fa60: 20 76 61 6c 75 65 73 20 61 72 65 0a 2a 2a 20 6e   values are.** n
fa70: 75 6d 65 72 69 63 2c 20 74 68 65 6e 20 61 20 6e  umeric, then a n
fa80: 75 6d 65 72 69 63 20 63 6f 6d 70 61 72 69 73 6f  umeric compariso
fa90: 6e 20 69 73 20 75 73 65 64 2e 20 49 66 20 74 68  n is used. If th
faa0: 65 20 74 77 6f 20 76 61 6c 75 65 73 0a 2a 2a 20  e two values.** 
fab0: 61 72 65 20 6f 66 20 64 69 66 66 65 72 65 6e 74  are of different
fac0: 20 74 79 70 65 73 2c 20 74 68 65 6e 20 6e 75 6d   types, then num
fad0: 62 65 72 73 20 61 72 65 20 63 6f 6e 73 69 64 65  bers are conside
fae0: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a  red less than.**
faf0: 20 73 74 72 69 6e 67 73 20 61 6e 64 20 73 74 72   strings and str
fb00: 69 6e 67 73 20 61 72 65 20 63 6f 6e 73 69 64 65  ings are conside
fb10: 72 65 64 20 6c 65 73 73 20 74 68 61 6e 20 62 6c  red less than bl
fb20: 6f 62 73 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64  obs..*/./* Opcod
fb30: 65 3a 20 4c 65 20 50 31 20 50 32 20 50 33 20 50  e: Le P1 P2 P3 P
fb40: 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
fb50: 3a 20 49 46 20 72 5b 50 33 5d 3c 3d 72 5b 50 31  : IF r[P3]<=r[P1
fb60: 5d 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72  ].**.** This wor
fb70: 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65  ks just like the
fb80: 20 4c 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70   Lt opcode excep
fb90: 74 20 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20  t that the jump 
fba0: 69 73 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74  is taken if.** t
fbb0: 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65  he content of re
fbc0: 67 69 73 74 65 72 20 50 33 20 69 73 20 6c 65 73  gister P3 is les
fbd0: 73 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20  s than or equal 
fbe0: 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  to the content o
fbf0: 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50 31  f.** register P1
fc00: 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f 70  .  See the Lt op
fc10: 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f  code for additio
fc20: 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
fc30: 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 47  .*/./* Opcode: G
fc40: 74 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  t P1 P2 P3 P4 P5
fc50: 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 49 46  .** Synopsis: IF
fc60: 20 72 5b 50 33 5d 3e 72 5b 50 31 5d 0a 2a 2a 0a   r[P3]>r[P1].**.
fc70: 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73 20 6a 75  ** This works ju
fc80: 73 74 20 6c 69 6b 65 20 74 68 65 20 4c 74 20 6f  st like the Lt o
fc90: 70 63 6f 64 65 20 65 78 63 65 70 74 20 74 68 61  pcode except tha
fca0: 74 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61  t the jump is ta
fcb0: 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65 20 63 6f  ken if.** the co
fcc0: 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74 65  ntent of registe
fcd0: 72 20 50 33 20 69 73 20 67 72 65 61 74 65 72 20  r P3 is greater 
fce0: 74 68 61 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  than the content
fcf0: 20 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20   of.** register 
fd00: 50 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20  P1.  See the Lt 
fd10: 6f 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74  opcode for addit
fd20: 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f  ional informatio
fd30: 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a  n..*/./* Opcode:
fd40: 20 47 65 20 50 31 20 50 32 20 50 33 20 50 34 20   Ge P1 P2 P3 P4 
fd50: 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20  P5.** Synopsis: 
fd60: 49 46 20 72 5b 50 33 5d 3e 3d 72 5b 50 31 5d 0a  IF r[P3]>=r[P1].
fd70: 2a 2a 0a 2a 2a 20 54 68 69 73 20 77 6f 72 6b 73  **.** This works
fd80: 20 6a 75 73 74 20 6c 69 6b 65 20 74 68 65 20 4c   just like the L
fd90: 74 20 6f 70 63 6f 64 65 20 65 78 63 65 70 74 20  t opcode except 
fda0: 74 68 61 74 20 74 68 65 20 6a 75 6d 70 20 69 73  that the jump is
fdb0: 20 74 61 6b 65 6e 20 69 66 0a 2a 2a 20 74 68 65   taken if.** the
fdc0: 20 63 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69   content of regi
fdd0: 73 74 65 72 20 50 33 20 69 73 20 67 72 65 61 74  ster P3 is great
fde0: 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c  er than or equal
fdf0: 20 74 6f 20 74 68 65 20 63 6f 6e 74 65 6e 74 20   to the content 
fe00: 6f 66 0a 2a 2a 20 72 65 67 69 73 74 65 72 20 50  of.** register P
fe10: 31 2e 20 20 53 65 65 20 74 68 65 20 4c 74 20 6f  1.  See the Lt o
fe20: 70 63 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69  pcode for additi
fe30: 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
fe40: 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 71 3a  ..*/.case OP_Eq:
fe50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fe60: 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 51 2c  * same as TK_EQ,
fe70: 20 6a 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20   jump, in1, in3 
fe80: 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 3a 20 20  */.case OP_Ne:  
fe90: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
fea0: 73 61 6d 65 20 61 73 20 54 4b 5f 4e 45 2c 20 6a  same as TK_NE, j
feb0: 75 6d 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f  ump, in1, in3 */
fec0: 0a 63 61 73 65 20 4f 50 5f 4c 74 3a 20 20 20 20  .case OP_Lt:    
fed0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61             /* sa
fee0: 6d 65 20 61 73 20 54 4b 5f 4c 54 2c 20 6a 75 6d  me as TK_LT, jum
fef0: 70 2c 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63  p, in1, in3 */.c
ff00: 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20 20 20 20  ase OP_Le:      
ff10: 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65           /* same
ff20: 20 61 73 20 54 4b 5f 4c 45 2c 20 6a 75 6d 70 2c   as TK_LE, jump,
ff30: 20 69 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73   in1, in3 */.cas
ff40: 65 20 4f 50 5f 47 74 3a 20 20 20 20 20 20 20 20  e OP_Gt:        
ff50: 20 20 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61         /* same a
ff60: 73 20 54 4b 5f 47 54 2c 20 6a 75 6d 70 2c 20 69  s TK_GT, jump, i
ff70: 6e 31 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  n1, in3 */.case 
ff80: 4f 50 5f 47 65 3a 20 7b 20 20 20 20 20 20 20 20  OP_Ge: {        
ff90: 20 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20       /* same as 
ffa0: 54 4b 5f 47 45 2c 20 6a 75 6d 70 2c 20 69 6e 31  TK_GE, jump, in1
ffb0: 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72  , in3 */.  int r
ffc0: 65 73 2c 20 72 65 73 32 3b 20 20 20 20 20 20 2f  es, res2;      /
ffd0: 2a 20 52 65 73 75 6c 74 20 6f 66 20 74 68 65 20  * Result of the 
ffe0: 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 66 20 70 49  comparison of pI
fff0: 6e 31 20 61 67 61 69 6e 73 74 20 70 49 6e 33 20  n1 against pIn3 
10000 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
10010 74 79 3b 20 20 20 20 20 20 2f 2a 20 41 66 66 69  ty;      /* Affi
10020 6e 69 74 79 20 74 6f 20 75 73 65 20 66 6f 72 20  nity to use for 
10030 63 6f 6d 70 61 72 69 73 6f 6e 20 2a 2f 0a 20 20  comparison */.  
10040 75 31 36 20 66 6c 61 67 73 31 3b 20 20 20 20 20  u16 flags1;     
10050 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20 69      /* Copy of i
10060 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66 20  nitial value of 
10070 70 49 6e 31 2d 3e 66 6c 61 67 73 20 2a 2f 0a 20  pIn1->flags */. 
10080 20 75 31 36 20 66 6c 61 67 73 33 3b 20 20 20 20   u16 flags3;    
10090 20 20 20 20 20 2f 2a 20 43 6f 70 79 20 6f 66 20       /* Copy of 
100a0 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
100b0 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 2a 2f 0a   pIn3->flags */.
100c0 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b  .  pIn1 = &aMem[
100d0 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49 6e 33  pOp->p1];.  pIn3
100e0 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
100f0 5d 3b 0a 20 20 66 6c 61 67 73 31 20 3d 20 70 49  ];.  flags1 = pI
10100 6e 31 2d 3e 66 6c 61 67 73 3b 0a 20 20 66 6c 61  n1->flags;.  fla
10110 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c 61 67  gs3 = pIn3->flag
10120 73 3b 0a 20 20 69 66 28 20 28 66 6c 61 67 73 31  s;.  if( (flags1
10130 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f 4e   | flags3)&MEM_N
10140 75 6c 6c 20 29 7b 0a 20 20 20 20 2f 2a 20 4f 6e  ull ){.    /* On
10150 65 20 6f 72 20 62 6f 74 68 20 6f 70 65 72 61 6e  e or both operan
10160 64 73 20 61 72 65 20 4e 55 4c 4c 20 2a 2f 0a 20  ds are NULL */. 
10170 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
10180 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 29   SQLITE_NULLEQ )
10190 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 53 51  {.      /* If SQ
101a0 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 69 73 20 73  LITE_NULLEQ is s
101b0 65 74 20 28 77 68 69 63 68 20 77 69 6c 6c 20 6f  et (which will o
101c0 6e 6c 79 20 68 61 70 70 65 6e 20 69 66 20 74 68  nly happen if th
101d0 65 20 6f 70 65 72 61 74 6f 72 20 69 73 0a 20 20  e operator is.  
101e0 20 20 20 20 2a 2a 20 4f 50 5f 45 71 20 6f 72 20      ** OP_Eq or 
101f0 4f 50 5f 4e 65 29 20 74 68 65 6e 20 74 61 6b 65  OP_Ne) then take
10200 20 74 68 65 20 6a 75 6d 70 20 6f 72 20 6e 6f 74   the jump or not
10210 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68   depending on wh
10220 65 74 68 65 72 0a 20 20 20 20 20 20 2a 2a 20 6f  ether.      ** o
10230 72 20 6e 6f 74 20 62 6f 74 68 20 6f 70 65 72 61  r not both opera
10240 6e 64 73 20 61 72 65 20 6e 75 6c 6c 2e 0a 20 20  nds are null..  
10250 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
10260 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
10270 3d 3d 4f 50 5f 45 71 20 7c 7c 20 70 4f 70 2d 3e  ==OP_Eq || pOp->
10280 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
10290 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 28  .      assert( (
102a0 66 6c 61 67 73 31 20 26 20 4d 45 4d 5f 43 6c 65  flags1 & MEM_Cle
102b0 61 72 65 64 29 3d 3d 30 20 29 3b 0a 20 20 20 20  ared)==0 );.    
102c0 20 20 61 73 73 65 72 74 28 20 28 70 4f 70 2d 3e    assert( (pOp->
102d0 70 35 20 26 20 53 51 4c 49 54 45 5f 4a 55 4d 50  p5 & SQLITE_JUMP
102e0 49 46 4e 55 4c 4c 29 3d 3d 30 20 29 3b 0a 20 20  IFNULL)==0 );.  
102f0 20 20 20 20 69 66 28 20 28 66 6c 61 67 73 31 26      if( (flags1&
10300 66 6c 61 67 73 33 26 4d 45 4d 5f 4e 75 6c 6c 29  flags3&MEM_Null)
10310 21 3d 30 0a 20 20 20 20 20 20 20 26 26 20 28 66  !=0.       && (f
10320 6c 61 67 73 33 26 4d 45 4d 5f 43 6c 65 61 72 65  lags3&MEM_Cleare
10330 64 29 3d 3d 30 0a 20 20 20 20 20 20 29 7b 0a 20  d)==0.      ){. 
10340 20 20 20 20 20 20 20 72 65 73 20 3d 20 30 3b 20         res = 0; 
10350 20 2f 2a 20 4f 70 65 72 61 6e 64 73 20 61 72 65   /* Operands are
10360 20 65 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20   equal */.      
10370 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 72  }else{.        r
10380 65 73 20 3d 20 31 3b 20 20 2f 2a 20 4f 70 65 72  es = 1;  /* Oper
10390 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65 71 75  ands are not equ
103a0 61 6c 20 2a 2f 0a 20 20 20 20 20 20 7d 0a 20 20  al */.      }.  
103b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
103c0 2a 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20  * SQLITE_NULLEQ 
103d0 69 73 20 63 6c 65 61 72 20 61 6e 64 20 61 74 20  is clear and at 
103e0 6c 65 61 73 74 20 6f 6e 65 20 6f 70 65 72 61 6e  least one operan
103f0 64 20 69 73 20 4e 55 4c 4c 2c 0a 20 20 20 20 20  d is NULL,.     
10400 20 2a 2a 20 74 68 65 6e 20 74 68 65 20 72 65 73   ** then the res
10410 75 6c 74 20 69 73 20 61 6c 77 61 79 73 20 4e 55  ult is always NU
10420 4c 4c 2e 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  LL..      ** The
10430 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
10440 66 20 74 68 65 20 53 51 4c 49 54 45 5f 4a 55 4d  f the SQLITE_JUM
10450 50 49 46 4e 55 4c 4c 20 62 69 74 20 69 73 20 73  PIFNULL bit is s
10460 65 74 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  et..      */.   
10470 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26     if( pOp->p5 &
10480 20 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20   SQLITE_STOREP2 
10490 29 7b 0a 20 20 20 20 20 20 20 20 70 4f 75 74 20  ){.        pOut 
104a0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
104b0 3b 0a 20 20 20 20 20 20 20 20 69 43 6f 6d 70 61  ;.        iCompa
104c0 72 65 20 3d 20 31 3b 20 20 20 20 2f 2a 20 4f 70  re = 1;    /* Op
104d0 65 72 61 6e 64 73 20 61 72 65 20 6e 6f 74 20 65  erands are not e
104e0 71 75 61 6c 20 2a 2f 0a 20 20 20 20 20 20 20 20  qual */.        
104f0 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65  memAboutToChange
10500 28 70 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20  (p, pOut);.     
10510 20 20 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61     MemSetTypeFla
10520 67 28 70 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c  g(pOut, MEM_Null
10530 29 3b 0a 20 20 20 20 20 20 20 20 52 45 47 49 53  );.        REGIS
10540 54 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70  TER_TRACE(pOp->p
10550 32 2c 20 70 4f 75 74 29 3b 0a 20 20 20 20 20 20  2, pOut);.      
10560 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 56  }else{.        V
10570 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 32  dbeBranchTaken(2
10580 2c 33 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ,3);.        if(
10590 20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54   pOp->p5 & SQLIT
105a0 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 29 7b 0a  E_JUMPIFNULL ){.
105b0 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 6a            goto j
105c0 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20  ump_to_p2;.     
105d0 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
105e0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a     break;.    }.
105f0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20    }else{.    /* 
10600 4e 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64 20  Neither operand 
10610 69 73 20 4e 55 4c 4c 2e 20 20 44 6f 20 61 20 63  is NULL.  Do a c
10620 6f 6d 70 61 72 69 73 6f 6e 2e 20 2a 2f 0a 20 20  omparison. */.  
10630 20 20 61 66 66 69 6e 69 74 79 20 3d 20 70 4f 70    affinity = pOp
10640 2d 3e 70 35 20 26 20 53 51 4c 49 54 45 5f 41 46  ->p5 & SQLITE_AF
10650 46 5f 4d 41 53 4b 3b 0a 20 20 20 20 69 66 28 20  F_MASK;.    if( 
10660 61 66 66 69 6e 69 74 79 3e 3d 53 51 4c 49 54 45  affinity>=SQLITE
10670 5f 41 46 46 5f 4e 55 4d 45 52 49 43 20 29 7b 0a  _AFF_NUMERIC ){.
10680 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67 73        if( (flags
10690 31 20 7c 20 66 6c 61 67 73 33 29 26 4d 45 4d 5f  1 | flags3)&MEM_
106a0 53 74 72 20 29 7b 0a 20 20 20 20 20 20 20 20 69  Str ){.        i
106b0 66 28 20 28 66 6c 61 67 73 31 20 26 20 28 4d 45  f( (flags1 & (ME
106c0 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 7c 4d  M_Int|MEM_Real|M
106d0 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f 53 74  EM_Str))==MEM_St
106e0 72 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 61  r ){.          a
106f0 70 70 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e  pplyNumericAffin
10700 69 74 79 28 70 49 6e 31 2c 30 29 3b 0a 20 20 20  ity(pIn1,0);.   
10710 20 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28         testcase(
10720 20 66 6c 61 67 73 33 21 3d 70 49 6e 33 2d 3e 66   flags3!=pIn3->f
10730 6c 61 67 73 20 29 3b 20 2f 2a 20 50 6f 73 73 69  lags ); /* Possi
10740 62 6c 65 20 69 66 20 70 49 6e 31 3d 3d 70 49 6e  ble if pIn1==pIn
10750 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 66  3 */.          f
10760 6c 61 67 73 33 20 3d 20 70 49 6e 33 2d 3e 66 6c  lags3 = pIn3->fl
10770 61 67 73 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ags;.        }. 
10780 20 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67         if( (flag
10790 73 33 20 26 20 28 4d 45 4d 5f 49 6e 74 7c 4d 45  s3 & (MEM_Int|ME
107a0 4d 5f 52 65 61 6c 7c 4d 45 4d 5f 53 74 72 29 29  M_Real|MEM_Str))
107b0 3d 3d 4d 45 4d 5f 53 74 72 20 29 7b 0a 20 20 20  ==MEM_Str ){.   
107c0 20 20 20 20 20 20 20 61 70 70 6c 79 4e 75 6d 65         applyNume
107d0 72 69 63 41 66 66 69 6e 69 74 79 28 70 49 6e 33  ricAffinity(pIn3
107e0 2c 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  ,0);.        }. 
107f0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 2f 2a 20       }.      /* 
10800 48 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  Handle the commo
10810 6e 20 63 61 73 65 20 6f 66 20 69 6e 74 65 67 65  n case of intege
10820 72 20 63 6f 6d 70 61 72 69 73 6f 6e 20 68 65 72  r comparison her
10830 65 2c 20 61 73 20 61 6e 0a 20 20 20 20 20 20 2a  e, as an.      *
10840 2a 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 2c 20  * optimization, 
10850 74 6f 20 61 76 6f 69 64 20 61 20 63 61 6c 6c 20  to avoid a call 
10860 74 6f 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d  to sqlite3MemCom
10870 70 61 72 65 28 29 20 2a 2f 0a 20 20 20 20 20 20  pare() */.      
10880 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
10890 20 26 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26   & pIn3->flags &
108a0 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29 7b 0a   MEM_Int)!=0 ){.
108b0 20 20 20 20 20 20 20 20 69 66 28 20 70 49 6e 33          if( pIn3
108c0 2d 3e 75 2e 69 20 3e 20 70 49 6e 31 2d 3e 75 2e  ->u.i > pIn1->u.
108d0 69 20 29 7b 20 72 65 73 20 3d 20 2b 31 3b 20 67  i ){ res = +1; g
108e0 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 20  oto compare_op; 
108f0 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 49  }.        if( pI
10900 6e 33 2d 3e 75 2e 69 20 3c 20 70 49 6e 31 2d 3e  n3->u.i < pIn1->
10910 75 2e 69 20 29 7b 20 72 65 73 20 3d 20 2d 31 3b  u.i ){ res = -1;
10920 20 67 6f 74 6f 20 63 6f 6d 70 61 72 65 5f 6f 70   goto compare_op
10930 3b 20 7d 0a 20 20 20 20 20 20 20 20 72 65 73 20  ; }.        res 
10940 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  = 0;.        got
10950 6f 20 63 6f 6d 70 61 72 65 5f 6f 70 3b 0a 20 20  o compare_op;.  
10960 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 20      }.    }else 
10970 69 66 28 20 61 66 66 69 6e 69 74 79 3d 3d 53 51  if( affinity==SQ
10980 4c 49 54 45 5f 41 46 46 5f 54 45 58 54 20 29 7b  LITE_AFF_TEXT ){
10990 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61 67  .      if( (flag
109a0 73 31 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d 30  s1 & MEM_Str)==0
109b0 20 26 26 20 28 66 6c 61 67 73 31 20 26 20 28 4d   && (flags1 & (M
109c0 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c 29  EM_Int|MEM_Real)
109d0 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )!=0 ){.        
109e0 74 65 73 74 63 61 73 65 28 20 70 49 6e 31 2d 3e  testcase( pIn1->
109f0 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20  flags & MEM_Int 
10a00 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10a10 61 73 65 28 20 70 49 6e 31 2d 3e 66 6c 61 67 73  ase( pIn1->flags
10a20 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a 20   & MEM_Real );. 
10a30 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10a40 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28 70  beMemStringify(p
10a50 49 6e 31 2c 20 65 6e 63 6f 64 69 6e 67 2c 20 31  In1, encoding, 1
10a60 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74 63  );.        testc
10a70 61 73 65 28 20 28 66 6c 61 67 73 31 26 4d 45 4d  ase( (flags1&MEM
10a80 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 31 2d 3e  _Dyn) != (pIn1->
10a90 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20 29  flags&MEM_Dyn) )
10aa0 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73 31  ;.        flags1
10ab0 20 3d 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20   = (pIn1->flags 
10ac0 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b 29  & ~MEM_TypeMask)
10ad0 20 7c 20 28 66 6c 61 67 73 31 20 26 20 4d 45 4d   | (flags1 & MEM
10ae0 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20 20  _TypeMask);.    
10af0 20 20 20 20 61 73 73 65 72 74 28 20 70 49 6e 31      assert( pIn1
10b00 21 3d 70 49 6e 33 20 29 3b 0a 20 20 20 20 20 20  !=pIn3 );.      
10b10 7d 0a 20 20 20 20 20 20 69 66 28 20 28 66 6c 61  }.      if( (fla
10b20 67 73 33 20 26 20 4d 45 4d 5f 53 74 72 29 3d 3d  gs3 & MEM_Str)==
10b30 30 20 26 26 20 28 66 6c 61 67 73 33 20 26 20 28  0 && (flags3 & (
10b40 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
10b50 29 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ))!=0 ){.       
10b60 20 74 65 73 74 63 61 73 65 28 20 70 49 6e 33 2d   testcase( pIn3-
10b70 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
10b80 20 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74   );.        test
10b90 63 61 73 65 28 20 70 49 6e 33 2d 3e 66 6c 61 67  case( pIn3->flag
10ba0 73 20 26 20 4d 45 4d 5f 52 65 61 6c 20 29 3b 0a  s & MEM_Real );.
10bb0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10bc0 64 62 65 4d 65 6d 53 74 72 69 6e 67 69 66 79 28  dbeMemStringify(
10bd0 70 49 6e 33 2c 20 65 6e 63 6f 64 69 6e 67 2c 20  pIn3, encoding, 
10be0 31 29 3b 0a 20 20 20 20 20 20 20 20 74 65 73 74  1);.        test
10bf0 63 61 73 65 28 20 28 66 6c 61 67 73 33 26 4d 45  case( (flags3&ME
10c00 4d 5f 44 79 6e 29 20 21 3d 20 28 70 49 6e 33 2d  M_Dyn) != (pIn3-
10c10 3e 66 6c 61 67 73 26 4d 45 4d 5f 44 79 6e 29 20  >flags&MEM_Dyn) 
10c20 29 3b 0a 20 20 20 20 20 20 20 20 66 6c 61 67 73  );.        flags
10c30 33 20 3d 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73  3 = (pIn3->flags
10c40 20 26 20 7e 4d 45 4d 5f 54 79 70 65 4d 61 73 6b   & ~MEM_TypeMask
10c50 29 20 7c 20 28 66 6c 61 67 73 33 20 26 20 4d 45  ) | (flags3 & ME
10c60 4d 5f 54 79 70 65 4d 61 73 6b 29 3b 0a 20 20 20  M_TypeMask);.   
10c70 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 61     }.    }.    a
10c80 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
10c90 70 65 3d 3d 50 34 5f 43 4f 4c 4c 53 45 51 20 7c  pe==P4_COLLSEQ |
10ca0 7c 20 70 4f 70 2d 3e 70 34 2e 70 43 6f 6c 6c 3d  | pOp->p4.pColl=
10cb0 3d 30 20 29 3b 0a 20 20 20 20 72 65 73 20 3d 20  =0 );.    res = 
10cc0 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d 70 61 72  sqlite3MemCompar
10cd0 65 28 70 49 6e 33 2c 20 70 49 6e 31 2c 20 70 4f  e(pIn3, pIn1, pO
10ce0 70 2d 3e 70 34 2e 70 43 6f 6c 6c 29 3b 0a 20 20  p->p4.pColl);.  
10cf0 7d 0a 63 6f 6d 70 61 72 65 5f 6f 70 3a 0a 20 20  }.compare_op:.  
10d00 73 77 69 74 63 68 28 20 70 4f 70 2d 3e 6f 70 63  switch( pOp->opc
10d10 6f 64 65 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ode ){.    case 
10d20 4f 50 5f 45 71 3a 20 20 20 20 72 65 73 32 20 3d  OP_Eq:    res2 =
10d30 20 72 65 73 3d 3d 30 3b 20 20 20 20 20 62 72 65   res==0;     bre
10d40 61 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 50 5f  ak;.    case OP_
10d50 4e 65 3a 20 20 20 20 72 65 73 32 20 3d 20 72 65  Ne:    res2 = re
10d60 73 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  s;        break;
10d70 0a 20 20 20 20 63 61 73 65 20 4f 50 5f 4c 74 3a  .    case OP_Lt:
10d80 20 20 20 20 72 65 73 32 20 3d 20 72 65 73 3c 30      res2 = res<0
10d90 3b 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  ;      break;.  
10da0 20 20 63 61 73 65 20 4f 50 5f 4c 65 3a 20 20 20    case OP_Le:   
10db0 20 72 65 73 32 20 3d 20 72 65 73 3c 3d 30 3b 20   res2 = res<=0; 
10dc0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
10dd0 61 73 65 20 4f 50 5f 47 74 3a 20 20 20 20 72 65  ase OP_Gt:    re
10de0 73 32 20 3d 20 72 65 73 3e 30 3b 20 20 20 20 20  s2 = res>0;     
10df0 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
10e00 75 6c 74 3a 20 20 20 20 20 20 20 72 65 73 32 20  ult:       res2 
10e10 3d 20 72 65 73 3e 3d 30 3b 20 20 20 20 20 62 72  = res>=0;     br
10e20 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 55  eak;.  }..  /* U
10e30 6e 64 6f 20 61 6e 79 20 63 68 61 6e 67 65 73 20  ndo any changes 
10e40 6d 61 64 65 20 62 79 20 61 70 70 6c 79 41 66 66  made by applyAff
10e50 69 6e 69 74 79 28 29 20 74 6f 20 74 68 65 20 69  inity() to the i
10e60 6e 70 75 74 20 72 65 67 69 73 74 65 72 73 2e 20  nput registers. 
10e70 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 28 70 49  */.  assert( (pI
10e80 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
10e90 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67 73 31 20  Dyn) == (flags1 
10ea0 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b 0a 20 20  & MEM_Dyn) );.  
10eb0 70 49 6e 31 2d 3e 66 6c 61 67 73 20 3d 20 66 6c  pIn1->flags = fl
10ec0 61 67 73 31 3b 0a 20 20 61 73 73 65 72 74 28 20  ags1;.  assert( 
10ed0 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d  (pIn3->flags & M
10ee0 45 4d 5f 44 79 6e 29 20 3d 3d 20 28 66 6c 61 67  EM_Dyn) == (flag
10ef0 73 33 20 26 20 4d 45 4d 5f 44 79 6e 29 20 29 3b  s3 & MEM_Dyn) );
10f00 0a 20 20 70 49 6e 33 2d 3e 66 6c 61 67 73 20 3d  .  pIn3->flags =
10f10 20 66 6c 61 67 73 33 3b 0a 0a 20 20 69 66 28 20   flags3;..  if( 
10f20 70 4f 70 2d 3e 70 35 20 26 20 53 51 4c 49 54 45  pOp->p5 & SQLITE
10f30 5f 53 54 4f 52 45 50 32 20 29 7b 0a 20 20 20 20  _STOREP2 ){.    
10f40 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pOut = &aMem[pOp
10f50 2d 3e 70 32 5d 3b 0a 20 20 20 20 69 43 6f 6d 70  ->p2];.    iComp
10f60 61 72 65 20 3d 20 72 65 73 3b 0a 20 20 20 20 72  are = res;.    r
10f70 65 73 32 20 3d 20 72 65 73 32 21 3d 30 3b 20 20  es2 = res2!=0;  
10f80 2f 2a 20 46 6f 72 20 74 68 69 73 20 70 61 74 68  /* For this path
10f90 20 72 65 73 32 20 6d 75 73 74 20 62 65 20 65 78   res2 must be ex
10fa0 61 63 74 6c 79 20 30 20 6f 72 20 31 20 2a 2f 0a  actly 0 or 1 */.
10fb0 20 20 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35      if( (pOp->p5
10fc0 20 26 20 53 51 4c 49 54 45 5f 4b 45 45 50 4e 55   & SQLITE_KEEPNU
10fd0 4c 4c 29 21 3d 30 20 29 7b 0a 20 20 20 20 20 20  LL)!=0 ){.      
10fe0 2f 2a 20 54 68 65 20 4b 45 45 50 4e 55 4c 4c 20  /* The KEEPNULL 
10ff0 66 6c 61 67 20 70 72 65 76 65 6e 74 73 20 4f 50  flag prevents OP
11000 5f 45 71 20 66 72 6f 6d 20 6f 76 65 72 77 72 69  _Eq from overwri
11010 74 69 6e 67 20 61 20 4e 55 4c 4c 20 77 69 74 68  ting a NULL with
11020 20 31 0a 20 20 20 20 20 20 2a 2a 20 61 6e 64 20   1.      ** and 
11030 70 72 65 76 65 6e 74 73 20 4f 50 5f 4e 65 20 66  prevents OP_Ne f
11040 72 6f 6d 20 6f 76 65 72 77 72 69 74 69 6e 67 20  rom overwriting 
11050 4e 55 4c 4c 20 77 69 74 68 20 30 2e 20 20 54 68  NULL with 0.  Th
11060 69 73 20 66 6c 61 67 0a 20 20 20 20 20 20 2a 2a  is flag.      **
11070 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 69 6e   is only used in
11080 20 63 6f 6e 74 65 78 74 73 20 77 68 65 72 65 20   contexts where 
11090 65 69 74 68 65 72 3a 0a 20 20 20 20 20 20 2a 2a  either:.      **
110a0 20 20 20 28 31 29 20 6f 70 3d 3d 4f 50 5f 45 71     (1) op==OP_Eq
110b0 20 26 26 20 28 72 5b 50 32 5d 3d 3d 4e 55 4c 4c   && (r[P2]==NULL
110c0 20 7c 7c 20 72 5b 50 32 5d 3d 3d 30 29 0a 20 20   || r[P2]==0).  
110d0 20 20 20 20 2a 2a 20 20 20 28 32 29 20 6f 70 3d      **   (2) op=
110e0 3d 4f 50 5f 4e 65 20 26 26 20 28 72 5b 50 32 5d  =OP_Ne && (r[P2]
110f0 3d 3d 4e 55 4c 4c 20 7c 7c 20 72 5b 50 32 5d 3d  ==NULL || r[P2]=
11100 3d 31 29 0a 20 20 20 20 20 20 2a 2a 20 54 68 65  =1).      ** The
11110 72 65 66 6f 72 65 20 69 74 20 69 73 20 6e 6f 74  refore it is not
11120 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63 68   necessary to ch
11130 65 63 6b 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  eck the content 
11140 6f 66 20 72 5b 50 32 5d 20 66 6f 72 0a 20 20 20  of r[P2] for.   
11150 20 20 20 2a 2a 20 4e 55 4c 4c 2e 20 2a 2f 0a 20     ** NULL. */. 
11160 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
11170 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20  ->opcode==OP_Ne 
11180 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d  || pOp->opcode==
11190 4f 50 5f 45 71 20 29 3b 0a 20 20 20 20 20 20 61  OP_Eq );.      a
111a0 73 73 65 72 74 28 20 72 65 73 32 3d 3d 30 20 7c  ssert( res2==0 |
111b0 7c 20 72 65 73 32 3d 3d 31 20 29 3b 0a 20 20 20  | res2==1 );.   
111c0 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65 73     testcase( res
111d0 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f 70 63  2==0 && pOp->opc
111e0 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20 20  ode==OP_Eq );.  
111f0 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72 65      testcase( re
11200 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e 6f 70  s2==1 && pOp->op
11210 63 6f 64 65 3d 3d 4f 50 5f 45 71 20 29 3b 0a 20  code==OP_Eq );. 
11220 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72       testcase( r
11230 65 73 32 3d 3d 30 20 26 26 20 70 4f 70 2d 3e 6f  es2==0 && pOp->o
11240 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b 0a  pcode==OP_Ne );.
11250 20 20 20 20 20 20 74 65 73 74 63 61 73 65 28 20        testcase( 
11260 72 65 73 32 3d 3d 31 20 26 26 20 70 4f 70 2d 3e  res2==1 && pOp->
11270 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4e 65 20 29 3b  opcode==OP_Ne );
11280 0a 20 20 20 20 20 20 69 66 28 20 28 70 4f 70 2d  .      if( (pOp-
11290 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 45 71 29 3d  >opcode==OP_Eq)=
112a0 3d 72 65 73 32 20 29 20 62 72 65 61 6b 3b 0a 20  =res2 ) break;. 
112b0 20 20 20 7d 0a 20 20 20 20 6d 65 6d 41 62 6f 75     }.    memAbou
112c0 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75  tToChange(p, pOu
112d0 74 29 3b 0a 20 20 20 20 4d 65 6d 53 65 74 54 79  t);.    MemSetTy
112e0 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d 45 4d  peFlag(pOut, MEM
112f0 5f 49 6e 74 29 3b 0a 20 20 20 20 70 4f 75 74 2d  _Int);.    pOut-
11300 3e 75 2e 69 20 3d 20 72 65 73 32 3b 0a 20 20 20  >u.i = res2;.   
11310 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28   REGISTER_TRACE(
11320 70 4f 70 2d 3e 70 32 2c 20 70 4f 75 74 29 3b 0a  pOp->p2, pOut);.
11330 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 56 64 62    }else{.    Vdb
11340 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73  eBranchTaken(res
11350 21 3d 30 2c 20 28 70 4f 70 2d 3e 70 35 20 26 20  !=0, (pOp->p5 & 
11360 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 29 3f 32  SQLITE_NULLEQ)?2
11370 3a 33 29 3b 0a 20 20 20 20 69 66 28 20 72 65 73  :3);.    if( res
11380 32 20 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20  2 ){.      goto 
11390 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20  jump_to_p2;.    
113a0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  }.  }.  break;.}
113b0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45 6c 73  ../* Opcode: Els
113c0 65 4e 6f 74 45 71 20 2a 20 50 32 20 2a 20 2a 20  eNotEq * P2 * * 
113d0 2a 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  *.**.** This opc
113e0 6f 64 65 20 6d 75 73 74 20 69 6d 6d 65 64 69 61  ode must immedia
113f0 74 65 6c 79 20 66 6f 6c 6c 6f 77 20 61 6e 20 4f  tely follow an O
11400 50 5f 4c 74 20 6f 72 20 4f 50 5f 47 74 20 63 6f  P_Lt or OP_Gt co
11410 6d 70 61 72 69 73 6f 6e 20 6f 70 65 72 61 74 6f  mparison operato
11420 72 2e 0a 2a 2a 20 49 66 20 72 65 73 75 6c 74 20  r..** If result 
11430 6f 66 20 61 6e 20 4f 50 5f 45 71 20 63 6f 6d 70  of an OP_Eq comp
11440 61 72 69 73 6f 6e 20 6f 6e 20 74 68 65 20 73 61  arison on the sa
11450 6d 65 20 74 77 6f 20 6f 70 65 72 61 6e 64 73 0a  me two operands.
11460 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
11470 20 4e 55 4c 4c 20 6f 72 20 66 61 6c 73 65 20 28   NULL or false (
11480 30 29 2c 20 74 68 65 6e 20 74 68 65 6e 20 6a 75  0), then then ju
11490 6d 70 20 74 6f 20 50 32 2e 20 0a 2a 2a 20 49 66  mp to P2. .** If
114a0 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 20 61   the result of a
114b0 6e 20 4f 50 5f 45 71 20 63 6f 6d 70 61 72 69 73  n OP_Eq comparis
114c0 6f 6e 20 6f 6e 20 74 68 65 20 74 77 6f 20 70 72  on on the two pr
114d0 65 76 69 6f 75 73 20 6f 70 65 72 61 6e 64 73 0a  evious operands.
114e0 2a 2a 20 77 6f 75 6c 64 20 68 61 76 65 20 62 65  ** would have be
114f0 65 6e 20 74 72 75 65 20 28 31 29 2c 20 74 68 65  en true (1), the
11500 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 2e 0a  n fall through..
11510 2a 2f 0a 63 61 73 65 20 4f 50 5f 45 6c 73 65 4e  */.case OP_ElseN
11520 6f 74 45 71 3a 20 7b 20 20 20 20 20 20 20 2f 2a  otEq: {       /*
11530 20 73 61 6d 65 20 61 73 20 54 4b 5f 45 53 43 41   same as TK_ESCA
11540 50 45 2c 20 6a 75 6d 70 20 2a 2f 0a 20 20 61 73  PE, jump */.  as
11550 73 65 72 74 28 20 70 4f 70 3e 61 4f 70 20 29 3b  sert( pOp>aOp );
11560 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 2d  .  assert( pOp[-
11570 31 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4c 74  1].opcode==OP_Lt
11580 20 7c 7c 20 70 4f 70 5b 2d 31 5d 2e 6f 70 63 6f   || pOp[-1].opco
11590 64 65 3d 3d 4f 50 5f 47 74 20 29 3b 0a 20 20 61  de==OP_Gt );.  a
115a0 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 70  ssert( pOp[-1].p
115b0 35 20 26 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  5 & SQLITE_STORE
115c0 50 32 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e  P2 );.  VdbeBran
115d0 63 68 54 61 6b 65 6e 28 69 43 6f 6d 70 61 72 65  chTaken(iCompare
115e0 21 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 69  !=0, 2);.  if( i
115f0 43 6f 6d 70 61 72 65 21 3d 30 20 29 20 67 6f 74  Compare!=0 ) got
11600 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
11610 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20 4f 70  break;.}.../* Op
11620 63 6f 64 65 3a 20 50 65 72 6d 75 74 61 74 69 6f  code: Permutatio
11630 6e 20 2a 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a  n * * * P4 *.**.
11640 2a 2a 20 53 65 74 20 74 68 65 20 70 65 72 6d 75  ** Set the permu
11650 74 61 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74  tation used by t
11660 68 65 20 4f 50 5f 43 6f 6d 70 61 72 65 20 6f 70  he OP_Compare op
11670 65 72 61 74 6f 72 20 74 6f 20 62 65 20 74 68 65  erator to be the
11680 20 61 72 72 61 79 0a 2a 2a 20 6f 66 20 69 6e 74   array.** of int
11690 65 67 65 72 73 20 69 6e 20 50 34 2e 0a 2a 2a 0a  egers in P4..**.
116a0 2a 2a 20 54 68 65 20 70 65 72 6d 75 74 61 74 69  ** The permutati
116b0 6f 6e 20 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64  on is only valid
116c0 20 75 6e 74 69 6c 20 74 68 65 20 6e 65 78 74 20   until the next 
116d0 4f 50 5f 43 6f 6d 70 61 72 65 20 74 68 61 74 20  OP_Compare that 
116e0 68 61 73 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41  has.** the OPFLA
116f0 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
11700 74 20 69 6e 20 50 35 2e 20 54 79 70 69 63 61 6c  t in P5. Typical
11710 6c 79 20 74 68 65 20 4f 50 5f 50 65 72 6d 75 74  ly the OP_Permut
11720 61 74 69 6f 6e 20 73 68 6f 75 6c 64 20 0a 2a 2a  ation should .**
11730 20 6f 63 63 75 72 20 69 6d 6d 65 64 69 61 74 65   occur immediate
11740 6c 79 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20  ly prior to the 
11750 4f 50 5f 43 6f 6d 70 61 72 65 2e 0a 2a 2a 0a 2a  OP_Compare..**.*
11760 2a 20 54 68 65 20 66 69 72 73 74 20 69 6e 74 65  * The first inte
11770 67 65 72 20 69 6e 20 74 68 65 20 50 34 20 69 6e  ger in the P4 in
11780 74 65 67 65 72 20 61 72 72 61 79 20 69 73 20 74  teger array is t
11790 68 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65  he length of the
117a0 20 61 72 72 61 79 0a 2a 2a 20 61 6e 64 20 64 6f   array.** and do
117b0 65 73 20 6e 6f 74 20 62 65 63 6f 6d 65 20 70 61  es not become pa
117c0 72 74 20 6f 66 20 74 68 65 20 70 65 72 6d 75 74  rt of the permut
117d0 61 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ation..*/.case O
117e0 50 5f 50 65 72 6d 75 74 61 74 69 6f 6e 3a 20 7b  P_Permutation: {
117f0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
11800 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e 54 41 52  p4type==P4_INTAR
11810 52 41 59 20 29 3b 0a 20 20 61 73 73 65 72 74 28  RAY );.  assert(
11820 20 70 4f 70 2d 3e 70 34 2e 61 69 20 29 3b 0a 20   pOp->p4.ai );. 
11830 20 61 50 65 72 6d 75 74 65 20 3d 20 70 4f 70 2d   aPermute = pOp-
11840 3e 70 34 2e 61 69 20 2b 20 31 3b 0a 20 20 62 72  >p4.ai + 1;.  br
11850 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
11860 65 3a 20 43 6f 6d 70 61 72 65 20 50 31 20 50 32  e: Compare P1 P2
11870 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e   P3 P4 P5.** Syn
11880 6f 70 73 69 73 3a 20 72 5b 50 31 40 50 33 5d 20  opsis: r[P1@P3] 
11890 3c 2d 3e 20 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a  <-> r[P2@P3].**.
118a0 2a 2a 20 43 6f 6d 70 61 72 65 20 74 77 6f 20 76  ** Compare two v
118b0 65 63 74 6f 72 73 20 6f 66 20 72 65 67 69 73 74  ectors of regist
118c0 65 72 73 20 69 6e 20 72 65 67 28 50 31 29 2e 2e  ers in reg(P1)..
118d0 72 65 67 28 50 31 2b 50 33 2d 31 29 20 28 63 61  reg(P1+P3-1) (ca
118e0 6c 6c 20 74 68 69 73 0a 2a 2a 20 76 65 63 74 6f  ll this.** vecto
118f0 72 20 22 41 22 29 20 61 6e 64 20 69 6e 20 72 65  r "A") and in re
11900 67 28 50 32 29 2e 2e 72 65 67 28 50 32 2b 50 33  g(P2)..reg(P2+P3
11910 2d 31 29 20 28 22 42 22 29 2e 20 20 53 61 76 65  -1) ("B").  Save
11920 20 74 68 65 20 72 65 73 75 6c 74 20 6f 66 0a 2a   the result of.*
11930 2a 20 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * the comparison
11940 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the 
11950 6e 65 78 74 20 4f 50 5f 4a 75 6d 70 20 69 6e 73  next OP_Jump ins
11960 74 72 75 63 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  truct..**.** If 
11970 50 35 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41  P5 has the OPFLA
11980 47 5f 50 45 52 4d 55 54 45 20 62 69 74 20 73 65  G_PERMUTE bit se
11990 74 2c 20 74 68 65 6e 20 74 68 65 20 6f 72 64 65  t, then the orde
119a0 72 20 6f 66 20 63 6f 6d 70 61 72 69 73 6f 6e 20  r of comparison 
119b0 69 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 64  is.** determined
119c0 20 62 79 20 74 68 65 20 6d 6f 73 74 20 72 65 63   by the most rec
119d0 65 6e 74 20 4f 50 5f 50 65 72 6d 75 74 61 74 69  ent OP_Permutati
119e0 6f 6e 20 6f 70 65 72 61 74 6f 72 2e 20 20 49 66  on operator.  If
119f0 20 74 68 65 0a 2a 2a 20 4f 50 46 4c 41 47 5f 50   the.** OPFLAG_P
11a00 45 52 4d 55 54 45 20 62 69 74 20 69 73 20 63 6c  ERMUTE bit is cl
11a10 65 61 72 2c 20 74 68 65 6e 20 72 65 67 69 73 74  ear, then regist
11a20 65 72 20 61 72 65 20 63 6f 6d 70 61 72 65 64 20  er are compared 
11a30 69 6e 20 73 65 71 75 65 6e 74 69 61 6c 0a 2a 2a  in sequential.**
11a40 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 50 34   order..**.** P4
11a50 20 69 73 20 61 20 4b 65 79 49 6e 66 6f 20 73 74   is a KeyInfo st
11a60 72 75 63 74 75 72 65 20 74 68 61 74 20 64 65 66  ructure that def
11a70 69 6e 65 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73  ines collating s
11a80 65 71 75 65 6e 63 65 73 20 61 6e 64 20 73 6f 72  equences and sor
11a90 74 0a 2a 2a 20 6f 72 64 65 72 73 20 66 6f 72 20  t.** orders for 
11aa0 74 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  the comparison. 
11ab0 20 54 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e   The permutation
11ac0 20 61 70 70 6c 69 65 73 20 74 6f 20 72 65 67 69   applies to regi
11ad0 73 74 65 72 73 0a 2a 2a 20 6f 6e 6c 79 2e 20 20  sters.** only.  
11ae0 54 68 65 20 4b 65 79 49 6e 66 6f 20 65 6c 65 6d  The KeyInfo elem
11af0 65 6e 74 73 20 61 72 65 20 75 73 65 64 20 73 65  ents are used se
11b00 71 75 65 6e 74 69 61 6c 6c 79 2e 0a 2a 2a 0a 2a  quentially..**.*
11b10 2a 20 54 68 65 20 63 6f 6d 70 61 72 69 73 6f 6e  * The comparison
11b20 20 69 73 20 61 20 73 6f 72 74 20 63 6f 6d 70 61   is a sort compa
11b30 72 69 73 6f 6e 2c 20 73 6f 20 4e 55 4c 4c 73 20  rison, so NULLs 
11b40 63 6f 6d 70 61 72 65 20 65 71 75 61 6c 2c 0a 2a  compare equal,.*
11b50 2a 20 4e 55 4c 4c 73 20 61 72 65 20 6c 65 73 73  * NULLs are less
11b60 20 74 68 61 6e 20 6e 75 6d 62 65 72 73 2c 20 6e   than numbers, n
11b70 75 6d 62 65 72 73 20 61 72 65 20 6c 65 73 73 20  umbers are less 
11b80 74 68 61 6e 20 73 74 72 69 6e 67 73 2c 0a 2a 2a  than strings,.**
11b90 20 61 6e 64 20 73 74 72 69 6e 67 73 20 61 72 65   and strings are
11ba0 20 6c 65 73 73 20 74 68 61 6e 20 62 6c 6f 62 73   less than blobs
11bb0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 6f 6d  ..*/.case OP_Com
11bc0 70 61 72 65 3a 20 7b 0a 20 20 69 6e 74 20 6e 3b  pare: {.  int n;
11bd0 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 6e 74 20  .  int i;.  int 
11be0 70 31 3b 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20  p1;.  int p2;.  
11bf0 63 6f 6e 73 74 20 4b 65 79 49 6e 66 6f 20 2a 70  const KeyInfo *p
11c00 4b 65 79 49 6e 66 6f 3b 0a 20 20 69 6e 74 20 69  KeyInfo;.  int i
11c10 64 78 3b 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70  dx;.  CollSeq *p
11c20 43 6f 6c 6c 3b 20 20 20 20 2f 2a 20 43 6f 6c 6c  Coll;    /* Coll
11c30 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 74  ating sequence t
11c40 6f 20 75 73 65 20 6f 6e 20 74 68 69 73 20 74 65  o use on this te
11c50 72 6d 20 2a 2f 0a 20 20 69 6e 74 20 62 52 65 76  rm */.  int bRev
11c60 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72  ;          /* Tr
11c70 75 65 20 66 6f 72 20 44 45 53 43 45 4e 44 49 4e  ue for DESCENDIN
11c80 47 20 73 6f 72 74 20 6f 72 64 65 72 20 2a 2f 0a  G sort order */.
11c90 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 70 35 20  .  if( (pOp->p5 
11ca0 26 20 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45  & OPFLAG_PERMUTE
11cb0 29 3d 3d 30 20 29 20 61 50 65 72 6d 75 74 65 20  )==0 ) aPermute 
11cc0 3d 20 30 3b 0a 20 20 6e 20 3d 20 70 4f 70 2d 3e  = 0;.  n = pOp->
11cd0 70 33 3b 0a 20 20 70 4b 65 79 49 6e 66 6f 20 3d  p3;.  pKeyInfo =
11ce0 20 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66   pOp->p4.pKeyInf
11cf0 6f 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3e 30  o;.  assert( n>0
11d00 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4b   );.  assert( pK
11d10 65 79 49 6e 66 6f 21 3d 30 20 29 3b 0a 20 20 70  eyInfo!=0 );.  p
11d20 31 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 70  1 = pOp->p1;.  p
11d30 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 23 69 66  2 = pOp->p2;.#if
11d40 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
11d50 69 66 28 20 61 50 65 72 6d 75 74 65 20 29 7b 0a  if( aPermute ){.
11d60 20 20 20 20 69 6e 74 20 6b 2c 20 6d 78 20 3d 20      int k, mx = 
11d70 30 3b 0a 20 20 20 20 66 6f 72 28 6b 3d 30 3b 20  0;.    for(k=0; 
11d80 6b 3c 6e 3b 20 6b 2b 2b 29 20 69 66 28 20 61 50  k<n; k++) if( aP
11d90 65 72 6d 75 74 65 5b 6b 5d 3e 6d 78 20 29 20 6d  ermute[k]>mx ) m
11da0 78 20 3d 20 61 50 65 72 6d 75 74 65 5b 6b 5d 3b  x = aPermute[k];
11db0 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 31 3e  .    assert( p1>
11dc0 30 20 26 26 20 70 31 2b 6d 78 3c 3d 28 70 2d 3e  0 && p1+mx<=(p->
11dd0 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72  nMem+1 - p->nCur
11de0 73 6f 72 29 2b 31 20 29 3b 0a 20 20 20 20 61 73  sor)+1 );.    as
11df0 73 65 72 74 28 20 70 32 3e 30 20 26 26 20 70 32  sert( p2>0 && p2
11e00 2b 6d 78 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20  +mx<=(p->nMem+1 
11e10 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31 20  - p->nCursor)+1 
11e20 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
11e30 61 73 73 65 72 74 28 20 70 31 3e 30 20 26 26 20  assert( p1>0 && 
11e40 70 31 2b 6e 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  p1+n<=(p->nMem+1
11e50 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
11e60 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
11e70 70 32 3e 30 20 26 26 20 70 32 2b 6e 3c 3d 28 70  p2>0 && p2+n<=(p
11e80 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43  ->nMem+1 - p->nC
11e90 75 72 73 6f 72 29 2b 31 20 29 3b 0a 20 20 7d 0a  ursor)+1 );.  }.
11ea0 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11eb0 5f 44 45 42 55 47 20 2a 2f 0a 20 20 66 6f 72 28  _DEBUG */.  for(
11ec0 69 3d 30 3b 20 69 3c 6e 3b 20 69 2b 2b 29 7b 0a  i=0; i<n; i++){.
11ed0 20 20 20 20 69 64 78 20 3d 20 61 50 65 72 6d 75      idx = aPermu
11ee0 74 65 20 3f 20 61 50 65 72 6d 75 74 65 5b 69 5d  te ? aPermute[i]
11ef0 20 3a 20 69 3b 0a 20 20 20 20 61 73 73 65 72 74   : i;.    assert
11f00 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 26 61 4d  ( memIsValid(&aM
11f10 65 6d 5b 70 31 2b 69 64 78 5d 29 20 29 3b 0a 20  em[p1+idx]) );. 
11f20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73     assert( memIs
11f30 56 61 6c 69 64 28 26 61 4d 65 6d 5b 70 32 2b 69  Valid(&aMem[p2+i
11f40 64 78 5d 29 20 29 3b 0a 20 20 20 20 52 45 47 49  dx]) );.    REGI
11f50 53 54 45 52 5f 54 52 41 43 45 28 70 31 2b 69 64  STER_TRACE(p1+id
11f60 78 2c 20 26 61 4d 65 6d 5b 70 31 2b 69 64 78 5d  x, &aMem[p1+idx]
11f70 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52 5f  );.    REGISTER_
11f80 54 52 41 43 45 28 70 32 2b 69 64 78 2c 20 26 61  TRACE(p2+idx, &a
11f90 4d 65 6d 5b 70 32 2b 69 64 78 5d 29 3b 0a 20 20  Mem[p2+idx]);.  
11fa0 20 20 61 73 73 65 72 74 28 20 69 3c 70 4b 65 79    assert( i<pKey
11fb0 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 20 29 3b 0a  Info->nField );.
11fc0 20 20 20 20 70 43 6f 6c 6c 20 3d 20 70 4b 65 79      pColl = pKey
11fd0 49 6e 66 6f 2d 3e 61 43 6f 6c 6c 5b 69 5d 3b 0a  Info->aColl[i];.
11fe0 20 20 20 20 62 52 65 76 20 3d 20 70 4b 65 79 49      bRev = pKeyI
11ff0 6e 66 6f 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b  nfo->aSortOrder[
12000 69 5d 3b 0a 20 20 20 20 69 43 6f 6d 70 61 72 65  i];.    iCompare
12010 20 3d 20 73 71 6c 69 74 65 33 4d 65 6d 43 6f 6d   = sqlite3MemCom
12020 70 61 72 65 28 26 61 4d 65 6d 5b 70 31 2b 69 64  pare(&aMem[p1+id
12030 78 5d 2c 20 26 61 4d 65 6d 5b 70 32 2b 69 64 78  x], &aMem[p2+idx
12040 5d 2c 20 70 43 6f 6c 6c 29 3b 0a 20 20 20 20 69  ], pColl);.    i
12050 66 28 20 69 43 6f 6d 70 61 72 65 20 29 7b 0a 20  f( iCompare ){. 
12060 20 20 20 20 20 69 66 28 20 62 52 65 76 20 29 20       if( bRev ) 
12070 69 43 6f 6d 70 61 72 65 20 3d 20 2d 69 43 6f 6d  iCompare = -iCom
12080 70 61 72 65 3b 0a 20 20 20 20 20 20 62 72 65 61  pare;.      brea
12090 6b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 61  k;.    }.  }.  a
120a0 50 65 72 6d 75 74 65 20 3d 20 30 3b 0a 20 20 62  Permute = 0;.  b
120b0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
120c0 64 65 3a 20 4a 75 6d 70 20 50 31 20 50 32 20 50  de: Jump P1 P2 P
120d0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
120e0 20 74 6f 20 74 68 65 20 69 6e 73 74 72 75 63 74   to the instruct
120f0 69 6f 6e 20 61 74 20 61 64 64 72 65 73 73 20 50  ion at address P
12100 31 2c 20 50 32 2c 20 6f 72 20 50 33 20 64 65 70  1, P2, or P3 dep
12110 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65  ending on whethe
12120 72 0a 2a 2a 20 69 6e 20 74 68 65 20 6d 6f 73 74  r.** in the most
12130 20 72 65 63 65 6e 74 20 4f 50 5f 43 6f 6d 70 61   recent OP_Compa
12140 72 65 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74  re instruction t
12150 68 65 20 50 31 20 76 65 63 74 6f 72 20 77 61 73  he P1 vector was
12160 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 65 71   less than.** eq
12170 75 61 6c 20 74 6f 2c 20 6f 72 20 67 72 65 61 74  ual to, or great
12180 65 72 20 74 68 61 6e 20 74 68 65 20 50 32 20 76  er than the P2 v
12190 65 63 74 6f 72 2c 20 72 65 73 70 65 63 74 69 76  ector, respectiv
121a0 65 6c 79 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  ely..*/.case OP_
121b0 4a 75 6d 70 3a 20 7b 20 20 20 20 20 20 20 20 20  Jump: {         
121c0 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20      /* jump */. 
121d0 20 69 66 28 20 69 43 6f 6d 70 61 72 65 3c 30 20   if( iCompare<0 
121e0 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63  ){.    VdbeBranc
121f0 68 54 61 6b 65 6e 28 30 2c 33 29 3b 20 70 4f 70  hTaken(0,3); pOp
12200 20 3d 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 31 20   = &aOp[pOp->p1 
12210 2d 20 31 5d 3b 0a 20 20 7d 65 6c 73 65 20 69 66  - 1];.  }else if
12220 28 20 69 43 6f 6d 70 61 72 65 3d 3d 30 20 29 7b  ( iCompare==0 ){
12230 0a 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54  .    VdbeBranchT
12240 61 6b 65 6e 28 31 2c 33 29 3b 20 70 4f 70 20 3d  aken(1,3); pOp =
12250 20 26 61 4f 70 5b 70 4f 70 2d 3e 70 32 20 2d 20   &aOp[pOp->p2 - 
12260 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20  1];.  }else{.   
12270 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
12280 28 32 2c 33 29 3b 20 70 4f 70 20 3d 20 26 61 4f  (2,3); pOp = &aO
12290 70 5b 70 4f 70 2d 3e 70 33 20 2d 20 31 5d 3b 0a  p[pOp->p3 - 1];.
122a0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
122b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 6e 64 20 50  /* Opcode: And P
122c0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
122d0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
122e0 72 5b 50 31 5d 20 26 26 20 72 5b 50 32 5d 29 0a  r[P1] && r[P2]).
122f0 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12300 6f 67 69 63 61 6c 20 41 4e 44 20 6f 66 20 74 68  ogical AND of th
12310 65 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69  e values in regi
12320 73 74 65 72 73 20 50 31 20 61 6e 64 20 50 32 20  sters P1 and P2 
12330 61 6e 64 0a 2a 2a 20 77 72 69 74 65 20 74 68 65  and.** write the
12340 20 72 65 73 75 6c 74 20 69 6e 74 6f 20 72 65 67   result into reg
12350 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20  ister P3..**.** 
12360 49 66 20 65 69 74 68 65 72 20 50 31 20 6f 72 20  If either P1 or 
12370 50 32 20 69 73 20 30 20 28 66 61 6c 73 65 29 20  P2 is 0 (false) 
12380 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74 20  then the result 
12390 69 73 20 30 20 65 76 65 6e 20 69 66 0a 2a 2a 20  is 0 even if.** 
123a0 74 68 65 20 6f 74 68 65 72 20 69 6e 70 75 74 20  the other input 
123b0 69 73 20 4e 55 4c 4c 2e 20 20 41 20 4e 55 4c 4c  is NULL.  A NULL
123c0 20 61 6e 64 20 74 72 75 65 20 6f 72 20 74 77 6f   and true or two
123d0 20 4e 55 4c 4c 73 20 67 69 76 65 0a 2a 2a 20 61   NULLs give.** a
123e0 20 4e 55 4c 4c 20 6f 75 74 70 75 74 2e 0a 2a 2f   NULL output..*/
123f0 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f 72 20 50  ./* Opcode: Or P
12400 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
12410 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 28  ynopsis: r[P3]=(
12420 72 5b 50 31 5d 20 7c 7c 20 72 5b 50 32 5d 29 0a  r[P1] || r[P2]).
12430 2a 2a 0a 2a 2a 20 54 61 6b 65 20 74 68 65 20 6c  **.** Take the l
12440 6f 67 69 63 61 6c 20 4f 52 20 6f 66 20 74 68 65  ogical OR of the
12450 20 76 61 6c 75 65 73 20 69 6e 20 72 65 67 69 73   values in regis
12460 74 65 72 20 50 31 20 61 6e 64 20 50 32 20 61 6e  ter P1 and P2 an
12470 64 0a 2a 2a 20 73 74 6f 72 65 20 74 68 65 20 61  d.** store the a
12480 6e 73 77 65 72 20 69 6e 20 72 65 67 69 73 74 65  nswer in registe
12490 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65  r P3..**.** If e
124a0 69 74 68 65 72 20 50 31 20 6f 72 20 50 32 20 69  ither P1 or P2 i
124b0 73 20 6e 6f 6e 7a 65 72 6f 20 28 74 72 75 65 29  s nonzero (true)
124c0 20 74 68 65 6e 20 74 68 65 20 72 65 73 75 6c 74   then the result
124d0 20 69 73 20 31 20 28 74 72 75 65 29 0a 2a 2a 20   is 1 (true).** 
124e0 65 76 65 6e 20 69 66 20 74 68 65 20 6f 74 68 65  even if the othe
124f0 72 20 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e  r input is NULL.
12500 20 20 41 20 4e 55 4c 4c 20 61 6e 64 20 66 61 6c    A NULL and fal
12510 73 65 20 6f 72 20 74 77 6f 20 4e 55 4c 4c 73 0a  se or two NULLs.
12520 2a 2a 20 67 69 76 65 20 61 20 4e 55 4c 4c 20 6f  ** give a NULL o
12530 75 74 70 75 74 2e 0a 2a 2f 0a 63 61 73 65 20 4f  utput..*/.case O
12540 50 5f 41 6e 64 3a 20 20 20 20 20 20 20 20 20 20  P_And:          
12550 20 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54      /* same as T
12560 4b 5f 41 4e 44 2c 20 69 6e 31 2c 20 69 6e 32 2c  K_AND, in1, in2,
12570 20 6f 75 74 33 20 2a 2f 0a 63 61 73 65 20 4f 50   out3 */.case OP
12580 5f 4f 72 3a 20 7b 20 20 20 20 20 20 20 20 20 20  _Or: {          
12590 20 20 20 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b     /* same as TK
125a0 5f 4f 52 2c 20 69 6e 31 2c 20 69 6e 32 2c 20 6f  _OR, in1, in2, o
125b0 75 74 33 20 2a 2f 0a 20 20 69 6e 74 20 76 31 3b  ut3 */.  int v1;
125c0 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 70 65 72      /* Left oper
125d0 61 6e 64 3a 20 20 30 3d 3d 46 41 4c 53 45 2c 20  and:  0==FALSE, 
125e0 31 3d 3d 54 52 55 45 2c 20 32 3d 3d 55 4e 4b 4e  1==TRUE, 2==UNKN
125f0 4f 57 4e 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20  OWN or NULL */. 
12600 20 69 6e 74 20 76 32 3b 20 20 20 20 2f 2a 20 52   int v2;    /* R
12610 69 67 68 74 20 6f 70 65 72 61 6e 64 3a 20 30 3d  ight operand: 0=
12620 3d 46 41 4c 53 45 2c 20 31 3d 3d 54 52 55 45 2c  =FALSE, 1==TRUE,
12630 20 32 3d 3d 55 4e 4b 4e 4f 57 4e 20 6f 72 20 4e   2==UNKNOWN or N
12640 55 4c 4c 20 2a 2f 0a 0a 20 20 70 49 6e 31 20 3d  ULL */..  pIn1 =
12650 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b   &aMem[pOp->p1];
12660 0a 20 20 69 66 28 20 70 49 6e 31 2d 3e 66 6c 61  .  if( pIn1->fla
12670 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29 7b  gs & MEM_Null ){
12680 0a 20 20 20 20 76 31 20 3d 20 32 3b 0a 20 20 7d  .    v1 = 2;.  }
12690 65 6c 73 65 7b 0a 20 20 20 20 76 31 20 3d 20 73  else{.    v1 = s
126a0 71 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c  qlite3VdbeIntVal
126b0 75 65 28 70 49 6e 31 29 21 3d 30 3b 0a 20 20 7d  ue(pIn1)!=0;.  }
126c0 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d 5b  .  pIn2 = &aMem[
126d0 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 69 66 28 20  pOp->p2];.  if( 
126e0 70 49 6e 32 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn2->flags & ME
126f0 4d 5f 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 76 32  M_Null ){.    v2
12700 20 3d 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20   = 2;.  }else{. 
12710 20 20 20 76 32 20 3d 20 73 71 6c 69 74 65 33 56     v2 = sqlite3V
12720 64 62 65 49 6e 74 56 61 6c 75 65 28 70 49 6e 32  dbeIntValue(pIn2
12730 29 21 3d 30 3b 0a 20 20 7d 0a 20 20 69 66 28 20  )!=0;.  }.  if( 
12740 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
12750 41 6e 64 20 29 7b 0a 20 20 20 20 73 74 61 74 69  And ){.    stati
12760 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  c const unsigned
12770 20 63 68 61 72 20 61 6e 64 5f 6c 6f 67 69 63 5b   char and_logic[
12780 5d 20 3d 20 7b 20 30 2c 20 30 2c 20 30 2c 20 30  ] = { 0, 0, 0, 0
12790 2c 20 31 2c 20 32 2c 20 30 2c 20 32 2c 20 32 20  , 1, 2, 0, 2, 2 
127a0 7d 3b 0a 20 20 20 20 76 31 20 3d 20 61 6e 64 5f  };.    v1 = and_
127b0 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
127c0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 73 74 61    }else{.    sta
127d0 74 69 63 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  tic const unsign
127e0 65 64 20 63 68 61 72 20 6f 72 5f 6c 6f 67 69 63  ed char or_logic
127f0 5b 5d 20 3d 20 7b 20 30 2c 20 31 2c 20 32 2c 20  [] = { 0, 1, 2, 
12800 31 2c 20 31 2c 20 31 2c 20 32 2c 20 31 2c 20 32  1, 1, 1, 2, 1, 2
12810 20 7d 3b 0a 20 20 20 20 76 31 20 3d 20 6f 72 5f   };.    v1 = or_
12820 6c 6f 67 69 63 5b 76 31 2a 33 2b 76 32 5d 3b 0a  logic[v1*3+v2];.
12830 20 20 7d 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d    }.  pOut = &aM
12840 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 69  em[pOp->p3];.  i
12850 66 28 20 76 31 3d 3d 32 20 29 7b 0a 20 20 20 20  f( v1==2 ){.    
12860 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28 70  MemSetTypeFlag(p
12870 4f 75 74 2c 20 4d 45 4d 5f 4e 75 6c 6c 29 3b 0a  Out, MEM_Null);.
12880 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 4f 75    }else{.    pOu
12890 74 2d 3e 75 2e 69 20 3d 20 76 31 3b 0a 20 20 20  t->u.i = v1;.   
128a0 20 4d 65 6d 53 65 74 54 79 70 65 46 6c 61 67 28   MemSetTypeFlag(
128b0 70 4f 75 74 2c 20 4d 45 4d 5f 49 6e 74 29 3b 0a  pOut, MEM_Int);.
128c0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a    }.  break;.}..
128d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 6f 74 20 50  /* Opcode: Not P
128e0 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79  1 P2 * * *.** Sy
128f0 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 20 21  nopsis: r[P2]= !
12900 72 5b 50 31 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65  r[P1].**.** Inte
12910 72 70 72 65 74 20 74 68 65 20 76 61 6c 75 65 20  rpret the value 
12920 69 6e 20 72 65 67 69 73 74 65 72 20 50 31 20 61  in register P1 a
12930 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75  s a boolean valu
12940 65 2e 20 20 53 74 6f 72 65 20 74 68 65 0a 2a 2a  e.  Store the.**
12950 20 62 6f 6f 6c 65 61 6e 20 63 6f 6d 70 6c 65 6d   boolean complem
12960 65 6e 74 20 69 6e 20 72 65 67 69 73 74 65 72 20  ent in register 
12970 50 32 2e 20 20 49 66 20 74 68 65 20 76 61 6c 75  P2.  If the valu
12980 65 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 31  e in register P1
12990 20 69 73 20 0a 2a 2a 20 4e 55 4c 4c 2c 20 74 68   is .** NULL, th
129a0 65 6e 20 61 20 4e 55 4c 4c 20 69 73 20 73 74 6f  en a NULL is sto
129b0 72 65 64 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63 61  red in P2..*/.ca
129c0 73 65 20 4f 50 5f 4e 6f 74 3a 20 7b 20 20 20 20  se OP_Not: {    
129d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73              /* s
129e0 61 6d 65 20 61 73 20 54 4b 5f 4e 4f 54 2c 20 69  ame as TK_NOT, i
129f0 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a 20 20 70 49  n1, out2 */.  pI
12a00 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
12a10 70 31 5d 3b 0a 20 20 70 4f 75 74 20 3d 20 26 61  p1];.  pOut = &a
12a20 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20  Mem[pOp->p2];.  
12a30 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65  sqlite3VdbeMemSe
12a40 74 4e 75 6c 6c 28 70 4f 75 74 29 3b 0a 20 20 69  tNull(pOut);.  i
12a50 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20  f( (pIn1->flags 
12a60 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29  & MEM_Null)==0 )
12a70 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  {.    pOut->flag
12a80 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
12a90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 21 73 71   pOut->u.i = !sq
12aa0 6c 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75  lite3VdbeIntValu
12ab0 65 28 70 49 6e 31 29 3b 0a 20 20 7d 0a 20 20 62  e(pIn1);.  }.  b
12ac0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
12ad0 64 65 3a 20 42 69 74 4e 6f 74 20 50 31 20 50 32  de: BitNot P1 P2
12ae0 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73   * * *.** Synops
12af0 69 73 3a 20 72 5b 50 31 5d 3d 20 7e 72 5b 50 31  is: r[P1]= ~r[P1
12b00 5d 0a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65  ].**.** Interpre
12b10 74 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  t the content of
12b20 20 72 65 67 69 73 74 65 72 20 50 31 20 61 73 20   register P1 as 
12b30 61 6e 20 69 6e 74 65 67 65 72 2e 20 20 53 74 6f  an integer.  Sto
12b40 72 65 20 74 68 65 0a 2a 2a 20 6f 6e 65 73 2d 63  re the.** ones-c
12b50 6f 6d 70 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65  omplement of the
12b60 20 50 31 20 76 61 6c 75 65 20 69 6e 74 6f 20 72   P1 value into r
12b70 65 67 69 73 74 65 72 20 50 32 2e 20 20 49 66 20  egister P2.  If 
12b80 50 31 20 68 6f 6c 64 73 0a 2a 2a 20 61 20 4e 55  P1 holds.** a NU
12b90 4c 4c 20 74 68 65 6e 20 73 74 6f 72 65 20 61 20  LL then store a 
12ba0 4e 55 4c 4c 20 69 6e 20 50 32 2e 0a 2a 2f 0a 63  NULL in P2..*/.c
12bb0 61 73 65 20 4f 50 5f 42 69 74 4e 6f 74 3a 20 7b  ase OP_BitNot: {
12bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
12bd0 73 61 6d 65 20 61 73 20 54 4b 5f 42 49 54 4e 4f  same as TK_BITNO
12be0 54 2c 20 69 6e 31 2c 20 6f 75 74 32 20 2a 2f 0a  T, in1, out2 */.
12bf0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
12c00 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 4f 75 74 20  Op->p1];.  pOut 
12c10 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d  = &aMem[pOp->p2]
12c20 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d  ;.  sqlite3VdbeM
12c30 65 6d 53 65 74 4e 75 6c 6c 28 70 4f 75 74 29 3b  emSetNull(pOut);
12c40 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c  .  if( (pIn1->fl
12c50 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 3d  ags & MEM_Null)=
12c60 3d 30 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e  =0 ){.    pOut->
12c70 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b  flags = MEM_Int;
12c80 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
12c90 20 7e 73 71 6c 69 74 65 33 56 64 62 65 49 6e 74   ~sqlite3VdbeInt
12ca0 56 61 6c 75 65 28 70 49 6e 31 29 3b 0a 20 20 7d  Value(pIn1);.  }
12cb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
12cc0 4f 70 63 6f 64 65 3a 20 4f 6e 63 65 20 50 31 20  Opcode: Once P1 
12cd0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 49  P2 * * *.**.** I
12ce0 66 20 74 68 65 20 50 31 20 76 61 6c 75 65 20 69  f the P1 value i
12cf0 73 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 50  s equal to the P
12d00 31 20 76 61 6c 75 65 20 6f 6e 20 74 68 65 20 4f  1 value on the O
12d10 50 5f 49 6e 69 74 20 6f 70 63 6f 64 65 20 61 74  P_Init opcode at
12d20 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  .** instruction 
12d30 30 2c 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20  0, then jump to 
12d40 50 32 2e 20 20 49 66 20 74 68 65 20 74 77 6f 20  P2.  If the two 
12d50 50 31 20 76 61 6c 75 65 73 20 64 69 66 66 65 72  P1 values differ
12d60 2c 20 74 68 65 6e 0a 2a 2a 20 73 65 74 20 74 68  , then.** set th
12d70 65 20 50 31 20 76 61 6c 75 65 20 6f 6e 20 74 68  e P1 value on th
12d80 69 73 20 6f 70 63 6f 64 65 20 74 6f 20 65 71 75  is opcode to equ
12d90 61 6c 20 74 68 65 20 50 31 20 76 61 6c 75 65 20  al the P1 value 
12da0 6f 6e 20 74 68 65 20 4f 50 5f 49 6e 69 74 0a 2a  on the OP_Init.*
12db0 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
12dc0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f  gh..*/.case OP_O
12dd0 6e 63 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nce: {          
12de0 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
12df0 61 73 73 65 72 74 28 20 70 2d 3e 61 4f 70 5b 30  assert( p->aOp[0
12e00 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 69  ].opcode==OP_Ini
12e10 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
12e20 68 54 61 6b 65 6e 28 70 2d 3e 61 4f 70 5b 30 5d  hTaken(p->aOp[0]
12e30 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 2c 20 32 29  .p1==pOp->p1, 2)
12e40 3b 0a 20 20 69 66 28 20 70 2d 3e 61 4f 70 5b 30  ;.  if( p->aOp[0
12e50 5d 2e 70 31 3d 3d 70 4f 70 2d 3e 70 31 20 29 7b  ].p1==pOp->p1 ){
12e60 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  .    goto jump_t
12e70 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
12e80 20 20 20 70 4f 70 2d 3e 70 31 20 3d 20 70 2d 3e     pOp->p1 = p->
12e90 61 4f 70 5b 30 5d 2e 70 31 3b 0a 20 20 7d 0a 20  aOp[0].p1;.  }. 
12ea0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
12eb0 63 6f 64 65 3a 20 49 66 20 50 31 20 50 32 20 50  code: If P1 P2 P
12ec0 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4a 75 6d 70  3 * *.**.** Jump
12ed0 20 74 6f 20 50 32 20 69 66 20 74 68 65 20 76 61   to P2 if the va
12ee0 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  lue in register 
12ef0 50 31 20 69 73 20 74 72 75 65 2e 20 20 54 68 65  P1 is true.  The
12f00 20 76 61 6c 75 65 0a 2a 2a 20 69 73 20 63 6f 6e   value.** is con
12f10 73 69 64 65 72 65 64 20 74 72 75 65 20 69 66 20  sidered true if 
12f20 69 74 20 69 73 20 6e 75 6d 65 72 69 63 20 61 6e  it is numeric an
12f30 64 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 49 66 20  d non-zero.  If 
12f40 74 68 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20  the value.** in 
12f50 50 31 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20  P1 is NULL then 
12f60 74 61 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66  take the jump if
12f70 20 61 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20   and only if P3 
12f80 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a  is non-zero..*/.
12f90 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f 74  /* Opcode: IfNot
12fa0 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
12fb0 0a 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69  .** Jump to P2 i
12fc0 66 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72  f the value in r
12fd0 65 67 69 73 74 65 72 20 50 31 20 69 73 20 46 61  egister P1 is Fa
12fe0 6c 73 65 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  lse.  The value.
12ff0 2a 2a 20 69 73 20 63 6f 6e 73 69 64 65 72 65 64  ** is considered
13000 20 66 61 6c 73 65 20 69 66 20 69 74 20 68 61 73   false if it has
13010 20 61 20 6e 75 6d 65 72 69 63 20 76 61 6c 75 65   a numeric value
13020 20 6f 66 20 7a 65 72 6f 2e 20 20 49 66 20 74 68   of zero.  If th
13030 65 20 76 61 6c 75 65 0a 2a 2a 20 69 6e 20 50 31  e value.** in P1
13040 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e 20 74 61   is NULL then ta
13050 6b 65 20 74 68 65 20 6a 75 6d 70 20 69 66 20 61  ke the jump if a
13060 6e 64 20 6f 6e 6c 79 20 69 66 20 50 33 20 69 73  nd only if P3 is
13070 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a 2a 2f 0a 63 61   non-zero..*/.ca
13080 73 65 20 4f 50 5f 49 66 3a 20 20 20 20 20 20 20  se OP_If:       
13090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d            /* jum
130a0 70 2c 20 69 6e 31 20 2a 2f 0a 63 61 73 65 20 4f  p, in1 */.case O
130b0 50 5f 49 66 4e 6f 74 3a 20 7b 20 20 20 20 20 20  P_IfNot: {      
130c0 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69        /* jump, i
130d0 6e 31 20 2a 2f 0a 20 20 69 6e 74 20 63 3b 0a 20  n1 */.  int c;. 
130e0 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn1 = &aMem[pO
130f0 70 2d 3e 70 31 5d 3b 0a 20 20 69 66 28 20 70 49  p->p1];.  if( pI
13100 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n1->flags & MEM_
13110 4e 75 6c 6c 20 29 7b 0a 20 20 20 20 63 20 3d 20  Null ){.    c = 
13120 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 65 6c 73 65  pOp->p3;.  }else
13130 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  {.#ifdef SQLITE_
13140 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f  OMIT_FLOATING_PO
13150 49 4e 54 0a 20 20 20 20 63 20 3d 20 73 71 6c 69  INT.    c = sqli
13160 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65 28  te3VdbeIntValue(
13170 70 49 6e 31 29 21 3d 30 3b 0a 23 65 6c 73 65 0a  pIn1)!=0;.#else.
13180 20 20 20 20 63 20 3d 20 73 71 6c 69 74 65 33 56      c = sqlite3V
13190 64 62 65 52 65 61 6c 56 61 6c 75 65 28 70 49 6e  dbeRealValue(pIn
131a0 31 29 21 3d 30 2e 30 3b 0a 23 65 6e 64 69 66 0a  1)!=0.0;.#endif.
131b0 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63      if( pOp->opc
131c0 6f 64 65 3d 3d 4f 50 5f 49 66 4e 6f 74 20 29 20  ode==OP_IfNot ) 
131d0 63 20 3d 20 21 63 3b 0a 20 20 7d 0a 20 20 56 64  c = !c;.  }.  Vd
131e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 63 21  beBranchTaken(c!
131f0 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 63 20  =0, 2);.  if( c 
13200 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70  ){.    goto jump
13210 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
13220 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
13230 65 3a 20 49 73 4e 75 6c 6c 20 50 31 20 50 32 20  e: IsNull P1 P2 
13240 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69  * * *.** Synopsi
13250 73 3a 20 69 66 20 72 5b 50 31 5d 3d 3d 4e 55 4c  s: if r[P1]==NUL
13260 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20  L goto P2.**.** 
13270 4a 75 6d 70 20 74 6f 20 50 32 20 69 66 20 74 68  Jump to P2 if th
13280 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
13290 74 65 72 20 50 31 20 69 73 20 4e 55 4c 4c 2e 0a  ter P1 is NULL..
132a0 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 73 4e 75 6c  */.case OP_IsNul
132b0 6c 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  l: {            
132c0 2f 2a 20 73 61 6d 65 20 61 73 20 54 4b 5f 49 53  /* same as TK_IS
132d0 4e 55 4c 4c 2c 20 6a 75 6d 70 2c 20 69 6e 31 20  NULL, jump, in1 
132e0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
132f0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 56 64  m[pOp->p1];.  Vd
13300 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 20 28  beBranchTaken( (
13310 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20 4d 45  pIn1->flags & ME
13320 4d 5f 4e 75 6c 6c 29 21 3d 30 2c 20 32 29 3b 0a  M_Null)!=0, 2);.
13330 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61    if( (pIn1->fla
13340 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 29 21 3d  gs & MEM_Null)!=
13350 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
13360 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
13370 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
13380 6f 64 65 3a 20 4e 6f 74 4e 75 6c 6c 20 50 31 20  ode: NotNull P1 
13390 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f  P2 * * *.** Syno
133a0 70 73 69 73 3a 20 69 66 20 72 5b 50 31 5d 21 3d  psis: if r[P1]!=
133b0 4e 55 4c 4c 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  NULL goto P2.**.
133c0 2a 2a 20 4a 75 6d 70 20 74 6f 20 50 32 20 69 66  ** Jump to P2 if
133d0 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
133e0 67 69 73 74 65 72 20 50 31 20 69 73 20 6e 6f 74  gister P1 is not
133f0 20 4e 55 4c 4c 2e 20 20 0a 2a 2f 0a 63 61 73 65   NULL.  .*/.case
13400 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 3a 20 7b 20 20   OP_NotNull: {  
13410 20 20 20 20 20 20 20 20 20 20 2f 2a 20 73 61 6d            /* sam
13420 65 20 61 73 20 54 4b 5f 4e 4f 54 4e 55 4c 4c 2c  e as TK_NOTNULL,
13430 20 6a 75 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20   jump, in1 */.  
13440 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  pIn1 = &aMem[pOp
13450 2d 3e 70 31 5d 3b 0a 20 20 56 64 62 65 42 72 61  ->p1];.  VdbeBra
13460 6e 63 68 54 61 6b 65 6e 28 20 28 70 49 6e 31 2d  nchTaken( (pIn1-
13470 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c  >flags & MEM_Nul
13480 6c 29 3d 3d 30 2c 20 32 29 3b 0a 20 20 69 66 28  l)==0, 2);.  if(
13490 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73 20 26 20   (pIn1->flags & 
134a0 4d 45 4d 5f 4e 75 6c 6c 29 3d 3d 30 20 29 7b 0a  MEM_Null)==0 ){.
134b0 20 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f      goto jump_to
134c0 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  _p2;.  }.  break
134d0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
134e0 43 6f 6c 75 6d 6e 20 50 31 20 50 32 20 50 33 20  Column P1 P2 P3 
134f0 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
13500 73 3a 20 72 5b 50 33 5d 3d 50 58 0a 2a 2a 0a 2a  s: r[P3]=PX.**.*
13510 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
13520 64 61 74 61 20 74 68 61 74 20 63 75 72 73 6f 72  data that cursor
13530 20 50 31 20 70 6f 69 6e 74 73 20 74 6f 20 61 73   P1 points to as
13540 20 61 20 73 74 72 75 63 74 75 72 65 20 62 75 69   a structure bui
13550 6c 74 20 75 73 69 6e 67 0a 2a 2a 20 74 68 65 20  lt using.** the 
13560 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
13570 75 63 74 69 6f 6e 2e 20 20 28 53 65 65 20 74 68  uction.  (See th
13580 65 20 4d 61 6b 65 52 65 63 6f 72 64 20 6f 70 63  e MakeRecord opc
13590 6f 64 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e  ode for addition
135a0 61 6c 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f  al.** informatio
135b0 6e 20 61 62 6f 75 74 20 74 68 65 20 66 6f 72 6d  n about the form
135c0 61 74 20 6f 66 20 74 68 65 20 64 61 74 61 2e 29  at of the data.)
135d0 20 20 45 78 74 72 61 63 74 20 74 68 65 20 50 32    Extract the P2
135e0 2d 74 68 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 66 72  -th column.** fr
135f0 6f 6d 20 74 68 69 73 20 72 65 63 6f 72 64 2e 20  om this record. 
13600 20 49 66 20 74 68 65 72 65 20 61 72 65 20 6c 65   If there are le
13610 73 73 20 74 68 61 74 20 28 50 32 2b 31 29 20 0a  ss that (P2+1) .
13620 2a 2a 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65  ** values in the
13630 20 72 65 63 6f 72 64 2c 20 65 78 74 72 61 63 74   record, extract
13640 20 61 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 54   a NULL..**.** T
13650 68 65 20 76 61 6c 75 65 20 65 78 74 72 61 63 74  he value extract
13660 65 64 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  ed is stored in 
13670 72 65 67 69 73 74 65 72 20 50 33 2e 0a 2a 2a 0a  register P3..**.
13680 2a 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e  ** If the column
13690 20 63 6f 6e 74 61 69 6e 73 20 66 65 77 65 72 20   contains fewer 
136a0 74 68 61 6e 20 50 32 20 66 69 65 6c 64 73 2c 20  than P2 fields, 
136b0 74 68 65 6e 20 65 78 74 72 61 63 74 20 61 20 4e  then extract a N
136c0 55 4c 4c 2e 20 20 4f 72 2c 0a 2a 2a 20 69 66 20  ULL.  Or,.** if 
136d0 74 68 65 20 50 34 20 61 72 67 75 6d 65 6e 74 20  the P4 argument 
136e0 69 73 20 61 20 50 34 5f 4d 45 4d 20 75 73 65 20  is a P4_MEM use 
136f0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
13700 20 50 34 20 61 72 67 75 6d 65 6e 74 20 61 73 0a   P4 argument as.
13710 2a 2a 20 74 68 65 20 72 65 73 75 6c 74 2e 0a 2a  ** the result..*
13720 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c  *.** If the OPFL
13730 41 47 5f 43 4c 45 41 52 43 41 43 48 45 20 62 69  AG_CLEARCACHE bi
13740 74 20 69 73 20 73 65 74 20 6f 6e 20 50 35 20 61  t is set on P5 a
13750 6e 64 20 50 31 20 69 73 20 61 20 70 73 65 75 64  nd P1 is a pseud
13760 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f 72 2c 0a  o-table cursor,.
13770 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 61 63 68  ** then the cach
13780 65 20 6f 66 20 74 68 65 20 63 75 72 73 6f 72 20  e of the cursor 
13790 69 73 20 72 65 73 65 74 20 70 72 69 6f 72 20 74  is reset prior t
137a0 6f 20 65 78 74 72 61 63 74 69 6e 67 20 74 68 65  o extracting the
137b0 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 54 68 65 20   column..** The 
137c0 66 69 72 73 74 20 4f 50 5f 43 6f 6c 75 6d 6e 20  first OP_Column 
137d0 61 67 61 69 6e 73 74 20 61 20 70 73 65 75 64 6f  against a pseudo
137e0 2d 74 61 62 6c 65 20 61 66 74 65 72 20 74 68 65  -table after the
137f0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
13800 6e 74 65 6e 74 0a 2a 2a 20 72 65 67 69 73 74 65  ntent.** registe
13810 72 20 68 61 73 20 63 68 61 6e 67 65 64 20 73 68  r has changed sh
13820 6f 75 6c 64 20 68 61 76 65 20 74 68 69 73 20 62  ould have this b
13830 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 49 66  it set..**.** If
13840 20 74 68 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47   the OPFLAG_LENG
13850 54 48 41 52 47 20 61 6e 64 20 4f 50 46 4c 41 47  THARG and OPFLAG
13860 5f 54 59 50 45 4f 46 41 52 47 20 62 69 74 73 20  _TYPEOFARG bits 
13870 61 72 65 20 73 65 74 20 6f 6e 20 50 35 20 77 68  are set on P5 wh
13880 65 6e 0a 2a 2a 20 74 68 65 20 72 65 73 75 6c 74  en.** the result
13890 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 20 74   is guaranteed t
138a0 6f 20 6f 6e 6c 79 20 62 65 20 75 73 65 64 20 61  o only be used a
138b0 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 6f  s the argument o
138c0 66 20 61 20 6c 65 6e 67 74 68 28 29 0a 2a 2a 20  f a length().** 
138d0 6f 72 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63  or typeof() func
138e0 74 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  tion, respective
138f0 6c 79 2e 20 20 54 68 65 20 6c 6f 61 64 69 6e 67  ly.  The loading
13900 20 6f 66 20 6c 61 72 67 65 20 62 6c 6f 62 73 20   of large blobs 
13910 63 61 6e 20 62 65 0a 2a 2a 20 73 6b 69 70 70 65  can be.** skippe
13920 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 61  d for length() a
13930 6e 64 20 61 6c 6c 20 63 6f 6e 74 65 6e 74 20 6c  nd all content l
13940 6f 61 64 69 6e 67 20 63 61 6e 20 62 65 20 73 6b  oading can be sk
13950 69 70 70 65 64 20 66 6f 72 20 74 79 70 65 6f 66  ipped for typeof
13960 28 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43  ()..*/.case OP_C
13970 6f 6c 75 6d 6e 3a 20 7b 0a 20 20 69 6e 74 20 70  olumn: {.  int p
13980 32 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  2;            /*
13990 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 74   column number t
139a0 6f 20 72 65 74 72 69 65 76 65 20 2a 2f 0a 20 20  o retrieve */.  
139b0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20  VdbeCursor *pC; 
139c0 20 20 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63     /* The VDBE c
139d0 75 72 73 6f 72 20 2a 2f 0a 20 20 42 74 43 75 72  ursor */.  BtCur
139e0 73 6f 72 20 2a 70 43 72 73 72 3b 20 20 20 2f 2a  sor *pCrsr;   /*
139f0 20 54 68 65 20 42 54 72 65 65 20 63 75 72 73 6f   The BTree curso
13a00 72 20 2a 2f 0a 20 20 75 33 32 20 2a 61 4f 66 66  r */.  u32 *aOff
13a10 73 65 74 3b 20 20 20 20 20 20 2f 2a 20 61 4f 66  set;      /* aOf
13a20 66 73 65 74 5b 69 5d 20 69 73 20 6f 66 66 73 65  fset[i] is offse
13a30 74 20 74 6f 20 73 74 61 72 74 20 6f 66 20 64 61  t to start of da
13a40 74 61 20 66 6f 72 20 69 2d 74 68 20 63 6f 6c 75  ta for i-th colu
13a50 6d 6e 20 2a 2f 0a 20 20 69 6e 74 20 6c 65 6e 3b  mn */.  int len;
13a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
13a70 65 20 6c 65 6e 67 74 68 20 6f 66 20 74 68 65 20  e length of the 
13a80 73 65 72 69 61 6c 69 7a 65 64 20 64 61 74 61 20  serialized data 
13a90 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 2a  for the column *
13aa0 2f 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20  /.  int i;      
13ab0 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
13ac0 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 4d 65 6d 20  ounter */.  Mem 
13ad0 2a 70 44 65 73 74 3b 20 20 20 20 20 20 20 20 2f  *pDest;        /
13ae0 2a 20 57 68 65 72 65 20 74 6f 20 77 72 69 74 65  * Where to write
13af0 20 74 68 65 20 65 78 74 72 61 63 74 65 64 20 76   the extracted v
13b00 61 6c 75 65 20 2a 2f 0a 20 20 4d 65 6d 20 73 4d  alue */.  Mem sM
13b10 65 6d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  em;          /* 
13b20 46 6f 72 20 73 74 6f 72 69 6e 67 20 74 68 65 20  For storing the 
13b30 72 65 63 6f 72 64 20 62 65 69 6e 67 20 64 65 63  record being dec
13b40 6f 64 65 64 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  oded */.  const 
13b50 75 38 20 2a 7a 44 61 74 61 3b 20 20 20 2f 2a 20  u8 *zData;   /* 
13b60 50 61 72 74 20 6f 66 20 74 68 65 20 72 65 63 6f  Part of the reco
13b70 72 64 20 62 65 69 6e 67 20 64 65 63 6f 64 65 64  rd being decoded
13b80 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 75 38 20 2a   */.  const u8 *
13b90 7a 48 64 72 3b 20 20 20 20 2f 2a 20 4e 65 78 74  zHdr;    /* Next
13ba0 20 75 6e 70 61 72 73 65 64 20 62 79 74 65 20 6f   unparsed byte o
13bb0 66 20 74 68 65 20 68 65 61 64 65 72 20 2a 2f 0a  f the header */.
13bc0 20 20 63 6f 6e 73 74 20 75 38 20 2a 7a 45 6e 64    const u8 *zEnd
13bd0 48 64 72 3b 20 2f 2a 20 50 6f 69 6e 74 65 72 20  Hdr; /* Pointer 
13be0 74 6f 20 66 69 72 73 74 20 62 79 74 65 20 61 66  to first byte af
13bf0 74 65 72 20 74 68 65 20 68 65 61 64 65 72 20 2a  ter the header *
13c00 2f 0a 20 20 75 33 32 20 6f 66 66 73 65 74 3b 20  /.  u32 offset; 
13c10 20 20 20 20 20 20 20 2f 2a 20 4f 66 66 73 65 74         /* Offset
13c20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 2a   into the data *
13c30 2f 0a 20 20 75 36 34 20 6f 66 66 73 65 74 36 34  /.  u64 offset64
13c40 3b 20 20 20 20 20 20 2f 2a 20 36 34 2d 62 69 74  ;      /* 64-bit
13c50 20 6f 66 66 73 65 74 20 2a 2f 0a 20 20 75 33 32   offset */.  u32
13c60 20 61 76 61 69 6c 3b 20 20 20 20 20 20 20 20 20   avail;         
13c70 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74  /* Number of byt
13c80 65 73 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  es of available 
13c90 64 61 74 61 20 2a 2f 0a 20 20 75 33 32 20 74 3b  data */.  u32 t;
13ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
13cb0 41 20 74 79 70 65 20 63 6f 64 65 20 66 72 6f 6d  A type code from
13cc0 20 74 68 65 20 72 65 63 6f 72 64 20 68 65 61 64   the record head
13cd0 65 72 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52 65  er */.  Mem *pRe
13ce0 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 50 73  g;         /* Ps
13cf0 65 75 64 6f 54 61 62 6c 65 20 69 6e 70 75 74 20  eudoTable input 
13d00 72 65 67 69 73 74 65 72 20 2a 2f 0a 0a 20 20 70  register */..  p
13d10 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  C = p->apCsr[pOp
13d20 2d 3e 70 31 5d 3b 0a 20 20 70 32 20 3d 20 70 4f  ->p1];.  p2 = pO
13d30 70 2d 3e 70 32 3b 0a 0a 20 20 2f 2a 20 49 66 20  p->p2;..  /* If 
13d40 74 68 65 20 63 75 72 73 6f 72 20 63 61 63 68 65  the cursor cache
13d50 20 69 73 20 73 74 61 6c 65 2c 20 62 72 69 6e 67   is stale, bring
13d60 20 69 74 20 75 70 2d 74 6f 2d 64 61 74 65 20 2a   it up-to-date *
13d70 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
13d80 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
13d90 28 26 70 43 2c 20 26 70 32 29 3b 0a 20 20 69 66  (&pC, &p2);.  if
13da0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
13db0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
13dc0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
13dd0 70 33 3e 30 20 26 26 20 70 4f 70 2d 3e 70 33 3c  p3>0 && pOp->p3<
13de0 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d  =(p->nMem+1 - p-
13df0 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20 20 70  >nCursor) );.  p
13e00 44 65 73 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  Dest = &aMem[pOp
13e10 2d 3e 70 33 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75  ->p3];.  memAbou
13e20 74 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 44 65  tToChange(p, pDe
13e30 73 74 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  st);.  assert( p
13e40 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
13e50 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
13e60 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  );.  assert( pC!
13e70 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
13e80 70 32 3c 70 43 2d 3e 6e 46 69 65 6c 64 20 29 3b  p2<pC->nField );
13e90 0a 20 20 61 4f 66 66 73 65 74 20 3d 20 70 43 2d  .  aOffset = pC-
13ea0 3e 61 4f 66 66 73 65 74 3b 0a 20 20 61 73 73 65  >aOffset;.  asse
13eb0 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65  rt( pC->eCurType
13ec0 21 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29  !=CURTYPE_VTAB )
13ed0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
13ee0 65 43 75 72 54 79 70 65 21 3d 43 55 52 54 59 50  eCurType!=CURTYP
13ef0 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70 43 2d 3e  E_PSEUDO || pC->
13f00 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20 61 73 73  nullRow );.  ass
13f10 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
13f20 65 21 3d 43 55 52 54 59 50 45 5f 53 4f 52 54 45  e!=CURTYPE_SORTE
13f30 52 20 29 3b 0a 0a 20 20 69 66 28 20 70 43 2d 3e  R );..  if( pC->
13f40 63 61 63 68 65 53 74 61 74 75 73 21 3d 70 2d 3e  cacheStatus!=p->
13f50 63 61 63 68 65 43 74 72 20 29 7b 20 20 20 20 20  cacheCtr ){     
13f60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 4f 50 54             /*OPT
13f70 49 4d 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c  IMIZATION-IF-FAL
13f80 53 45 2a 2f 0a 20 20 20 20 69 66 28 20 70 43 2d  SE*/.    if( pC-
13f90 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20 20  >nullRow ){.    
13fa0 20 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79    if( pC->eCurTy
13fb0 70 65 3d 3d 43 55 52 54 59 50 45 5f 50 53 45 55  pe==CURTYPE_PSEU
13fc0 44 4f 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73  DO ){.        as
13fd0 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 73 65  sert( pC->uc.pse
13fe0 75 64 6f 54 61 62 6c 65 52 65 67 3e 30 20 29 3b  udoTableReg>0 );
13ff0 0a 20 20 20 20 20 20 20 20 70 52 65 67 20 3d 20  .        pReg = 
14000 26 61 4d 65 6d 5b 70 43 2d 3e 75 63 2e 70 73 65  &aMem[pC->uc.pse
14010 75 64 6f 54 61 62 6c 65 52 65 67 5d 3b 0a 20 20  udoTableReg];.  
14020 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 52        assert( pR
14030 65 67 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  eg->flags & MEM_
14040 42 6c 6f 62 20 29 3b 0a 20 20 20 20 20 20 20 20  Blob );.        
14050 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
14060 69 64 28 70 52 65 67 29 20 29 3b 0a 20 20 20 20  id(pReg) );.    
14070 20 20 20 20 70 43 2d 3e 70 61 79 6c 6f 61 64 53      pC->payloadS
14080 69 7a 65 20 3d 20 70 43 2d 3e 73 7a 52 6f 77 20  ize = pC->szRow 
14090 3d 20 61 76 61 69 6c 20 3d 20 70 52 65 67 2d 3e  = avail = pReg->
140a0 6e 3b 0a 20 20 20 20 20 20 20 20 70 43 2d 3e 61  n;.        pC->a
140b0 52 6f 77 20 3d 20 28 75 38 2a 29 70 52 65 67 2d  Row = (u8*)pReg-
140c0 3e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  >z;.      }else{
140d0 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
140e0 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70  VdbeMemSetNull(p
140f0 44 65 73 74 29 3b 0a 20 20 20 20 20 20 20 20 67  Dest);.        g
14100 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75  oto op_column_ou
14110 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
14120 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 43 72 73  else{.      pCrs
14130 72 20 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  r = pC->uc.pCurs
14140 6f 72 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74  or;.      assert
14150 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
14160 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
14170 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
14180 43 72 73 72 20 29 3b 0a 20 20 20 20 20 20 61 73  Crsr );.      as
14190 73 65 72 74 28 20 73 71 6c 69 74 65 33 42 74 72  sert( sqlite3Btr
141a0 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69 64 28  eeCursorIsValid(
141b0 70 43 72 73 72 29 20 29 3b 0a 20 20 20 20 20 20  pCrsr) );.      
141c0 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a 65 20  pC->payloadSize 
141d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
141e0 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72 29  yloadSize(pCrsr)
141f0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 61 52 6f 77  ;.      pC->aRow
14200 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
14210 61 79 6c 6f 61 64 46 65 74 63 68 28 70 43 72 73  ayloadFetch(pCrs
14220 72 2c 20 26 61 76 61 69 6c 29 3b 0a 20 20 20 20  r, &avail);.    
14230 20 20 61 73 73 65 72 74 28 20 61 76 61 69 6c 3c    assert( avail<
14240 3d 36 35 35 33 36 20 29 3b 20 20 2f 2a 20 4d 61  =65536 );  /* Ma
14250 78 69 6d 75 6d 20 70 61 67 65 20 73 69 7a 65 20  ximum page size 
14260 69 73 20 36 34 4b 69 42 20 2a 2f 0a 20 20 20 20  is 64KiB */.    
14270 20 20 69 66 28 20 70 43 2d 3e 70 61 79 6c 6f 61    if( pC->payloa
14280 64 53 69 7a 65 20 3c 3d 20 28 75 33 32 29 61 76  dSize <= (u32)av
14290 61 69 6c 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ail ){.        p
142a0 43 2d 3e 73 7a 52 6f 77 20 3d 20 70 43 2d 3e 70  C->szRow = pC->p
142b0 61 79 6c 6f 61 64 53 69 7a 65 3b 0a 20 20 20 20  ayloadSize;.    
142c0 20 20 7d 65 6c 73 65 20 69 66 28 20 70 43 2d 3e    }else if( pC->
142d0 70 61 79 6c 6f 61 64 53 69 7a 65 20 3e 20 28 75  payloadSize > (u
142e0 33 32 29 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51  32)db->aLimit[SQ
142f0 4c 49 54 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54  LITE_LIMIT_LENGT
14300 48 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 67 6f  H] ){.        go
14310 74 6f 20 74 6f 6f 5f 62 69 67 3b 0a 20 20 20 20  to too_big;.    
14320 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
14330 20 70 43 2d 3e 73 7a 52 6f 77 20 3d 20 61 76 61   pC->szRow = ava
14340 69 6c 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  il;.      }.    
14350 7d 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53  }.    pC->cacheS
14360 74 61 74 75 73 20 3d 20 70 2d 3e 63 61 63 68 65  tatus = p->cache
14370 43 74 72 3b 0a 20 20 20 20 70 43 2d 3e 69 48 64  Ctr;.    pC->iHd
14380 72 4f 66 66 73 65 74 20 3d 20 67 65 74 56 61 72  rOffset = getVar
14390 69 6e 74 33 32 28 70 43 2d 3e 61 52 6f 77 2c 20  int32(pC->aRow, 
143a0 6f 66 66 73 65 74 29 3b 0a 20 20 20 20 70 43 2d  offset);.    pC-
143b0 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 30 3b  >nHdrParsed = 0;
143c0 0a 20 20 20 20 61 4f 66 66 73 65 74 5b 30 5d 20  .    aOffset[0] 
143d0 3d 20 6f 66 66 73 65 74 3b 0a 0a 0a 20 20 20 20  = offset;...    
143e0 69 66 28 20 61 76 61 69 6c 3c 6f 66 66 73 65 74  if( avail<offset
143f0 20 29 7b 20 20 20 20 20 20 2f 2a 4f 50 54 49 4d   ){      /*OPTIM
14400 49 5a 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45  IZATION-IF-FALSE
14410 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 70 43 2d 3e  */.      /* pC->
14420 61 52 6f 77 20 64 6f 65 73 20 6e 6f 74 20 68 61  aRow does not ha
14430 76 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 65  ve to hold the e
14440 6e 74 69 72 65 20 72 6f 77 2c 20 62 75 74 20 69  ntire row, but i
14450 74 20 64 6f 65 73 20 61 74 20 6c 65 61 73 74 0a  t does at least.
14460 20 20 20 20 20 20 2a 2a 20 6e 65 65 64 20 74 6f        ** need to
14470 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64 65   cover the heade
14480 72 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 2e  r of the record.
14490 20 20 49 66 20 70 43 2d 3e 61 52 6f 77 20 64 6f    If pC->aRow do
144a0 65 73 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 0a 20  es not contain. 
144b0 20 20 20 20 20 2a 2a 20 74 68 65 20 63 6f 6d 70       ** the comp
144c0 6c 65 74 65 20 68 65 61 64 65 72 2c 20 74 68 65  lete header, the
144d0 6e 20 73 65 74 20 69 74 20 74 6f 20 7a 65 72 6f  n set it to zero
144e0 2c 20 66 6f 72 63 69 6e 67 20 74 68 65 20 68 65  , forcing the he
144f0 61 64 65 72 20 74 6f 20 62 65 0a 20 20 20 20 20  ader to be.     
14500 20 2a 2a 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   ** dynamically 
14510 61 6c 6c 6f 63 61 74 65 64 2e 20 2a 2f 0a 20 20  allocated. */.  
14520 20 20 20 20 70 43 2d 3e 61 52 6f 77 20 3d 20 30      pC->aRow = 0
14530 3b 0a 20 20 20 20 20 20 70 43 2d 3e 73 7a 52 6f  ;.      pC->szRo
14540 77 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 2f 2a  w = 0;..      /*
14550 20 4d 61 6b 65 20 73 75 72 65 20 61 20 63 6f 72   Make sure a cor
14560 72 75 70 74 20 64 61 74 61 62 61 73 65 20 68 61  rupt database ha
14570 73 20 6e 6f 74 20 67 69 76 65 6e 20 75 73 20 61  s not given us a
14580 6e 20 6f 76 65 72 73 69 7a 65 20 68 65 61 64 65  n oversize heade
14590 72 2e 0a 20 20 20 20 20 20 2a 2a 20 44 6f 20 74  r..      ** Do t
145a0 68 69 73 20 6e 6f 77 20 74 6f 20 61 76 6f 69 64  his now to avoid
145b0 20 61 6e 20 6f 76 65 72 73 69 7a 65 20 6d 65 6d   an oversize mem
145c0 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 0a  ory allocation..
145d0 20 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a        **.      *
145e0 2a 20 54 79 70 65 20 65 6e 74 72 69 65 73 20 63  * Type entries c
145f0 61 6e 20 62 65 20 62 65 74 77 65 65 6e 20 31 20  an be between 1 
14600 61 6e 64 20 35 20 62 79 74 65 73 20 65 61 63 68  and 5 bytes each
14610 2e 20 20 42 75 74 20 34 20 61 6e 64 20 35 20 62  .  But 4 and 5 b
14620 79 74 65 0a 20 20 20 20 20 20 2a 2a 20 74 79 70  yte.      ** typ
14630 65 73 20 75 73 65 20 73 6f 20 6d 75 63 68 20 64  es use so much d
14640 61 74 61 20 73 70 61 63 65 20 74 68 61 74 20 74  ata space that t
14650 68 65 72 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  here can only be
14660 20 34 30 39 36 20 61 6e 64 20 33 32 20 6f 66 0a   4096 and 32 of.
14670 20 20 20 20 20 20 2a 2a 20 74 68 65 6d 2c 20 72        ** them, r
14680 65 73 70 65 63 74 69 76 65 6c 79 2e 20 20 53 6f  espectively.  So
14690 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 68 65 61   the maximum hea
146a0 64 65 72 20 6c 65 6e 67 74 68 20 72 65 73 75 6c  der length resul
146b0 74 73 20 66 72 6f 6d 20 61 0a 20 20 20 20 20 20  ts from a.      
146c0 2a 2a 20 33 2d 62 79 74 65 20 74 79 70 65 20 66  ** 3-byte type f
146d0 6f 72 20 65 61 63 68 20 6f 66 20 74 68 65 20 6d  or each of the m
146e0 61 78 69 6d 75 6d 20 6f 66 20 33 32 37 36 38 20  aximum of 32768 
146f0 63 6f 6c 75 6d 6e 73 20 70 6c 75 73 20 74 68 72  columns plus thr
14700 65 65 0a 20 20 20 20 20 20 2a 2a 20 65 78 74 72  ee.      ** extr
14710 61 20 62 79 74 65 73 20 66 6f 72 20 74 68 65 20  a bytes for the 
14720 68 65 61 64 65 72 20 6c 65 6e 67 74 68 20 69 74  header length it
14730 73 65 6c 66 2e 20 20 33 32 37 36 38 2a 33 20 2b  self.  32768*3 +
14740 20 33 20 3d 20 39 38 33 30 37 2e 0a 20 20 20 20   3 = 98307..    
14750 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 6f    */.      if( o
14760 66 66 73 65 74 20 3e 20 39 38 33 30 37 20 7c 7c  ffset > 98307 ||
14770 20 6f 66 66 73 65 74 20 3e 20 70 43 2d 3e 70 61   offset > pC->pa
14780 79 6c 6f 61 64 53 69 7a 65 20 29 7b 0a 20 20 20  yloadSize ){.   
14790 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
147a0 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20  _CORRUPT_BKPT;. 
147b0 20 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72         goto abor
147c0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
147d0 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
147e0 65 20 69 66 28 20 6f 66 66 73 65 74 3e 30 20 29  e if( offset>0 )
147f0 7b 20 2f 2a 4f 50 54 49 4d 49 5a 41 54 49 4f 4e  { /*OPTIMIZATION
14800 2d 49 46 2d 54 52 55 45 2a 2f 0a 20 20 20 20 20  -IF-TRUE*/.     
14810 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
14820 67 20 67 6f 74 6f 20 69 73 20 61 6e 20 6f 70 74  g goto is an opt
14830 69 6d 69 7a 61 74 69 6f 6e 2e 20 20 49 74 20 63  imization.  It c
14840 61 6e 20 62 65 20 6f 6d 69 74 74 65 64 20 61 6e  an be omitted an
14850 64 0a 20 20 20 20 20 20 2a 2a 20 65 76 65 72 79  d.      ** every
14860 74 68 69 6e 67 20 77 69 6c 6c 20 73 74 69 6c 6c  thing will still
14870 20 77 6f 72 6b 2e 20 20 42 75 74 20 4f 50 5f 43   work.  But OP_C
14880 6f 6c 75 6d 6e 20 69 73 20 6d 65 61 73 75 72 61  olumn is measura
14890 62 6c 79 20 66 61 73 74 65 72 0a 20 20 20 20 20  bly faster.     
148a0 20 2a 2a 20 62 79 20 73 6b 69 70 70 69 6e 67 20   ** by skipping 
148b0 74 68 65 20 73 75 62 73 65 71 75 65 6e 74 20 63  the subsequent c
148c0 6f 6e 64 69 74 69 6f 6e 61 6c 2c 20 77 68 69 63  onditional, whic
148d0 68 20 69 73 20 61 6c 77 61 79 73 20 74 72 75 65  h is always true
148e0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
148f0 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
14900 77 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  w;.      assert(
14910 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64 3c   pC->nHdrParsed<
14920 3d 70 32 20 29 3b 20 20 20 20 20 20 20 20 20 2f  =p2 );         /
14930 2a 20 43 6f 6e 64 69 74 69 6f 6e 61 6c 20 73 6b  * Conditional sk
14940 69 70 70 65 64 20 2a 2f 0a 20 20 20 20 20 20 67  ipped */.      g
14950 6f 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 72 65  oto op_column_re
14960 61 64 5f 68 65 61 64 65 72 3b 0a 20 20 20 20 7d  ad_header;.    }
14970 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20  .  }..  /* Make 
14980 73 75 72 65 20 61 74 20 6c 65 61 73 74 20 74 68  sure at least th
14990 65 20 66 69 72 73 74 20 70 32 2b 31 20 65 6e 74  e first p2+1 ent
149a0 72 69 65 73 20 6f 66 20 74 68 65 20 68 65 61 64  ries of the head
149b0 65 72 20 68 61 76 65 20 62 65 65 6e 0a 20 20 2a  er have been.  *
149c0 2a 20 70 61 72 73 65 64 20 61 6e 64 20 76 61 6c  * parsed and val
149d0 69 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  id information i
149e0 73 20 69 6e 20 61 4f 66 66 73 65 74 5b 5d 20 61  s in aOffset[] a
149f0 6e 64 20 70 43 2d 3e 61 54 79 70 65 5b 5d 2e 0a  nd pC->aType[]..
14a00 20 20 2a 2f 0a 20 20 69 66 28 20 70 43 2d 3e 6e    */.  if( pC->n
14a10 48 64 72 50 61 72 73 65 64 3c 3d 70 32 20 29 7b  HdrParsed<=p2 ){
14a20 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72 65  .    /* If there
14a30 20 69 73 20 6d 6f 72 65 20 68 65 61 64 65 72 20   is more header 
14a40 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 70 61  available for pa
14a50 72 73 69 6e 67 20 69 6e 20 74 68 65 20 72 65 63  rsing in the rec
14a60 6f 72 64 2c 20 74 72 79 0a 20 20 20 20 2a 2a 20  ord, try.    ** 
14a70 74 6f 20 65 78 74 72 61 63 74 20 61 64 64 69 74  to extract addit
14a80 69 6f 6e 61 6c 20 66 69 65 6c 64 73 20 75 70 20  ional fields up 
14a90 74 68 72 6f 75 67 68 20 74 68 65 20 70 32 2b 31  through the p2+1
14aa0 2d 74 68 20 66 69 65 6c 64 20 0a 20 20 20 20 2a  -th field .    *
14ab0 2f 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 69 48  /.    if( pC->iH
14ac0 64 72 4f 66 66 73 65 74 3c 61 4f 66 66 73 65 74  drOffset<aOffset
14ad0 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  [0] ){.      /* 
14ae0 4d 61 6b 65 20 73 75 72 65 20 7a 44 61 74 61 20  Make sure zData 
14af0 70 6f 69 6e 74 73 20 74 6f 20 65 6e 6f 75 67 68  points to enough
14b00 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
14b10 6f 20 63 6f 76 65 72 20 74 68 65 20 68 65 61 64  o cover the head
14b20 65 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  er. */.      if(
14b30 20 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 7b 0a   pC->aRow==0 ){.
14b40 20 20 20 20 20 20 20 20 6d 65 6d 73 65 74 28 26          memset(&
14b50 73 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28  sMem, 0, sizeof(
14b60 73 4d 65 6d 29 29 3b 0a 20 20 20 20 20 20 20 20  sMem));.        
14b70 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
14b80 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43 2d  MemFromBtree(pC-
14b90 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 30 2c 20  >uc.pCursor, 0, 
14ba0 61 4f 66 66 73 65 74 5b 30 5d 2c 20 26 73 4d 65  aOffset[0], &sMe
14bb0 6d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  m);.        if( 
14bc0 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20  rc!=SQLITE_OK ) 
14bd0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
14be0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20  o_error;.       
14bf0 20 7a 44 61 74 61 20 3d 20 28 75 38 2a 29 73 4d   zData = (u8*)sM
14c00 65 6d 2e 7a 3b 0a 20 20 20 20 20 20 7d 65 6c 73  em.z;.      }els
14c10 65 7b 0a 20 20 20 20 20 20 20 20 7a 44 61 74 61  e{.        zData
14c20 20 3d 20 70 43 2d 3e 61 52 6f 77 3b 0a 20 20 20   = pC->aRow;.   
14c30 20 20 20 7d 0a 20 20 0a 20 20 20 20 20 20 2f 2a     }.  .      /*
14c40 20 46 69 6c 6c 20 69 6e 20 70 43 2d 3e 61 54 79   Fill in pC->aTy
14c50 70 65 5b 69 5d 20 61 6e 64 20 61 4f 66 66 73 65  pe[i] and aOffse
14c60 74 5b 69 5d 20 76 61 6c 75 65 73 20 74 68 72 6f  t[i] values thro
14c70 75 67 68 20 74 68 65 20 70 32 2d 74 68 20 66 69  ugh the p2-th fi
14c80 65 6c 64 2e 20 2a 2f 0a 20 20 20 20 6f 70 5f 63  eld. */.    op_c
14c90 6f 6c 75 6d 6e 5f 72 65 61 64 5f 68 65 61 64 65  olumn_read_heade
14ca0 72 3a 0a 20 20 20 20 20 20 69 20 3d 20 70 43 2d  r:.      i = pC-
14cb0 3e 6e 48 64 72 50 61 72 73 65 64 3b 0a 20 20 20  >nHdrParsed;.   
14cc0 20 20 20 6f 66 66 73 65 74 36 34 20 3d 20 61 4f     offset64 = aO
14cd0 66 66 73 65 74 5b 69 5d 3b 0a 20 20 20 20 20 20  ffset[i];.      
14ce0 7a 48 64 72 20 3d 20 7a 44 61 74 61 20 2b 20 70  zHdr = zData + p
14cf0 43 2d 3e 69 48 64 72 4f 66 66 73 65 74 3b 0a 20  C->iHdrOffset;. 
14d00 20 20 20 20 20 7a 45 6e 64 48 64 72 20 3d 20 7a       zEndHdr = z
14d10 44 61 74 61 20 2b 20 61 4f 66 66 73 65 74 5b 30  Data + aOffset[0
14d20 5d 3b 0a 20 20 20 20 20 20 64 6f 7b 0a 20 20 20  ];.      do{.   
14d30 20 20 20 20 20 69 66 28 20 28 74 20 3d 20 7a 48       if( (t = zH
14d40 64 72 5b 30 5d 29 3c 30 78 38 30 20 29 7b 0a 20  dr[0])<0x80 ){. 
14d50 20 20 20 20 20 20 20 20 20 7a 48 64 72 2b 2b 3b           zHdr++;
14d60 0a 20 20 20 20 20 20 20 20 20 20 6f 66 66 73 65  .          offse
14d70 74 36 34 20 2b 3d 20 73 71 6c 69 74 65 33 56 64  t64 += sqlite3Vd
14d80 62 65 4f 6e 65 42 79 74 65 53 65 72 69 61 6c 54  beOneByteSerialT
14d90 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20 20 20  ypeLen(t);.     
14da0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
14db0 20 20 20 20 7a 48 64 72 20 2b 3d 20 73 71 6c 69      zHdr += sqli
14dc0 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 7a  te3GetVarint32(z
14dd0 48 64 72 2c 20 26 74 29 3b 0a 20 20 20 20 20 20  Hdr, &t);.      
14de0 20 20 20 20 6f 66 66 73 65 74 36 34 20 2b 3d 20      offset64 += 
14df0 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
14e00 6c 54 79 70 65 4c 65 6e 28 74 29 3b 0a 20 20 20  lTypeLen(t);.   
14e10 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70       }.        p
14e20 43 2d 3e 61 54 79 70 65 5b 69 2b 2b 5d 20 3d 20  C->aType[i++] = 
14e30 74 3b 0a 20 20 20 20 20 20 20 20 61 4f 66 66 73  t;.        aOffs
14e40 65 74 5b 69 5d 20 3d 20 28 75 33 32 29 28 6f 66  et[i] = (u32)(of
14e50 66 73 65 74 36 34 20 26 20 30 78 66 66 66 66 66  fset64 & 0xfffff
14e60 66 66 66 29 3b 0a 20 20 20 20 20 20 7d 77 68 69  fff);.      }whi
14e70 6c 65 28 20 69 3c 3d 70 32 20 26 26 20 7a 48 64  le( i<=p2 && zHd
14e80 72 3c 7a 45 6e 64 48 64 72 20 29 3b 0a 0a 20 20  r<zEndHdr );..  
14e90 20 20 20 20 2f 2a 20 54 68 65 20 72 65 63 6f 72      /* The recor
14ea0 64 20 69 73 20 63 6f 72 72 75 70 74 20 69 66 20  d is corrupt if 
14eb0 61 6e 79 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  any of the follo
14ec0 77 69 6e 67 20 61 72 65 20 74 72 75 65 3a 0a 20  wing are true:. 
14ed0 20 20 20 20 20 2a 2a 20 28 31 29 20 74 68 65 20       ** (1) the 
14ee0 62 79 74 65 73 20 6f 66 20 74 68 65 20 68 65 61  bytes of the hea
14ef0 64 65 72 20 65 78 74 65 6e 64 20 70 61 73 74 20  der extend past 
14f00 74 68 65 20 64 65 63 6c 61 72 65 64 20 68 65 61  the declared hea
14f10 64 65 72 20 73 69 7a 65 0a 20 20 20 20 20 20 2a  der size.      *
14f20 2a 20 28 32 29 20 74 68 65 20 65 6e 74 69 72 65  * (2) the entire
14f30 20 68 65 61 64 65 72 20 77 61 73 20 75 73 65 64   header was used
14f40 20 62 75 74 20 6e 6f 74 20 61 6c 6c 20 64 61 74   but not all dat
14f50 61 20 77 61 73 20 75 73 65 64 0a 20 20 20 20 20  a was used.     
14f60 20 2a 2a 20 28 33 29 20 74 68 65 20 65 6e 64 20   ** (3) the end 
14f70 6f 66 20 74 68 65 20 64 61 74 61 20 65 78 74 65  of the data exte
14f80 6e 64 73 20 62 65 79 6f 6e 64 20 74 68 65 20 65  nds beyond the e
14f90 6e 64 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64  nd of the record
14fa0 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
14fb0 20 69 66 28 20 28 7a 48 64 72 3e 3d 7a 45 6e 64   if( (zHdr>=zEnd
14fc0 48 64 72 20 26 26 20 28 7a 48 64 72 3e 7a 45 6e  Hdr && (zHdr>zEn
14fd0 64 48 64 72 20 7c 7c 20 6f 66 66 73 65 74 36 34  dHdr || offset64
14fe0 21 3d 70 43 2d 3e 70 61 79 6c 6f 61 64 53 69 7a  !=pC->payloadSiz
14ff0 65 29 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 6f  e)).       || (o
15000 66 66 73 65 74 36 34 20 3e 20 70 43 2d 3e 70 61  ffset64 > pC->pa
15010 79 6c 6f 61 64 53 69 7a 65 29 0a 20 20 20 20 20  yloadSize).     
15020 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20   ){.        if( 
15030 70 43 2d 3e 61 52 6f 77 3d 3d 30 20 29 20 73 71  pC->aRow==0 ) sq
15040 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
15050 61 73 65 28 26 73 4d 65 6d 29 3b 0a 20 20 20 20  ase(&sMem);.    
15060 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f      rc = SQLITE_
15070 43 4f 52 52 55 50 54 5f 42 4b 50 54 3b 0a 20 20  CORRUPT_BKPT;.  
15080 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
15090 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
150a0 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 70 43       }..      pC
150b0 2d 3e 6e 48 64 72 50 61 72 73 65 64 20 3d 20 69  ->nHdrParsed = i
150c0 3b 0a 20 20 20 20 20 20 70 43 2d 3e 69 48 64 72  ;.      pC->iHdr
150d0 4f 66 66 73 65 74 20 3d 20 28 75 33 32 29 28 7a  Offset = (u32)(z
150e0 48 64 72 20 2d 20 7a 44 61 74 61 29 3b 0a 20 20  Hdr - zData);.  
150f0 20 20 20 20 69 66 28 20 70 43 2d 3e 61 52 6f 77      if( pC->aRow
15100 3d 3d 30 20 29 20 73 71 6c 69 74 65 33 56 64 62  ==0 ) sqlite3Vdb
15110 65 4d 65 6d 52 65 6c 65 61 73 65 28 26 73 4d 65  eMemRelease(&sMe
15120 6d 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  m);.    }else{. 
15130 20 20 20 20 20 74 20 3d 20 30 3b 0a 20 20 20 20       t = 0;.    
15140 7d 0a 0a 20 20 20 20 2f 2a 20 49 66 20 61 66 74  }..    /* If aft
15150 65 72 20 74 72 79 69 6e 67 20 74 6f 20 65 78 74  er trying to ext
15160 72 61 63 74 20 6e 65 77 20 65 6e 74 72 69 65 73  ract new entries
15170 20 66 72 6f 6d 20 74 68 65 20 68 65 61 64 65 72   from the header
15180 2c 20 6e 48 64 72 50 61 72 73 65 64 20 69 73 0a  , nHdrParsed is.
15190 20 20 20 20 2a 2a 20 73 74 69 6c 6c 20 6e 6f 74      ** still not
151a0 20 75 70 20 74 6f 20 70 32 2c 20 74 68 61 74 20   up to p2, that 
151b0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 72  means that the r
151c0 65 63 6f 72 64 20 68 61 73 20 66 65 77 65 72 20  ecord has fewer 
151d0 74 68 61 6e 20 70 32 0a 20 20 20 20 2a 2a 20 63  than p2.    ** c
151e0 6f 6c 75 6d 6e 73 2e 20 20 53 6f 20 74 68 65 20  olumns.  So the 
151f0 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65 20 65  result will be e
15200 69 74 68 65 72 20 74 68 65 20 64 65 66 61 75 6c  ither the defaul
15210 74 20 76 61 6c 75 65 20 6f 72 20 61 20 4e 55 4c  t value or a NUL
15220 4c 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 69 66  L..    */.    if
15230 28 20 70 43 2d 3e 6e 48 64 72 50 61 72 73 65 64  ( pC->nHdrParsed
15240 3c 3d 70 32 20 29 7b 0a 20 20 20 20 20 20 69 66  <=p2 ){.      if
15250 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
15260 34 5f 4d 45 4d 20 29 7b 0a 20 20 20 20 20 20 20  4_MEM ){.       
15270 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53   sqlite3VdbeMemS
15280 68 61 6c 6c 6f 77 43 6f 70 79 28 70 44 65 73 74  hallowCopy(pDest
15290 2c 20 70 4f 70 2d 3e 70 34 2e 70 4d 65 6d 2c 20  , pOp->p4.pMem, 
152a0 4d 45 4d 5f 53 74 61 74 69 63 29 3b 0a 20 20 20  MEM_Static);.   
152b0 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
152c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d    sqlite3VdbeMem
152d0 53 65 74 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a  SetNull(pDest);.
152e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 67 6f        }.      go
152f0 74 6f 20 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  to op_column_out
15300 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
15310 0a 20 20 20 20 74 20 3d 20 70 43 2d 3e 61 54 79  .    t = pC->aTy
15320 70 65 5b 70 32 5d 3b 0a 20 20 7d 0a 0a 20 20 2f  pe[p2];.  }..  /
15330 2a 20 45 78 74 72 61 63 74 20 74 68 65 20 63 6f  * Extract the co
15340 6e 74 65 6e 74 20 66 6f 72 20 74 68 65 20 70 32  ntent for the p2
15350 2b 31 2d 74 68 20 63 6f 6c 75 6d 6e 2e 20 20 43  +1-th column.  C
15360 6f 6e 74 72 6f 6c 20 63 61 6e 20 6f 6e 6c 79 0a  ontrol can only.
15370 20 20 2a 2a 20 72 65 61 63 68 20 74 68 69 73 20    ** reach this 
15380 70 6f 69 6e 74 20 69 66 20 61 4f 66 66 73 65 74  point if aOffset
15390 5b 70 32 5d 2c 20 61 4f 66 66 73 65 74 5b 70 32  [p2], aOffset[p2
153a0 2b 31 5d 2c 20 61 6e 64 20 70 43 2d 3e 61 54 79  +1], and pC->aTy
153b0 70 65 5b 70 32 5d 20 61 72 65 0a 20 20 2a 2a 20  pe[p2] are.  ** 
153c0 61 6c 6c 20 76 61 6c 69 64 2e 0a 20 20 2a 2f 0a  all valid..  */.
153d0 20 20 61 73 73 65 72 74 28 20 70 32 3c 70 43 2d    assert( p2<pC-
153e0 3e 6e 48 64 72 50 61 72 73 65 64 20 29 3b 0a 20  >nHdrParsed );. 
153f0 20 61 73 73 65 72 74 28 20 72 63 3d 3d 53 51 4c   assert( rc==SQL
15400 49 54 45 5f 4f 4b 20 29 3b 0a 20 20 61 73 73 65  ITE_OK );.  asse
15410 72 74 28 20 73 71 6c 69 74 65 33 56 64 62 65 43  rt( sqlite3VdbeC
15420 68 65 63 6b 4d 65 6d 49 6e 76 61 72 69 61 6e 74  heckMemInvariant
15430 73 28 70 44 65 73 74 29 20 29 3b 0a 20 20 69 66  s(pDest) );.  if
15440 28 20 56 64 62 65 4d 65 6d 44 79 6e 61 6d 69 63  ( VdbeMemDynamic
15450 28 70 44 65 73 74 29 20 29 7b 0a 20 20 20 20 73  (pDest) ){.    s
15460 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74  qlite3VdbeMemSet
15470 4e 75 6c 6c 28 70 44 65 73 74 29 3b 0a 20 20 7d  Null(pDest);.  }
15480 0a 20 20 61 73 73 65 72 74 28 20 74 3d 3d 70 43  .  assert( t==pC
15490 2d 3e 61 54 79 70 65 5b 70 32 5d 20 29 3b 0a 20  ->aType[p2] );. 
154a0 20 69 66 28 20 70 43 2d 3e 73 7a 52 6f 77 3e 3d   if( pC->szRow>=
154b0 61 4f 66 66 73 65 74 5b 70 32 2b 31 5d 20 29 7b  aOffset[p2+1] ){
154c0 0a 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73 20  .    /* This is 
154d0 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
154e0 77 68 65 72 65 20 74 68 65 20 64 65 73 69 72 65  where the desire
154f0 64 20 63 6f 6e 74 65 6e 74 20 66 69 74 73 20 6f  d content fits o
15500 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 0a 20  n the original. 
15510 20 20 20 2a 2a 20 70 61 67 65 20 2d 20 77 68 65     ** page - whe
15520 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69  re the content i
15530 73 20 6e 6f 74 20 6f 6e 20 61 6e 20 6f 76 65 72  s not on an over
15540 66 6c 6f 77 20 70 61 67 65 20 2a 2f 0a 20 20 20  flow page */.   
15550 20 7a 44 61 74 61 20 3d 20 70 43 2d 3e 61 52 6f   zData = pC->aRo
15560 77 20 2b 20 61 4f 66 66 73 65 74 5b 70 32 5d 3b  w + aOffset[p2];
15570 0a 20 20 20 20 69 66 28 20 74 3c 31 32 20 29 7b  .    if( t<12 ){
15580 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
15590 62 65 53 65 72 69 61 6c 47 65 74 28 7a 44 61 74  beSerialGet(zDat
155a0 61 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a 20 20  a, t, pDest);.  
155b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
155c0 2a 20 49 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20  * If the column 
155d0 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69 6e  value is a strin
155e0 67 2c 20 77 65 20 6e 65 65 64 20 61 20 70 65 72  g, we need a per
155f0 73 69 73 74 65 6e 74 20 76 61 6c 75 65 2c 20 6e  sistent value, n
15600 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 20 4d 45  ot.      ** a ME
15610 4d 5f 45 70 68 65 6d 20 76 61 6c 75 65 2e 20 20  M_Ephem value.  
15620 54 68 69 73 20 62 72 61 6e 63 68 20 69 73 20 61  This branch is a
15630 20 66 61 73 74 20 73 68 6f 72 74 2d 63 75 74 20   fast short-cut 
15640 74 68 61 74 20 69 73 20 65 71 75 69 76 61 6c 65  that is equivale
15650 6e 74 0a 20 20 20 20 20 20 2a 2a 20 74 6f 20 63  nt.      ** to c
15660 61 6c 6c 69 6e 67 20 73 71 6c 69 74 65 33 56 64  alling sqlite3Vd
15670 62 65 53 65 72 69 61 6c 47 65 74 28 29 20 61 6e  beSerialGet() an
15680 64 20 73 71 6c 69 74 65 33 56 64 62 65 44 65 65  d sqlite3VdbeDee
15690 70 68 65 6d 65 72 61 6c 69 7a 65 28 29 2e 0a 20  phemeralize().. 
156a0 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 74       */.      st
156b0 61 74 69 63 20 63 6f 6e 73 74 20 75 31 36 20 61  atic const u16 a
156c0 46 6c 61 67 5b 5d 20 3d 20 7b 20 4d 45 4d 5f 42  Flag[] = { MEM_B
156d0 6c 6f 62 2c 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d  lob, MEM_Str|MEM
156e0 5f 54 65 72 6d 20 7d 3b 0a 20 20 20 20 20 20 70  _Term };.      p
156f0 44 65 73 74 2d 3e 6e 20 3d 20 6c 65 6e 20 3d 20  Dest->n = len = 
15700 28 74 2d 31 32 29 2f 32 3b 0a 20 20 20 20 20 20  (t-12)/2;.      
15710 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15720 6f 64 69 6e 67 3b 0a 20 20 20 20 20 20 69 66 28  oding;.      if(
15730 20 70 44 65 73 74 2d 3e 73 7a 4d 61 6c 6c 6f 63   pDest->szMalloc
15740 20 3c 20 6c 65 6e 2b 32 20 29 7b 0a 20 20 20 20   < len+2 ){.    
15750 20 20 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73      pDest->flags
15760 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 20   = MEM_Null;.   
15770 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
15780 56 64 62 65 4d 65 6d 47 72 6f 77 28 70 44 65 73  VdbeMemGrow(pDes
15790 74 2c 20 6c 65 6e 2b 32 2c 20 30 29 20 29 20 67  t, len+2, 0) ) g
157a0 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20  oto no_mem;.    
157b0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
157c0 20 70 44 65 73 74 2d 3e 7a 20 3d 20 70 44 65 73   pDest->z = pDes
157d0 74 2d 3e 7a 4d 61 6c 6c 6f 63 3b 0a 20 20 20 20  t->zMalloc;.    
157e0 20 20 7d 0a 20 20 20 20 20 20 6d 65 6d 63 70 79    }.      memcpy
157f0 28 70 44 65 73 74 2d 3e 7a 2c 20 7a 44 61 74 61  (pDest->z, zData
15800 2c 20 6c 65 6e 29 3b 0a 20 20 20 20 20 20 70 44  , len);.      pD
15810 65 73 74 2d 3e 7a 5b 6c 65 6e 5d 20 3d 20 30 3b  est->z[len] = 0;
15820 0a 20 20 20 20 20 20 70 44 65 73 74 2d 3e 7a 5b  .      pDest->z[
15830 6c 65 6e 2b 31 5d 20 3d 20 30 3b 0a 20 20 20 20  len+1] = 0;.    
15840 20 20 70 44 65 73 74 2d 3e 66 6c 61 67 73 20 3d    pDest->flags =
15850 20 61 46 6c 61 67 5b 74 26 31 5d 3b 0a 20 20 20   aFlag[t&1];.   
15860 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
15870 70 44 65 73 74 2d 3e 65 6e 63 20 3d 20 65 6e 63  pDest->enc = enc
15880 6f 64 69 6e 67 3b 0a 20 20 20 20 2f 2a 20 54 68  oding;.    /* Th
15890 69 73 20 62 72 61 6e 63 68 20 68 61 70 70 65 6e  is branch happen
158a0 73 20 6f 6e 6c 79 20 77 68 65 6e 20 63 6f 6e 74  s only when cont
158b0 65 6e 74 20 69 73 20 6f 6e 20 6f 76 65 72 66 6c  ent is on overfl
158c0 6f 77 20 70 61 67 65 73 20 2a 2f 0a 20 20 20 20  ow pages */.    
158d0 69 66 28 20 28 28 70 4f 70 2d 3e 70 35 20 26 20  if( ((pOp->p5 & 
158e0 28 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52  (OPFLAG_LENGTHAR
158f0 47 7c 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41  G|OPFLAG_TYPEOFA
15900 52 47 29 29 21 3d 30 0a 20 20 20 20 20 20 20 20  RG))!=0.        
15910 20 20 26 26 20 28 28 74 3e 3d 31 32 20 26 26 20    && ((t>=12 && 
15920 28 74 26 31 29 3d 3d 30 29 20 7c 7c 20 28 70 4f  (t&1)==0) || (pO
15930 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 54  p->p5 & OPFLAG_T
15940 59 50 45 4f 46 41 52 47 29 21 3d 30 29 29 0a 20  YPEOFARG)!=0)). 
15950 20 20 20 20 7c 7c 20 28 6c 65 6e 20 3d 20 73 71      || (len = sq
15960 6c 69 74 65 33 56 64 62 65 53 65 72 69 61 6c 54  lite3VdbeSerialT
15970 79 70 65 4c 65 6e 28 74 29 29 3d 3d 30 0a 20 20  ypeLen(t))==0.  
15980 20 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f    ){.      /* Co
15990 6e 74 65 6e 74 20 69 73 20 69 72 72 65 6c 65 76  ntent is irrelev
159a0 61 6e 74 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ant for.      **
159b0 20 20 20 20 31 2e 20 74 68 65 20 74 79 70 65 6f      1. the typeo
159c0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2c 0a 20 20  f() function,.  
159d0 20 20 20 20 2a 2a 20 20 20 20 32 2e 20 74 68 65      **    2. the
159e0 20 6c 65 6e 67 74 68 28 58 29 20 66 75 6e 63 74   length(X) funct
159f0 69 6f 6e 20 69 66 20 58 20 69 73 20 61 20 62 6c  ion if X is a bl
15a00 6f 62 2c 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  ob, and.      **
15a10 20 20 20 20 33 2e 20 69 66 20 74 68 65 20 63 6f      3. if the co
15a20 6e 74 65 6e 74 20 6c 65 6e 67 74 68 20 69 73 20  ntent length is 
15a30 7a 65 72 6f 2e 0a 20 20 20 20 20 20 2a 2a 20 53  zero..      ** S
15a40 6f 20 77 65 20 6d 69 67 68 74 20 61 73 20 77 65  o we might as we
15a50 6c 6c 20 75 73 65 20 62 6f 67 75 73 20 63 6f 6e  ll use bogus con
15a60 74 65 6e 74 20 72 61 74 68 65 72 20 74 68 61 6e  tent rather than
15a70 20 72 65 61 64 69 6e 67 0a 20 20 20 20 20 20 2a   reading.      *
15a80 2a 20 63 6f 6e 74 65 6e 74 20 66 72 6f 6d 20 64  * content from d
15a90 69 73 6b 2e 20 2a 2f 0a 20 20 20 20 20 20 73 74  isk. */.      st
15aa0 61 74 69 63 20 75 38 20 61 5a 65 72 6f 5b 38 5d  atic u8 aZero[8]
15ab0 3b 20 20 2f 2a 20 54 68 69 73 20 69 73 20 74 68  ;  /* This is th
15ac0 65 20 62 6f 67 75 73 20 63 6f 6e 74 65 6e 74 20  e bogus content 
15ad0 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
15ae0 56 64 62 65 53 65 72 69 61 6c 47 65 74 28 61 5a  VdbeSerialGet(aZ
15af0 65 72 6f 2c 20 74 2c 20 70 44 65 73 74 29 3b 0a  ero, t, pDest);.
15b00 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
15b10 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62   rc = sqlite3Vdb
15b20 65 4d 65 6d 46 72 6f 6d 42 74 72 65 65 28 70 43  eMemFromBtree(pC
15b30 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20 61 4f  ->uc.pCursor, aO
15b40 66 66 73 65 74 5b 70 32 5d 2c 20 6c 65 6e 2c 20  ffset[p2], len, 
15b50 70 44 65 73 74 29 3b 0a 20 20 20 20 20 20 69 66  pDest);.      if
15b60 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
15b70 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
15b80 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
15b90 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69   sqlite3VdbeSeri
15ba0 61 6c 47 65 74 28 28 63 6f 6e 73 74 20 75 38 2a  alGet((const u8*
15bb0 29 70 44 65 73 74 2d 3e 7a 2c 20 74 2c 20 70 44  )pDest->z, t, pD
15bc0 65 73 74 29 3b 0a 20 20 20 20 20 20 70 44 65 73  est);.      pDes
15bd0 74 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 4d 45 4d  t->flags &= ~MEM
15be0 5f 45 70 68 65 6d 3b 0a 20 20 20 20 7d 0a 20 20  _Ephem;.    }.  
15bf0 7d 0a 0a 6f 70 5f 63 6f 6c 75 6d 6e 5f 6f 75 74  }..op_column_out
15c00 3a 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f 42  :.  UPDATE_MAX_B
15c10 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b 0a  LOBSIZE(pDest);.
15c20 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
15c30 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74 29  (pOp->p3, pDest)
15c40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
15c50 20 4f 70 63 6f 64 65 3a 20 41 66 66 69 6e 69 74   Opcode: Affinit
15c60 79 20 50 31 20 50 32 20 2a 20 50 34 20 2a 0a 2a  y P1 P2 * P4 *.*
15c70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 61 66 66 69  * Synopsis: affi
15c80 6e 69 74 79 28 72 5b 50 31 40 50 32 5d 29 0a 2a  nity(r[P1@P2]).*
15c90 2a 0a 2a 2a 20 41 70 70 6c 79 20 61 66 66 69 6e  *.** Apply affin
15ca0 69 74 69 65 73 20 74 6f 20 61 20 72 61 6e 67 65  ities to a range
15cb0 20 6f 66 20 50 32 20 72 65 67 69 73 74 65 72 73   of P2 registers
15cc0 20 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 50   starting with P
15cd0 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  1..**.** P4 is a
15ce0 20 73 74 72 69 6e 67 20 74 68 61 74 20 69 73 20   string that is 
15cf0 50 32 20 63 68 61 72 61 63 74 65 72 73 20 6c 6f  P2 characters lo
15d00 6e 67 2e 20 54 68 65 20 6e 74 68 20 63 68 61 72  ng. The nth char
15d10 61 63 74 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20  acter of the.** 
15d20 73 74 72 69 6e 67 20 69 6e 64 69 63 61 74 65 73  string indicates
15d30 20 74 68 65 20 63 6f 6c 75 6d 6e 20 61 66 66 69   the column affi
15d40 6e 69 74 79 20 74 68 61 74 20 73 68 6f 75 6c 64  nity that should
15d50 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68 65   be used for the
15d60 20 6e 74 68 0a 2a 2a 20 6d 65 6d 6f 72 79 20 63   nth.** memory c
15d70 65 6c 6c 20 69 6e 20 74 68 65 20 72 61 6e 67 65  ell in the range
15d80 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 41 66 66  ..*/.case OP_Aff
15d90 69 6e 69 74 79 3a 20 7b 0a 20 20 63 6f 6e 73 74  inity: {.  const
15da0 20 63 68 61 72 20 2a 7a 41 66 66 69 6e 69 74 79   char *zAffinity
15db0 3b 20 20 20 2f 2a 20 54 68 65 20 61 66 66 69 6e  ;   /* The affin
15dc0 69 74 79 20 74 6f 20 62 65 20 61 70 70 6c 69 65  ity to be applie
15dd0 64 20 2a 2f 0a 20 20 63 68 61 72 20 63 41 66 66  d */.  char cAff
15de0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
15df0 2f 2a 20 41 20 73 69 6e 67 6c 65 20 63 68 61 72  /* A single char
15e00 61 63 74 65 72 20 6f 66 20 61 66 66 69 6e 69 74  acter of affinit
15e10 79 20 2a 2f 0a 0a 20 20 7a 41 66 66 69 6e 69 74  y */..  zAffinit
15e20 79 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 20  y = pOp->p4.z;. 
15e30 20 61 73 73 65 72 74 28 20 7a 41 66 66 69 6e 69   assert( zAffini
15e40 74 79 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ty!=0 );.  asser
15e50 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 70 4f 70  t( zAffinity[pOp
15e60 2d 3e 70 32 5d 3d 3d 30 20 29 3b 0a 20 20 70 49  ->p2]==0 );.  pI
15e70 6e 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n1 = &aMem[pOp->
15e80 70 31 5d 3b 0a 20 20 77 68 69 6c 65 28 20 28 63  p1];.  while( (c
15e90 41 66 66 20 3d 20 2a 28 7a 41 66 66 69 6e 69 74  Aff = *(zAffinit
15ea0 79 2b 2b 29 29 21 3d 30 20 29 7b 0a 20 20 20 20  y++))!=0 ){.    
15eb0 61 73 73 65 72 74 28 20 70 49 6e 31 20 3c 3d 20  assert( pIn1 <= 
15ec0 26 70 2d 3e 61 4d 65 6d 5b 28 70 2d 3e 6e 4d 65  &p->aMem[(p->nMe
15ed0 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72  m+1 - p->nCursor
15ee0 29 5d 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  )] );.    assert
15ef0 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 49 6e  ( memIsValid(pIn
15f00 31 29 20 29 3b 0a 20 20 20 20 61 70 70 6c 79 41  1) );.    applyA
15f10 66 66 69 6e 69 74 79 28 70 49 6e 31 2c 20 63 41  ffinity(pIn1, cA
15f20 66 66 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20  ff, encoding);. 
15f30 20 20 20 70 49 6e 31 2b 2b 3b 0a 20 20 7d 0a 20     pIn1++;.  }. 
15f40 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
15f50 63 6f 64 65 3a 20 4d 61 6b 65 52 65 63 6f 72 64  code: MakeRecord
15f60 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
15f70 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33  * Synopsis: r[P3
15f80 5d 3d 6d 6b 72 65 63 28 72 5b 50 31 40 50 32 5d  ]=mkrec(r[P1@P2]
15f90 29 0a 2a 2a 0a 2a 2a 20 43 6f 6e 76 65 72 74 20  ).**.** Convert 
15fa0 50 32 20 72 65 67 69 73 74 65 72 73 20 62 65 67  P2 registers beg
15fb0 69 6e 6e 69 6e 67 20 77 69 74 68 20 50 31 20 69  inning with P1 i
15fc0 6e 74 6f 20 74 68 65 20 5b 72 65 63 6f 72 64 20  nto the [record 
15fd0 66 6f 72 6d 61 74 5d 0a 2a 2a 20 75 73 65 20 61  format].** use a
15fe0 73 20 61 20 64 61 74 61 20 72 65 63 6f 72 64 20  s a data record 
15ff0 69 6e 20 61 20 64 61 74 61 62 61 73 65 20 74 61  in a database ta
16000 62 6c 65 20 6f 72 20 61 73 20 61 20 6b 65 79 0a  ble or as a key.
16010 2a 2a 20 69 6e 20 61 6e 20 69 6e 64 65 78 2e 20  ** in an index. 
16020 20 54 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f   The OP_Column o
16030 70 63 6f 64 65 20 63 61 6e 20 64 65 63 6f 64 65  pcode can decode
16040 20 74 68 65 20 72 65 63 6f 72 64 20 6c 61 74 65   the record late
16050 72 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20  r..**.** P4 may 
16060 62 65 20 61 20 73 74 72 69 6e 67 20 74 68 61 74  be a string that
16070 20 69 73 20 50 32 20 63 68 61 72 61 63 74 65 72   is P2 character
16080 73 20 6c 6f 6e 67 2e 20 20 54 68 65 20 6e 74 68  s long.  The nth
16090 20 63 68 61 72 61 63 74 65 72 20 6f 66 20 74 68   character of th
160a0 65 0a 2a 2a 20 73 74 72 69 6e 67 20 69 6e 64 69  e.** string indi
160b0 63 61 74 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e  cates the column
160c0 20 61 66 66 69 6e 69 74 79 20 74 68 61 74 20 73   affinity that s
160d0 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20 66 6f  hould be used fo
160e0 72 20 74 68 65 20 6e 74 68 0a 2a 2a 20 66 69 65  r the nth.** fie
160f0 6c 64 20 6f 66 20 74 68 65 20 69 6e 64 65 78 20  ld of the index 
16100 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6d  key..**.** The m
16110 61 70 70 69 6e 67 20 66 72 6f 6d 20 63 68 61 72  apping from char
16120 61 63 74 65 72 20 74 6f 20 61 66 66 69 6e 69 74  acter to affinit
16130 79 20 69 73 20 67 69 76 65 6e 20 62 79 20 74 68  y is given by th
16140 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 0a 2a 2a  e SQLITE_AFF_.**
16150 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
16160 69 6e 20 73 71 6c 69 74 65 49 6e 74 2e 68 2e 0a  in sqliteInt.h..
16170 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 4e  **.** If P4 is N
16180 55 4c 4c 20 74 68 65 6e 20 61 6c 6c 20 69 6e 64  ULL then all ind
16190 65 78 20 66 69 65 6c 64 73 20 68 61 76 65 20 74  ex fields have t
161a0 68 65 20 61 66 66 69 6e 69 74 79 20 42 4c 4f 42  he affinity BLOB
161b0 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 6b  ..*/.case OP_Mak
161c0 65 52 65 63 6f 72 64 3a 20 7b 0a 20 20 75 38 20  eRecord: {.  u8 
161d0 2a 7a 4e 65 77 52 65 63 6f 72 64 3b 20 20 20 20  *zNewRecord;    
161e0 20 20 20 20 2f 2a 20 41 20 62 75 66 66 65 72 20      /* A buffer 
161f0 74 6f 20 68 6f 6c 64 20 74 68 65 20 64 61 74 61  to hold the data
16200 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
16210 6f 72 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 52  ord */.  Mem *pR
16220 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
16230 2f 2a 20 54 68 65 20 6e 65 77 20 72 65 63 6f 72  /* The new recor
16240 64 20 2a 2f 0a 20 20 75 36 34 20 6e 44 61 74 61  d */.  u64 nData
16250 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16260 20 4e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   Number of bytes
16270 20 6f 66 20 64 61 74 61 20 73 70 61 63 65 20 2a   of data space *
16280 2f 0a 20 20 69 6e 74 20 6e 48 64 72 3b 20 20 20  /.  int nHdr;   
16290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
162a0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f 66  mber of bytes of
162b0 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a 2f   header space */
162c0 0a 20 20 69 36 34 20 6e 42 79 74 65 3b 20 20 20  .  i64 nByte;   
162d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
162e0 61 20 73 70 61 63 65 20 72 65 71 75 69 72 65 64  a space required
162f0 20 66 6f 72 20 74 68 69 73 20 72 65 63 6f 72 64   for this record
16300 20 2a 2f 0a 20 20 69 36 34 20 6e 5a 65 72 6f 3b   */.  i64 nZero;
16310 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16320 4e 75 6d 62 65 72 20 6f 66 20 7a 65 72 6f 20 62  Number of zero b
16330 79 74 65 73 20 61 74 20 74 68 65 20 65 6e 64 20  ytes at the end 
16340 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f  of the record */
16350 0a 20 20 69 6e 74 20 6e 56 61 72 69 6e 74 3b 20  .  int nVarint; 
16360 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
16370 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
16380 61 20 76 61 72 69 6e 74 20 2a 2f 0a 20 20 75 33  a varint */.  u3
16390 32 20 73 65 72 69 61 6c 5f 74 79 70 65 3b 20 20  2 serial_type;  
163a0 20 20 20 20 20 2f 2a 20 54 79 70 65 20 66 69 65       /* Type fie
163b0 6c 64 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 44 61  ld */.  Mem *pDa
163c0 74 61 30 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ta0;           /
163d0 2a 20 46 69 72 73 74 20 66 69 65 6c 64 20 74 6f  * First field to
163e0 20 62 65 20 63 6f 6d 62 69 6e 65 64 20 69 6e 74   be combined int
163f0 6f 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a  o the record */.
16400 20 20 4d 65 6d 20 2a 70 4c 61 73 74 3b 20 20 20    Mem *pLast;   
16410 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73 74           /* Last
16420 20 66 69 65 6c 64 20 6f 66 20 74 68 65 20 72 65   field of the re
16430 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 46  cord */.  int nF
16440 69 65 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20  ield;           
16450 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 66 69   /* Number of fi
16460 65 6c 64 73 20 69 6e 20 74 68 65 20 72 65 63 6f  elds in the reco
16470 72 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41  rd */.  char *zA
16480 66 66 69 6e 69 74 79 3b 20 20 20 20 20 20 20 2f  ffinity;       /
16490 2a 20 54 68 65 20 61 66 66 69 6e 69 74 79 20 73  * The affinity s
164a0 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 72 65  tring for the re
164b0 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74 20 66 69  cord */.  int fi
164c0 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20  le_format;      
164d0 20 2f 2a 20 46 69 6c 65 20 66 6f 72 6d 61 74 20   /* File format 
164e0 74 6f 20 75 73 65 20 66 6f 72 20 65 6e 63 6f 64  to use for encod
164f0 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 3b 20  ing */.  int i; 
16500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16510 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69 6e  /* Space used in
16520 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 68 65   zNewRecord[] he
16530 61 64 65 72 20 2a 2f 0a 20 20 69 6e 74 20 6a 3b  ader */.  int j;
16540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16550 20 2f 2a 20 53 70 61 63 65 20 75 73 65 64 20 69   /* Space used i
16560 6e 20 7a 4e 65 77 52 65 63 6f 72 64 5b 5d 20 63  n zNewRecord[] c
16570 6f 6e 74 65 6e 74 20 2a 2f 0a 20 20 75 33 32 20  ontent */.  u32 
16580 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
16590 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20     /* Length of 
165a0 61 20 66 69 65 6c 64 20 2a 2f 0a 0a 20 20 2f 2a  a field */..  /*
165b0 20 41 73 73 75 6d 69 6e 67 20 74 68 65 20 72 65   Assuming the re
165c0 63 6f 72 64 20 63 6f 6e 74 61 69 6e 73 20 4e 20  cord contains N 
165d0 66 69 65 6c 64 73 2c 20 74 68 65 20 72 65 63 6f  fields, the reco
165e0 72 64 20 66 6f 72 6d 61 74 20 6c 6f 6f 6b 73 0a  rd format looks.
165f0 20 20 2a 2a 20 6c 69 6b 65 20 74 68 69 73 3a 0a    ** like this:.
16600 20 20 2a 2a 0a 20 20 2a 2a 20 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 2d 2d 2d 2d 2d 2d 2d  ----------------
16630 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16640 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
16650 2d 2d 0a 20 20 2a 2a 20 7c 20 68 64 72 2d 73 69  --.  ** | hdr-si
16660 7a 65 20 7c 20 74 79 70 65 20 30 20 7c 20 74 79  ze | type 0 | ty
16670 70 65 20 31 20 7c 20 2e 2e 2e 20 7c 20 74 79 70  pe 1 | ... | typ
16680 65 20 4e 2d 31 20 7c 20 64 61 74 61 30 20 7c 20  e N-1 | data0 | 
16690 2e 2e 2e 20 7c 20 64 61 74 61 20 4e 2d 31 20 7c  ... | data N-1 |
166a0 20 0a 20 20 2a 2a 20 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 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166d0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
166e0 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
166f0 20 20 2a 2a 0a 20 20 2a 2a 20 44 61 74 61 28 30    **.  ** Data(0
16700 29 20 69 73 20 74 61 6b 65 6e 20 66 72 6f 6d 20  ) is taken from 
16710 72 65 67 69 73 74 65 72 20 50 31 2e 20 20 44 61  register P1.  Da
16720 74 61 28 31 29 20 63 6f 6d 65 73 20 66 72 6f 6d  ta(1) comes from
16730 20 72 65 67 69 73 74 65 72 20 50 31 2b 31 0a 20   register P1+1. 
16740 20 2a 2a 20 61 6e 64 20 73 6f 20 66 6f 72 74 68   ** and so forth
16750 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 45 61 63 68  ..  **.  ** Each
16760 20 74 79 70 65 20 66 69 65 6c 64 20 69 73 20 61   type field is a
16770 20 76 61 72 69 6e 74 20 72 65 70 72 65 73 65 6e   varint represen
16780 74 69 6e 67 20 74 68 65 20 73 65 72 69 61 6c 20  ting the serial 
16790 74 79 70 65 20 6f 66 20 74 68 65 20 0a 20 20 2a  type of the .  *
167a0 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
167b0 64 61 74 61 20 65 6c 65 6d 65 6e 74 20 28 73 65  data element (se
167c0 65 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 72  e sqlite3VdbeSer
167d0 69 61 6c 54 79 70 65 28 29 29 2e 20 54 68 65 0a  ialType()). The.
167e0 20 20 2a 2a 20 68 64 72 2d 73 69 7a 65 20 66 69    ** hdr-size fi
167f0 65 6c 64 20 69 73 20 61 6c 73 6f 20 61 20 76 61  eld is also a va
16800 72 69 6e 74 20 77 68 69 63 68 20 69 73 20 74 68  rint which is th
16810 65 20 6f 66 66 73 65 74 20 66 72 6f 6d 20 74 68  e offset from th
16820 65 20 62 65 67 69 6e 6e 69 6e 67 0a 20 20 2a 2a  e beginning.  **
16830 20 6f 66 20 74 68 65 20 72 65 63 6f 72 64 20 74   of the record t
16840 6f 20 64 61 74 61 30 2e 0a 20 20 2a 2f 0a 20 20  o data0..  */.  
16850 6e 44 61 74 61 20 3d 20 30 3b 20 20 20 20 20 20  nData = 0;      
16860 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
16870 62 79 74 65 73 20 6f 66 20 64 61 74 61 20 73 70  bytes of data sp
16880 61 63 65 20 2a 2f 0a 20 20 6e 48 64 72 20 3d 20  ace */.  nHdr = 
16890 30 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  0;          /* N
168a0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 6f  umber of bytes o
168b0 66 20 68 65 61 64 65 72 20 73 70 61 63 65 20 2a  f header space *
168c0 2f 0a 20 20 6e 5a 65 72 6f 20 3d 20 30 3b 20 20  /.  nZero = 0;  
168d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
168e0 20 6f 66 20 7a 65 72 6f 20 62 79 74 65 73 20 61   of zero bytes a
168f0 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
16900 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 6e 46 69   record */.  nFi
16910 65 6c 64 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20  eld = pOp->p1;. 
16920 20 7a 41 66 66 69 6e 69 74 79 20 3d 20 70 4f 70   zAffinity = pOp
16930 2d 3e 70 34 2e 7a 3b 0a 20 20 61 73 73 65 72 74  ->p4.z;.  assert
16940 28 20 6e 46 69 65 6c 64 3e 30 20 26 26 20 70 4f  ( nField>0 && pO
16950 70 2d 3e 70 32 3e 30 20 26 26 20 70 4f 70 2d 3e  p->p2>0 && pOp->
16960 70 32 2b 6e 46 69 65 6c 64 3c 3d 28 70 2d 3e 6e  p2+nField<=(p->n
16970 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
16980 6f 72 29 2b 31 20 29 3b 0a 20 20 70 44 61 74 61  or)+1 );.  pData
16990 30 20 3d 20 26 61 4d 65 6d 5b 6e 46 69 65 6c 64  0 = &aMem[nField
169a0 5d 3b 0a 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f  ];.  nField = pO
169b0 70 2d 3e 70 32 3b 0a 20 20 70 4c 61 73 74 20 3d  p->p2;.  pLast =
169c0 20 26 70 44 61 74 61 30 5b 6e 46 69 65 6c 64 2d   &pData0[nField-
169d0 31 5d 3b 0a 20 20 66 69 6c 65 5f 66 6f 72 6d 61  1];.  file_forma
169e0 74 20 3d 20 70 2d 3e 6d 69 6e 57 72 69 74 65 46  t = p->minWriteF
169f0 69 6c 65 46 6f 72 6d 61 74 3b 0a 0a 20 20 2f 2a  ileFormat;..  /*
16a00 20 49 64 65 6e 74 69 66 79 20 74 68 65 20 6f 75   Identify the ou
16a10 74 70 75 74 20 72 65 67 69 73 74 65 72 20 2a 2f  tput register */
16a20 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
16a30 70 33 3c 70 4f 70 2d 3e 70 31 20 7c 7c 20 70 4f  p3<pOp->p1 || pO
16a40 70 2d 3e 70 33 3e 3d 70 4f 70 2d 3e 70 31 2b 70  p->p3>=pOp->p1+p
16a50 4f 70 2d 3e 70 32 20 29 3b 0a 20 20 70 4f 75 74  Op->p2 );.  pOut
16a60 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33   = &aMem[pOp->p3
16a70 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43  ];.  memAboutToC
16a80 68 61 6e 67 65 28 70 2c 20 70 4f 75 74 29 3b 0a  hange(p, pOut);.
16a90 0a 20 20 2f 2a 20 41 70 70 6c 79 20 74 68 65 20  .  /* Apply the 
16aa0 72 65 71 75 65 73 74 65 64 20 61 66 66 69 6e 69  requested affini
16ab0 74 79 20 74 6f 20 61 6c 6c 20 69 6e 70 75 74 73  ty to all inputs
16ac0 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
16ad0 70 44 61 74 61 30 3c 3d 70 4c 61 73 74 20 29 3b  pData0<=pLast );
16ae0 0a 20 20 69 66 28 20 7a 41 66 66 69 6e 69 74 79  .  if( zAffinity
16af0 20 29 7b 0a 20 20 20 20 70 52 65 63 20 3d 20 70   ){.    pRec = p
16b00 44 61 74 61 30 3b 0a 20 20 20 20 64 6f 7b 0a 20  Data0;.    do{. 
16b10 20 20 20 20 20 61 70 70 6c 79 41 66 66 69 6e 69       applyAffini
16b20 74 79 28 70 52 65 63 2b 2b 2c 20 2a 28 7a 41 66  ty(pRec++, *(zAf
16b30 66 69 6e 69 74 79 2b 2b 29 2c 20 65 6e 63 6f 64  finity++), encod
16b40 69 6e 67 29 3b 0a 20 20 20 20 20 20 61 73 73 65  ing);.      asse
16b50 72 74 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d  rt( zAffinity[0]
16b60 3d 3d 30 20 7c 7c 20 70 52 65 63 3c 3d 70 4c 61  ==0 || pRec<=pLa
16b70 73 74 20 29 3b 0a 20 20 20 20 7d 77 68 69 6c 65  st );.    }while
16b80 28 20 7a 41 66 66 69 6e 69 74 79 5b 30 5d 20 29  ( zAffinity[0] )
16b90 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 6f 70  ;.  }..  /* Loop
16ba0 20 74 68 72 6f 75 67 68 20 74 68 65 20 65 6c 65   through the ele
16bb0 6d 65 6e 74 73 20 74 68 61 74 20 77 69 6c 6c 20  ments that will 
16bc0 6d 61 6b 65 20 75 70 20 74 68 65 20 72 65 63 6f  make up the reco
16bd0 72 64 20 74 6f 20 66 69 67 75 72 65 0a 20 20 2a  rd to figure.  *
16be0 2a 20 6f 75 74 20 68 6f 77 20 6d 75 63 68 20 73  * out how much s
16bf0 70 61 63 65 20 69 73 20 72 65 71 75 69 72 65 64  pace is required
16c00 20 66 6f 72 20 74 68 65 20 6e 65 77 20 72 65 63   for the new rec
16c10 6f 72 64 2e 0a 20 20 2a 2f 0a 20 20 70 52 65 63  ord..  */.  pRec
16c20 20 3d 20 70 4c 61 73 74 3b 0a 20 20 64 6f 7b 0a   = pLast;.  do{.
16c30 20 20 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49      assert( memI
16c40 73 56 61 6c 69 64 28 70 52 65 63 29 20 29 3b 0a  sValid(pRec) );.
16c50 20 20 20 20 70 52 65 63 2d 3e 75 54 65 6d 70 20      pRec->uTemp 
16c60 3d 20 73 65 72 69 61 6c 5f 74 79 70 65 20 3d 20  = serial_type = 
16c70 73 71 6c 69 74 65 33 56 64 62 65 53 65 72 69 61  sqlite3VdbeSeria
16c80 6c 54 79 70 65 28 70 52 65 63 2c 20 66 69 6c 65  lType(pRec, file
16c90 5f 66 6f 72 6d 61 74 2c 20 26 6c 65 6e 29 3b 0a  _format, &len);.
16ca0 20 20 20 20 69 66 28 20 70 52 65 63 2d 3e 66 6c      if( pRec->fl
16cb0 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29  ags & MEM_Zero )
16cc0 7b 0a 20 20 20 20 20 20 69 66 28 20 6e 44 61 74  {.      if( nDat
16cd0 61 20 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  a ){.        if(
16ce0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 45   sqlite3VdbeMemE
16cf0 78 70 61 6e 64 42 6c 6f 62 28 70 52 65 63 29 20  xpandBlob(pRec) 
16d00 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20  ) goto no_mem;. 
16d10 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
16d20 20 20 20 20 6e 5a 65 72 6f 20 2b 3d 20 70 52 65      nZero += pRe
16d30 63 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20  c->u.nZero;.    
16d40 20 20 20 20 6c 65 6e 20 2d 3d 20 70 52 65 63 2d      len -= pRec-
16d50 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 20 20 20 20  >u.nZero;.      
16d60 7d 0a 20 20 20 20 7d 0a 20 20 20 20 6e 44 61 74  }.    }.    nDat
16d70 61 20 2b 3d 20 6c 65 6e 3b 0a 20 20 20 20 74 65  a += len;.    te
16d80 73 74 63 61 73 65 28 20 73 65 72 69 61 6c 5f 74  stcase( serial_t
16d90 79 70 65 3d 3d 31 32 37 20 29 3b 0a 20 20 20 20  ype==127 );.    
16da0 74 65 73 74 63 61 73 65 28 20 73 65 72 69 61 6c  testcase( serial
16db0 5f 74 79 70 65 3d 3d 31 32 38 20 29 3b 0a 20 20  _type==128 );.  
16dc0 20 20 6e 48 64 72 20 2b 3d 20 73 65 72 69 61 6c    nHdr += serial
16dd0 5f 74 79 70 65 3c 3d 31 32 37 20 3f 20 31 20 3a  _type<=127 ? 1 :
16de0 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
16df0 6e 28 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 0a  n(serial_type);.
16e00 20 20 20 20 69 66 28 20 70 52 65 63 3d 3d 70 44      if( pRec==pD
16e10 61 74 61 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  ata0 ) break;.  
16e20 20 20 70 52 65 63 2d 2d 3b 0a 20 20 7d 77 68 69    pRec--;.  }whi
16e30 6c 65 28 31 29 3b 0a 0a 20 20 2f 2a 20 45 56 49  le(1);..  /* EVI
16e40 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32 32 35 36  DENCE-OF: R-2256
16e50 34 2d 31 31 36 34 37 20 54 68 65 20 68 65 61 64  4-11647 The head
16e60 65 72 20 62 65 67 69 6e 73 20 77 69 74 68 20 61  er begins with a
16e70 20 73 69 6e 67 6c 65 20 76 61 72 69 6e 74 0a 20   single varint. 
16e80 20 2a 2a 20 77 68 69 63 68 20 64 65 74 65 72 6d   ** which determ
16e90 69 6e 65 73 20 74 68 65 20 74 6f 74 61 6c 20 6e  ines the total n
16ea0 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
16eb0 6e 20 74 68 65 20 68 65 61 64 65 72 2e 20 54 68  n the header. Th
16ec0 65 20 76 61 72 69 6e 74 0a 20 20 2a 2a 20 76 61  e varint.  ** va
16ed0 6c 75 65 20 69 73 20 74 68 65 20 73 69 7a 65 20  lue is the size 
16ee0 6f 66 20 74 68 65 20 68 65 61 64 65 72 20 69 6e  of the header in
16ef0 20 62 79 74 65 73 20 69 6e 63 6c 75 64 69 6e 67   bytes including
16f00 20 74 68 65 20 73 69 7a 65 20 76 61 72 69 6e 74   the size varint
16f10 0a 20 20 2a 2a 20 69 74 73 65 6c 66 2e 20 2a 2f  .  ** itself. */
16f20 0a 20 20 74 65 73 74 63 61 73 65 28 20 6e 48 64  .  testcase( nHd
16f30 72 3d 3d 31 32 36 20 29 3b 0a 20 20 74 65 73 74  r==126 );.  test
16f40 63 61 73 65 28 20 6e 48 64 72 3d 3d 31 32 37 20  case( nHdr==127 
16f50 29 3b 0a 20 20 69 66 28 20 6e 48 64 72 3c 3d 31  );.  if( nHdr<=1
16f60 32 36 20 29 7b 0a 20 20 20 20 2f 2a 20 54 68 65  26 ){.    /* The
16f70 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 2a 2f 0a   common case */.
16f80 20 20 20 20 6e 48 64 72 20 2b 3d 20 31 3b 0a 20      nHdr += 1;. 
16f90 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a 20 52   }else{.    /* R
16fa0 61 72 65 20 63 61 73 65 20 6f 66 20 61 20 72 65  are case of a re
16fb0 61 6c 6c 79 20 6c 61 72 67 65 20 68 65 61 64 65  ally large heade
16fc0 72 20 2a 2f 0a 20 20 20 20 6e 56 61 72 69 6e 74  r */.    nVarint
16fd0 20 3d 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74   = sqlite3Varint
16fe0 4c 65 6e 28 6e 48 64 72 29 3b 0a 20 20 20 20 6e  Len(nHdr);.    n
16ff0 48 64 72 20 2b 3d 20 6e 56 61 72 69 6e 74 3b 0a  Hdr += nVarint;.
17000 20 20 20 20 69 66 28 20 6e 56 61 72 69 6e 74 3c      if( nVarint<
17010 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e  sqlite3VarintLen
17020 28 6e 48 64 72 29 20 29 20 6e 48 64 72 2b 2b 3b  (nHdr) ) nHdr++;
17030 0a 20 20 7d 0a 20 20 6e 42 79 74 65 20 3d 20 6e  .  }.  nByte = n
17040 48 64 72 2b 6e 44 61 74 61 3b 0a 20 20 69 66 28  Hdr+nData;.  if(
17050 20 6e 42 79 74 65 2b 6e 5a 65 72 6f 3e 64 62 2d   nByte+nZero>db-
17060 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4c  >aLimit[SQLITE_L
17070 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20 29 7b 0a  IMIT_LENGTH] ){.
17080 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f 62 69 67      goto too_big
17090 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4d 61 6b 65  ;.  }..  /* Make
170a0 20 73 75 72 65 20 74 68 65 20 6f 75 74 70 75 74   sure the output
170b0 20 72 65 67 69 73 74 65 72 20 68 61 73 20 61 20   register has a 
170c0 62 75 66 66 65 72 20 6c 61 72 67 65 20 65 6e 6f  buffer large eno
170d0 75 67 68 20 74 6f 20 73 74 6f 72 65 20 0a 20 20  ugh to store .  
170e0 2a 2a 20 74 68 65 20 6e 65 77 20 72 65 63 6f 72  ** the new recor
170f0 64 2e 20 54 68 65 20 6f 75 74 70 75 74 20 72 65  d. The output re
17100 67 69 73 74 65 72 20 28 70 4f 70 2d 3e 70 33 29  gister (pOp->p3)
17110 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20   is not allowed 
17120 74 6f 0a 20 20 2a 2a 20 62 65 20 6f 6e 65 20 6f  to.  ** be one o
17130 66 20 74 68 65 20 69 6e 70 75 74 20 72 65 67 69  f the input regi
17140 73 74 65 72 73 20 28 62 65 63 61 75 73 65 20 74  sters (because t
17150 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
17160 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69 74 65  l to.  ** sqlite
17170 33 56 64 62 65 4d 65 6d 43 6c 65 61 72 41 6e 64  3VdbeMemClearAnd
17180 52 65 73 69 7a 65 28 29 20 63 6f 75 6c 64 20 63  Resize() could c
17190 6c 6f 62 62 65 72 20 74 68 65 20 76 61 6c 75 65  lobber the value
171a0 20 62 65 66 6f 72 65 20 69 74 20 69 73 20 75 73   before it is us
171b0 65 64 29 2e 0a 20 20 2a 2f 0a 20 20 69 66 28 20  ed)..  */.  if( 
171c0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6c  sqlite3VdbeMemCl
171d0 65 61 72 41 6e 64 52 65 73 69 7a 65 28 70 4f 75  earAndResize(pOu
171e0 74 2c 20 28 69 6e 74 29 6e 42 79 74 65 29 20 29  t, (int)nByte) )
171f0 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d 65  {.    goto no_me
17200 6d 3b 0a 20 20 7d 0a 20 20 7a 4e 65 77 52 65 63  m;.  }.  zNewRec
17210 6f 72 64 20 3d 20 28 75 38 20 2a 29 70 4f 75 74  ord = (u8 *)pOut
17220 2d 3e 7a 3b 0a 0a 20 20 2f 2a 20 57 72 69 74 65  ->z;..  /* Write
17230 20 74 68 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20   the record */. 
17240 20 69 20 3d 20 70 75 74 56 61 72 69 6e 74 33 32   i = putVarint32
17250 28 7a 4e 65 77 52 65 63 6f 72 64 2c 20 6e 48 64  (zNewRecord, nHd
17260 72 29 3b 0a 20 20 6a 20 3d 20 6e 48 64 72 3b 0a  r);.  j = nHdr;.
17270 20 20 61 73 73 65 72 74 28 20 70 44 61 74 61 30    assert( pData0
17280 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 70 52 65  <=pLast );.  pRe
17290 63 20 3d 20 70 44 61 74 61 30 3b 0a 20 20 64 6f  c = pData0;.  do
172a0 7b 0a 20 20 20 20 73 65 72 69 61 6c 5f 74 79 70  {.    serial_typ
172b0 65 20 3d 20 70 52 65 63 2d 3e 75 54 65 6d 70 3b  e = pRec->uTemp;
172c0 0a 20 20 20 20 2f 2a 20 45 56 49 44 45 4e 43 45  .    /* EVIDENCE
172d0 2d 4f 46 3a 20 52 2d 30 36 35 32 39 2d 34 37 33  -OF: R-06529-473
172e0 36 32 20 46 6f 6c 6c 6f 77 69 6e 67 20 74 68 65  62 Following the
172f0 20 73 69 7a 65 20 76 61 72 69 6e 74 20 61 72 65   size varint are
17300 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 0a 20 20 20   one or more.   
17310 20 2a 2a 20 61 64 64 69 74 69 6f 6e 61 6c 20 76   ** additional v
17320 61 72 69 6e 74 73 2c 20 6f 6e 65 20 70 65 72 20  arints, one per 
17330 63 6f 6c 75 6d 6e 2e 20 2a 2f 0a 20 20 20 20 69  column. */.    i
17340 20 2b 3d 20 70 75 74 56 61 72 69 6e 74 33 32 28   += putVarint32(
17350 26 7a 4e 65 77 52 65 63 6f 72 64 5b 69 5d 2c 20  &zNewRecord[i], 
17360 73 65 72 69 61 6c 5f 74 79 70 65 29 3b 20 20 20  serial_type);   
17370 20 20 20 20 20 20 20 20 20 2f 2a 20 73 65 72 69           /* seri
17380 61 6c 20 74 79 70 65 20 2a 2f 0a 20 20 20 20 2f  al type */.    /
17390 2a 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52  * EVIDENCE-OF: R
173a0 2d 36 34 35 33 36 2d 35 31 37 32 38 20 54 68 65  -64536-51728 The
173b0 20 76 61 6c 75 65 73 20 66 6f 72 20 65 61 63 68   values for each
173c0 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 72   column in the r
173d0 65 63 6f 72 64 0a 20 20 20 20 2a 2a 20 69 6d 6d  ecord.    ** imm
173e0 65 64 69 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 20  ediately follow 
173f0 74 68 65 20 68 65 61 64 65 72 2e 20 2a 2f 0a 20  the header. */. 
17400 20 20 20 6a 20 2b 3d 20 73 71 6c 69 74 65 33 56     j += sqlite3V
17410 64 62 65 53 65 72 69 61 6c 50 75 74 28 26 7a 4e  dbeSerialPut(&zN
17420 65 77 52 65 63 6f 72 64 5b 6a 5d 2c 20 70 52 65  ewRecord[j], pRe
17430 63 2c 20 73 65 72 69 61 6c 5f 74 79 70 65 29 3b  c, serial_type);
17440 20 2f 2a 20 63 6f 6e 74 65 6e 74 20 2a 2f 0a 20   /* content */. 
17450 20 7d 77 68 69 6c 65 28 20 28 2b 2b 70 52 65 63   }while( (++pRec
17460 29 3c 3d 70 4c 61 73 74 20 29 3b 0a 20 20 61 73  )<=pLast );.  as
17470 73 65 72 74 28 20 69 3d 3d 6e 48 64 72 20 29 3b  sert( i==nHdr );
17480 0a 20 20 61 73 73 65 72 74 28 20 6a 3d 3d 6e 42  .  assert( j==nB
17490 79 74 65 20 29 3b 0a 0a 20 20 61 73 73 65 72 74  yte );..  assert
174a0 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70  ( pOp->p3>0 && p
174b0 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d  Op->p3<=(p->nMem
174c0 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29  +1 - p->nCursor)
174d0 20 29 3b 0a 20 20 70 4f 75 74 2d 3e 6e 20 3d 20   );.  pOut->n = 
174e0 28 69 6e 74 29 6e 42 79 74 65 3b 0a 20 20 70 4f  (int)nByte;.  pO
174f0 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f  ut->flags = MEM_
17500 42 6c 6f 62 3b 0a 20 20 69 66 28 20 6e 5a 65 72  Blob;.  if( nZer
17510 6f 20 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 75  o ){.    pOut->u
17520 2e 6e 5a 65 72 6f 20 3d 20 6e 5a 65 72 6f 3b 0a  .nZero = nZero;.
17530 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20      pOut->flags 
17540 7c 3d 20 4d 45 4d 5f 5a 65 72 6f 3b 0a 20 20 7d  |= MEM_Zero;.  }
17550 0a 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53  .  pOut->enc = S
17560 51 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20  QLITE_UTF8;  /* 
17570 49 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62  In case the blob
17580 20 69 73 20 65 76 65 72 20 63 6f 6e 76 65 72 74   is ever convert
17590 65 64 20 74 6f 20 74 65 78 74 20 2a 2f 0a 20 20  ed to text */.  
175a0 52 45 47 49 53 54 45 52 5f 54 52 41 43 45 28 70  REGISTER_TRACE(p
175b0 4f 70 2d 3e 70 33 2c 20 70 4f 75 74 29 3b 0a 20  Op->p3, pOut);. 
175c0 20 55 50 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42   UPDATE_MAX_BLOB
175d0 53 49 5a 45 28 70 4f 75 74 29 3b 0a 20 20 62 72  SIZE(pOut);.  br
175e0 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
175f0 65 3a 20 43 6f 75 6e 74 20 50 31 20 50 32 20 2a  e: Count P1 P2 *
17600 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73   * *.** Synopsis
17610 3a 20 72 5b 50 32 5d 3d 63 6f 75 6e 74 28 29 0a  : r[P2]=count().
17620 2a 2a 0a 2a 2a 20 53 74 6f 72 65 20 74 68 65 20  **.** Store the 
17630 6e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  number of entrie
17640 73 20 28 61 6e 20 69 6e 74 65 67 65 72 20 76 61  s (an integer va
17650 6c 75 65 29 20 69 6e 20 74 68 65 20 74 61 62 6c  lue) in the tabl
17660 65 20 6f 72 20 69 6e 64 65 78 20 0a 2a 2a 20 6f  e or index .** o
17670 70 65 6e 65 64 20 62 79 20 63 75 72 73 6f 72 20  pened by cursor 
17680 50 31 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  P1 in register P
17690 32 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  2.*/.#ifndef SQL
176a0 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
176b0 55 4e 54 0a 63 61 73 65 20 4f 50 5f 43 6f 75 6e  UNT.case OP_Coun
176c0 74 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20  t: {         /* 
176d0 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34 20 6e 45  out2 */.  i64 nE
176e0 6e 74 72 79 3b 0a 20 20 42 74 43 75 72 73 6f 72  ntry;.  BtCursor
176f0 20 2a 70 43 72 73 72 3b 0a 0a 20 20 61 73 73 65   *pCrsr;..  asse
17700 72 74 28 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70  rt( p->apCsr[pOp
17710 2d 3e 70 31 5d 2d 3e 65 43 75 72 54 79 70 65 3d  ->p1]->eCurType=
17720 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
17730 3b 0a 20 20 70 43 72 73 72 20 3d 20 70 2d 3e 61  ;.  pCrsr = p->a
17740 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 75  pCsr[pOp->p1]->u
17750 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 61 73 73  c.pCursor;.  ass
17760 65 72 74 28 20 70 43 72 73 72 20 29 3b 0a 20 20  ert( pCrsr );.  
17770 6e 45 6e 74 72 79 20 3d 20 30 3b 20 20 2f 2a 20  nEntry = 0;  /* 
17780 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
17790 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
177a0 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
177b0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
177c0 72 65 65 43 6f 75 6e 74 28 70 43 72 73 72 2c 20  reeCount(pCrsr, 
177d0 26 6e 45 6e 74 72 79 29 3b 0a 20 20 69 66 28 20  &nEntry);.  if( 
177e0 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
177f0 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
17800 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
17810 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
17820 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 6e 45 6e   pOut->u.i = nEn
17830 74 72 79 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  try;.  break;.}.
17840 23 65 6e 64 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64  #endif../* Opcod
17850 65 3a 20 53 61 76 65 70 6f 69 6e 74 20 50 31 20  e: Savepoint P1 
17860 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 4f  * * P4 *.**.** O
17870 70 65 6e 2c 20 72 65 6c 65 61 73 65 20 6f 72 20  pen, release or 
17880 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 73 61 76  rollback the sav
17890 65 70 6f 69 6e 74 20 6e 61 6d 65 64 20 62 79 20  epoint named by 
178a0 70 61 72 61 6d 65 74 65 72 20 50 34 2c 20 64 65  parameter P4, de
178b0 70 65 6e 64 69 6e 67 0a 2a 2a 20 6f 6e 20 74 68  pending.** on th
178c0 65 20 76 61 6c 75 65 20 6f 66 20 50 31 2e 20 54  e value of P1. T
178d0 6f 20 6f 70 65 6e 20 61 20 6e 65 77 20 73 61 76  o open a new sav
178e0 65 70 6f 69 6e 74 2c 20 50 31 3d 3d 30 2e 20 54  epoint, P1==0. T
178f0 6f 20 72 65 6c 65 61 73 65 20 28 63 6f 6d 6d 69  o release (commi
17900 74 29 20 61 6e 0a 2a 2a 20 65 78 69 73 74 69 6e  t) an.** existin
17910 67 20 73 61 76 65 70 6f 69 6e 74 2c 20 50 31 3d  g savepoint, P1=
17920 3d 31 2c 20 6f 72 20 74 6f 20 72 6f 6c 6c 62 61  =1, or to rollba
17930 63 6b 20 61 6e 20 65 78 69 73 74 69 6e 67 20 73  ck an existing s
17940 61 76 65 70 6f 69 6e 74 20 50 31 3d 3d 32 2e 0a  avepoint P1==2..
17950 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 61 76 65 70  */.case OP_Savep
17960 6f 69 6e 74 3a 20 7b 0a 20 20 69 6e 74 20 70 31  oint: {.  int p1
17970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
17980 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
17990 75 65 20 6f 66 20 50 31 20 6f 70 65 72 61 6e 64  ue of P1 operand
179a0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d   */.  char *zNam
179b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
179c0 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
179d0 20 73 61 76 65 70 6f 69 6e 74 20 2a 2f 0a 20 20   savepoint */.  
179e0 69 6e 74 20 6e 4e 61 6d 65 3b 0a 20 20 53 61 76  int nName;.  Sav
179f0 65 70 6f 69 6e 74 20 2a 70 4e 65 77 3b 0a 20 20  epoint *pNew;.  
17a00 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65  Savepoint *pSave
17a10 70 6f 69 6e 74 3b 0a 20 20 53 61 76 65 70 6f 69  point;.  Savepoi
17a20 6e 74 20 2a 70 54 6d 70 3b 0a 20 20 69 6e 74 20  nt *pTmp;.  int 
17a30 69 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 69 6e  iSavepoint;.  in
17a40 74 20 69 69 3b 0a 0a 20 20 70 31 20 3d 20 70 4f  t ii;..  p1 = pO
17a50 70 2d 3e 70 31 3b 0a 20 20 7a 4e 61 6d 65 20 3d  p->p1;.  zName =
17a60 20 70 4f 70 2d 3e 70 34 2e 7a 3b 0a 0a 20 20 2f   pOp->p4.z;..  /
17a70 2a 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68  * Assert that th
17a80 65 20 70 31 20 70 61 72 61 6d 65 74 65 72 20 69  e p1 parameter i
17a90 73 20 76 61 6c 69 64 2e 20 41 6c 73 6f 20 74 68  s valid. Also th
17aa0 61 74 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  at if there is n
17ab0 6f 20 6f 70 65 6e 0a 20 20 2a 2a 20 74 72 61 6e  o open.  ** tran
17ac0 73 61 63 74 69 6f 6e 2c 20 74 68 65 6e 20 74 68  saction, then th
17ad0 65 72 65 20 63 61 6e 6e 6f 74 20 62 65 20 61 6e  ere cannot be an
17ae0 79 20 73 61 76 65 70 6f 69 6e 74 73 2e 20 0a 20  y savepoints. . 
17af0 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 64 62   */.  assert( db
17b00 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3d 3d 30 20  ->pSavepoint==0 
17b10 7c 7c 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  || db->autoCommi
17b20 74 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  t==0 );.  assert
17b30 28 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  ( p1==SAVEPOINT_
17b40 42 45 47 49 4e 7c 7c 70 31 3d 3d 53 41 56 45 50  BEGIN||p1==SAVEP
17b50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 7c 7c 70 31  OINT_RELEASE||p1
17b60 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c  ==SAVEPOINT_ROLL
17b70 42 41 43 4b 20 29 3b 0a 20 20 61 73 73 65 72 74  BACK );.  assert
17b80 28 20 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74  ( db->pSavepoint
17b90 20 7c 7c 20 64 62 2d 3e 69 73 54 72 61 6e 73 61   || db->isTransa
17ba0 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3d 3d  ctionSavepoint==
17bb0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 63  0 );.  assert( c
17bc0 68 65 63 6b 53 61 76 65 70 6f 69 6e 74 43 6f 75  heckSavepointCou
17bd0 6e 74 28 64 62 29 20 29 3b 0a 20 20 61 73 73 65  nt(db) );.  asse
17be0 72 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72  rt( p->bIsReader
17bf0 20 29 3b 0a 0a 20 20 69 66 28 20 70 31 3d 3d 53   );..  if( p1==S
17c00 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 29  AVEPOINT_BEGIN )
17c10 7b 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 56  {.    if( db->nV
17c20 64 62 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20  dbeWrite>0 ){.  
17c30 20 20 20 20 2f 2a 20 41 20 6e 65 77 20 73 61 76      /* A new sav
17c40 65 70 6f 69 6e 74 20 63 61 6e 6e 6f 74 20 62 65  epoint cannot be
17c50 20 63 72 65 61 74 65 64 20 69 66 20 74 68 65 72   created if ther
17c60 65 20 61 72 65 20 61 63 74 69 76 65 20 77 72 69  e are active wri
17c70 74 65 20 0a 20 20 20 20 20 20 2a 2a 20 73 74 61  te .      ** sta
17c80 74 65 6d 65 6e 74 73 20 28 69 2e 65 2e 20 6f 70  tements (i.e. op
17c90 65 6e 20 72 65 61 64 2f 77 72 69 74 65 20 69 6e  en read/write in
17ca0 63 72 65 6d 65 6e 74 61 6c 20 62 6c 6f 62 20 68  cremental blob h
17cb0 61 6e 64 6c 65 73 29 2e 0a 20 20 20 20 20 20 2a  andles)..      *
17cc0 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
17cd0 64 62 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e  dbeError(p, "can
17ce0 6e 6f 74 20 6f 70 65 6e 20 73 61 76 65 70 6f 69  not open savepoi
17cf0 6e 74 20 2d 20 53 51 4c 20 73 74 61 74 65 6d 65  nt - SQL stateme
17d00 6e 74 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22  nts in progress"
17d10 29 3b 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51  );.      rc = SQ
17d20 4c 49 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d  LITE_BUSY;.    }
17d30 65 6c 73 65 7b 0a 20 20 20 20 20 20 6e 4e 61 6d  else{.      nNam
17d40 65 20 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65  e = sqlite3Strle
17d50 6e 33 30 28 7a 4e 61 6d 65 29 3b 0a 0a 23 69 66  n30(zName);..#if
17d60 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
17d70 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
17d80 20 20 20 20 2f 2a 20 54 68 69 73 20 63 61 6c 6c      /* This call
17d90 20 69 73 20 4f 6b 20 65 76 65 6e 20 69 66 20 74   is Ok even if t
17da0 68 69 73 20 73 61 76 65 70 6f 69 6e 74 20 69 73  his savepoint is
17db0 20 61 63 74 75 61 6c 6c 79 20 61 20 74 72 61 6e   actually a tran
17dc0 73 61 63 74 69 6f 6e 0a 20 20 20 20 20 20 2a 2a  saction.      **
17dd0 20 73 61 76 65 70 6f 69 6e 74 20 28 61 6e 64 20   savepoint (and 
17de0 74 68 65 72 65 66 6f 72 65 20 73 68 6f 75 6c 64  therefore should
17df0 20 6e 6f 74 20 70 72 6f 6d 70 74 20 78 53 61 76   not prompt xSav
17e00 65 70 6f 69 6e 74 28 29 29 20 63 61 6c 6c 62 61  epoint()) callba
17e10 63 6b 73 2e 0a 20 20 20 20 20 20 2a 2a 20 49 66  cks..      ** If
17e20 20 74 68 69 73 20 69 73 20 61 20 74 72 61 6e 73   this is a trans
17e30 61 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74  action savepoint
17e40 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2c 20 69   being opened, i
17e50 74 20 69 73 20 67 75 61 72 61 6e 74 65 65 64 0a  t is guaranteed.
17e60 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
17e70 65 20 64 62 2d 3e 61 56 54 72 61 6e 73 5b 5d 20  e db->aVTrans[] 
17e80 61 72 72 61 79 20 69 73 20 65 6d 70 74 79 2e 20  array is empty. 
17e90 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
17ea0 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
17eb0 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e 56 54 72 61  ==0 || db->nVTra
17ec0 6e 73 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 72  ns==0 );.      r
17ed0 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 53  c = sqlite3VtabS
17ee0 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 53 41 56  avepoint(db, SAV
17ef0 45 50 4f 49 4e 54 5f 42 45 47 49 4e 2c 0a 20 20  EPOINT_BEGIN,.  
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62                db
17f20 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 64 62 2d  ->nStatement+db-
17f30 3e 6e 53 61 76 65 70 6f 69 6e 74 29 3b 0a 20 20  >nSavepoint);.  
17f40 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
17f50 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
17f60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
17f70 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 2f  .#endif..      /
17f80 2a 20 43 72 65 61 74 65 20 61 20 6e 65 77 20 73  * Create a new s
17f90 61 76 65 70 6f 69 6e 74 20 73 74 72 75 63 74 75  avepoint structu
17fa0 72 65 2e 20 2a 2f 0a 20 20 20 20 20 20 70 4e 65  re. */.      pNe
17fb0 77 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  w = sqlite3DbMal
17fc0 6c 6f 63 52 61 77 4e 4e 28 64 62 2c 20 73 69 7a  locRawNN(db, siz
17fd0 65 6f 66 28 53 61 76 65 70 6f 69 6e 74 29 2b 6e  eof(Savepoint)+n
17fe0 4e 61 6d 65 2b 31 29 3b 0a 20 20 20 20 20 20 69  Name+1);.      i
17ff0 66 28 20 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  f( pNew ){.     
18000 20 20 20 70 4e 65 77 2d 3e 7a 4e 61 6d 65 20 3d     pNew->zName =
18010 20 28 63 68 61 72 20 2a 29 26 70 4e 65 77 5b 31   (char *)&pNew[1
18020 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65 6d 63 70  ];.        memcp
18030 79 28 70 4e 65 77 2d 3e 7a 4e 61 6d 65 2c 20 7a  y(pNew->zName, z
18040 4e 61 6d 65 2c 20 6e 4e 61 6d 65 2b 31 29 3b 0a  Name, nName+1);.
18050 20 20 20 20 0a 20 20 20 20 20 20 20 20 2f 2a 20      .        /* 
18060 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6f  If there is no o
18070 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  pen transaction,
18080 20 74 68 65 6e 20 6d 61 72 6b 20 74 68 69 73 20   then mark this 
18090 61 73 20 61 20 73 70 65 63 69 61 6c 0a 20 20 20  as a special.   
180a0 20 20 20 20 20 2a 2a 20 22 74 72 61 6e 73 61 63       ** "transac
180b0 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 22 2e  tion savepoint".
180c0 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 66 28 20   */.        if( 
180d0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
180e0 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e  {.          db->
180f0 61 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 30 3b 0a  autoCommit = 0;.
18100 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 69 73            db->is
18110 54 72 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70  TransactionSavep
18120 6f 69 6e 74 20 3d 20 31 3b 0a 20 20 20 20 20 20  oint = 1;.      
18130 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
18140 20 20 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e     db->nSavepoin
18150 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 0a  t++;.        }..
18160 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 6e 6b 20          /* Link 
18170 74 68 65 20 6e 65 77 20 73 61 76 65 70 6f 69 6e  the new savepoin
18180 74 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62  t into the datab
18190 61 73 65 20 68 61 6e 64 6c 65 27 73 20 6c 69 73  ase handle's lis
181a0 74 2e 20 2a 2f 0a 20 20 20 20 20 20 20 20 70 4e  t. */.        pN
181b0 65 77 2d 3e 70 4e 65 78 74 20 3d 20 64 62 2d 3e  ew->pNext = db->
181c0 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20 20  pSavepoint;.    
181d0 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f 69      db->pSavepoi
181e0 6e 74 20 3d 20 70 4e 65 77 3b 0a 20 20 20 20 20  nt = pNew;.     
181f0 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72 72     pNew->nDeferr
18200 65 64 43 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65  edCons = db->nDe
18210 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20  ferredCons;.    
18220 20 20 20 20 70 4e 65 77 2d 3e 6e 44 65 66 65 72      pNew->nDefer
18230 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 64 62 2d  redImmCons = db-
18240 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
18250 73 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  s;.      }.    }
18260 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 69 53  .  }else{.    iS
18270 61 76 65 70 6f 69 6e 74 20 3d 20 30 3b 0a 0a 20  avepoint = 0;.. 
18280 20 20 20 2f 2a 20 46 69 6e 64 20 74 68 65 20 6e     /* Find the n
18290 61 6d 65 64 20 73 61 76 65 70 6f 69 6e 74 2e 20  amed savepoint. 
182a0 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 73  If there is no s
182b0 75 63 68 20 73 61 76 65 70 6f 69 6e 74 2c 20 74  uch savepoint, t
182c0 68 65 6e 20 61 6e 0a 20 20 20 20 2a 2a 20 61 6e  hen an.    ** an
182d0 20 65 72 72 6f 72 20 69 73 20 72 65 74 75 72 6e   error is return
182e0 65 64 20 74 6f 20 74 68 65 20 75 73 65 72 2e 20  ed to the user. 
182f0 20 2a 2f 0a 20 20 20 20 66 6f 72 28 0a 20 20 20   */.    for(.   
18300 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20 3d 20     pSavepoint = 
18310 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 3b 20  db->pSavepoint; 
18320 0a 20 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e  .      pSavepoin
18330 74 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 49  t && sqlite3StrI
18340 43 6d 70 28 70 53 61 76 65 70 6f 69 6e 74 2d 3e  Cmp(pSavepoint->
18350 7a 4e 61 6d 65 2c 20 7a 4e 61 6d 65 29 3b 0a 20  zName, zName);. 
18360 20 20 20 20 20 70 53 61 76 65 70 6f 69 6e 74 20       pSavepoint 
18370 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e  = pSavepoint->pN
18380 65 78 74 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  ext.    ){.     
18390 20 69 53 61 76 65 70 6f 69 6e 74 2b 2b 3b 0a 20   iSavepoint++;. 
183a0 20 20 20 7d 0a 20 20 20 20 69 66 28 20 21 70 53     }.    if( !pS
183b0 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20 20 20  avepoint ){.    
183c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72 72    sqlite3VdbeErr
183d0 6f 72 28 70 2c 20 22 6e 6f 20 73 75 63 68 20 73  or(p, "no such s
183e0 61 76 65 70 6f 69 6e 74 3a 20 25 73 22 2c 20 7a  avepoint: %s", z
183f0 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 72 63 20  Name);.      rc 
18400 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a  = SQLITE_ERROR;.
18410 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 64 62      }else if( db
18420 2d 3e 6e 56 64 62 65 57 72 69 74 65 3e 30 20 26  ->nVdbeWrite>0 &
18430 26 20 70 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f  & p1==SAVEPOINT_
18440 52 45 4c 45 41 53 45 20 29 7b 0a 20 20 20 20 20  RELEASE ){.     
18450 20 2f 2a 20 49 74 20 69 73 20 6e 6f 74 20 70 6f   /* It is not po
18460 73 73 69 62 6c 65 20 74 6f 20 72 65 6c 65 61 73  ssible to releas
18470 65 20 28 63 6f 6d 6d 69 74 29 20 61 20 73 61 76  e (commit) a sav
18480 65 70 6f 69 6e 74 20 69 66 20 74 68 65 72 65 20  epoint if there 
18490 61 72 65 20 0a 20 20 20 20 20 20 2a 2a 20 61 63  are .      ** ac
184a0 74 69 76 65 20 77 72 69 74 65 20 73 74 61 74 65  tive write state
184b0 6d 65 6e 74 73 2e 0a 20 20 20 20 20 20 2a 2f 0a  ments..      */.
184c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
184d0 65 45 72 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f  eError(p, "canno
184e0 74 20 72 65 6c 65 61 73 65 20 73 61 76 65 70 6f  t release savepo
184f0 69 6e 74 20 2d 20 22 0a 20 20 20 20 20 20 20 20  int - ".        
18500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18510 20 20 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74    "SQL statement
18520 73 20 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b  s in progress");
18530 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
18540 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 7d 65 6c  TE_BUSY;.    }el
18550 73 65 7b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 65  se{..      /* De
18560 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
18570 6f 72 20 6e 6f 74 20 74 68 69 73 20 69 73 20 61  or not this is a
18580 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76   transaction sav
18590 65 70 6f 69 6e 74 2e 20 49 66 20 73 6f 2c 0a 20  epoint. If so,. 
185a0 20 20 20 20 20 2a 2a 20 61 6e 64 20 74 68 69 73       ** and this
185b0 20 69 73 20 61 20 52 45 4c 45 41 53 45 20 63 6f   is a RELEASE co
185c0 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 74 68 65 20  mmand, then the 
185d0 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63 74  current transact
185e0 69 6f 6e 20 0a 20 20 20 20 20 20 2a 2a 20 69 73  ion .      ** is
185f0 20 63 6f 6d 6d 69 74 74 65 64 2e 20 0a 20 20 20   committed. .   
18600 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 6e 74 20     */.      int 
18610 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20  isTransaction = 
18620 70 53 61 76 65 70 6f 69 6e 74 2d 3e 70 4e 65 78  pSavepoint->pNex
18630 74 3d 3d 30 20 26 26 20 64 62 2d 3e 69 73 54 72  t==0 && db->isTr
18640 61 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69  ansactionSavepoi
18650 6e 74 3b 0a 20 20 20 20 20 20 69 66 28 20 69 73  nt;.      if( is
18660 54 72 61 6e 73 61 63 74 69 6f 6e 20 26 26 20 70  Transaction && p
18670 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c  1==SAVEPOINT_REL
18680 45 41 53 45 20 29 7b 0a 20 20 20 20 20 20 20 20  EASE ){.        
18690 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
186a0 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
186b0 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
186c0 7b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  {.          goto
186d0 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
186e0 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
186f0 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 3d  db->autoCommit =
18700 20 31 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20   1;.        if( 
18710 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74 28  sqlite3VdbeHalt(
18720 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 20  p)==SQLITE_BUSY 
18730 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 2d 3e  ){.          p->
18740 70 63 20 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d  pc = (int)(pOp -
18750 20 61 4f 70 29 3b 0a 20 20 20 20 20 20 20 20 20   aOp);.         
18760 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
18770 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 70  = 0;.          p
18780 2d 3e 72 63 20 3d 20 72 63 20 3d 20 53 51 4c 49  ->rc = rc = SQLI
18790 54 45 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 20  TE_BUSY;.       
187a0 20 20 20 67 6f 74 6f 20 76 64 62 65 5f 72 65 74     goto vdbe_ret
187b0 75 72 6e 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  urn;.        }. 
187c0 20 20 20 20 20 20 20 64 62 2d 3e 69 73 54 72 61         db->isTra
187d0 6e 73 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e  nsactionSavepoin
187e0 74 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 72  t = 0;.        r
187f0 63 20 3d 20 70 2d 3e 72 63 3b 0a 20 20 20 20 20  c = p->rc;.     
18800 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
18810 69 6e 74 20 69 73 53 63 68 65 6d 61 43 68 61 6e  int isSchemaChan
18820 67 65 3b 0a 20 20 20 20 20 20 20 20 69 53 61 76  ge;.        iSav
18830 65 70 6f 69 6e 74 20 3d 20 64 62 2d 3e 6e 53 61  epoint = db->nSa
18840 76 65 70 6f 69 6e 74 20 2d 20 69 53 61 76 65 70  vepoint - iSavep
18850 6f 69 6e 74 20 2d 20 31 3b 0a 20 20 20 20 20 20  oint - 1;.      
18860 20 20 69 66 28 20 70 31 3d 3d 53 41 56 45 50 4f    if( p1==SAVEPO
18870 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20 29 7b 0a  INT_ROLLBACK ){.
18880 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68 65            isSche
18890 6d 61 43 68 61 6e 67 65 20 3d 20 28 64 62 2d 3e  maChange = (db->
188a0 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 49  flags & SQLITE_I
188b0 6e 74 65 72 6e 43 68 61 6e 67 65 73 29 21 3d 30  nternChanges)!=0
188c0 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
188d0 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
188e0 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
188f0 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
18900 33 42 74 72 65 65 54 72 69 70 41 6c 6c 43 75 72  3BtreeTripAllCur
18910 73 6f 72 73 28 64 62 2d 3e 61 44 62 5b 69 69 5d  sors(db->aDb[ii]
18920 2e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20  .pBt,.          
18930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18940 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
18950 49 54 45 5f 41 42 4f 52 54 5f 52 4f 4c 4c 42 41  ITE_ABORT_ROLLBA
18960 43 4b 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  CK,.            
18970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18980 20 20 20 20 20 20 20 20 20 20 20 69 73 53 63 68             isSch
18990 65 6d 61 43 68 61 6e 67 65 3d 3d 30 29 3b 0a 20  emaChange==0);. 
189a0 20 20 20 20 20 20 20 20 20 20 20 69 66 28 20 72             if( r
189b0 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67  c!=SQLITE_OK ) g
189c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
189d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 20 20  _error;.        
189e0 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c 73    }.        }els
189f0 65 7b 0a 20 20 20 20 20 20 20 20 20 20 69 73 53  e{.          isS
18a00 63 68 65 6d 61 43 68 61 6e 67 65 20 3d 20 30 3b  chemaChange = 0;
18a10 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
18a20 20 20 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c     for(ii=0; ii<
18a30 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a  db->nDb; ii++){.
18a40 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 73            rc = s
18a50 71 6c 69 74 65 33 42 74 72 65 65 53 61 76 65 70  qlite3BtreeSavep
18a60 6f 69 6e 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d  oint(db->aDb[ii]
18a70 2e 70 42 74 2c 20 70 31 2c 20 69 53 61 76 65 70  .pBt, p1, iSavep
18a80 6f 69 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  oint);.         
18a90 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f   if( rc!=SQLITE_
18aa0 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  OK ){.          
18ab0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
18ac0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20  _to_error;.     
18ad0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
18ae0 0a 20 20 20 20 20 20 20 20 69 66 28 20 69 73 53  .        if( isS
18af0 63 68 65 6d 61 43 68 61 6e 67 65 20 29 7b 0a 20  chemaChange ){. 
18b00 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
18b10 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
18b20 61 74 65 6d 65 6e 74 73 28 64 62 29 3b 0a 20 20  atements(db);.  
18b30 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52          sqlite3R
18b40 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66  esetAllSchemasOf
18b50 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29 3b 0a  Connection(db);.
18b60 20 20 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c            db->fl
18b70 61 67 73 20 3d 20 28 64 62 2d 3e 66 6c 61 67 73  ags = (db->flags
18b80 20 7c 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e   | SQLITE_Intern
18b90 43 68 61 6e 67 65 73 29 3b 0a 20 20 20 20 20 20  Changes);.      
18ba0 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20    }.      }.  . 
18bb0 20 20 20 20 20 2f 2a 20 52 65 67 61 72 64 6c 65       /* Regardle
18bc0 73 73 20 6f 66 20 77 68 65 74 68 65 72 20 74 68  ss of whether th
18bd0 69 73 20 69 73 20 61 20 52 45 4c 45 41 53 45 20  is is a RELEASE 
18be0 6f 72 20 52 4f 4c 4c 42 41 43 4b 2c 20 64 65 73  or ROLLBACK, des
18bf0 74 72 6f 79 20 61 6c 6c 20 0a 20 20 20 20 20 20  troy all .      
18c00 2a 2a 20 73 61 76 65 70 6f 69 6e 74 73 20 6e 65  ** savepoints ne
18c10 73 74 65 64 20 69 6e 73 69 64 65 20 6f 66 20 74  sted inside of t
18c20 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62 65 69  he savepoint bei
18c30 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e 2e 20  ng operated on. 
18c40 2a 2f 0a 20 20 20 20 20 20 77 68 69 6c 65 28 20  */.      while( 
18c50 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 21 3d  db->pSavepoint!=
18c60 70 53 61 76 65 70 6f 69 6e 74 20 29 7b 0a 20 20  pSavepoint ){.  
18c70 20 20 20 20 20 20 70 54 6d 70 20 3d 20 64 62 2d        pTmp = db-
18c80 3e 70 53 61 76 65 70 6f 69 6e 74 3b 0a 20 20 20  >pSavepoint;.   
18c90 20 20 20 20 20 64 62 2d 3e 70 53 61 76 65 70 6f       db->pSavepo
18ca0 69 6e 74 20 3d 20 70 54 6d 70 2d 3e 70 4e 65 78  int = pTmp->pNex
18cb0 74 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  t;.        sqlit
18cc0 65 33 44 62 46 72 65 65 28 64 62 2c 20 70 54 6d  e3DbFree(db, pTm
18cd0 70 29 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e  p);.        db->
18ce0 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20 20  nSavepoint--;.  
18cf0 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20      }..      /* 
18d00 49 66 20 69 74 20 69 73 20 61 20 52 45 4c 45 41  If it is a RELEA
18d10 53 45 2c 20 74 68 65 6e 20 64 65 73 74 72 6f 79  SE, then destroy
18d20 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20 62   the savepoint b
18d30 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
18d40 20 0a 20 20 20 20 20 20 2a 2a 20 74 6f 6f 2e 20   .      ** too. 
18d50 49 66 20 69 74 20 69 73 20 61 20 52 4f 4c 4c 42  If it is a ROLLB
18d60 41 43 4b 20 54 4f 2c 20 74 68 65 6e 20 73 65 74  ACK TO, then set
18d70 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 64   the number of d
18d80 65 66 65 72 72 65 64 20 0a 20 20 20 20 20 20 2a  eferred .      *
18d90 2a 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69 6f  * constraint vio
18da0 6c 61 74 69 6f 6e 73 20 70 72 65 73 65 6e 74 20  lations present 
18db0 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
18dc0 74 6f 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  to the value sto
18dd0 72 65 64 0a 20 20 20 20 20 20 2a 2a 20 77 68 65  red.      ** whe
18de0 6e 20 74 68 65 20 73 61 76 65 70 6f 69 6e 74 20  n the savepoint 
18df0 77 61 73 20 63 72 65 61 74 65 64 2e 20 20 2a 2f  was created.  */
18e00 0a 20 20 20 20 20 20 69 66 28 20 70 31 3d 3d 53  .      if( p1==S
18e10 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45  AVEPOINT_RELEASE
18e20 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
18e30 72 74 28 20 70 53 61 76 65 70 6f 69 6e 74 3d 3d  rt( pSavepoint==
18e40 64 62 2d 3e 70 53 61 76 65 70 6f 69 6e 74 20 29  db->pSavepoint )
18e50 3b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 70 53  ;.        db->pS
18e60 61 76 65 70 6f 69 6e 74 20 3d 20 70 53 61 76 65  avepoint = pSave
18e70 70 6f 69 6e 74 2d 3e 70 4e 65 78 74 3b 0a 20 20  point->pNext;.  
18e80 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46        sqlite3DbF
18e90 72 65 65 28 64 62 2c 20 70 53 61 76 65 70 6f 69  ree(db, pSavepoi
18ea0 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  nt);.        if(
18eb0 20 21 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 20   !isTransaction 
18ec0 29 7b 0a 20 20 20 20 20 20 20 20 20 20 64 62 2d  ){.          db-
18ed0 3e 6e 53 61 76 65 70 6f 69 6e 74 2d 2d 3b 0a 20  >nSavepoint--;. 
18ee0 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
18ef0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64 62  else{.        db
18f00 2d 3e 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 20  ->nDeferredCons 
18f10 3d 20 70 53 61 76 65 70 6f 69 6e 74 2d 3e 6e 44  = pSavepoint->nD
18f20 65 66 65 72 72 65 64 43 6f 6e 73 3b 0a 20 20 20  eferredCons;.   
18f30 20 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72       db->nDeferr
18f40 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 70 53 61 76  edImmCons = pSav
18f50 65 70 6f 69 6e 74 2d 3e 6e 44 65 66 65 72 72 65  epoint->nDeferre
18f60 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 20 20  dImmCons;.      
18f70 7d 0a 0a 20 20 20 20 20 20 69 66 28 20 21 69 73  }..      if( !is
18f80 54 72 61 6e 73 61 63 74 69 6f 6e 20 7c 7c 20 70  Transaction || p
18f90 31 3d 3d 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  1==SAVEPOINT_ROL
18fa0 4c 42 41 43 4b 20 29 7b 0a 20 20 20 20 20 20 20  LBACK ){.       
18fb0 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61   rc = sqlite3Vta
18fc0 62 53 61 76 65 70 6f 69 6e 74 28 64 62 2c 20 70  bSavepoint(db, p
18fd0 31 2c 20 69 53 61 76 65 70 6f 69 6e 74 29 3b 0a  1, iSavepoint);.
18fe0 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
18ff0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
19000 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
19010 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ror;.      }.   
19020 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
19030 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
19040 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 62 72  _to_error;..  br
19050 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
19060 65 3a 20 41 75 74 6f 43 6f 6d 6d 69 74 20 50 31  e: AutoCommit P1
19070 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20   P2 * * *.**.** 
19080 53 65 74 20 74 68 65 20 64 61 74 61 62 61 73 65  Set the database
19090 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
190a0 67 20 74 6f 20 50 31 20 28 31 20 6f 72 20 30 29  g to P1 (1 or 0)
190b0 2e 20 49 66 20 50 32 20 69 73 20 74 72 75 65 2c  . If P2 is true,
190c0 20 72 6f 6c 6c 0a 2a 2a 20 62 61 63 6b 20 61 6e   roll.** back an
190d0 79 20 63 75 72 72 65 6e 74 6c 79 20 61 63 74 69  y currently acti
190e0 76 65 20 62 74 72 65 65 20 74 72 61 6e 73 61 63  ve btree transac
190f0 74 69 6f 6e 73 2e 20 49 66 20 74 68 65 72 65 20  tions. If there 
19100 61 72 65 20 61 6e 79 20 61 63 74 69 76 65 0a 2a  are any active.*
19110 2a 20 56 4d 73 20 28 61 70 61 72 74 20 66 72 6f  * VMs (apart fro
19120 6d 20 74 68 69 73 20 6f 6e 65 29 2c 20 74 68 65  m this one), the
19130 6e 20 61 20 52 4f 4c 4c 42 41 43 4b 20 66 61 69  n a ROLLBACK fai
19140 6c 73 2e 20 20 41 20 43 4f 4d 4d 49 54 20 66 61  ls.  A COMMIT fa
19150 69 6c 73 20 69 66 0a 2a 2a 20 74 68 65 72 65 20  ils if.** there 
19160 61 72 65 20 61 63 74 69 76 65 20 77 72 69 74 69  are active writi
19170 6e 67 20 56 4d 73 20 6f 72 20 61 63 74 69 76 65  ng VMs or active
19180 20 56 4d 73 20 74 68 61 74 20 75 73 65 20 73 68   VMs that use sh
19190 61 72 65 64 20 63 61 63 68 65 2e 0a 2a 2a 0a 2a  ared cache..**.*
191a0 2a 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  * This instructi
191b0 6f 6e 20 63 61 75 73 65 73 20 74 68 65 20 56 4d  on causes the VM
191c0 20 74 6f 20 68 61 6c 74 2e 0a 2a 2f 0a 63 61 73   to halt..*/.cas
191d0 65 20 4f 50 5f 41 75 74 6f 43 6f 6d 6d 69 74 3a  e OP_AutoCommit:
191e0 20 7b 0a 20 20 69 6e 74 20 64 65 73 69 72 65 64   {.  int desired
191f0 41 75 74 6f 43 6f 6d 6d 69 74 3b 0a 20 20 69 6e  AutoCommit;.  in
19200 74 20 69 52 6f 6c 6c 62 61 63 6b 3b 0a 0a 20 20  t iRollback;..  
19210 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
19220 74 20 3d 20 70 4f 70 2d 3e 70 31 3b 0a 20 20 69  t = pOp->p1;.  i
19230 52 6f 6c 6c 62 61 63 6b 20 3d 20 70 4f 70 2d 3e  Rollback = pOp->
19240 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20 64 65  p2;.  assert( de
19250 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19260 3d 31 20 7c 7c 20 64 65 73 69 72 65 64 41 75 74  =1 || desiredAut
19270 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 3b 0a 20 20  oCommit==0 );.  
19280 61 73 73 65 72 74 28 20 64 65 73 69 72 65 64 41  assert( desiredA
19290 75 74 6f 43 6f 6d 6d 69 74 3d 3d 31 20 7c 7c 20  utoCommit==1 || 
192a0 69 52 6f 6c 6c 62 61 63 6b 3d 3d 30 20 29 3b 0a  iRollback==0 );.
192b0 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 6e 56    assert( db->nV
192c0 64 62 65 41 63 74 69 76 65 3e 30 20 29 3b 20 20  dbeActive>0 );  
192d0 2f 2a 20 41 74 20 6c 65 61 73 74 20 74 68 69 73  /* At least this
192e0 20 6f 6e 65 20 56 4d 20 69 73 20 61 63 74 69 76   one VM is activ
192f0 65 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20 70  e */.  assert( p
19300 2d 3e 62 49 73 52 65 61 64 65 72 20 29 3b 0a 0a  ->bIsReader );..
19310 20 20 69 66 28 20 64 65 73 69 72 65 64 41 75 74    if( desiredAut
19320 6f 43 6f 6d 6d 69 74 21 3d 64 62 2d 3e 61 75 74  oCommit!=db->aut
19330 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 69  oCommit ){.    i
19340 66 28 20 69 52 6f 6c 6c 62 61 63 6b 20 29 7b 0a  f( iRollback ){.
19350 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 65        assert( de
19360 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69 74 3d  siredAutoCommit=
19370 3d 31 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =1 );.      sqli
19380 74 65 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 64  te3RollbackAll(d
19390 62 2c 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 5f  b, SQLITE_ABORT_
193a0 52 4f 4c 4c 42 41 43 4b 29 3b 0a 20 20 20 20 20  ROLLBACK);.     
193b0 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
193c0 3d 20 31 3b 0a 20 20 20 20 7d 65 6c 73 65 20 69  = 1;.    }else i
193d0 66 28 20 64 65 73 69 72 65 64 41 75 74 6f 43 6f  f( desiredAutoCo
193e0 6d 6d 69 74 20 26 26 20 64 62 2d 3e 6e 56 64 62  mmit && db->nVdb
193f0 65 57 72 69 74 65 3e 30 20 29 7b 0a 20 20 20 20  eWrite>0 ){.    
19400 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 6e 73    /* If this ins
19410 74 72 75 63 74 69 6f 6e 20 69 6d 70 6c 65 6d 65  truction impleme
19420 6e 74 73 20 61 20 43 4f 4d 4d 49 54 20 61 6e 64  nts a COMMIT and
19430 20 6f 74 68 65 72 20 56 4d 73 20 61 72 65 20 77   other VMs are w
19440 72 69 74 69 6e 67 0a 20 20 20 20 20 20 2a 2a 20  riting.      ** 
19450 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f 72 20  return an error 
19460 69 6e 64 69 63 61 74 69 6e 67 20 74 68 61 74 20  indicating that 
19470 74 68 65 20 6f 74 68 65 72 20 56 4d 73 20 6d 75  the other VMs mu
19480 73 74 20 63 6f 6d 70 6c 65 74 65 20 66 69 72 73  st complete firs
19490 74 2e 20 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  t. .      */.   
194a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 45 72     sqlite3VdbeEr
194b0 72 6f 72 28 70 2c 20 22 63 61 6e 6e 6f 74 20 63  ror(p, "cannot c
194c0 6f 6d 6d 69 74 20 74 72 61 6e 73 61 63 74 69 6f  ommit transactio
194d0 6e 20 2d 20 22 0a 20 20 20 20 20 20 20 20 20 20  n - ".          
194e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
194f0 22 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20  "SQL statements 
19500 69 6e 20 70 72 6f 67 72 65 73 73 22 29 3b 0a 20  in progress");. 
19510 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45       rc = SQLITE
19520 5f 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74  _BUSY;.      got
19530 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
19540 72 72 6f 72 3b 0a 20 20 20 20 7d 65 6c 73 65 20  rror;.    }else 
19550 69 66 28 20 28 72 63 20 3d 20 73 71 6c 69 74 65  if( (rc = sqlite
19560 33 56 64 62 65 43 68 65 63 6b 46 6b 28 70 2c 20  3VdbeCheckFk(p, 
19570 31 29 29 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29  1))!=SQLITE_OK )
19580 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62  {.      goto vdb
19590 65 5f 72 65 74 75 72 6e 3b 0a 20 20 20 20 7d 65  e_return;.    }e
195a0 6c 73 65 7b 0a 20 20 20 20 20 20 64 62 2d 3e 61  lse{.      db->a
195b0 75 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29  utoCommit = (u8)
195c0 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d 6d 69  desiredAutoCommi
195d0 74 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  t;.    }.    if(
195e0 20 73 71 6c 69 74 65 33 56 64 62 65 48 61 6c 74   sqlite3VdbeHalt
195f0 28 70 29 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59  (p)==SQLITE_BUSY
19600 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 70 63 20   ){.      p->pc 
19610 3d 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f  = (int)(pOp - aO
19620 70 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 61 75  p);.      db->au
19630 74 6f 43 6f 6d 6d 69 74 20 3d 20 28 75 38 29 28  toCommit = (u8)(
19640 31 2d 64 65 73 69 72 65 64 41 75 74 6f 43 6f 6d  1-desiredAutoCom
19650 6d 69 74 29 3b 0a 20 20 20 20 20 20 70 2d 3e 72  mit);.      p->r
19660 63 20 3d 20 72 63 20 3d 20 53 51 4c 49 54 45 5f  c = rc = SQLITE_
19670 42 55 53 59 3b 0a 20 20 20 20 20 20 67 6f 74 6f  BUSY;.      goto
19680 20 76 64 62 65 5f 72 65 74 75 72 6e 3b 0a 20 20   vdbe_return;.  
19690 20 20 7d 0a 20 20 20 20 61 73 73 65 72 74 28 20    }.    assert( 
196a0 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3d 3d  db->nStatement==
196b0 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
196c0 43 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28  CloseSavepoints(
196d0 64 62 29 3b 0a 20 20 20 20 69 66 28 20 70 2d 3e  db);.    if( p->
196e0 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  rc==SQLITE_OK ){
196f0 0a 20 20 20 20 20 20 72 63 20 3d 20 53 51 4c 49  .      rc = SQLI
19700 54 45 5f 44 4f 4e 45 3b 0a 20 20 20 20 7d 65 6c  TE_DONE;.    }el
19710 73 65 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53  se{.      rc = S
19720 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20  QLITE_ERROR;.   
19730 20 7d 0a 20 20 20 20 67 6f 74 6f 20 76 64 62 65   }.    goto vdbe
19740 5f 72 65 74 75 72 6e 3b 0a 20 20 7d 65 6c 73 65  _return;.  }else
19750 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  {.    sqlite3Vdb
19760 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20 20 20  eError(p,.      
19770 20 20 28 21 64 65 73 69 72 65 64 41 75 74 6f 43    (!desiredAutoC
19780 6f 6d 6d 69 74 29 3f 22 63 61 6e 6e 6f 74 20 73  ommit)?"cannot s
19790 74 61 72 74 20 61 20 74 72 61 6e 73 61 63 74 69  tart a transacti
197a0 6f 6e 20 77 69 74 68 69 6e 20 61 20 74 72 61 6e  on within a tran
197b0 73 61 63 74 69 6f 6e 22 3a 28 0a 20 20 20 20 20  saction":(.     
197c0 20 20 20 28 69 52 6f 6c 6c 62 61 63 6b 29 3f 22     (iRollback)?"
197d0 63 61 6e 6e 6f 74 20 72 6f 6c 6c 62 61 63 6b 20  cannot rollback 
197e0 2d 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e  - no transaction
197f0 20 69 73 20 61 63 74 69 76 65 22 3a 0a 20 20 20   is active":.   
19800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19810 22 63 61 6e 6e 6f 74 20 63 6f 6d 6d 69 74 20 2d  "cannot commit -
19820 20 6e 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 20   no transaction 
19830 69 73 20 61 63 74 69 76 65 22 29 29 3b 0a 20 20  is active"));.  
19840 20 20 20 20 20 20 20 0a 20 20 20 20 72 63 20 3d         .    rc =
19850 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20   SQLITE_ERROR;. 
19860 20 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75     goto abort_du
19870 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a  e_to_error;.  }.
19880 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
19890 70 63 6f 64 65 3a 20 54 72 61 6e 73 61 63 74 69  pcode: Transacti
198a0 6f 6e 20 50 31 20 50 32 20 50 33 20 50 34 20 50  on P1 P2 P3 P4 P
198b0 35 0a 2a 2a 0a 2a 2a 20 42 65 67 69 6e 20 61 20  5.**.** Begin a 
198c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 64  transaction on d
198d0 61 74 61 62 61 73 65 20 50 31 20 69 66 20 61 20  atabase P1 if a 
198e0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
198f0 6f 74 20 61 6c 72 65 61 64 79 0a 2a 2a 20 61 63  ot already.** ac
19900 74 69 76 65 2e 0a 2a 2a 20 49 66 20 50 32 20 69  tive..** If P2 i
19910 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
19920 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73 61 63   a write-transac
19930 74 69 6f 6e 20 69 73 20 73 74 61 72 74 65 64 2c  tion is started,
19940 20 6f 72 20 69 66 20 61 20 0a 2a 2a 20 72 65 61   or if a .** rea
19950 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  d-transaction is
19960 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 2c   already active,
19970 20 69 74 20 69 73 20 75 70 67 72 61 64 65 64 20   it is upgraded 
19980 74 6f 20 61 20 77 72 69 74 65 2d 74 72 61 6e 73  to a write-trans
19990 61 63 74 69 6f 6e 2e 0a 2a 2a 20 49 66 20 50 32  action..** If P2
199a0 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 6e 20 61   is zero, then a
199b0 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69 6f   read-transactio
199c0 6e 20 69 73 20 73 74 61 72 74 65 64 2e 0a 2a 2a  n is started..**
199d0 0a 2a 2a 20 50 31 20 69 73 20 74 68 65 20 69 6e  .** P1 is the in
199e0 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
199f0 61 73 65 20 66 69 6c 65 20 6f 6e 20 77 68 69 63  ase file on whic
19a00 68 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  h the transactio
19a10 6e 20 69 73 0a 2a 2a 20 73 74 61 72 74 65 64 2e  n is.** started.
19a20 20 20 49 6e 64 65 78 20 30 20 69 73 20 74 68 65    Index 0 is the
19a30 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
19a40 69 6c 65 20 61 6e 64 20 69 6e 64 65 78 20 31 20  ile and index 1 
19a50 69 73 20 74 68 65 0a 2a 2a 20 66 69 6c 65 20 75  is the.** file u
19a60 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
19a70 79 20 74 61 62 6c 65 73 2e 20 20 49 6e 64 69 63  y tables.  Indic
19a80 65 73 20 6f 66 20 32 20 6f 72 20 6d 6f 72 65 20  es of 2 or more 
19a90 61 72 65 20 75 73 65 64 20 66 6f 72 0a 2a 2a 20  are used for.** 
19aa0 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
19ab0 65 73 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 61 20 77  es..**.** If a w
19ac0 72 69 74 65 2d 74 72 61 6e 73 61 63 74 69 6f 6e  rite-transaction
19ad0 20 69 73 20 73 74 61 72 74 65 64 20 61 6e 64 20   is started and 
19ae0 74 68 65 20 56 64 62 65 2e 75 73 65 73 53 74 6d  the Vdbe.usesStm
19af0 74 4a 6f 75 72 6e 61 6c 20 66 6c 61 67 20 69 73  tJournal flag is
19b00 0a 2a 2a 20 74 72 75 65 20 28 74 68 69 73 20 66  .** true (this f
19b10 6c 61 67 20 69 73 20 73 65 74 20 69 66 20 74 68  lag is set if th
19b20 65 20 56 64 62 65 20 6d 61 79 20 6d 6f 64 69 66  e Vdbe may modif
19b30 79 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20  y more than one 
19b40 72 6f 77 20 61 6e 64 20 6d 61 79 0a 2a 2a 20 74  row and may.** t
19b50 68 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78  hrow an ABORT ex
19b60 63 65 70 74 69 6f 6e 29 2c 20 61 20 73 74 61 74  ception), a stat
19b70 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74 69 6f  ement transactio
19b80 6e 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 6f 70  n may also be op
19b90 65 6e 65 64 2e 0a 2a 2a 20 4d 6f 72 65 20 73 70  ened..** More sp
19ba0 65 63 69 66 69 63 61 6c 6c 79 2c 20 61 20 73 74  ecifically, a st
19bb0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
19bc0 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 20 69 66  ion is opened if
19bd0 66 20 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a  f the database.*
19be0 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  * connection is 
19bf0 63 75 72 72 65 6e 74 6c 79 20 6e 6f 74 20 69 6e  currently not in
19c00 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
19c10 2c 20 6f 72 20 69 66 20 74 68 65 72 65 20 61 72  , or if there ar
19c20 65 20 6f 74 68 65 72 0a 2a 2a 20 61 63 74 69 76  e other.** activ
19c30 65 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 41 20  e statements. A 
19c40 73 74 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61  statement transa
19c50 63 74 69 6f 6e 20 61 6c 6c 6f 77 73 20 74 68 65  ction allows the
19c60 20 63 68 61 6e 67 65 73 20 6d 61 64 65 20 62 79   changes made by
19c70 20 74 68 69 73 0a 2a 2a 20 56 44 42 45 20 74 6f   this.** VDBE to
19c80 20 62 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20   be rolled back 
19c90 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 77  after an error w
19ca0 69 74 68 6f 75 74 20 68 61 76 69 6e 67 20 74 6f  ithout having to
19cb0 20 72 6f 6c 6c 20 62 61 63 6b 20 74 68 65 0a 2a   roll back the.*
19cc0 2a 20 65 6e 74 69 72 65 20 74 72 61 6e 73 61 63  * entire transac
19cd0 74 69 6f 6e 2e 20 49 66 20 6e 6f 20 65 72 72 6f  tion. If no erro
19ce0 72 20 69 73 20 65 6e 63 6f 75 6e 74 65 72 65 64  r is encountered
19cf0 2c 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  , the statement 
19d00 74 72 61 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 77  transaction.** w
19d10 69 6c 6c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ill automaticall
19d20 79 20 63 6f 6d 6d 69 74 20 77 68 65 6e 20 74 68  y commit when th
19d30 65 20 56 44 42 45 20 68 61 6c 74 73 2e 0a 2a 2a  e VDBE halts..**
19d40 0a 2a 2a 20 49 66 20 50 35 21 3d 30 20 74 68 65  .** If P5!=0 the
19d50 6e 20 74 68 69 73 20 6f 70 63 6f 64 65 20 61 6c  n this opcode al
19d60 73 6f 20 63 68 65 63 6b 73 20 74 68 65 20 73 63  so checks the sc
19d70 68 65 6d 61 20 63 6f 6f 6b 69 65 20 61 67 61 69  hema cookie agai
19d80 6e 73 74 20 50 33 0a 2a 2a 20 61 6e 64 20 74 68  nst P3.** and th
19d90 65 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74  e schema generat
19da0 69 6f 6e 20 63 6f 75 6e 74 65 72 20 61 67 61 69  ion counter agai
19db0 6e 73 74 20 50 34 2e 0a 2a 2a 20 54 68 65 20 63  nst P4..** The c
19dc0 6f 6f 6b 69 65 20 63 68 61 6e 67 65 73 20 69 74  ookie changes it
19dd0 73 20 76 61 6c 75 65 20 77 68 65 6e 65 76 65 72  s value whenever
19de0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
19df0 68 65 6d 61 20 63 68 61 6e 67 65 73 2e 0a 2a 2a  hema changes..**
19e00 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e 20   This operation 
19e10 69 73 20 75 73 65 64 20 74 6f 20 64 65 74 65 63  is used to detec
19e20 74 20 77 68 65 6e 20 74 68 61 74 20 74 68 65 20  t when that the 
19e30 63 6f 6f 6b 69 65 20 68 61 73 20 63 68 61 6e 67  cookie has chang
19e40 65 64 0a 2a 2a 20 61 6e 64 20 74 68 61 74 20 74  ed.** and that t
19e50 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65  he current proce
19e60 73 73 20 6e 65 65 64 73 20 74 6f 20 72 65 72 65  ss needs to rere
19e70 61 64 20 74 68 65 20 73 63 68 65 6d 61 2e 20 20  ad the schema.  
19e80 49 66 20 74 68 65 20 73 63 68 65 6d 61 0a 2a 2a  If the schema.**
19e90 20 63 6f 6f 6b 69 65 20 69 6e 20 50 33 20 64 69   cookie in P3 di
19ea0 66 66 65 72 73 20 66 72 6f 6d 20 74 68 65 20 73  ffers from the s
19eb0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 69 6e 20  chema cookie in 
19ec0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
19ed0 64 65 72 20 6f 72 0a 2a 2a 20 69 66 20 74 68 65  der or.** if the
19ee0 20 73 63 68 65 6d 61 20 67 65 6e 65 72 61 74 69   schema generati
19ef0 6f 6e 20 63 6f 75 6e 74 65 72 20 69 6e 20 50 34  on counter in P4
19f00 20 64 69 66 66 65 72 73 20 66 72 6f 6d 20 74 68   differs from th
19f10 65 20 63 75 72 72 65 6e 74 0a 2a 2a 20 67 65 6e  e current.** gen
19f20 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2c  eration counter,
19f30 20 74 68 65 6e 20 61 6e 20 53 51 4c 49 54 45 5f   then an SQLITE_
19f40 53 43 48 45 4d 41 20 65 72 72 6f 72 20 69 73 20  SCHEMA error is 
19f50 72 61 69 73 65 64 20 61 6e 64 20 65 78 65 63 75  raised and execu
19f60 74 69 6f 6e 0a 2a 2a 20 68 61 6c 74 73 2e 20 20  tion.** halts.  
19f70 54 68 65 20 73 71 6c 69 74 65 33 5f 73 74 65 70  The sqlite3_step
19f80 28 29 20 77 72 61 70 70 65 72 20 66 75 6e 63 74  () wrapper funct
19f90 69 6f 6e 20 6d 69 67 68 74 20 74 68 65 6e 20 72  ion might then r
19fa0 65 70 72 65 70 61 72 65 20 74 68 65 0a 2a 2a 20  eprepare the.** 
19fb0 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 20 72 65  statement and re
19fc0 72 75 6e 20 69 74 20 66 72 6f 6d 20 74 68 65 20  run it from the 
19fd0 62 65 67 69 6e 6e 69 6e 67 2e 0a 2a 2f 0a 63 61  beginning..*/.ca
19fe0 73 65 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f  se OP_Transactio
19ff0 6e 3a 20 7b 0a 20 20 42 74 72 65 65 20 2a 70 42  n: {.  Btree *pB
1a000 74 3b 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a  t;.  int iMeta;.
1a010 20 20 69 6e 74 20 69 47 65 6e 3b 0a 0a 20 20 61    int iGen;..  a
1a020 73 73 65 72 74 28 20 70 2d 3e 62 49 73 52 65 61  ssert( p->bIsRea
1a030 64 65 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  der );.  assert(
1a040 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
1a050 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d 30 20 29 3b  || pOp->p2==0 );
1a060 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1a070 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
1a080 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73  <db->nDb );.  as
1a090 73 65 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74  sert( DbMaskTest
1a0a0 28 70 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70  (p->btreeMask, p
1a0b0 4f 70 2d 3e 70 31 29 20 29 3b 0a 20 20 69 66 28  Op->p1) );.  if(
1a0c0 20 70 4f 70 2d 3e 70 32 20 26 26 20 28 64 62 2d   pOp->p2 && (db-
1a0d0 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
1a0e0 51 75 65 72 79 4f 6e 6c 79 29 21 3d 30 20 29 7b  QueryOnly)!=0 ){
1a0f0 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45  .    rc = SQLITE
1a100 5f 52 45 41 44 4f 4e 4c 59 3b 0a 20 20 20 20 67  _READONLY;.    g
1a110 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
1a120 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70 42  _error;.  }.  pB
1a130 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70 2d  t = db->aDb[pOp-
1a140 3e 70 31 5d 2e 70 42 74 3b 0a 0a 20 20 69 66 28  >p1].pBt;..  if(
1a150 20 70 42 74 20 29 7b 0a 20 20 20 20 72 63 20 3d   pBt ){.    rc =
1a160 20 73 71 6c 69 74 65 33 42 74 72 65 65 42 65 67   sqlite3BtreeBeg
1a170 69 6e 54 72 61 6e 73 28 70 42 74 2c 20 70 4f 70  inTrans(pBt, pOp
1a180 2d 3e 70 32 29 3b 0a 20 20 20 20 74 65 73 74 63  ->p2);.    testc
1a190 61 73 65 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f  ase( rc==SQLITE_
1a1a0 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 29 3b  BUSY_SNAPSHOT );
1a1b0 0a 20 20 20 20 74 65 73 74 63 61 73 65 28 20 72  .    testcase( r
1a1c0 63 3d 3d 53 51 4c 49 54 45 5f 42 55 53 59 5f 52  c==SQLITE_BUSY_R
1a1d0 45 43 4f 56 45 52 59 20 29 3b 0a 20 20 20 20 69  ECOVERY );.    i
1a1e0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
1a1f0 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 28 72   ){.      if( (r
1a200 63 26 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f  c&0xff)==SQLITE_
1a210 42 55 53 59 20 29 7b 0a 20 20 20 20 20 20 20 20  BUSY ){.        
1a220 70 2d 3e 70 63 20 3d 20 28 69 6e 74 29 28 70 4f  p->pc = (int)(pO
1a230 70 20 2d 20 61 4f 70 29 3b 0a 20 20 20 20 20 20  p - aOp);.      
1a240 20 20 70 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20    p->rc = rc;.  
1a250 20 20 20 20 20 20 67 6f 74 6f 20 76 64 62 65 5f        goto vdbe_
1a260 72 65 74 75 72 6e 3b 0a 20 20 20 20 20 20 7d 0a  return;.      }.
1a270 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f 72 74        goto abort
1a280 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1a290 20 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 70 4f     }..    if( pO
1a2a0 70 2d 3e 70 32 20 26 26 20 70 2d 3e 75 73 65 73  p->p2 && p->uses
1a2b0 53 74 6d 74 4a 6f 75 72 6e 61 6c 20 0a 20 20 20  StmtJournal .   
1a2c0 20 20 26 26 20 28 64 62 2d 3e 61 75 74 6f 43 6f    && (db->autoCo
1a2d0 6d 6d 69 74 3d 3d 30 20 7c 7c 20 64 62 2d 3e 6e  mmit==0 || db->n
1a2e0 56 64 62 65 52 65 61 64 3e 31 29 20 0a 20 20 20  VdbeRead>1) .   
1a2f0 20 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74   ){.      assert
1a300 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73  ( sqlite3BtreeIs
1a310 49 6e 54 72 61 6e 73 28 70 42 74 29 20 29 3b 0a  InTrans(pBt) );.
1a320 20 20 20 20 20 20 69 66 28 20 70 2d 3e 69 53 74        if( p->iSt
1a330 61 74 65 6d 65 6e 74 3d 3d 30 20 29 7b 0a 20 20  atement==0 ){.  
1a340 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
1a350 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 3e 3d 30 20  ->nStatement>=0 
1a360 26 26 20 64 62 2d 3e 6e 53 61 76 65 70 6f 69 6e  && db->nSavepoin
1a370 74 3e 3d 30 20 29 3b 0a 20 20 20 20 20 20 20 20  t>=0 );.        
1a380 64 62 2d 3e 6e 53 74 61 74 65 6d 65 6e 74 2b 2b  db->nStatement++
1a390 3b 20 0a 20 20 20 20 20 20 20 20 70 2d 3e 69 53  ; .        p->iS
1a3a0 74 61 74 65 6d 65 6e 74 20 3d 20 64 62 2d 3e 6e  tatement = db->n
1a3b0 53 61 76 65 70 6f 69 6e 74 20 2b 20 64 62 2d 3e  Savepoint + db->
1a3c0 6e 53 74 61 74 65 6d 65 6e 74 3b 0a 20 20 20 20  nStatement;.    
1a3d0 20 20 7d 0a 0a 20 20 20 20 20 20 72 63 20 3d 20    }..      rc = 
1a3e0 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65 70  sqlite3VtabSavep
1a3f0 6f 69 6e 74 28 64 62 2c 20 53 41 56 45 50 4f 49  oint(db, SAVEPOI
1a400 4e 54 5f 42 45 47 49 4e 2c 20 70 2d 3e 69 53 74  NT_BEGIN, p->iSt
1a410 61 74 65 6d 65 6e 74 2d 31 29 3b 0a 20 20 20 20  atement-1);.    
1a420 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
1a430 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 72  _OK ){.        r
1a440 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
1a450 42 65 67 69 6e 53 74 6d 74 28 70 42 74 2c 20 70  BeginStmt(pBt, p
1a460 2d 3e 69 53 74 61 74 65 6d 65 6e 74 29 3b 0a 20  ->iStatement);. 
1a470 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a       }..      /*
1a480 20 53 74 6f 72 65 20 74 68 65 20 63 75 72 72 65   Store the curre
1a490 6e 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  nt value of the 
1a4a0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 73  database handles
1a4b0 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
1a4c0 61 69 6e 74 0a 20 20 20 20 20 20 2a 2a 20 63 6f  aint.      ** co
1a4d0 75 6e 74 65 72 2e 20 49 66 20 74 68 65 20 73 74  unter. If the st
1a4e0 61 74 65 6d 65 6e 74 20 74 72 61 6e 73 61 63 74  atement transact
1a4f0 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
1a500 72 6f 6c 6c 65 64 20 62 61 63 6b 2c 0a 20 20 20  rolled back,.   
1a510 20 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20     ** the value 
1a520 6f 66 20 74 68 69 73 20 63 6f 75 6e 74 65 72 20  of this counter 
1a530 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 73 74  needs to be rest
1a540 6f 72 65 64 20 74 6f 6f 2e 20 20 2a 2f 0a 20 20  ored too.  */.  
1a550 20 20 20 20 70 2d 3e 6e 53 74 6d 74 44 65 66 43      p->nStmtDefC
1a560 6f 6e 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72  ons = db->nDefer
1a570 72 65 64 43 6f 6e 73 3b 0a 20 20 20 20 20 20 70  redCons;.      p
1a580 2d 3e 6e 53 74 6d 74 44 65 66 49 6d 6d 43 6f 6e  ->nStmtDefImmCon
1a590 73 20 3d 20 64 62 2d 3e 6e 44 65 66 65 72 72 65  s = db->nDeferre
1a5a0 64 49 6d 6d 43 6f 6e 73 3b 0a 20 20 20 20 7d 0a  dImmCons;.    }.
1a5b0 0a 20 20 20 20 2f 2a 20 47 61 74 68 65 72 20 74  .    /* Gather t
1a5c0 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
1a5d0 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 63 68 65  n number for che
1a5e0 63 6b 69 6e 67 3a 0a 20 20 20 20 2a 2a 20 49 4d  cking:.    ** IM
1a5f0 50 4c 45 4d 45 4e 54 41 54 49 4f 4e 2d 4f 46 3a  PLEMENTATION-OF:
1a600 20 52 2d 30 33 31 38 39 2d 35 31 31 33 35 20 41   R-03189-51135 A
1a610 73 20 65 61 63 68 20 53 51 4c 20 73 74 61 74 65  s each SQL state
1a620 6d 65 6e 74 20 72 75 6e 73 2c 20 74 68 65 20 73  ment runs, the s
1a630 63 68 65 6d 61 0a 20 20 20 20 2a 2a 20 76 65 72  chema.    ** ver
1a640 73 69 6f 6e 20 69 73 20 63 68 65 63 6b 65 64 20  sion is checked 
1a650 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  to ensure that t
1a660 68 65 20 73 63 68 65 6d 61 20 68 61 73 20 6e 6f  he schema has no
1a670 74 20 63 68 61 6e 67 65 64 20 73 69 6e 63 65 20  t changed since 
1a680 74 68 65 0a 20 20 20 20 2a 2a 20 53 51 4c 20 73  the.    ** SQL s
1a690 74 61 74 65 6d 65 6e 74 20 77 61 73 20 70 72 65  tatement was pre
1a6a0 70 61 72 65 64 2e 0a 20 20 20 20 2a 2f 0a 20 20  pared..    */.  
1a6b0 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
1a6c0 74 4d 65 74 61 28 70 42 74 2c 20 42 54 52 45 45  tMeta(pBt, BTREE
1a6d0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 2c  _SCHEMA_VERSION,
1a6e0 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61 29 3b   (u32 *)&iMeta);
1a6f0 0a 20 20 20 20 69 47 65 6e 20 3d 20 64 62 2d 3e  .    iGen = db->
1a700 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53 63  aDb[pOp->p1].pSc
1a710 68 65 6d 61 2d 3e 69 47 65 6e 65 72 61 74 69 6f  hema->iGeneratio
1a720 6e 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  n;.  }else{.    
1a730 69 47 65 6e 20 3d 20 69 4d 65 74 61 20 3d 20 30  iGen = iMeta = 0
1a740 3b 0a 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20  ;.  }.  assert( 
1a750 70 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f  pOp->p5==0 || pO
1a760 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 49 4e  p->p4type==P4_IN
1a770 54 33 32 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  T32 );.  if( pOp
1a780 2d 3e 70 35 20 26 26 20 28 69 4d 65 74 61 21 3d  ->p5 && (iMeta!=
1a790 70 4f 70 2d 3e 70 33 20 7c 7c 20 69 47 65 6e 21  pOp->p3 || iGen!
1a7a0 3d 70 4f 70 2d 3e 70 34 2e 69 29 20 29 7b 0a 20  =pOp->p4.i) ){. 
1a7b0 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
1a7c0 28 64 62 2c 20 70 2d 3e 7a 45 72 72 4d 73 67 29  (db, p->zErrMsg)
1a7d0 3b 0a 20 20 20 20 70 2d 3e 7a 45 72 72 4d 73 67  ;.    p->zErrMsg
1a7e0 20 3d 20 73 71 6c 69 74 65 33 44 62 53 74 72 44   = sqlite3DbStrD
1a7f0 75 70 28 64 62 2c 20 22 64 61 74 61 62 61 73 65  up(db, "database
1a800 20 73 63 68 65 6d 61 20 68 61 73 20 63 68 61 6e   schema has chan
1a810 67 65 64 22 29 3b 0a 20 20 20 20 2f 2a 20 49 66  ged");.    /* If
1a820 20 74 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   the schema-cook
1a830 69 65 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61  ie from the data
1a840 62 61 73 65 20 66 69 6c 65 20 6d 61 74 63 68 65  base file matche
1a850 73 20 74 68 65 20 63 6f 6f 6b 69 65 20 0a 20 20  s the cookie .  
1a860 20 20 2a 2a 20 73 74 6f 72 65 64 20 77 69 74 68    ** stored with
1a870 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72 79 20 72   the in-memory r
1a880 65 70 72 65 73 65 6e 74 61 74 69 6f 6e 20 6f 66  epresentation of
1a890 20 74 68 65 20 73 63 68 65 6d 61 2c 20 64 6f 0a   the schema, do.
1a8a0 20 20 20 20 2a 2a 20 6e 6f 74 20 72 65 6c 6f 61      ** not reloa
1a8b0 64 20 74 68 65 20 73 63 68 65 6d 61 20 66 72 6f  d the schema fro
1a8c0 6d 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  m the database f
1a8d0 69 6c 65 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  ile..    **.    
1a8e0 2a 2a 20 49 66 20 76 69 72 74 75 61 6c 2d 74 61  ** If virtual-ta
1a8f0 62 6c 65 73 20 61 72 65 20 69 6e 20 75 73 65 2c  bles are in use,
1a900 20 74 68 69 73 20 69 73 20 6e 6f 74 20 6a 75 73   this is not jus
1a910 74 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74 69 6f  t an optimizatio
1a920 6e 2e 0a 20 20 20 20 2a 2a 20 4f 66 74 65 6e 2c  n..    ** Often,
1a930 20 76 2d 74 61 62 6c 65 73 20 73 74 6f 72 65 20   v-tables store 
1a940 74 68 65 69 72 20 64 61 74 61 20 69 6e 20 6f 74  their data in ot
1a950 68 65 72 20 53 51 4c 69 74 65 20 74 61 62 6c 65  her SQLite table
1a960 73 2c 20 77 68 69 63 68 0a 20 20 20 20 2a 2a 20  s, which.    ** 
1a970 61 72 65 20 71 75 65 72 69 65 64 20 66 72 6f 6d  are queried from
1a980 20 77 69 74 68 69 6e 20 78 4e 65 78 74 28 29 20   within xNext() 
1a990 61 6e 64 20 6f 74 68 65 72 20 76 2d 74 61 62 6c  and other v-tabl
1a9a0 65 20 6d 65 74 68 6f 64 73 20 75 73 69 6e 67 0a  e methods using.
1a9b0 20 20 20 20 2a 2a 20 70 72 65 70 61 72 65 64 20      ** prepared 
1a9c0 71 75 65 72 69 65 73 2e 20 49 66 20 73 75 63 68  queries. If such
1a9d0 20 61 20 71 75 65 72 79 20 69 73 20 6f 75 74 2d   a query is out-
1a9e0 6f 66 2d 64 61 74 65 2c 20 77 65 20 64 6f 20 6e  of-date, we do n
1a9f0 6f 74 20 77 61 6e 74 20 74 6f 0a 20 20 20 20 2a  ot want to.    *
1aa00 2a 20 64 69 73 63 61 72 64 20 74 68 65 20 64 61  * discard the da
1aa10 74 61 62 61 73 65 20 73 63 68 65 6d 61 2c 20 61  tabase schema, a
1aa20 73 20 74 68 65 20 75 73 65 72 20 63 6f 64 65 20  s the user code 
1aa30 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 74 68 65  implementing the
1aa40 0a 20 20 20 20 2a 2a 20 76 2d 74 61 62 6c 65 20  .    ** v-table 
1aa50 77 6f 75 6c 64 20 68 61 76 65 20 74 6f 20 62 65  would have to be
1aa60 20 72 65 61 64 79 20 66 6f 72 20 74 68 65 20 73   ready for the s
1aa70 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75  qlite3_vtab stru
1aa80 63 74 75 72 65 20 69 74 73 65 6c 66 0a 20 20 20  cture itself.   
1aa90 20 2a 2a 20 74 6f 20 62 65 20 69 6e 76 61 6c 69   ** to be invali
1aaa0 64 61 74 65 64 20 77 68 65 6e 65 76 65 72 20 73  dated whenever s
1aab0 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 73  qlite3_step() is
1aac0 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20 77 69 74   called from wit
1aad0 68 69 6e 20 0a 20 20 20 20 2a 2a 20 61 20 76 2d  hin .    ** a v-
1aae0 74 61 62 6c 65 20 6d 65 74 68 6f 64 2e 0a 20 20  table method..  
1aaf0 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 64 62 2d    */.    if( db-
1ab00 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 53  >aDb[pOp->p1].pS
1ab10 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 5f 63 6f  chema->schema_co
1ab20 6f 6b 69 65 21 3d 69 4d 65 74 61 20 29 7b 0a 20  okie!=iMeta ){. 
1ab30 20 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65       sqlite3Rese
1ab40 74 4f 6e 65 53 63 68 65 6d 61 28 64 62 2c 20 70  tOneSchema(db, p
1ab50 4f 70 2d 3e 70 31 29 3b 0a 20 20 20 20 7d 0a 20  Op->p1);.    }. 
1ab60 20 20 20 70 2d 3e 65 78 70 69 72 65 64 20 3d 20     p->expired = 
1ab70 31 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  1;.    rc = SQLI
1ab80 54 45 5f 53 43 48 45 4d 41 3b 0a 20 20 7d 0a 20  TE_SCHEMA;.  }. 
1ab90 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61   if( rc ) goto a
1aba0 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
1abb0 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f  r;.  break;.}../
1abc0 2a 20 4f 70 63 6f 64 65 3a 20 52 65 61 64 43 6f  * Opcode: ReadCo
1abd0 6f 6b 69 65 20 50 31 20 50 32 20 50 33 20 2a 20  okie P1 P2 P3 * 
1abe0 2a 0a 2a 2a 0a 2a 2a 20 52 65 61 64 20 63 6f 6f  *.**.** Read coo
1abf0 6b 69 65 20 6e 75 6d 62 65 72 20 50 33 20 66 72  kie number P3 fr
1ac00 6f 6d 20 64 61 74 61 62 61 73 65 20 50 31 20 61  om database P1 a
1ac10 6e 64 20 77 72 69 74 65 20 69 74 20 69 6e 74 6f  nd write it into
1ac20 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a   register P2..**
1ac30 20 50 33 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P3==1 is the sc
1ac40 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1ac50 33 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  3==2 is the data
1ac60 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1ac70 50 33 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P3==3 is the rec
1ac80 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1ac90 61 63 68 65 20 73 69 7a 65 2c 20 61 6e 64 20 73  ache size, and s
1aca0 6f 20 66 6f 72 74 68 2e 20 20 50 31 3d 3d 30 20  o forth.  P1==0 
1acb0 69 73 0a 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  is.** the main d
1acc0 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
1acd0 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 64 61   P1==1 is the da
1ace0 74 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64  tabase file used
1acf0 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 65 6d   to store.** tem
1ad00 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 0a 2a  porary tables..*
1ad10 2a 0a 2a 2a 20 54 68 65 72 65 20 6d 75 73 74 20  *.** There must 
1ad20 62 65 20 61 20 72 65 61 64 2d 6c 6f 63 6b 20 6f  be a read-lock o
1ad30 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 28  n the database (
1ad40 65 69 74 68 65 72 20 61 20 74 72 61 6e 73 61 63  either a transac
1ad50 74 69 6f 6e 0a 2a 2a 20 6d 75 73 74 20 62 65 20  tion.** must be 
1ad60 73 74 61 72 74 65 64 20 6f 72 20 74 68 65 72 65  started or there
1ad70 20 6d 75 73 74 20 62 65 20 61 6e 20 6f 70 65 6e   must be an open
1ad80 20 63 75 72 73 6f 72 29 20 62 65 66 6f 72 65 0a   cursor) before.
1ad90 2a 2a 20 65 78 65 63 75 74 69 6e 67 20 74 68 69  ** executing thi
1ada0 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  s instruction..*
1adb0 2f 0a 63 61 73 65 20 4f 50 5f 52 65 61 64 43 6f  /.case OP_ReadCo
1adc0 6f 6b 69 65 3a 20 7b 20 20 20 20 20 20 20 20 20  okie: {         
1add0 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
1ade0 0a 20 20 69 6e 74 20 69 4d 65 74 61 3b 0a 20 20  .  int iMeta;.  
1adf0 69 6e 74 20 69 44 62 3b 0a 20 20 69 6e 74 20 69  int iDb;.  int i
1ae00 43 6f 6f 6b 69 65 3b 0a 0a 20 20 61 73 73 65 72  Cookie;..  asser
1ae10 74 28 20 70 2d 3e 62 49 73 52 65 61 64 65 72 20  t( p->bIsReader 
1ae20 29 3b 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e  );.  iDb = pOp->
1ae30 70 31 3b 0a 20 20 69 43 6f 6f 6b 69 65 20 3d 20  p1;.  iCookie = 
1ae40 70 4f 70 2d 3e 70 33 3b 0a 20 20 61 73 73 65 72  pOp->p3;.  asser
1ae50 74 28 20 70 4f 70 2d 3e 70 33 3c 53 51 4c 49 54  t( pOp->p3<SQLIT
1ae60 45 5f 4e 5f 42 54 52 45 45 5f 4d 45 54 41 20 29  E_N_BTREE_META )
1ae70 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62 3e  ;.  assert( iDb>
1ae80 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44  =0 && iDb<db->nD
1ae90 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 64  b );.  assert( d
1aea0 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 21  b->aDb[iDb].pBt!
1aeb0 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
1aec0 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74  DbMaskTest(p->bt
1aed0 72 65 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b  reeMask, iDb) );
1aee0 0a 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65  ..  sqlite3Btree
1aef0 47 65 74 4d 65 74 61 28 64 62 2d 3e 61 44 62 5b  GetMeta(db->aDb[
1af00 69 44 62 5d 2e 70 42 74 2c 20 69 43 6f 6f 6b 69  iDb].pBt, iCooki
1af10 65 2c 20 28 75 33 32 20 2a 29 26 69 4d 65 74 61  e, (u32 *)&iMeta
1af20 29 3b 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74 32  );.  pOut = out2
1af30 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70 4f  Prerelease(p, pO
1af40 70 29 3b 0a 20 20 70 4f 75 74 2d 3e 75 2e 69 20  p);.  pOut->u.i 
1af50 3d 20 69 4d 65 74 61 3b 0a 20 20 62 72 65 61 6b  = iMeta;.  break
1af60 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
1af70 53 65 74 43 6f 6f 6b 69 65 20 50 31 20 50 32 20  SetCookie P1 P2 
1af80 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69  P3 * *.**.** Wri
1af90 74 65 20 74 68 65 20 69 6e 74 65 67 65 72 20 76  te the integer v
1afa0 61 6c 75 65 20 50 33 20 69 6e 74 6f 20 63 6f 6f  alue P3 into coo
1afb0 6b 69 65 20 6e 75 6d 62 65 72 20 50 32 20 6f 66  kie number P2 of
1afc0 20 64 61 74 61 62 61 73 65 20 50 31 2e 0a 2a 2a   database P1..**
1afd0 20 50 32 3d 3d 31 20 69 73 20 74 68 65 20 73 63   P2==1 is the sc
1afe0 68 65 6d 61 20 76 65 72 73 69 6f 6e 2e 20 20 50  hema version.  P
1aff0 32 3d 3d 32 20 69 73 20 74 68 65 20 64 61 74 61  2==2 is the data
1b000 62 61 73 65 20 66 6f 72 6d 61 74 2e 0a 2a 2a 20  base format..** 
1b010 50 32 3d 3d 33 20 69 73 20 74 68 65 20 72 65 63  P2==3 is the rec
1b020 6f 6d 6d 65 6e 64 65 64 20 70 61 67 65 72 20 63  ommended pager c
1b030 61 63 68 65 20 0a 2a 2a 20 73 69 7a 65 2c 20 61  ache .** size, a
1b040 6e 64 20 73 6f 20 66 6f 72 74 68 2e 20 20 50 31  nd so forth.  P1
1b050 3d 3d 30 20 69 73 20 74 68 65 20 6d 61 69 6e 20  ==0 is the main 
1b060 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e  database file an
1b070 64 20 50 31 3d 3d 31 20 69 73 20 74 68 65 20 0a  d P1==1 is the .
1b080 2a 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ** database file
1b090 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
1b0a0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e  emporary tables.
1b0b0 0a 2a 2a 0a 2a 2a 20 41 20 74 72 61 6e 73 61 63  .**.** A transac
1b0c0 74 69 6f 6e 20 6d 75 73 74 20 62 65 20 73 74 61  tion must be sta
1b0d0 72 74 65 64 20 62 65 66 6f 72 65 20 65 78 65 63  rted before exec
1b0e0 75 74 69 6e 67 20 74 68 69 73 20 6f 70 63 6f 64  uting this opcod
1b0f0 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 65  e..*/.case OP_Se
1b100 74 43 6f 6f 6b 69 65 3a 20 7b 0a 20 20 44 62 20  tCookie: {.  Db 
1b110 2a 70 44 62 3b 0a 20 20 61 73 73 65 72 74 28 20  *pDb;.  assert( 
1b120 70 4f 70 2d 3e 70 32 3c 53 51 4c 49 54 45 5f 4e  pOp->p2<SQLITE_N
1b130 5f 42 54 52 45 45 5f 4d 45 54 41 20 29 3b 0a 20  _BTREE_META );. 
1b140 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1b150 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64  >=0 && pOp->p1<d
1b160 62 2d 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65  b->nDb );.  asse
1b170 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
1b180 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70  ->btreeMask, pOp
1b190 2d 3e 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72  ->p1) );.  asser
1b1a0 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d  t( p->readOnly==
1b1b0 30 20 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62  0 );.  pDb = &db
1b1c0 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  ->aDb[pOp->p1];.
1b1d0 20 20 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70    assert( pDb->p
1b1e0 42 74 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  Bt!=0 );.  asser
1b1f0 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
1b200 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 70 4f  MutexHeld(db, pO
1b210 70 2d 3e 70 31 2c 20 30 29 20 29 3b 0a 20 20 2f  p->p1, 0) );.  /
1b220 2a 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 75 74  * See note about
1b230 20 69 6e 64 65 78 20 73 68 69 66 74 69 6e 67 20   index shifting 
1b240 6f 6e 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65  on OP_ReadCookie
1b250 20 2a 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   */.  rc = sqlit
1b260 65 33 42 74 72 65 65 55 70 64 61 74 65 4d 65 74  e3BtreeUpdateMet
1b270 61 28 70 44 62 2d 3e 70 42 74 2c 20 70 4f 70 2d  a(pDb->pBt, pOp-
1b280 3e 70 32 2c 20 70 4f 70 2d 3e 70 33 29 3b 0a 20  >p2, pOp->p3);. 
1b290 20 69 66 28 20 70 4f 70 2d 3e 70 32 3d 3d 42 54   if( pOp->p2==BT
1b2a0 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  REE_SCHEMA_VERSI
1b2b0 4f 4e 20 29 7b 0a 20 20 20 20 2f 2a 20 57 68 65  ON ){.    /* Whe
1b2c0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 63 6f 6f  n the schema coo
1b2d0 6b 69 65 20 63 68 61 6e 67 65 73 2c 20 72 65 63  kie changes, rec
1b2e0 6f 72 64 20 74 68 65 20 6e 65 77 20 63 6f 6f 6b  ord the new cook
1b2f0 69 65 20 69 6e 74 65 72 6e 61 6c 6c 79 20 2a 2f  ie internally */
1b300 0a 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d  .    pDb->pSchem
1b310 61 2d 3e 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65  a->schema_cookie
1b320 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20 20 20   = pOp->p3;.    
1b330 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 53 51 4c  db->flags |= SQL
1b340 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67 65  ITE_InternChange
1b350 73 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 70  s;.  }else if( p
1b360 4f 70 2d 3e 70 32 3d 3d 42 54 52 45 45 5f 46 49  Op->p2==BTREE_FI
1b370 4c 45 5f 46 4f 52 4d 41 54 20 29 7b 0a 20 20 20  LE_FORMAT ){.   
1b380 20 2f 2a 20 52 65 63 6f 72 64 20 63 68 61 6e 67   /* Record chang
1b390 65 73 20 69 6e 20 74 68 65 20 66 69 6c 65 20 66  es in the file f
1b3a0 6f 72 6d 61 74 20 2a 2f 0a 20 20 20 20 70 44 62  ormat */.    pDb
1b3b0 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c 65 5f  ->pSchema->file_
1b3c0 66 6f 72 6d 61 74 20 3d 20 70 4f 70 2d 3e 70 33  format = pOp->p3
1b3d0 3b 0a 20 20 7d 0a 20 20 69 66 28 20 70 4f 70 2d  ;.  }.  if( pOp-
1b3e0 3e 70 31 3d 3d 31 20 29 7b 0a 20 20 20 20 2f 2a  >p1==1 ){.    /*
1b3f0 20 49 6e 76 61 6c 69 64 61 74 65 20 61 6c 6c 20   Invalidate all 
1b400 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
1b410 6e 74 73 20 77 68 65 6e 65 76 65 72 20 74 68 65  nts whenever the
1b420 20 54 45 4d 50 20 64 61 74 61 62 61 73 65 0a 20   TEMP database. 
1b430 20 20 20 2a 2a 20 73 63 68 65 6d 61 20 69 73 20     ** schema is 
1b440 63 68 61 6e 67 65 64 2e 20 20 54 69 63 6b 65 74  changed.  Ticket
1b450 20 23 31 36 34 34 20 2a 2f 0a 20 20 20 20 73 71   #1644 */.    sq
1b460 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70 61  lite3ExpirePrepa
1b470 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 64 62  redStatements(db
1b480 29 3b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65  );.    p->expire
1b490 64 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 69 66 28  d = 0;.  }.  if(
1b4a0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
1b4b0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
1b4c0 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70   break;.}../* Op
1b4d0 63 6f 64 65 3a 20 4f 70 65 6e 52 65 61 64 20 50  code: OpenRead P
1b4e0 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  1 P2 P3 P4 P5.**
1b4f0 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d   Synopsis: root=
1b500 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20  P2 iDb=P3.**.** 
1b510 4f 70 65 6e 20 61 20 72 65 61 64 2d 6f 6e 6c 79  Open a read-only
1b520 20 63 75 72 73 6f 72 20 66 6f 72 20 74 68 65 20   cursor for the 
1b530 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 77  database table w
1b540 68 6f 73 65 20 72 6f 6f 74 20 70 61 67 65 20 69  hose root page i
1b550 73 0a 2a 2a 20 50 32 20 69 6e 20 61 20 64 61 74  s.** P2 in a dat
1b560 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
1b570 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69   database file i
1b580 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20  s determined by 
1b590 50 33 2e 20 0a 2a 2a 20 50 33 3d 3d 30 20 6d 65  P3. .** P3==0 me
1b5a0 61 6e 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ans the main dat
1b5b0 61 62 61 73 65 2c 20 50 33 3d 3d 31 20 6d 65 61  abase, P3==1 mea
1b5c0 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ns the database 
1b5d0 75 73 65 64 20 66 6f 72 20 0a 2a 2a 20 74 65 6d  used for .** tem
1b5e0 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2c 20 61  porary tables, a
1b5f0 6e 64 20 50 33 3e 31 20 6d 65 61 6e 73 20 75 73  nd P3>1 means us
1b600 65 64 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ed the correspon
1b610 64 69 6e 67 20 61 74 74 61 63 68 65 64 0a 2a 2a  ding attached.**
1b620 20 64 61 74 61 62 61 73 65 2e 20 20 47 69 76 65   database.  Give
1b630 20 74 68 65 20 6e 65 77 20 63 75 72 73 6f 72 20   the new cursor 
1b640 61 6e 20 69 64 65 6e 74 69 66 69 65 72 20 6f 66  an identifier of
1b650 20 50 31 2e 20 20 54 68 65 20 50 31 0a 2a 2a 20   P1.  The P1.** 
1b660 76 61 6c 75 65 73 20 6e 65 65 64 20 6e 6f 74 20  values need not 
1b670 62 65 20 63 6f 6e 74 69 67 75 6f 75 73 20 62 75  be contiguous bu
1b680 74 20 61 6c 6c 20 50 31 20 76 61 6c 75 65 73 20  t all P1 values 
1b690 73 68 6f 75 6c 64 20 62 65 20 73 6d 61 6c 6c 20  should be small 
1b6a0 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 49 74 20  integers..** It 
1b6b0 69 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20  is an error for 
1b6c0 50 31 20 74 6f 20 62 65 20 6e 65 67 61 74 69 76  P1 to be negativ
1b6d0 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 21 3d  e..**.** If P5!=
1b6e0 30 20 74 68 65 6e 20 75 73 65 20 74 68 65 20 63  0 then use the c
1b6f0 6f 6e 74 65 6e 74 20 6f 66 20 72 65 67 69 73 74  ontent of regist
1b700 65 72 20 50 32 20 61 73 20 74 68 65 20 72 6f 6f  er P2 as the roo
1b710 74 20 70 61 67 65 2c 20 6e 6f 74 0a 2a 2a 20 74  t page, not.** t
1b720 68 65 20 76 61 6c 75 65 20 6f 66 20 50 32 20 69  he value of P2 i
1b730 74 73 65 6c 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  tself..**.** The
1b740 72 65 20 77 69 6c 6c 20 62 65 20 61 20 72 65 61  re will be a rea
1b750 64 20 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61  d lock on the da
1b760 74 61 62 61 73 65 20 77 68 65 6e 65 76 65 72 20  tabase whenever 
1b770 74 68 65 72 65 20 69 73 20 61 6e 0a 2a 2a 20 6f  there is an.** o
1b780 70 65 6e 20 63 75 72 73 6f 72 2e 20 20 49 66 20  pen cursor.  If 
1b790 74 68 65 20 64 61 74 61 62 61 73 65 20 77 61 73  the database was
1b7a0 20 75 6e 6c 6f 63 6b 65 64 20 70 72 69 6f 72 20   unlocked prior 
1b7b0 74 6f 20 74 68 69 73 20 69 6e 73 74 72 75 63 74  to this instruct
1b7c0 69 6f 6e 0a 2a 2a 20 74 68 65 6e 20 61 20 72 65  ion.** then a re
1b7d0 61 64 20 6c 6f 63 6b 20 69 73 20 61 63 71 75 69  ad lock is acqui
1b7e0 72 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74  red as part of t
1b7f0 68 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  his instruction.
1b800 20 20 41 20 72 65 61 64 0a 2a 2a 20 6c 6f 63 6b    A read.** lock
1b810 20 61 6c 6c 6f 77 73 20 6f 74 68 65 72 20 70 72   allows other pr
1b820 6f 63 65 73 73 65 73 20 74 6f 20 72 65 61 64 20  ocesses to read 
1b830 74 68 65 20 64 61 74 61 62 61 73 65 20 62 75 74  the database but
1b840 20 70 72 6f 68 69 62 69 74 73 0a 2a 2a 20 61 6e   prohibits.** an
1b850 79 20 6f 74 68 65 72 20 70 72 6f 63 65 73 73 20  y other process 
1b860 66 72 6f 6d 20 6d 6f 64 69 66 79 69 6e 67 20 74  from modifying t
1b870 68 65 20 64 61 74 61 62 61 73 65 2e 20 20 54 68  he database.  Th
1b880 65 20 72 65 61 64 20 6c 6f 63 6b 20 69 73 0a 2a  e read lock is.*
1b890 2a 20 72 65 6c 65 61 73 65 64 20 77 68 65 6e 20  * released when 
1b8a0 61 6c 6c 20 63 75 72 73 6f 72 73 20 61 72 65 20  all cursors are 
1b8b0 63 6c 6f 73 65 64 2e 20 20 49 66 20 74 68 69 73  closed.  If this
1b8c0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 61 74 74   instruction att
1b8d0 65 6d 70 74 73 0a 2a 2a 20 74 6f 20 67 65 74 20  empts.** to get 
1b8e0 61 20 72 65 61 64 20 6c 6f 63 6b 20 62 75 74 20  a read lock but 
1b8f0 66 61 69 6c 73 2c 20 74 68 65 20 73 63 72 69 70  fails, the scrip
1b900 74 20 74 65 72 6d 69 6e 61 74 65 73 20 77 69 74  t terminates wit
1b910 68 20 61 6e 0a 2a 2a 20 53 51 4c 49 54 45 5f 42  h an.** SQLITE_B
1b920 55 53 59 20 65 72 72 6f 72 20 63 6f 64 65 2e 0a  USY error code..
1b930 2a 2a 0a 2a 2a 20 54 68 65 20 50 34 20 76 61 6c  **.** The P4 val
1b940 75 65 20 6d 61 79 20 62 65 20 65 69 74 68 65 72  ue may be either
1b950 20 61 6e 20 69 6e 74 65 67 65 72 20 28 50 34 5f   an integer (P4_
1b960 49 4e 54 33 32 29 20 6f 72 20 61 20 70 6f 69 6e  INT32) or a poin
1b970 74 65 72 20 74 6f 0a 2a 2a 20 61 20 4b 65 79 49  ter to.** a KeyI
1b980 6e 66 6f 20 73 74 72 75 63 74 75 72 65 20 28 50  nfo structure (P
1b990 34 5f 4b 45 59 49 4e 46 4f 29 2e 20 49 66 20 69  4_KEYINFO). If i
1b9a0 74 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74  t is a pointer t
1b9b0 6f 20 61 20 4b 65 79 49 6e 66 6f 20 0a 2a 2a 20  o a KeyInfo .** 
1b9c0 73 74 72 75 63 74 75 72 65 2c 20 74 68 65 6e 20  structure, then 
1b9d0 73 61 69 64 20 73 74 72 75 63 74 75 72 65 20 64  said structure d
1b9e0 65 66 69 6e 65 73 20 74 68 65 20 63 6f 6e 74 65  efines the conte
1b9f0 6e 74 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  nt and collating
1ba00 20 0a 2a 2a 20 73 65 71 75 65 6e 63 65 20 6f 66   .** sequence of
1ba10 20 74 68 65 20 69 6e 64 65 78 20 62 65 69 6e 67   the index being
1ba20 20 6f 70 65 6e 65 64 2e 20 4f 74 68 65 72 77 69   opened. Otherwi
1ba30 73 65 2c 20 69 66 20 50 34 20 69 73 20 61 6e 20  se, if P4 is an 
1ba40 69 6e 74 65 67 65 72 20 0a 2a 2a 20 76 61 6c 75  integer .** valu
1ba50 65 2c 20 69 74 20 69 73 20 73 65 74 20 74 6f 20  e, it is set to 
1ba60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f  the number of co
1ba70 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 74 61 62  lumns in the tab
1ba80 6c 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  le..**.** See al
1ba90 73 6f 3a 20 4f 70 65 6e 57 72 69 74 65 2c 20 52  so: OpenWrite, R
1baa0 65 6f 70 65 6e 49 64 78 0a 2a 2f 0a 2f 2a 20 4f  eopenIdx.*/./* O
1bab0 70 63 6f 64 65 3a 20 52 65 6f 70 65 6e 49 64 78  pcode: ReopenIdx
1bac0 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a   P1 P2 P3 P4 P5.
1bad0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f  ** Synopsis: roo
1bae0 74 3d 50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a  t=P2 iDb=P3.**.*
1baf0 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78 20  * The ReopenIdx 
1bb00 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 65 78 61  opcode works exa
1bb10 63 74 6c 79 20 6c 69 6b 65 20 52 65 61 64 4f 70  ctly like ReadOp
1bb20 65 6e 20 65 78 63 65 70 74 20 74 68 61 74 20 69  en except that i
1bb30 74 20 66 69 72 73 74 0a 2a 2a 20 63 68 65 63 6b  t first.** check
1bb40 73 20 74 6f 20 73 65 65 20 69 66 20 74 68 65 20  s to see if the 
1bb50 63 75 72 73 6f 72 20 6f 6e 20 50 31 20 69 73 20  cursor on P1 is 
1bb60 61 6c 72 65 61 64 79 20 6f 70 65 6e 20 77 69 74  already open wit
1bb70 68 20 61 20 72 6f 6f 74 20 70 61 67 65 0a 2a 2a  h a root page.**
1bb80 20 6e 75 6d 62 65 72 20 6f 66 20 50 32 20 61 6e   number of P2 an
1bb90 64 20 69 66 20 69 74 20 69 73 20 74 68 69 73 20  d if it is this 
1bba0 6f 70 63 6f 64 65 20 62 65 63 6f 6d 65 73 20 61  opcode becomes a
1bbb0 20 6e 6f 2d 6f 70 2e 20 20 49 6e 20 6f 74 68 65   no-op.  In othe
1bbc0 72 20 77 6f 72 64 73 2c 0a 2a 2a 20 69 66 20 74  r words,.** if t
1bbd0 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c 72  he cursor is alr
1bbe0 65 61 64 79 20 6f 70 65 6e 2c 20 64 6f 20 6e 6f  eady open, do no
1bbf0 74 20 72 65 6f 70 65 6e 20 69 74 2e 0a 2a 2a 0a  t reopen it..**.
1bc00 2a 2a 20 54 68 65 20 52 65 6f 70 65 6e 49 64 78  ** The ReopenIdx
1bc10 20 6f 70 63 6f 64 65 20 6d 61 79 20 6f 6e 6c 79   opcode may only
1bc20 20 62 65 20 75 73 65 64 20 77 69 74 68 20 50 35   be used with P5
1bc30 3d 3d 30 20 61 6e 64 20 77 69 74 68 20 50 34 20  ==0 and with P4 
1bc40 62 65 69 6e 67 0a 2a 2a 20 61 20 50 34 5f 4b 45  being.** a P4_KE
1bc50 59 49 4e 46 4f 20 6f 62 6a 65 63 74 2e 20 20 46  YINFO object.  F
1bc60 75 72 74 68 65 72 6d 6f 72 65 2c 20 74 68 65 20  urthermore, the 
1bc70 50 33 20 76 61 6c 75 65 20 6d 75 73 74 20 62 65  P3 value must be
1bc80 20 74 68 65 20 73 61 6d 65 20 61 73 0a 2a 2a 20   the same as.** 
1bc90 65 76 65 72 79 20 6f 74 68 65 72 20 52 65 6f 70  every other Reop
1bca0 65 6e 49 64 78 20 6f 72 20 4f 70 65 6e 52 65 61  enIdx or OpenRea
1bcb0 64 20 66 6f 72 20 74 68 65 20 73 61 6d 65 20 63  d for the same c
1bcc0 75 72 73 6f 72 20 6e 75 6d 62 65 72 2e 0a 2a 2a  ursor number..**
1bcd0 0a 2a 2a 20 53 65 65 20 74 68 65 20 4f 70 65 6e  .** See the Open
1bce0 52 65 61 64 20 6f 70 63 6f 64 65 20 64 6f 63 75  Read opcode docu
1bcf0 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 61 64  mentation for ad
1bd00 64 69 74 69 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61  ditional informa
1bd10 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  tion..*/./* Opco
1bd20 64 65 3a 20 4f 70 65 6e 57 72 69 74 65 20 50 31  de: OpenWrite P1
1bd30 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20   P2 P3 P4 P5.** 
1bd40 53 79 6e 6f 70 73 69 73 3a 20 72 6f 6f 74 3d 50  Synopsis: root=P
1bd50 32 20 69 44 62 3d 50 33 0a 2a 2a 0a 2a 2a 20 4f  2 iDb=P3.**.** O
1bd60 70 65 6e 20 61 20 72 65 61 64 2f 77 72 69 74 65  pen a read/write
1bd70 20 63 75 72 73 6f 72 20 6e 61 6d 65 64 20 50 31   cursor named P1
1bd80 20 6f 6e 20 74 68 65 20 74 61 62 6c 65 20 6f 72   on the table or
1bd90 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f 6f   index whose roo
1bda0 74 0a 2a 2a 20 70 61 67 65 20 69 73 20 50 32 2e  t.** page is P2.
1bdb0 20 20 4f 72 20 69 66 20 50 35 21 3d 30 20 75 73    Or if P5!=0 us
1bdc0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
1bdd0 20 72 65 67 69 73 74 65 72 20 50 32 20 74 6f 20   register P2 to 
1bde0 66 69 6e 64 20 74 68 65 0a 2a 2a 20 72 6f 6f 74  find the.** root
1bdf0 20 70 61 67 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65   page..**.** The
1be00 20 50 34 20 76 61 6c 75 65 20 6d 61 79 20 62 65   P4 value may be
1be10 20 65 69 74 68 65 72 20 61 6e 20 69 6e 74 65 67   either an integ
1be20 65 72 20 28 50 34 5f 49 4e 54 33 32 29 20 6f 72  er (P4_INT32) or
1be30 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 0a 2a 2a   a pointer to.**
1be40 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1be50 74 75 72 65 20 28 50 34 5f 4b 45 59 49 4e 46 4f  ture (P4_KEYINFO
1be60 29 2e 20 49 66 20 69 74 20 69 73 20 61 20 70 6f  ). If it is a po
1be70 69 6e 74 65 72 20 74 6f 20 61 20 4b 65 79 49 6e  inter to a KeyIn
1be80 66 6f 20 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  fo .** structure
1be90 2c 20 74 68 65 6e 20 73 61 69 64 20 73 74 72 75  , then said stru
1bea0 63 74 75 72 65 20 64 65 66 69 6e 65 73 20 74 68  cture defines th
1beb0 65 20 63 6f 6e 74 65 6e 74 20 61 6e 64 20 63 6f  e content and co
1bec0 6c 6c 61 74 69 6e 67 20 0a 2a 2a 20 73 65 71 75  llating .** sequ
1bed0 65 6e 63 65 20 6f 66 20 74 68 65 20 69 6e 64 65  ence of the inde
1bee0 78 20 62 65 69 6e 67 20 6f 70 65 6e 65 64 2e 20  x being opened. 
1bef0 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 34  Otherwise, if P4
1bf00 20 69 73 20 61 6e 20 69 6e 74 65 67 65 72 20 0a   is an integer .
1bf10 2a 2a 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20  ** value, it is 
1bf20 73 65 74 20 74 6f 20 74 68 65 20 6e 75 6d 62 65  set to the numbe
1bf30 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
1bf40 74 68 65 20 74 61 62 6c 65 2c 20 6f 72 20 74 6f  the table, or to
1bf50 20 74 68 65 0a 2a 2a 20 6c 61 72 67 65 73 74 20   the.** largest 
1bf60 69 6e 64 65 78 20 6f 66 20 61 6e 79 20 63 6f 6c  index of any col
1bf70 75 6d 6e 20 6f 66 20 74 68 65 20 74 61 62 6c 65  umn of the table
1bf80 20 74 68 61 74 20 69 73 20 61 63 74 75 61 6c 6c   that is actuall
1bf90 79 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  y used..**.** Th
1bfa0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  is instruction w
1bfb0 6f 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 4f  orks just like O
1bfc0 70 65 6e 52 65 61 64 20 65 78 63 65 70 74 20 74  penRead except t
1bfd0 68 61 74 20 69 74 20 6f 70 65 6e 73 20 74 68 65  hat it opens the
1bfe0 20 63 75 72 73 6f 72 0a 2a 2a 20 69 6e 20 72 65   cursor.** in re
1bff0 61 64 2f 77 72 69 74 65 20 6d 6f 64 65 2e 20 20  ad/write mode.  
1c000 46 6f 72 20 61 20 67 69 76 65 6e 20 74 61 62 6c  For a given tabl
1c010 65 2c 20 74 68 65 72 65 20 63 61 6e 20 62 65 20  e, there can be 
1c020 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 72 65 61 64  one or more read
1c030 2d 6f 6e 6c 79 0a 2a 2a 20 63 75 72 73 6f 72 73  -only.** cursors
1c040 20 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 65 61   or a single rea
1c050 64 2f 77 72 69 74 65 20 63 75 72 73 6f 72 20 62  d/write cursor b
1c060 75 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2a 0a  ut not both..**.
1c070 2a 2a 20 53 65 65 20 61 6c 73 6f 20 4f 70 65 6e  ** See also Open
1c080 52 65 61 64 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  Read..*/.case OP
1c090 5f 52 65 6f 70 65 6e 49 64 78 3a 20 7b 0a 20 20  _ReopenIdx: {.  
1c0a0 69 6e 74 20 6e 46 69 65 6c 64 3b 0a 20 20 4b 65  int nField;.  Ke
1c0b0 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
1c0c0 0a 20 20 69 6e 74 20 70 32 3b 0a 20 20 69 6e 74  .  int p2;.  int
1c0d0 20 69 44 62 3b 0a 20 20 69 6e 74 20 77 72 46 6c   iDb;.  int wrFl
1c0e0 61 67 3b 0a 20 20 42 74 72 65 65 20 2a 70 58 3b  ag;.  Btree *pX;
1c0f0 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a 70  .  VdbeCursor *p
1c100 43 75 72 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a  Cur;.  Db *pDb;.
1c110 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c120 70 35 3d 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35  p5==0 || pOp->p5
1c130 3d 3d 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20  ==OPFLAG_SEEKEQ 
1c140 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  );.  assert( pOp
1c150 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b 45 59  ->p4type==P4_KEY
1c160 49 4e 46 4f 20 29 3b 0a 20 20 70 43 75 72 20 3d  INFO );.  pCur =
1c170 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
1c180 31 5d 3b 0a 20 20 69 66 28 20 70 43 75 72 20 26  1];.  if( pCur &
1c190 26 20 70 43 75 72 2d 3e 70 67 6e 6f 52 6f 6f 74  & pCur->pgnoRoot
1c1a0 3d 3d 28 75 33 32 29 70 4f 70 2d 3e 70 32 20 29  ==(u32)pOp->p2 )
1c1b0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
1c1c0 75 72 2d 3e 69 44 62 3d 3d 70 4f 70 2d 3e 70 33  ur->iDb==pOp->p3
1c1d0 20 29 3b 20 20 20 20 20 20 2f 2a 20 47 75 61 72   );      /* Guar
1c1e0 61 6e 74 65 65 64 20 62 79 20 74 68 65 20 63 6f  anteed by the co
1c1f0 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a  de generator */.
1c200 20 20 20 20 67 6f 74 6f 20 6f 70 65 6e 5f 63 75      goto open_cu
1c210 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74 73 3b 0a  rsor_set_hints;.
1c220 20 20 7d 0a 20 20 2f 2a 20 49 66 20 74 68 65 20    }.  /* If the 
1c230 63 75 72 73 6f 72 20 69 73 20 6e 6f 74 20 63 75  cursor is not cu
1c240 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 6f 72 20  rrently open or 
1c250 69 73 20 6f 70 65 6e 20 6f 6e 20 61 20 64 69 66  is open on a dif
1c260 66 65 72 65 6e 74 0a 20 20 2a 2a 20 69 6e 64 65  ferent.  ** inde
1c270 78 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74 68 72  x, then fall thr
1c280 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4f 70 65  ough into OP_Ope
1c290 6e 52 65 61 64 20 74 6f 20 66 6f 72 63 65 20 61  nRead to force a
1c2a0 20 72 65 6f 70 65 6e 20 2a 2f 0a 63 61 73 65 20   reopen */.case 
1c2b0 4f 50 5f 4f 70 65 6e 52 65 61 64 3a 0a 63 61 73  OP_OpenRead:.cas
1c2c0 65 20 4f 50 5f 4f 70 65 6e 57 72 69 74 65 3a 0a  e OP_OpenWrite:.
1c2d0 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
1c2e0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70 65 6e 57  opcode==OP_OpenW
1c2f0 72 69 74 65 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d  rite || pOp->p5=
1c300 3d 30 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  =0 || pOp->p5==O
1c310 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 29 3b 0a  PFLAG_SEEKEQ );.
1c320 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62 49 73    assert( p->bIs
1c330 52 65 61 64 65 72 20 29 3b 0a 20 20 61 73 73 65  Reader );.  asse
1c340 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
1c350 3d 4f 50 5f 4f 70 65 6e 52 65 61 64 20 7c 7c 20  =OP_OpenRead || 
1c360 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
1c370 52 65 6f 70 65 6e 49 64 78 0a 20 20 20 20 20 20  ReopenIdx.      
1c380 20 20 20 20 7c 7c 20 70 2d 3e 72 65 61 64 4f 6e      || p->readOn
1c390 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 69 66 28 20  ly==0 );..  if( 
1c3a0 70 2d 3e 65 78 70 69 72 65 64 20 29 7b 0a 20 20  p->expired ){.  
1c3b0 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 41 42    rc = SQLITE_AB
1c3c0 4f 52 54 5f 52 4f 4c 4c 42 41 43 4b 3b 0a 20 20  ORT_ROLLBACK;.  
1c3d0 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1c3e0 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 0a  _to_error;.  }..
1c3f0 20 20 6e 46 69 65 6c 64 20 3d 20 30 3b 0a 20 20    nField = 0;.  
1c400 70 4b 65 79 49 6e 66 6f 20 3d 20 30 3b 0a 20 20  pKeyInfo = 0;.  
1c410 70 32 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20  p2 = pOp->p2;.  
1c420 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20  iDb = pOp->p3;. 
1c430 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20   assert( iDb>=0 
1c440 26 26 20 69 44 62 3c 64 62 2d 3e 6e 44 62 20 29  && iDb<db->nDb )
1c450 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
1c460 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
1c470 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20 20 70  ask, iDb) );.  p
1c480 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
1c490 62 5d 3b 0a 20 20 70 58 20 3d 20 70 44 62 2d 3e  b];.  pX = pDb->
1c4a0 70 42 74 3b 0a 20 20 61 73 73 65 72 74 28 20 70  pBt;.  assert( p
1c4b0 58 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f  X!=0 );.  if( pO
1c4c0 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 4f 70  p->opcode==OP_Op
1c4d0 65 6e 57 72 69 74 65 20 29 7b 0a 20 20 20 20 61  enWrite ){.    a
1c4e0 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 46 4f  ssert( OPFLAG_FO
1c4f0 52 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f 46  RDELETE==BTREE_F
1c500 4f 52 44 45 4c 45 54 45 20 29 3b 0a 20 20 20 20  ORDELETE );.    
1c510 77 72 46 6c 61 67 20 3d 20 42 54 52 45 45 5f 57  wrFlag = BTREE_W
1c520 52 43 53 52 20 7c 20 28 70 4f 70 2d 3e 70 35 20  RCSR | (pOp->p5 
1c530 26 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  & OPFLAG_FORDELE
1c540 54 45 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  TE);.    assert(
1c550 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75   sqlite3SchemaMu
1c560 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c  texHeld(db, iDb,
1c570 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 70   0) );.    if( p
1c580 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 66 69 6c  Db->pSchema->fil
1c590 65 5f 66 6f 72 6d 61 74 20 3c 20 70 2d 3e 6d 69  e_format < p->mi
1c5a0 6e 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74  nWriteFileFormat
1c5b0 20 29 7b 0a 20 20 20 20 20 20 70 2d 3e 6d 69 6e   ){.      p->min
1c5c0 57 72 69 74 65 46 69 6c 65 46 6f 72 6d 61 74 20  WriteFileFormat 
1c5d0 3d 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  = pDb->pSchema->
1c5e0 66 69 6c 65 5f 66 6f 72 6d 61 74 3b 0a 20 20 20  file_format;.   
1c5f0 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
1c600 77 72 46 6c 61 67 20 3d 20 30 3b 0a 20 20 7d 0a  wrFlag = 0;.  }.
1c610 20 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20    if( pOp->p5 & 
1c620 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 29  OPFLAG_P2ISREG )
1c630 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 32  {.    assert( p2
1c640 3e 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  >0 );.    assert
1c650 28 20 70 32 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ( p2<=(p->nMem+1
1c660 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
1c670 3b 0a 20 20 20 20 70 49 6e 32 20 3d 20 26 61 4d  ;.    pIn2 = &aM
1c680 65 6d 5b 70 32 5d 3b 0a 20 20 20 20 61 73 73 65  em[p2];.    asse
1c690 72 74 28 20 6d 65 6d 49 73 56 61 6c 69 64 28 70  rt( memIsValid(p
1c6a0 49 6e 32 29 20 29 3b 0a 20 20 20 20 61 73 73 65  In2) );.    asse
1c6b0 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67 73  rt( (pIn2->flags
1c6c0 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20 29   & MEM_Int)!=0 )
1c6d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
1c6e0 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79 28 70  eMemIntegerify(p
1c6f0 49 6e 32 29 3b 0a 20 20 20 20 70 32 20 3d 20 28  In2);.    p2 = (
1c700 69 6e 74 29 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  int)pIn2->u.i;. 
1c710 20 20 20 2f 2a 20 54 68 65 20 70 32 20 76 61 6c     /* The p2 val
1c720 75 65 20 61 6c 77 61 79 73 20 63 6f 6d 65 73 20  ue always comes 
1c730 66 72 6f 6d 20 61 20 70 72 69 6f 72 20 4f 50 5f  from a prior OP_
1c740 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f  CreateTable opco
1c750 64 65 20 61 6e 64 0a 20 20 20 20 2a 2a 20 74 68  de and.    ** th
1c760 61 74 20 6f 70 63 6f 64 65 20 77 69 6c 6c 20 61  at opcode will a
1c770 6c 77 61 79 73 20 73 65 74 20 74 68 65 20 70 32  lways set the p2
1c780 20 76 61 6c 75 65 20 74 6f 20 32 20 6f 72 20 6d   value to 2 or m
1c790 6f 72 65 20 6f 72 20 65 6c 73 65 20 66 61 69 6c  ore or else fail
1c7a0 2e 0a 20 20 20 20 2a 2a 20 49 66 20 74 68 65 72  ..    ** If ther
1c7b0 65 20 77 65 72 65 20 61 20 66 61 69 6c 75 72 65  e were a failure
1c7c0 2c 20 74 68 65 20 70 72 65 70 61 72 65 64 20 73  , the prepared s
1c7d0 74 61 74 65 6d 65 6e 74 20 77 6f 75 6c 64 20 68  tatement would h
1c7e0 61 76 65 20 68 61 6c 74 65 64 0a 20 20 20 20 2a  ave halted.    *
1c7f0 2a 20 62 65 66 6f 72 65 20 72 65 61 63 68 69 6e  * before reachin
1c800 67 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  g this instructi
1c810 6f 6e 2e 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  on. */.    asser
1c820 74 28 20 70 32 3e 3d 32 20 29 3b 0a 20 20 7d 0a  t( p2>=2 );.  }.
1c830 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70    if( pOp->p4typ
1c840 65 3d 3d 50 34 5f 4b 45 59 49 4e 46 4f 20 29 7b  e==P4_KEYINFO ){
1c850 0a 20 20 20 20 70 4b 65 79 49 6e 66 6f 20 3d 20  .    pKeyInfo = 
1c860 70 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f  pOp->p4.pKeyInfo
1c870 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4b  ;.    assert( pK
1c880 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45 4e 43  eyInfo->enc==ENC
1c890 28 64 62 29 20 29 3b 0a 20 20 20 20 61 73 73 65  (db) );.    asse
1c8a0 72 74 28 20 70 4b 65 79 49 6e 66 6f 2d 3e 64 62  rt( pKeyInfo->db
1c8b0 3d 3d 64 62 20 29 3b 0a 20 20 20 20 6e 46 69 65  ==db );.    nFie
1c8c0 6c 64 20 3d 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e  ld = pKeyInfo->n
1c8d0 46 69 65 6c 64 2b 70 4b 65 79 49 6e 66 6f 2d 3e  Field+pKeyInfo->
1c8e0 6e 58 46 69 65 6c 64 3b 0a 20 20 7d 65 6c 73 65  nXField;.  }else
1c8f0 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79 70 65   if( pOp->p4type
1c900 3d 3d 50 34 5f 49 4e 54 33 32 20 29 7b 0a 20 20  ==P4_INT32 ){.  
1c910 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70 2d 3e    nField = pOp->
1c920 70 34 2e 69 3b 0a 20 20 7d 0a 20 20 61 73 73 65  p4.i;.  }.  asse
1c930 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1c940 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 46 69 65  ;.  assert( nFie
1c950 6c 64 3e 3d 30 20 29 3b 0a 20 20 74 65 73 74 63  ld>=0 );.  testc
1c960 61 73 65 28 20 6e 46 69 65 6c 64 3d 3d 30 20 29  ase( nField==0 )
1c970 3b 20 20 2f 2a 20 54 61 62 6c 65 20 77 69 74 68  ;  /* Table with
1c980 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1c990 20 4b 45 59 20 61 6e 64 20 6e 6f 74 68 69 6e 67   KEY and nothing
1c9a0 20 65 6c 73 65 20 2a 2f 0a 20 20 70 43 75 72 20   else */.  pCur 
1c9b0 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1c9c0 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 6e 46 69  (p, pOp->p1, nFi
1c9d0 65 6c 64 2c 20 69 44 62 2c 20 43 55 52 54 59 50  eld, iDb, CURTYP
1c9e0 45 5f 42 54 52 45 45 29 3b 0a 20 20 69 66 28 20  E_BTREE);.  if( 
1c9f0 70 43 75 72 3d 3d 30 20 29 20 67 6f 74 6f 20 6e  pCur==0 ) goto n
1ca00 6f 5f 6d 65 6d 3b 0a 20 20 70 43 75 72 2d 3e 6e  o_mem;.  pCur->n
1ca10 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43  ullRow = 1;.  pC
1ca20 75 72 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20  ur->isOrdered = 
1ca30 31 3b 0a 20 20 70 43 75 72 2d 3e 70 67 6e 6f 52  1;.  pCur->pgnoR
1ca40 6f 6f 74 20 3d 20 70 32 3b 0a 23 69 66 64 65 66  oot = p2;.#ifdef
1ca50 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20   SQLITE_DEBUG.  
1ca60 70 43 75 72 2d 3e 77 72 46 6c 61 67 20 3d 20 77  pCur->wrFlag = w
1ca70 72 46 6c 61 67 3b 0a 23 65 6e 64 69 66 0a 20 20  rFlag;.#endif.  
1ca80 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1ca90 65 43 75 72 73 6f 72 28 70 58 2c 20 70 32 2c 20  eCursor(pX, p2, 
1caa0 77 72 46 6c 61 67 2c 20 70 4b 65 79 49 6e 66 6f  wrFlag, pKeyInfo
1cab0 2c 20 70 43 75 72 2d 3e 75 63 2e 70 43 75 72 73  , pCur->uc.pCurs
1cac0 6f 72 29 3b 0a 20 20 70 43 75 72 2d 3e 70 4b 65  or);.  pCur->pKe
1cad0 79 49 6e 66 6f 20 3d 20 70 4b 65 79 49 6e 66 6f  yInfo = pKeyInfo
1cae0 3b 0a 20 20 2f 2a 20 53 65 74 20 74 68 65 20 56  ;.  /* Set the V
1caf0 64 62 65 43 75 72 73 6f 72 2e 69 73 54 61 62 6c  dbeCursor.isTabl
1cb00 65 20 76 61 72 69 61 62 6c 65 2e 20 50 72 65 76  e variable. Prev
1cb10 69 6f 75 73 20 76 65 72 73 69 6f 6e 73 20 6f 66  ious versions of
1cb20 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 75 73 65  .  ** SQLite use
1cb30 64 20 74 6f 20 63 68 65 63 6b 20 69 66 20 74 68  d to check if th
1cb40 65 20 72 6f 6f 74 2d 70 61 67 65 20 66 6c 61 67  e root-page flag
1cb50 73 20 77 65 72 65 20 73 61 6e 65 20 61 74 20 74  s were sane at t
1cb60 68 69 73 20 70 6f 69 6e 74 0a 20 20 2a 2a 20 61  his point.  ** a
1cb70 6e 64 20 72 65 70 6f 72 74 20 64 61 74 61 62 61  nd report databa
1cb80 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 20 69 66  se corruption if
1cb90 20 74 68 65 79 20 77 65 72 65 20 6e 6f 74 2c 20   they were not, 
1cba0 62 75 74 20 74 68 69 73 20 63 68 65 63 6b 20 68  but this check h
1cbb0 61 73 0a 20 20 2a 2a 20 73 69 6e 63 65 20 6d 6f  as.  ** since mo
1cbc0 76 65 64 20 69 6e 74 6f 20 74 68 65 20 62 74 72  ved into the btr
1cbd0 65 65 20 6c 61 79 65 72 2e 20 20 2a 2f 20 20 0a  ee layer.  */  .
1cbe0 20 20 70 43 75 72 2d 3e 69 73 54 61 62 6c 65 20    pCur->isTable 
1cbf0 3d 20 70 4f 70 2d 3e 70 34 74 79 70 65 21 3d 50  = pOp->p4type!=P
1cc00 34 5f 4b 45 59 49 4e 46 4f 3b 0a 0a 6f 70 65 6e  4_KEYINFO;..open
1cc10 5f 63 75 72 73 6f 72 5f 73 65 74 5f 68 69 6e 74  _cursor_set_hint
1cc20 73 3a 0a 20 20 61 73 73 65 72 74 28 20 4f 50 46  s:.  assert( OPF
1cc30 4c 41 47 5f 42 55 4c 4b 43 53 52 3d 3d 42 54 52  LAG_BULKCSR==BTR
1cc40 45 45 5f 42 55 4c 4b 4c 4f 41 44 20 29 3b 0a 20  EE_BULKLOAD );. 
1cc50 20 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f   assert( OPFLAG_
1cc60 53 45 45 4b 45 51 3d 3d 42 54 52 45 45 5f 53 45  SEEKEQ==BTREE_SE
1cc70 45 4b 5f 45 51 20 29 3b 0a 20 20 74 65 73 74 63  EK_EQ );.  testc
1cc80 61 73 65 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f  ase( pOp->p5 & O
1cc90 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 29 3b  PFLAG_BULKCSR );
1cca0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
1ccb0 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e  NABLE_CURSOR_HIN
1ccc0 54 53 0a 20 20 74 65 73 74 63 61 73 65 28 20 70  TS.  testcase( p
1ccd0 4f 70 2d 3e 70 32 20 26 20 4f 50 46 4c 41 47 5f  Op->p2 & OPFLAG_
1cce0 53 45 45 4b 45 51 20 29 3b 0a 23 65 6e 64 69 66  SEEKEQ );.#endif
1ccf0 0a 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  .  sqlite3BtreeC
1cd00 75 72 73 6f 72 48 69 6e 74 46 6c 61 67 73 28 70  ursorHintFlags(p
1cd10 43 75 72 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c  Cur->uc.pCursor,
1cd20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 28 70 4f 70 2d 3e 70 35 20 26 20 28 4f 50 46 4c  (pOp->p5 & (OPFL
1cd50 41 47 5f 42 55 4c 4b 43 53 52 7c 4f 50 46 4c 41  AG_BULKCSR|OPFLA
1cd60 47 5f 53 45 45 4b 45 51 29 29 29 3b 0a 20 20 69  G_SEEKEQ)));.  i
1cd70 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1cd80 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1cd90 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1cda0 4f 70 63 6f 64 65 3a 20 4f 70 65 6e 45 70 68 65  Opcode: OpenEphe
1cdb0 6d 65 72 61 6c 20 50 31 20 50 32 20 2a 20 50 34  meral P1 P2 * P4
1cdc0 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a   P5.** Synopsis:
1cdd0 20 6e 43 6f 6c 75 6d 6e 3d 50 32 0a 2a 2a 0a 2a   nColumn=P2.**.*
1cde0 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63 75 72  * Open a new cur
1cdf0 73 6f 72 20 50 31 20 74 6f 20 61 20 74 72 61 6e  sor P1 to a tran
1ce00 73 69 65 6e 74 20 74 61 62 6c 65 2e 0a 2a 2a 20  sient table..** 
1ce10 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 61 6c  The cursor is al
1ce20 77 61 79 73 20 6f 70 65 6e 65 64 20 72 65 61 64  ways opened read
1ce30 2f 77 72 69 74 65 20 65 76 65 6e 20 69 66 20 0a  /write even if .
1ce40 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  ** the main data
1ce50 62 61 73 65 20 69 73 20 72 65 61 64 2d 6f 6e 6c  base is read-onl
1ce60 79 2e 20 20 54 68 65 20 65 70 68 65 6d 65 72 61  y.  The ephemera
1ce70 6c 0a 2a 2a 20 74 61 62 6c 65 20 69 73 20 64 65  l.** table is de
1ce80 6c 65 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  leted automatica
1ce90 6c 6c 79 20 77 68 65 6e 20 74 68 65 20 63 75 72  lly when the cur
1cea0 73 6f 72 20 69 73 20 63 6c 6f 73 65 64 2e 0a 2a  sor is closed..*
1ceb0 2a 0a 2a 2a 20 50 32 20 69 73 20 74 68 65 20 6e  *.** P2 is the n
1cec0 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
1ced0 20 69 6e 20 74 68 65 20 65 70 68 65 6d 65 72 61   in the ephemera
1cee0 6c 20 74 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20  l table..** The 
1cef0 63 75 72 73 6f 72 20 70 6f 69 6e 74 73 20 74 6f  cursor points to
1cf00 20 61 20 42 54 72 65 65 20 74 61 62 6c 65 20 69   a BTree table i
1cf10 66 20 50 34 3d 3d 30 20 61 6e 64 20 74 6f 20 61  f P4==0 and to a
1cf20 20 42 54 72 65 65 20 69 6e 64 65 78 0a 2a 2a 20   BTree index.** 
1cf30 69 66 20 50 34 20 69 73 20 6e 6f 74 20 30 2e 20  if P4 is not 0. 
1cf40 20 49 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55   If P4 is not NU
1cf50 4c 4c 2c 20 69 74 20 70 6f 69 6e 74 73 20 74 6f  LL, it points to
1cf60 20 61 20 4b 65 79 49 6e 66 6f 20 73 74 72 75 63   a KeyInfo struc
1cf70 74 75 72 65 0a 2a 2a 20 74 68 61 74 20 64 65 66  ture.** that def
1cf80 69 6e 65 73 20 74 68 65 20 66 6f 72 6d 61 74 20  ines the format 
1cf90 6f 66 20 6b 65 79 73 20 69 6e 20 74 68 65 20 69  of keys in the i
1cfa0 6e 64 65 78 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ndex..**.** The 
1cfb0 50 35 20 70 61 72 61 6d 65 74 65 72 20 63 61 6e  P5 parameter can
1cfc0 20 62 65 20 61 20 6d 61 73 6b 20 6f 66 20 74 68   be a mask of th
1cfd0 65 20 42 54 52 45 45 5f 2a 20 66 6c 61 67 73 20  e BTREE_* flags 
1cfe0 64 65 66 69 6e 65 64 0a 2a 2a 20 69 6e 20 62 74  defined.** in bt
1cff0 72 65 65 2e 68 2e 20 20 54 68 65 73 65 20 66 6c  ree.h.  These fl
1d000 61 67 73 20 63 6f 6e 74 72 6f 6c 20 61 73 70 65  ags control aspe
1d010 63 74 73 20 6f 66 20 74 68 65 20 6f 70 65 72 61  cts of the opera
1d020 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 62  tion of.** the b
1d030 74 72 65 65 2e 20 20 54 68 65 20 42 54 52 45 45  tree.  The BTREE
1d040 5f 4f 4d 49 54 5f 4a 4f 55 52 4e 41 4c 20 61 6e  _OMIT_JOURNAL an
1d050 64 20 42 54 52 45 45 5f 53 49 4e 47 4c 45 20 66  d BTREE_SINGLE f
1d060 6c 61 67 73 20 61 72 65 0a 2a 2a 20 61 64 64 65  lags are.** adde
1d070 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e  d automatically.
1d080 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4f  .*/./* Opcode: O
1d090 70 65 6e 41 75 74 6f 69 6e 64 65 78 20 50 31 20  penAutoindex P1 
1d0a0 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  P2 * P4 *.** Syn
1d0b0 6f 70 73 69 73 3a 20 6e 43 6f 6c 75 6d 6e 3d 50  opsis: nColumn=P
1d0c0 32 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63  2.**.** This opc
1d0d0 6f 64 65 20 77 6f 72 6b 73 20 74 68 65 20 73 61  ode works the sa
1d0e0 6d 65 20 61 73 20 4f 50 5f 4f 70 65 6e 45 70 68  me as OP_OpenEph
1d0f0 65 6d 65 72 61 6c 2e 20 20 49 74 20 68 61 73 20  emeral.  It has 
1d100 61 0a 2a 2a 20 64 69 66 66 65 72 65 6e 74 20 6e  a.** different n
1d110 61 6d 65 20 74 6f 20 64 69 73 74 69 6e 67 75 69  ame to distingui
1d120 73 68 20 69 74 73 20 75 73 65 2e 20 20 54 61 62  sh its use.  Tab
1d130 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
1d140 67 0a 2a 2a 20 62 79 20 74 68 69 73 20 6f 70 63  g.** by this opc
1d150 6f 64 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ode will be used
1d160 20 66 6f 72 20 61 75 74 6f 6d 61 74 69 63 61 6c   for automatical
1d170 6c 79 20 63 72 65 61 74 65 64 20 74 72 61 6e 73  ly created trans
1d180 69 65 6e 74 0a 2a 2a 20 69 6e 64 69 63 65 73 20  ient.** indices 
1d190 69 6e 20 6a 6f 69 6e 73 2e 0a 2a 2f 0a 63 61 73  in joins..*/.cas
1d1a0 65 20 4f 50 5f 4f 70 65 6e 41 75 74 6f 69 6e 64  e OP_OpenAutoind
1d1b0 65 78 3a 20 0a 63 61 73 65 20 4f 50 5f 4f 70 65  ex: .case OP_Ope
1d1c0 6e 45 70 68 65 6d 65 72 61 6c 3a 20 7b 0a 20 20  nEphemeral: {.  
1d1d0 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b  VdbeCursor *pCx;
1d1e0 0a 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79  .  KeyInfo *pKey
1d1f0 49 6e 66 6f 3b 0a 0a 20 20 73 74 61 74 69 63 20  Info;..  static 
1d200 63 6f 6e 73 74 20 69 6e 74 20 76 66 73 46 6c 61  const int vfsFla
1d210 67 73 20 3d 20 0a 20 20 20 20 20 20 53 51 4c 49  gs = .      SQLI
1d220 54 45 5f 4f 50 45 4e 5f 52 45 41 44 57 52 49 54  TE_OPEN_READWRIT
1d230 45 20 7c 0a 20 20 20 20 20 20 53 51 4c 49 54 45  E |.      SQLITE
1d240 5f 4f 50 45 4e 5f 43 52 45 41 54 45 20 7c 0a 20  _OPEN_CREATE |. 
1d250 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d260 5f 45 58 43 4c 55 53 49 56 45 20 7c 0a 20 20 20  _EXCLUSIVE |.   
1d270 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e 5f 44     SQLITE_OPEN_D
1d280 45 4c 45 54 45 4f 4e 43 4c 4f 53 45 20 7c 0a 20  ELETEONCLOSE |. 
1d290 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 50 45 4e       SQLITE_OPEN
1d2a0 5f 54 52 41 4e 53 49 45 4e 54 5f 44 42 3b 0a 20  _TRANSIENT_DB;. 
1d2b0 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
1d2c0 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  >=0 );.  assert(
1d2d0 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a 20   pOp->p2>=0 );. 
1d2e0 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65 43   pCx = allocateC
1d2f0 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70 31  ursor(p, pOp->p1
1d300 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20 43  , pOp->p2, -1, C
1d310 55 52 54 59 50 45 5f 42 54 52 45 45 29 3b 0a 20  URTYPE_BTREE);. 
1d320 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20 67 6f   if( pCx==0 ) go
1d330 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78  to no_mem;.  pCx
1d340 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
1d350 20 70 43 78 2d 3e 69 73 45 70 68 65 6d 65 72 61   pCx->isEphemera
1d360 6c 20 3d 20 31 3b 0a 20 20 72 63 20 3d 20 73 71  l = 1;.  rc = sq
1d370 6c 69 74 65 33 42 74 72 65 65 4f 70 65 6e 28 64  lite3BtreeOpen(d
1d380 62 2d 3e 70 56 66 73 2c 20 30 2c 20 64 62 2c 20  b->pVfs, 0, db, 
1d390 26 70 43 78 2d 3e 70 42 74 78 2c 20 0a 20 20 20  &pCx->pBtx, .   
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 42 54 52 45 45 5f 4f 4d 49 54 5f       BTREE_OMIT_
1d3c0 4a 4f 55 52 4e 41 4c 20 7c 20 42 54 52 45 45 5f  JOURNAL | BTREE_
1d3d0 53 49 4e 47 4c 45 20 7c 20 70 4f 70 2d 3e 70 35  SINGLE | pOp->p5
1d3e0 2c 20 76 66 73 46 6c 61 67 73 29 3b 0a 20 20 69  , vfsFlags);.  i
1d3f0 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
1d400 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
1d410 69 74 65 33 42 74 72 65 65 42 65 67 69 6e 54 72  ite3BtreeBeginTr
1d420 61 6e 73 28 70 43 78 2d 3e 70 42 74 78 2c 20 31  ans(pCx->pBtx, 1
1d430 29 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 3d  );.  }.  if( rc=
1d440 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
1d450 20 20 2f 2a 20 49 66 20 61 20 74 72 61 6e 73 69    /* If a transi
1d460 65 6e 74 20 69 6e 64 65 78 20 69 73 20 72 65 71  ent index is req
1d470 75 69 72 65 64 2c 20 63 72 65 61 74 65 20 69 74  uired, create it
1d480 20 62 79 20 63 61 6c 6c 69 6e 67 0a 20 20 20 20   by calling.    
1d490 2a 2a 20 73 71 6c 69 74 65 33 42 74 72 65 65 43  ** sqlite3BtreeC
1d4a0 72 65 61 74 65 54 61 62 6c 65 28 29 20 77 69 74  reateTable() wit
1d4b0 68 20 74 68 65 20 42 54 52 45 45 5f 42 4c 4f 42  h the BTREE_BLOB
1d4c0 4b 45 59 20 66 6c 61 67 20 62 65 66 6f 72 65 0a  KEY flag before.
1d4d0 20 20 20 20 2a 2a 20 6f 70 65 6e 69 6e 67 20 69      ** opening i
1d4e0 74 2e 20 49 66 20 61 20 74 72 61 6e 73 69 65 6e  t. If a transien
1d4f0 74 20 74 61 62 6c 65 20 69 73 20 72 65 71 75 69  t table is requi
1d500 72 65 64 2c 20 6a 75 73 74 20 75 73 65 20 74 68  red, just use th
1d510 65 0a 20 20 20 20 2a 2a 20 61 75 74 6f 6d 61 74  e.    ** automat
1d520 69 63 61 6c 6c 79 20 63 72 65 61 74 65 64 20 74  ically created t
1d530 61 62 6c 65 20 77 69 74 68 20 72 6f 6f 74 2d 70  able with root-p
1d540 61 67 65 20 31 20 28 61 6e 20 42 4c 4f 42 5f 49  age 1 (an BLOB_I
1d550 4e 54 4b 45 59 20 74 61 62 6c 65 29 2e 0a 20 20  NTKEY table)..  
1d560 20 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 43    */.    if( (pC
1d570 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 4b  x->pKeyInfo = pK
1d580 65 79 49 6e 66 6f 20 3d 20 70 4f 70 2d 3e 70 34  eyInfo = pOp->p4
1d590 2e 70 4b 65 79 49 6e 66 6f 29 21 3d 30 20 29 7b  .pKeyInfo)!=0 ){
1d5a0 0a 20 20 20 20 20 20 69 6e 74 20 70 67 6e 6f 3b  .      int pgno;
1d5b0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
1d5c0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 4b  Op->p4type==P4_K
1d5d0 45 59 49 4e 46 4f 20 29 3b 0a 20 20 20 20 20 20  EYINFO );.      
1d5e0 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
1d5f0 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 43 78  eCreateTable(pCx
1d600 2d 3e 70 42 74 78 2c 20 26 70 67 6e 6f 2c 20 42  ->pBtx, &pgno, B
1d610 54 52 45 45 5f 42 4c 4f 42 4b 45 59 20 7c 20 70  TREE_BLOBKEY | p
1d620 4f 70 2d 3e 70 35 29 3b 20 0a 20 20 20 20 20 20  Op->p5); .      
1d630 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
1d640 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  K ){.        ass
1d650 65 72 74 28 20 70 67 6e 6f 3d 3d 4d 41 53 54 45  ert( pgno==MASTE
1d660 52 5f 52 4f 4f 54 2b 31 20 29 3b 0a 20 20 20 20  R_ROOT+1 );.    
1d670 20 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79      assert( pKey
1d680 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62 20 29 3b 0a  Info->db==db );.
1d690 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1d6a0 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63 3d 3d 45  pKeyInfo->enc==E
1d6b0 4e 43 28 64 62 29 20 29 3b 0a 20 20 20 20 20 20  NC(db) );.      
1d6c0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
1d6d0 72 65 65 43 75 72 73 6f 72 28 70 43 78 2d 3e 70  reeCursor(pCx->p
1d6e0 42 74 78 2c 20 70 67 6e 6f 2c 20 42 54 52 45 45  Btx, pgno, BTREE
1d6f0 5f 57 52 43 53 52 2c 0a 20 20 20 20 20 20 20 20  _WRCSR,.        
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d710 20 20 20 20 20 20 20 20 70 4b 65 79 49 6e 66 6f          pKeyInfo
1d720 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73 6f  , pCx->uc.pCurso
1d730 72 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  r);.      }.    
1d740 20 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d    pCx->isTable =
1d750 20 30 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20   0;.    }else{. 
1d760 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
1d770 33 42 74 72 65 65 43 75 72 73 6f 72 28 70 43 78  3BtreeCursor(pCx
1d780 2d 3e 70 42 74 78 2c 20 4d 41 53 54 45 52 5f 52  ->pBtx, MASTER_R
1d790 4f 4f 54 2c 20 42 54 52 45 45 5f 57 52 43 53 52  OOT, BTREE_WRCSR
1d7a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
1d7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d7c0 30 2c 20 70 43 78 2d 3e 75 63 2e 70 43 75 72 73  0, pCx->uc.pCurs
1d7d0 6f 72 29 3b 0a 20 20 20 20 20 20 70 43 78 2d 3e  or);.      pCx->
1d7e0 69 73 54 61 62 6c 65 20 3d 20 31 3b 0a 20 20 20  isTable = 1;.   
1d7f0 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 20   }.  }.  if( rc 
1d800 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
1d810 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 43 78  _to_error;.  pCx
1d820 2d 3e 69 73 4f 72 64 65 72 65 64 20 3d 20 28 70  ->isOrdered = (p
1d830 4f 70 2d 3e 70 35 21 3d 42 54 52 45 45 5f 55 4e  Op->p5!=BTREE_UN
1d840 4f 52 44 45 52 45 44 29 3b 0a 20 20 62 72 65 61  ORDERED);.  brea
1d850 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
1d860 20 53 6f 72 74 65 72 4f 70 65 6e 20 50 31 20 50   SorterOpen P1 P
1d870 32 20 50 33 20 50 34 20 2a 0a 2a 2a 0a 2a 2a 20  2 P3 P4 *.**.** 
1d880 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b  This opcode work
1d890 73 20 6c 69 6b 65 20 4f 50 5f 4f 70 65 6e 45 70  s like OP_OpenEp
1d8a0 68 65 6d 65 72 61 6c 20 65 78 63 65 70 74 20 74  hemeral except t
1d8b0 68 61 74 20 69 74 20 6f 70 65 6e 73 0a 2a 2a 20  hat it opens.** 
1d8c0 61 20 74 72 61 6e 73 69 65 6e 74 20 69 6e 64 65  a transient inde
1d8d0 78 20 74 68 61 74 20 69 73 20 73 70 65 63 69 66  x that is specif
1d8e0 69 63 61 6c 6c 79 20 64 65 73 69 67 6e 65 64 20  ically designed 
1d8f0 74 6f 20 73 6f 72 74 20 6c 61 72 67 65 0a 2a 2a  to sort large.**
1d900 20 74 61 62 6c 65 73 20 75 73 69 6e 67 20 61 6e   tables using an
1d910 20 65 78 74 65 72 6e 61 6c 20 6d 65 72 67 65 2d   external merge-
1d920 73 6f 72 74 20 61 6c 67 6f 72 69 74 68 6d 2e 0a  sort algorithm..
1d930 2a 2a 0a 2a 2a 20 49 66 20 61 72 67 75 6d 65 6e  **.** If argumen
1d940 74 20 50 33 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f  t P3 is non-zero
1d950 2c 20 74 68 65 6e 20 69 74 20 69 6e 64 69 63 61  , then it indica
1d960 74 65 73 20 74 68 61 74 20 74 68 65 20 73 6f 72  tes that the sor
1d970 74 65 72 20 6d 61 79 0a 2a 2a 20 61 73 73 75 6d  ter may.** assum
1d980 65 20 74 68 61 74 20 61 20 73 74 61 62 6c 65 20  e that a stable 
1d990 73 6f 72 74 20 63 6f 6e 73 69 64 65 72 69 6e 67  sort considering
1d9a0 20 74 68 65 20 66 69 72 73 74 20 50 33 20 66 69   the first P3 fi
1d9b0 65 6c 64 73 20 6f 66 20 65 61 63 68 0a 2a 2a 20  elds of each.** 
1d9c0 6b 65 79 20 69 73 20 73 75 66 66 69 63 69 65 6e  key is sufficien
1d9d0 74 20 74 6f 20 70 72 6f 64 75 63 65 20 74 68 65  t to produce the
1d9e0 20 72 65 71 75 69 72 65 64 20 72 65 73 75 6c 74   required result
1d9f0 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53 6f  s..*/.case OP_So
1da00 72 74 65 72 4f 70 65 6e 3a 20 7b 0a 20 20 56 64  rterOpen: {.  Vd
1da10 62 65 43 75 72 73 6f 72 20 2a 70 43 78 3b 0a 0a  beCursor *pCx;..
1da20 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
1da30 31 3e 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  1>=0 );.  assert
1da40 28 20 70 4f 70 2d 3e 70 32 3e 3d 30 20 29 3b 0a  ( pOp->p2>=0 );.
1da50 20 20 70 43 78 20 3d 20 61 6c 6c 6f 63 61 74 65    pCx = allocate
1da60 43 75 72 73 6f 72 28 70 2c 20 70 4f 70 2d 3e 70  Cursor(p, pOp->p
1da70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 2d 31 2c 20  1, pOp->p2, -1, 
1da80 43 55 52 54 59 50 45 5f 53 4f 52 54 45 52 29 3b  CURTYPE_SORTER);
1da90 0a 20 20 69 66 28 20 70 43 78 3d 3d 30 20 29 20  .  if( pCx==0 ) 
1daa0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
1dab0 43 78 2d 3e 70 4b 65 79 49 6e 66 6f 20 3d 20 70  Cx->pKeyInfo = p
1dac0 4f 70 2d 3e 70 34 2e 70 4b 65 79 49 6e 66 6f 3b  Op->p4.pKeyInfo;
1dad0 0a 20 20 61 73 73 65 72 74 28 20 70 43 78 2d 3e  .  assert( pCx->
1dae0 70 4b 65 79 49 6e 66 6f 2d 3e 64 62 3d 3d 64 62  pKeyInfo->db==db
1daf0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1db00 78 2d 3e 70 4b 65 79 49 6e 66 6f 2d 3e 65 6e 63  x->pKeyInfo->enc
1db10 3d 3d 45 4e 43 28 64 62 29 20 29 3b 0a 20 20 72  ==ENC(db) );.  r
1db20 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 53  c = sqlite3VdbeS
1db30 6f 72 74 65 72 49 6e 69 74 28 64 62 2c 20 70 4f  orterInit(db, pO
1db40 70 2d 3e 70 33 2c 20 70 43 78 29 3b 0a 20 20 69  p->p3, pCx);.  i
1db50 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
1db60 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
1db70 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
1db80 4f 70 63 6f 64 65 3a 20 53 65 71 75 65 6e 63 65  Opcode: Sequence
1db90 54 65 73 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Test P1 P2 * * *
1dba0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
1dbb0 28 20 63 75 72 73 6f 72 5b 50 31 5d 2e 63 74 72  ( cursor[P1].ctr
1dbc0 2b 2b 20 29 20 70 63 20 3d 20 50 32 0a 2a 2a 0a  ++ ) pc = P2.**.
1dbd0 2a 2a 20 50 31 20 69 73 20 61 20 73 6f 72 74 65  ** P1 is a sorte
1dbe0 72 20 63 75 72 73 6f 72 2e 20 49 66 20 74 68 65  r cursor. If the
1dbf0 20 73 65 71 75 65 6e 63 65 20 63 6f 75 6e 74 65   sequence counte
1dc00 72 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 7a  r is currently z
1dc10 65 72 6f 2c 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  ero, jump.** to 
1dc20 50 32 2e 20 52 65 67 61 72 64 6c 65 73 73 20 6f  P2. Regardless o
1dc30 66 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  f whether or not
1dc40 20 74 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b   the jump is tak
1dc50 65 6e 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  en, increment th
1dc60 65 0a 2a 2a 20 74 68 65 20 73 65 71 75 65 6e 63  e.** the sequenc
1dc70 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a 63 61 73 65  e value..*/.case
1dc80 20 4f 50 5f 53 65 71 75 65 6e 63 65 54 65 73 74   OP_SequenceTest
1dc90 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  : {.  VdbeCursor
1dca0 20 2a 70 43 3b 0a 20 20 61 73 73 65 72 74 28 20   *pC;.  assert( 
1dcb0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1dcc0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1dcd0 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
1dce0 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
1dcf0 61 73 73 65 72 74 28 20 69 73 53 6f 72 74 65 72  assert( isSorter
1dd00 28 70 43 29 20 29 3b 0a 20 20 69 66 28 20 28 70  (pC) );.  if( (p
1dd10 43 2d 3e 73 65 71 43 6f 75 6e 74 2b 2b 29 3d 3d  C->seqCount++)==
1dd20 30 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75  0 ){.    goto ju
1dd30 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20  mp_to_p2;.  }.  
1dd40 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
1dd50 6f 64 65 3a 20 4f 70 65 6e 50 73 65 75 64 6f 20  ode: OpenPseudo 
1dd60 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20  P1 P2 P3 * *.** 
1dd70 53 79 6e 6f 70 73 69 73 3a 20 50 33 20 63 6f 6c  Synopsis: P3 col
1dd80 75 6d 6e 73 20 69 6e 20 72 5b 50 32 5d 0a 2a 2a  umns in r[P2].**
1dd90 0a 2a 2a 20 4f 70 65 6e 20 61 20 6e 65 77 20 63  .** Open a new c
1dda0 75 72 73 6f 72 20 74 68 61 74 20 70 6f 69 6e 74  ursor that point
1ddb0 73 20 74 6f 20 61 20 66 61 6b 65 20 74 61 62 6c  s to a fake tabl
1ddc0 65 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  e that contains 
1ddd0 61 20 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20  a single.** row 
1dde0 6f 66 20 64 61 74 61 2e 20 20 54 68 65 20 63 6f  of data.  The co
1ddf0 6e 74 65 6e 74 20 6f 66 20 74 68 61 74 20 6f 6e  ntent of that on
1de00 65 20 72 6f 77 20 69 73 20 74 68 65 20 63 6f 6e  e row is the con
1de10 74 65 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  tent of memory.*
1de20 2a 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 20  * register P2.  
1de30 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1de40 63 75 72 73 6f 72 20 50 31 20 62 65 63 6f 6d 65  cursor P1 become
1de50 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 74  s an alias for t
1de60 68 65 20 0a 2a 2a 20 4d 45 4d 5f 42 6c 6f 62 20  he .** MEM_Blob 
1de70 63 6f 6e 74 65 6e 74 20 63 6f 6e 74 61 69 6e 65  content containe
1de80 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32  d in register P2
1de90 2e 0a 2a 2a 0a 2a 2a 20 41 20 70 73 65 75 64 6f  ..**.** A pseudo
1dea0 2d 74 61 62 6c 65 20 63 72 65 61 74 65 64 20 62  -table created b
1deb0 79 20 74 68 69 73 20 6f 70 63 6f 64 65 20 69 73  y this opcode is
1dec0 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 61 20   used to hold a 
1ded0 73 69 6e 67 6c 65 0a 2a 2a 20 72 6f 77 20 6f 75  single.** row ou
1dee0 74 70 75 74 20 66 72 6f 6d 20 74 68 65 20 73 6f  tput from the so
1def0 72 74 65 72 20 73 6f 20 74 68 61 74 20 74 68 65  rter so that the
1df00 20 72 6f 77 20 63 61 6e 20 62 65 20 64 65 63 6f   row can be deco
1df10 6d 70 6f 73 65 64 20 69 6e 74 6f 0a 2a 2a 20 69  mposed into.** i
1df20 6e 64 69 76 69 64 75 61 6c 20 63 6f 6c 75 6d 6e  ndividual column
1df30 73 20 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 43  s using the OP_C
1df40 6f 6c 75 6d 6e 20 6f 70 63 6f 64 65 2e 20 20 54  olumn opcode.  T
1df50 68 65 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  he OP_Column opc
1df60 6f 64 65 0a 2a 2a 20 69 73 20 74 68 65 20 6f 6e  ode.** is the on
1df70 6c 79 20 63 75 72 73 6f 72 20 6f 70 63 6f 64 65  ly cursor opcode
1df80 20 74 68 61 74 20 77 6f 72 6b 73 20 77 69 74 68   that works with
1df90 20 61 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e   a pseudo-table.
1dfa0 0a 2a 2a 0a 2a 2a 20 50 33 20 69 73 20 74 68 65  .**.** P3 is the
1dfb0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
1dfc0 73 20 69 6e 20 74 68 65 20 72 65 63 6f 72 64 73  s in the records
1dfd0 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 73 74   that will be st
1dfe0 6f 72 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 70  ored by.** the p
1dff0 73 65 75 64 6f 2d 74 61 62 6c 65 2e 0a 2a 2f 0a  seudo-table..*/.
1e000 63 61 73 65 20 4f 50 5f 4f 70 65 6e 50 73 65 75  case OP_OpenPseu
1e010 64 6f 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  do: {.  VdbeCurs
1e020 6f 72 20 2a 70 43 78 3b 0a 0a 20 20 61 73 73 65  or *pCx;..  asse
1e030 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 29  rt( pOp->p1>=0 )
1e040 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ;.  assert( pOp-
1e050 3e 70 33 3e 3d 30 20 29 3b 0a 20 20 70 43 78 20  >p3>=0 );.  pCx 
1e060 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f 72  = allocateCursor
1e070 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70  (p, pOp->p1, pOp
1e080 2d 3e 70 33 2c 20 2d 31 2c 20 43 55 52 54 59 50  ->p3, -1, CURTYP
1e090 45 5f 50 53 45 55 44 4f 29 3b 0a 20 20 69 66 28  E_PSEUDO);.  if(
1e0a0 20 70 43 78 3d 3d 30 20 29 20 67 6f 74 6f 20 6e   pCx==0 ) goto n
1e0b0 6f 5f 6d 65 6d 3b 0a 20 20 70 43 78 2d 3e 6e 75  o_mem;.  pCx->nu
1e0c0 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20 70 43 78  llRow = 1;.  pCx
1e0d0 2d 3e 75 63 2e 70 73 65 75 64 6f 54 61 62 6c 65  ->uc.pseudoTable
1e0e0 52 65 67 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  Reg = pOp->p2;. 
1e0f0 20 70 43 78 2d 3e 69 73 54 61 62 6c 65 20 3d 20   pCx->isTable = 
1e100 31 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  1;.  assert( pOp
1e110 2d 3e 70 35 3d 3d 30 20 29 3b 0a 20 20 62 72 65  ->p5==0 );.  bre
1e120 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65  ak;.}../* Opcode
1e130 3a 20 43 6c 6f 73 65 20 50 31 20 2a 20 2a 20 2a  : Close P1 * * *
1e140 20 2a 0a 2a 2a 0a 2a 2a 20 43 6c 6f 73 65 20 61   *.**.** Close a
1e150 20 63 75 72 73 6f 72 20 70 72 65 76 69 6f 75 73   cursor previous
1e160 6c 79 20 6f 70 65 6e 65 64 20 61 73 20 50 31 2e  ly opened as P1.
1e170 20 20 49 66 20 50 31 20 69 73 20 6e 6f 74 0a 2a    If P1 is not.*
1e180 2a 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e  * currently open
1e190 2c 20 74 68 69 73 20 69 6e 73 74 72 75 63 74 69  , this instructi
1e1a0 6f 6e 20 69 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  on is a no-op..*
1e1b0 2f 0a 63 61 73 65 20 4f 50 5f 43 6c 6f 73 65 3a  /.case OP_Close:
1e1c0 20 7b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70   {.  assert( pOp
1e1d0 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e  ->p1>=0 && pOp->
1e1e0 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b  p1<p->nCursor );
1e1f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 46 72  .  sqlite3VdbeFr
1e200 65 65 43 75 72 73 6f 72 28 70 2c 20 70 2d 3e 61  eeCursor(p, p->a
1e210 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 29 3b 0a  pCsr[pOp->p1]);.
1e220 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e    p->apCsr[pOp->
1e230 70 31 5d 20 3d 20 30 3b 0a 20 20 62 72 65 61 6b  p1] = 0;.  break
1e240 3b 0a 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  ;.}..#ifdef SQLI
1e250 54 45 5f 45 4e 41 42 4c 45 5f 43 4f 4c 55 4d 4e  TE_ENABLE_COLUMN
1e260 5f 55 53 45 44 5f 4d 41 53 4b 0a 2f 2a 20 4f 70  _USED_MASK./* Op
1e270 63 6f 64 65 3a 20 43 6f 6c 75 6d 6e 73 55 73 65  code: ColumnsUse
1e280 64 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a  d P1 * * P4 *.**
1e290 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
1e2a0 28 77 68 69 63 68 20 6f 6e 6c 79 20 65 78 69 73  (which only exis
1e2b0 74 73 20 69 66 20 53 51 4c 69 74 65 20 77 61 73  ts if SQLite was
1e2c0 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 0a 2a   compiled with.*
1e2d0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
1e2e0 43 4f 4c 55 4d 4e 5f 55 53 45 44 5f 4d 41 53 4b  COLUMN_USED_MASK
1e2f0 29 20 69 64 65 6e 74 69 66 69 65 73 20 77 68 69  ) identifies whi
1e300 63 68 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  ch columns of th
1e310 65 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e  e.** table or in
1e320 64 65 78 20 66 6f 72 20 63 75 72 73 6f 72 20 50  dex for cursor P
1e330 31 20 61 72 65 20 75 73 65 64 2e 20 20 50 34 20  1 are used.  P4 
1e340 69 73 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65  is a 64-bit inte
1e350 67 65 72 0a 2a 2a 20 28 50 34 5f 49 4e 54 36 34  ger.** (P4_INT64
1e360 29 20 69 6e 20 77 68 69 63 68 20 74 68 65 20 66  ) in which the f
1e370 69 72 73 74 20 36 33 20 62 69 74 73 20 61 72 65  irst 63 bits are
1e380 20 6f 6e 65 20 66 6f 72 20 65 61 63 68 20 6f 66   one for each of
1e390 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 36 33   the.** first 63
1e3a0 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68 65 20   columns of the 
1e3b0 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 74  table or index t
1e3c0 68 61 74 20 61 72 65 20 61 63 74 75 61 6c 6c 79  hat are actually
1e3d0 20 75 73 65 64 0a 2a 2a 20 62 79 20 74 68 65 20   used.** by the 
1e3e0 63 75 72 73 6f 72 2e 20 20 54 68 65 20 68 69 67  cursor.  The hig
1e3f0 68 2d 6f 72 64 65 72 20 62 69 74 20 69 73 20 73  h-order bit is s
1e400 65 74 20 69 66 20 61 6e 79 20 63 6f 6c 75 6d 6e  et if any column
1e410 20 61 66 74 65 72 0a 2a 2a 20 74 68 65 20 36 34   after.** the 64
1e420 74 68 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 63  th is used..*/.c
1e430 61 73 65 20 4f 50 5f 43 6f 6c 75 6d 6e 73 55 73  ase OP_ColumnsUs
1e440 65 64 3a 20 7b 0a 20 20 56 64 62 65 43 75 72 73  ed: {.  VdbeCurs
1e450 6f 72 20 2a 70 43 3b 0a 20 20 70 43 20 3d 20 70  or *pC;.  pC = p
1e460 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
1e470 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
1e480 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
1e490 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 70 43 2d  E_BTREE );.  pC-
1e4a0 3e 6d 61 73 6b 55 73 65 64 20 3d 20 2a 28 75 36  >maskUsed = *(u6
1e4b0 34 2a 29 70 4f 70 2d 3e 70 34 2e 70 49 36 34 3b  4*)pOp->p4.pI64;
1e4c0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
1e4d0 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  if../* Opcode: S
1e4e0 65 65 6b 47 45 20 50 31 20 50 32 20 50 33 20 50  eekGE P1 P2 P3 P
1e4f0 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  4 *.** Synopsis:
1e500 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a   key=r[P3@P4].**
1e510 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31  .** If cursor P1
1e520 20 72 65 66 65 72 73 20 74 6f 20 61 6e 20 53 51   refers to an SQ
1e530 4c 20 74 61 62 6c 65 20 28 42 2d 54 72 65 65 20  L table (B-Tree 
1e540 74 68 61 74 20 75 73 65 73 20 69 6e 74 65 67 65  that uses intege
1e550 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20 75 73 65  r keys), .** use
1e560 20 74 68 65 20 76 61 6c 75 65 20 69 6e 20 72 65   the value in re
1e570 67 69 73 74 65 72 20 50 33 20 61 73 20 74 68 65  gister P3 as the
1e580 20 6b 65 79 2e 20 20 49 66 20 63 75 72 73 6f 72   key.  If cursor
1e590 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1e5a0 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1e5b0 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1e5c0 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1e5d0 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1e5e0 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1e5f0 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1e600 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1e610 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1e620 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1e630 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1e640 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1e650 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1e660 65 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71  eater than or eq
1e670 75 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76  ual to the key v
1e680 61 6c 75 65 2e 20 49 66 20 74 68 65 72 65 20 61  alue. If there a
1e690 72 65 20 6e 6f 20 72 65 63 6f 72 64 73 20 0a 2a  re no records .*
1e6a0 2a 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 6f  * greater than o
1e6b0 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1e6c0 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1e6d0 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1e6e0 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66   to P2..**.** If
1e6f0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 77   the cursor P1 w
1e700 61 73 20 6f 70 65 6e 65 64 20 75 73 69 6e 67 20  as opened using 
1e710 74 68 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  the OPFLAG_SEEKE
1e720 51 20 66 6c 61 67 2c 20 74 68 65 6e 20 74 68 69  Q flag, then thi
1e730 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77 69 6c 6c  s.** opcode will
1e740 20 61 6c 77 61 79 73 20 6c 61 6e 64 20 6f 6e 20   always land on 
1e750 61 20 72 65 63 6f 72 64 20 74 68 61 74 20 65 71  a record that eq
1e760 75 61 6c 6c 79 20 65 71 75 61 6c 73 20 74 68 65  ually equals the
1e770 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65 6c 73 65   key, or.** else
1e780 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c   jump immediatel
1e790 79 20 74 6f 20 50 32 2e 20 20 57 68 65 6e 20 74  y to P2.  When t
1e7a0 68 65 20 63 75 72 73 6f 72 20 69 73 20 4f 50 46  he cursor is OPF
1e7b0 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74 68 69 73  LAG_SEEKEQ, this
1e7c0 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75 73 74 20  .** opcode must 
1e7d0 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62 79 20 61  be followed by a
1e7e0 6e 20 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77  n IdxLE opcode w
1e7f0 69 74 68 20 74 68 65 20 73 61 6d 65 20 61 72 67  ith the same arg
1e800 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68 65 20 49  uments..** The I
1e810 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c 6c  dxLE opcode will
1e820 20 62 65 20 73 6b 69 70 70 65 64 20 69 66 20 74   be skipped if t
1e830 68 69 73 20 6f 70 63 6f 64 65 20 73 75 63 63 65  his opcode succe
1e840 65 64 73 2c 20 62 75 74 20 74 68 65 0a 2a 2a 20  eds, but the.** 
1e850 49 64 78 4c 45 20 6f 70 63 6f 64 65 20 77 69 6c  IdxLE opcode wil
1e860 6c 20 62 65 20 75 73 65 64 20 6f 6e 20 73 75 62  l be used on sub
1e870 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20 69 74 65  sequent loop ite
1e880 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 54  rations..**.** T
1e890 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
1e8a0 73 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e  s the cursor con
1e8b0 66 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20  figured to move 
1e8c0 69 6e 20 66 6f 72 77 61 72 64 20 6f 72 64 65 72  in forward order
1e8d0 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 62 65  ,.** from the be
1e8e0 67 69 6e 6e 69 6e 67 20 74 6f 77 61 72 64 20 74  ginning toward t
1e8f0 68 65 20 65 6e 64 2e 20 20 49 6e 20 6f 74 68 65  he end.  In othe
1e900 72 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72  r words, the cur
1e910 73 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67  sor is.** config
1e920 75 72 65 64 20 74 6f 20 75 73 65 20 4e 65 78 74  ured to use Next
1e930 2c 20 6e 6f 74 20 50 72 65 76 2e 0a 2a 2a 0a 2a  , not Prev..**.*
1e940 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1e950 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1e960 6b 4c 74 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  kLt, SeekGt, See
1e970 6b 4c 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  kLe.*/./* Opcode
1e980 3a 20 53 65 65 6b 47 54 20 50 31 20 50 32 20 50  : SeekGT P1 P2 P
1e990 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
1e9a0 69 73 3a 20 6b 65 79 3d 72 5b 50 33 40 50 34 5d  is: key=r[P3@P4]
1e9b0 0a 2a 2a 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  .**.** If cursor
1e9c0 20 50 31 20 72 65 66 65 72 73 20 74 6f 20 61 6e   P1 refers to an
1e9d0 20 53 51 4c 20 74 61 62 6c 65 20 28 42 2d 54 72   SQL table (B-Tr
1e9e0 65 65 20 74 68 61 74 20 75 73 65 73 20 69 6e 74  ee that uses int
1e9f0 65 67 65 72 20 6b 65 79 73 29 2c 20 0a 2a 2a 20  eger keys), .** 
1ea00 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e  use the value in
1ea10 20 72 65 67 69 73 74 65 72 20 50 33 20 61 73 20   register P3 as 
1ea20 61 20 6b 65 79 2e 20 49 66 20 63 75 72 73 6f 72  a key. If cursor
1ea30 20 50 31 20 72 65 66 65 72 73 20 0a 2a 2a 20 74   P1 refers .** t
1ea40 6f 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 2c 20  o an SQL index, 
1ea50 74 68 65 6e 20 50 33 20 69 73 20 74 68 65 20 66  then P3 is the f
1ea60 69 72 73 74 20 69 6e 20 61 6e 20 61 72 72 61 79  irst in an array
1ea70 20 6f 66 20 50 34 20 72 65 67 69 73 74 65 72 73   of P4 registers
1ea80 20 0a 2a 2a 20 74 68 61 74 20 61 72 65 20 75 73   .** that are us
1ea90 65 64 20 61 73 20 61 6e 20 75 6e 70 61 63 6b 65  ed as an unpacke
1eaa0 64 20 69 6e 64 65 78 20 6b 65 79 2e 20 0a 2a 2a  d index key. .**
1eab0 0a 2a 2a 20 52 65 70 6f 73 69 74 69 6f 6e 20 63  .** Reposition c
1eac0 75 72 73 6f 72 20 50 31 20 73 6f 20 74 68 61 74  ursor P1 so that
1ead0 20 20 69 74 20 70 6f 69 6e 74 73 20 74 6f 20 74    it points to t
1eae0 68 65 20 73 6d 61 6c 6c 65 73 74 20 65 6e 74 72  he smallest entr
1eaf0 79 20 74 68 61 74 20 0a 2a 2a 20 69 73 20 67 72  y that .** is gr
1eb00 65 61 74 65 72 20 74 68 61 6e 20 74 68 65 20 6b  eater than the k
1eb10 65 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65  ey value. If the
1eb20 72 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64  re are no record
1eb30 73 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 0a  s greater than .
1eb40 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20 50  ** the key and P
1eb50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20 74  2 is not zero, t
1eb60 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e 0a  hen jump to P2..
1eb70 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64  **.** This opcod
1eb80 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75 72  e leaves the cur
1eb90 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20 74  sor configured t
1eba0 6f 20 6d 6f 76 65 20 69 6e 20 66 6f 72 77 61 72  o move in forwar
1ebb0 64 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d  d order,.** from
1ebc0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 74   the beginning t
1ebd0 6f 77 61 72 64 20 74 68 65 20 65 6e 64 2e 20 20  oward the end.  
1ebe0 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20  In other words, 
1ebf0 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a  the cursor is.**
1ec00 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 75   configured to u
1ec10 73 65 20 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65  se Next, not Pre
1ec20 76 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73  v..**.** See als
1ec30 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75  o: Found, NotFou
1ec40 6e 64 2c 20 53 65 65 6b 4c 74 2c 20 53 65 65 6b  nd, SeekLt, Seek
1ec50 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f 2a  Ge, SeekLe.*/./*
1ec60 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 54 20   Opcode: SeekLT 
1ec70 50 31 20 50 32 20 50 33 20 50 34 20 2a 20 0a 2a  P1 P2 P3 P4 * .*
1ec80 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1ec90 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1eca0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ecb0 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1ecc0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1ecd0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1ece0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1ecf0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1ed00 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1ed10 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ed20 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1ed30 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1ed40 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1ed50 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1ed60 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1ed70 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1ed80 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1ed90 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1eda0 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1edb0 20 73 6f 20 74 68 61 74 20 20 69 74 20 70 6f 69   so that  it poi
1edc0 6e 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65  nts to the large
1edd0 73 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a  st entry that .*
1ede0 2a 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74  * is less than t
1edf0 68 65 20 6b 65 79 20 76 61 6c 75 65 2e 20 49 66  he key value. If
1ee00 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 72 65   there are no re
1ee10 63 6f 72 64 73 20 6c 65 73 73 20 74 68 61 6e 20  cords less than 
1ee20 0a 2a 2a 20 74 68 65 20 6b 65 79 20 61 6e 64 20  .** the key and 
1ee30 50 32 20 69 73 20 6e 6f 74 20 7a 65 72 6f 2c 20  P2 is not zero, 
1ee40 74 68 65 6e 20 6a 75 6d 70 20 74 6f 20 50 32 2e  then jump to P2.
1ee50 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
1ee60 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
1ee70 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
1ee80 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
1ee90 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
1eea0 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
1eeb0 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
1eec0 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
1eed0 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
1eee0 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
1eef0 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
1ef00 78 74 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  xt..**.** See al
1ef10 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
1ef20 75 6e 64 2c 20 53 65 65 6b 47 74 2c 20 53 65 65  und, SeekGt, See
1ef30 6b 47 65 2c 20 53 65 65 6b 4c 65 0a 2a 2f 0a 2f  kGe, SeekLe.*/./
1ef40 2a 20 4f 70 63 6f 64 65 3a 20 53 65 65 6b 4c 45  * Opcode: SeekLE
1ef50 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
1ef60 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d  * Synopsis: key=
1ef70 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49  r[P3@P4].**.** I
1ef80 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1ef90 72 73 20 74 6f 20 61 6e 20 53 51 4c 20 74 61 62  rs to an SQL tab
1efa0 6c 65 20 28 42 2d 54 72 65 65 20 74 68 61 74 20  le (B-Tree that 
1efb0 75 73 65 73 20 69 6e 74 65 67 65 72 20 6b 65 79  uses integer key
1efc0 73 29 2c 20 0a 2a 2a 20 75 73 65 20 74 68 65 20  s), .** use the 
1efd0 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
1efe0 72 20 50 33 20 61 73 20 61 20 6b 65 79 2e 20 49  r P3 as a key. I
1eff0 66 20 63 75 72 73 6f 72 20 50 31 20 72 65 66 65  f cursor P1 refe
1f000 72 73 20 0a 2a 2a 20 74 6f 20 61 6e 20 53 51 4c  rs .** to an SQL
1f010 20 69 6e 64 65 78 2c 20 74 68 65 6e 20 50 33 20   index, then P3 
1f020 69 73 20 74 68 65 20 66 69 72 73 74 20 69 6e 20  is the first in 
1f030 61 6e 20 61 72 72 61 79 20 6f 66 20 50 34 20 72  an array of P4 r
1f040 65 67 69 73 74 65 72 73 20 0a 2a 2a 20 74 68 61  egisters .** tha
1f050 74 20 61 72 65 20 75 73 65 64 20 61 73 20 61 6e  t are used as an
1f060 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20   unpacked index 
1f070 6b 65 79 2e 20 0a 2a 2a 0a 2a 2a 20 52 65 70 6f  key. .**.** Repo
1f080 73 69 74 69 6f 6e 20 63 75 72 73 6f 72 20 50 31  sition cursor P1
1f090 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
1f0a0 74 73 20 74 6f 20 74 68 65 20 6c 61 72 67 65 73  ts to the larges
1f0b0 74 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  t entry that .**
1f0c0 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 6f 72   is less than or
1f0d0 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b 65   equal to the ke
1f0e0 79 20 76 61 6c 75 65 2e 20 49 66 20 74 68 65 72  y value. If ther
1f0f0 65 20 61 72 65 20 6e 6f 20 72 65 63 6f 72 64 73  e are no records
1f100 20 0a 2a 2a 20 6c 65 73 73 20 74 68 61 6e 20 6f   .** less than o
1f110 72 20 65 71 75 61 6c 20 74 6f 20 74 68 65 20 6b  r equal to the k
1f120 65 79 20 61 6e 64 20 50 32 20 69 73 20 6e 6f 74  ey and P2 is not
1f130 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6a 75 6d 70   zero, then jump
1f140 20 74 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68   to P2..**.** Th
1f150 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65 73  is opcode leaves
1f160 20 74 68 65 20 63 75 72 73 6f 72 20 63 6f 6e 66   the cursor conf
1f170 69 67 75 72 65 64 20 74 6f 20 6d 6f 76 65 20 69  igured to move i
1f180 6e 20 72 65 76 65 72 73 65 20 6f 72 64 65 72 2c  n reverse order,
1f190 0a 2a 2a 20 66 72 6f 6d 20 74 68 65 20 65 6e 64  .** from the end
1f1a0 20 74 6f 77 61 72 64 20 74 68 65 20 62 65 67 69   toward the begi
1f1b0 6e 6e 69 6e 67 2e 20 20 49 6e 20 6f 74 68 65 72  nning.  In other
1f1c0 20 77 6f 72 64 73 2c 20 74 68 65 20 63 75 72 73   words, the curs
1f1d0 6f 72 20 69 73 0a 2a 2a 20 63 6f 6e 66 69 67 75  or is.** configu
1f1e0 72 65 64 20 74 6f 20 75 73 65 20 50 72 65 76 2c  red to use Prev,
1f1f0 20 6e 6f 74 20 4e 65 78 74 2e 0a 2a 2a 0a 2a 2a   not Next..**.**
1f200 20 49 66 20 74 68 65 20 63 75 72 73 6f 72 20 50   If the cursor P
1f210 31 20 77 61 73 20 6f 70 65 6e 65 64 20 75 73 69  1 was opened usi
1f220 6e 67 20 74 68 65 20 4f 50 46 4c 41 47 5f 53 45  ng the OPFLAG_SE
1f230 45 4b 45 51 20 66 6c 61 67 2c 20 74 68 65 6e 20  EKEQ flag, then 
1f240 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 77  this.** opcode w
1f250 69 6c 6c 20 61 6c 77 61 79 73 20 6c 61 6e 64 20  ill always land 
1f260 6f 6e 20 61 20 72 65 63 6f 72 64 20 74 68 61 74  on a record that
1f270 20 65 71 75 61 6c 6c 79 20 65 71 75 61 6c 73 20   equally equals 
1f280 74 68 65 20 6b 65 79 2c 20 6f 72 0a 2a 2a 20 65  the key, or.** e
1f290 6c 73 65 20 6a 75 6d 70 20 69 6d 6d 65 64 69 61  lse jump immedia
1f2a0 74 65 6c 79 20 74 6f 20 50 32 2e 20 20 57 68 65  tely to P2.  Whe
1f2b0 6e 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  n the cursor is 
1f2c0 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 2c 20 74  OPFLAG_SEEKEQ, t
1f2d0 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 20 6d 75  his.** opcode mu
1f2e0 73 74 20 62 65 20 66 6f 6c 6c 6f 77 65 64 20 62  st be followed b
1f2f0 79 20 61 6e 20 49 64 78 47 45 20 6f 70 63 6f 64  y an IdxGE opcod
1f300 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same 
1f310 61 72 67 75 6d 65 6e 74 73 2e 0a 2a 2a 20 54 68  arguments..** Th
1f320 65 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20 77  e IdxGE opcode w
1f330 69 6c 6c 20 62 65 20 73 6b 69 70 70 65 64 20 69  ill be skipped i
1f340 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20 73 75  f this opcode su
1f350 63 63 65 65 64 73 2c 20 62 75 74 20 74 68 65 0a  cceeds, but the.
1f360 2a 2a 20 49 64 78 47 45 20 6f 70 63 6f 64 65 20  ** IdxGE opcode 
1f370 77 69 6c 6c 20 62 65 20 75 73 65 64 20 6f 6e 20  will be used on 
1f380 73 75 62 73 65 71 75 65 6e 74 20 6c 6f 6f 70 20  subsequent loop 
1f390 69 74 65 72 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  iterations..**.*
1f3a0 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f 75 6e  * See also: Foun
1f3b0 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20 53 65 65  d, NotFound, See
1f3c0 6b 47 74 2c 20 53 65 65 6b 47 65 2c 20 53 65 65  kGt, SeekGe, See
1f3d0 6b 4c 74 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  kLt.*/.case OP_S
1f3e0 65 65 6b 4c 54 3a 20 20 20 20 20 20 20 20 20 2f  eekLT:         /
1f3f0 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1f400 61 73 65 20 4f 50 5f 53 65 65 6b 4c 45 3a 20 20  ase OP_SeekLE:  
1f410 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f420 69 6e 33 20 2a 2f 0a 63 61 73 65 20 4f 50 5f 53  in3 */.case OP_S
1f430 65 65 6b 47 45 3a 20 20 20 20 20 20 20 20 20 2f  eekGE:         /
1f440 2a 20 6a 75 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63  * jump, in3 */.c
1f450 61 73 65 20 4f 50 5f 53 65 65 6b 47 54 3a 20 7b  ase OP_SeekGT: {
1f460 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20         /* jump, 
1f470 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 72 65 73  in3 */.  int res
1f480 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
1f490 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73 75 6c 74  omparison result
1f4a0 20 2a 2f 0a 20 20 69 6e 74 20 6f 63 3b 20 20 20   */.  int oc;   
1f4b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f           /* Opco
1f4c0 64 65 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73  de */.  VdbeCurs
1f4d0 6f 72 20 2a 70 43 3b 20 20 20 20 2f 2a 20 54 68  or *pC;    /* Th
1f4e0 65 20 63 75 72 73 6f 72 20 74 6f 20 73 65 65 6b  e cursor to seek
1f4f0 20 2a 2f 0a 20 20 55 6e 70 61 63 6b 65 64 52 65   */.  UnpackedRe
1f500 63 6f 72 64 20 72 3b 20 20 2f 2a 20 54 68 65 20  cord r;  /* The 
1f510 6b 65 79 20 74 6f 20 73 65 65 6b 20 66 6f 72 20  key to seek for 
1f520 2a 2f 0a 20 20 69 6e 74 20 6e 46 69 65 6c 64 3b  */.  int nField;
1f530 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f540 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 6f 72 20  r of columns or 
1f550 66 69 65 6c 64 73 20 69 6e 20 74 68 65 20 6b 65  fields in the ke
1f560 79 20 2a 2f 0a 20 20 69 36 34 20 69 4b 65 79 3b  y */.  i64 iKey;
1f570 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
1f580 20 72 6f 77 69 64 20 77 65 20 61 72 65 20 74 6f   rowid we are to
1f590 20 73 65 65 6b 20 74 6f 20 2a 2f 0a 20 20 69 6e   seek to */.  in
1f5a0 74 20 65 71 4f 6e 6c 79 3b 20 20 20 20 20 20 20  t eqOnly;       
1f5b0 20 2f 2a 20 4f 6e 6c 79 20 69 6e 74 65 72 65 73   /* Only interes
1f5c0 74 65 64 20 69 6e 20 3d 3d 20 72 65 73 75 6c 74  ted in == result
1f5d0 73 20 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20  s */..  assert( 
1f5e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
1f5f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
1f600 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
1f610 70 2d 3e 70 32 21 3d 30 20 29 3b 0a 20 20 70 43  p->p2!=0 );.  pC
1f620 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d   = p->apCsr[pOp-
1f630 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20  >p1];.  assert( 
1f640 70 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  pC!=0 );.  asser
1f650 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  t( pC->eCurType=
1f660 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29  =CURTYPE_BTREE )
1f670 3b 0a 20 20 61 73 73 65 72 74 28 20 4f 50 5f 53  ;.  assert( OP_S
1f680 65 65 6b 4c 45 20 3d 3d 20 4f 50 5f 53 65 65 6b  eekLE == OP_Seek
1f690 4c 54 2b 31 20 29 3b 0a 20 20 61 73 73 65 72 74  LT+1 );.  assert
1f6a0 28 20 4f 50 5f 53 65 65 6b 47 45 20 3d 3d 20 4f  ( OP_SeekGE == O
1f6b0 50 5f 53 65 65 6b 4c 54 2b 32 20 29 3b 0a 20 20  P_SeekLT+2 );.  
1f6c0 61 73 73 65 72 74 28 20 4f 50 5f 53 65 65 6b 47  assert( OP_SeekG
1f6d0 54 20 3d 3d 20 4f 50 5f 53 65 65 6b 4c 54 2b 33  T == OP_SeekLT+3
1f6e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
1f6f0 2d 3e 69 73 4f 72 64 65 72 65 64 20 29 3b 0a 20  ->isOrdered );. 
1f700 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e   assert( pC->uc.
1f710 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20  pCursor!=0 );.  
1f720 6f 63 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  oc = pOp->opcode
1f730 3b 0a 20 20 65 71 4f 6e 6c 79 20 3d 20 30 3b 0a  ;.  eqOnly = 0;.
1f740 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20    pC->nullRow = 
1f750 30 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  0;.#ifdef SQLITE
1f760 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e 73 65 65  _DEBUG.  pC->see
1f770 6b 4f 70 20 3d 20 70 4f 70 2d 3e 6f 70 63 6f 64  kOp = pOp->opcod
1f780 65 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 69 66 28  e;.#endif..  if(
1f790 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29 7b 0a   pC->isTable ){.
1f7a0 20 20 20 20 2f 2a 20 54 68 65 20 42 54 52 45 45      /* The BTREE
1f7b0 5f 53 45 45 4b 5f 45 51 20 66 6c 61 67 20 69 73  _SEEK_EQ flag is
1f7c0 20 6f 6e 6c 79 20 73 65 74 20 6f 6e 20 69 6e 64   only set on ind
1f7d0 65 78 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20  ex cursors */.  
1f7e0 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
1f7f0 33 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48  3BtreeCursorHasH
1f800 69 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73  int(pC->uc.pCurs
1f810 6f 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45  or, BTREE_SEEK_E
1f820 51 29 3d 3d 30 20 29 3b 0a 0a 20 20 20 20 2f 2a  Q)==0 );..    /*
1f830 20 54 68 65 20 69 6e 70 75 74 20 76 61 6c 75 65   The input value
1f840 20 69 6e 20 50 33 20 6d 69 67 68 74 20 62 65 20   in P3 might be 
1f850 6f 66 20 61 6e 79 20 74 79 70 65 3a 20 69 6e 74  of any type: int
1f860 65 67 65 72 2c 20 72 65 61 6c 2c 20 73 74 72 69  eger, real, stri
1f870 6e 67 2c 0a 20 20 20 20 2a 2a 20 62 6c 6f 62 2c  ng,.    ** blob,
1f880 20 6f 72 20 4e 55 4c 4c 2e 20 20 42 75 74 20 69   or NULL.  But i
1f890 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 61 6e  t needs to be an
1f8a0 20 69 6e 74 65 67 65 72 20 62 65 66 6f 72 65 20   integer before 
1f8b0 77 65 20 63 61 6e 20 64 6f 0a 20 20 20 20 2a 2a  we can do.    **
1f8c0 20 74 68 65 20 73 65 65 6b 2c 20 73 6f 20 63 6f   the seek, so co
1f8d0 6e 76 65 72 74 20 69 74 2e 20 2a 2f 0a 20 20 20  nvert it. */.   
1f8e0 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
1f8f0 70 2d 3e 70 33 5d 3b 0a 20 20 20 20 69 66 28 20  p->p3];.    if( 
1f900 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20 26 20 28  (pIn3->flags & (
1f910 4d 45 4d 5f 49 6e 74 7c 4d 45 4d 5f 52 65 61 6c  MEM_Int|MEM_Real
1f920 7c 4d 45 4d 5f 53 74 72 29 29 3d 3d 4d 45 4d 5f  |MEM_Str))==MEM_
1f930 53 74 72 20 29 7b 0a 20 20 20 20 20 20 61 70 70  Str ){.      app
1f940 6c 79 4e 75 6d 65 72 69 63 41 66 66 69 6e 69 74  lyNumericAffinit
1f950 79 28 70 49 6e 33 2c 20 30 29 3b 0a 20 20 20 20  y(pIn3, 0);.    
1f960 7d 0a 20 20 20 20 69 4b 65 79 20 3d 20 73 71 6c  }.    iKey = sql
1f970 69 74 65 33 56 64 62 65 49 6e 74 56 61 6c 75 65  ite3VdbeIntValue
1f980 28 70 49 6e 33 29 3b 0a 0a 20 20 20 20 2f 2a 20  (pIn3);..    /* 
1f990 49 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20  If the P3 value 
1f9a0 63 6f 75 6c 64 20 6e 6f 74 20 62 65 20 63 6f 6e  could not be con
1f9b0 76 65 72 74 65 64 20 69 6e 74 6f 20 61 6e 20 69  verted into an i
1f9c0 6e 74 65 67 65 72 20 77 69 74 68 6f 75 74 0a 20  nteger without. 
1f9d0 20 20 20 2a 2a 20 6c 6f 73 73 20 6f 66 20 69 6e     ** loss of in
1f9e0 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 6e 20  formation, then 
1f9f0 73 70 65 63 69 61 6c 20 70 72 6f 63 65 73 73 69  special processi
1fa00 6e 67 20 69 73 20 72 65 71 75 69 72 65 64 2e 2e  ng is required..
1fa10 2e 20 2a 2f 0a 20 20 20 20 69 66 28 20 28 70 49  . */.    if( (pI
1fa20 6e 33 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  n3->flags & MEM_
1fa30 49 6e 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  Int)==0 ){.     
1fa40 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67   if( (pIn3->flag
1fa50 73 20 26 20 4d 45 4d 5f 52 65 61 6c 29 3d 3d 30  s & MEM_Real)==0
1fa60 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
1fa70 66 20 74 68 65 20 50 33 20 76 61 6c 75 65 20 63  f the P3 value c
1fa80 61 6e 6e 6f 74 20 62 65 20 63 6f 6e 76 65 72 74  annot be convert
1fa90 65 64 20 69 6e 74 6f 20 61 6e 79 20 6b 69 6e 64  ed into any kind
1faa0 20 6f 66 20 61 20 6e 75 6d 62 65 72 2c 0a 20 20   of a number,.  
1fab0 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 74 68        ** then th
1fac0 65 20 73 65 65 6b 20 69 73 20 6e 6f 74 20 70 6f  e seek is not po
1fad0 73 73 69 62 6c 65 2c 20 73 6f 20 6a 75 6d 70 20  ssible, so jump 
1fae0 74 6f 20 50 32 20 2a 2f 0a 20 20 20 20 20 20 20  to P2 */.       
1faf0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
1fb00 28 31 2c 32 29 3b 20 67 6f 74 6f 20 6a 75 6d 70  (1,2); goto jump
1fb10 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 20 20 20 20  _to_p2;.        
1fb20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 0a  break;.      }..
1fb30 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20        /* If the 
1fb40 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20 69 4b  approximation iK
1fb50 65 79 20 69 73 20 6c 61 72 67 65 72 20 74 68 61  ey is larger tha
1fb60 6e 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 61  n the actual rea
1fb70 6c 20 73 65 61 72 63 68 0a 20 20 20 20 20 20 2a  l search.      *
1fb80 2a 20 74 65 72 6d 2c 20 73 75 62 73 74 69 74 75  * term, substitu
1fb90 74 65 20 3e 3d 20 66 6f 72 20 3e 20 61 6e 64 20  te >= for > and 
1fba0 3c 20 66 6f 72 20 3c 3d 2e 20 65 2e 67 2e 20 69  < for <=. e.g. i
1fbb0 66 20 74 68 65 20 73 65 61 72 63 68 20 74 65 72  f the search ter
1fbc0 6d 0a 20 20 20 20 20 20 2a 2a 20 69 73 20 34 2e  m.      ** is 4.
1fbd0 39 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65  9 and the intege
1fbe0 72 20 61 70 70 72 6f 78 69 6d 61 74 69 6f 6e 20  r approximation 
1fbf0 35 3a 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  5:.      **.    
1fc00 20 20 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3e    **        (x >
1fc10 20 20 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20    4.9)    ->    
1fc20 20 28 78 20 3e 3d 20 35 29 0a 20 20 20 20 20 20   (x >= 5).      
1fc30 2a 2a 20 20 20 20 20 20 20 20 28 78 20 3c 3d 20  **        (x <= 
1fc40 34 2e 39 29 20 20 20 20 2d 3e 20 20 20 20 20 28  4.9)    ->     (
1fc50 78 20 3c 20 20 35 29 0a 20 20 20 20 20 20 2a 2f  x <  5).      */
1fc60 0a 20 20 20 20 20 20 69 66 28 20 70 49 6e 33 2d  .      if( pIn3-
1fc70 3e 75 2e 72 3c 28 64 6f 75 62 6c 65 29 69 4b 65  >u.r<(double)iKe
1fc80 79 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73  y ){.        ass
1fc90 65 72 74 28 20 4f 50 5f 53 65 65 6b 47 45 3d 3d  ert( OP_SeekGE==
1fca0 28 4f 50 5f 53 65 65 6b 47 54 2d 31 29 20 29 3b  (OP_SeekGT-1) );
1fcb0 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
1fcc0 20 4f 50 5f 53 65 65 6b 4c 54 3d 3d 28 4f 50 5f   OP_SeekLT==(OP_
1fcd0 53 65 65 6b 4c 45 2d 31 29 20 29 3b 0a 20 20 20  SeekLE-1) );.   
1fce0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50       assert( (OP
1fcf0 5f 53 65 65 6b 4c 45 20 26 20 30 78 30 30 30 31  _SeekLE & 0x0001
1fd00 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54 20 26 20  )==(OP_SeekGT & 
1fd10 30 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20  0x0001) );.     
1fd20 20 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30     if( (oc & 0x0
1fd30 30 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 47 54  001)==(OP_SeekGT
1fd40 20 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2d   & 0x0001) ) oc-
1fd50 2d 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  -;.      }..    
1fd60 20 20 2f 2a 20 49 66 20 74 68 65 20 61 70 70 72    /* If the appr
1fd70 6f 78 69 6d 61 74 69 6f 6e 20 69 4b 65 79 20 69  oximation iKey i
1fd80 73 20 73 6d 61 6c 6c 65 72 20 74 68 61 6e 20 74  s smaller than t
1fd90 68 65 20 61 63 74 75 61 6c 20 72 65 61 6c 20 73  he actual real s
1fda0 65 61 72 63 68 0a 20 20 20 20 20 20 2a 2a 20 74  earch.      ** t
1fdb0 65 72 6d 2c 20 73 75 62 73 74 69 74 75 74 65 20  erm, substitute 
1fdc0 3c 3d 20 66 6f 72 20 3c 20 61 6e 64 20 3e 20 66  <= for < and > f
1fdd0 6f 72 20 3e 3d 2e 20 20 2a 2f 0a 20 20 20 20 20  or >=.  */.     
1fde0 20 65 6c 73 65 20 69 66 28 20 70 49 6e 33 2d 3e   else if( pIn3->
1fdf0 75 2e 72 3e 28 64 6f 75 62 6c 65 29 69 4b 65 79  u.r>(double)iKey
1fe00 20 29 7b 0a 20 20 20 20 20 20 20 20 61 73 73 65   ){.        asse
1fe10 72 74 28 20 4f 50 5f 53 65 65 6b 4c 45 3d 3d 28  rt( OP_SeekLE==(
1fe20 4f 50 5f 53 65 65 6b 4c 54 2b 31 29 20 29 3b 0a  OP_SeekLT+1) );.
1fe30 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
1fe40 4f 50 5f 53 65 65 6b 47 54 3d 3d 28 4f 50 5f 53  OP_SeekGT==(OP_S
1fe50 65 65 6b 47 45 2b 31 29 20 29 3b 0a 20 20 20 20  eekGE+1) );.    
1fe60 20 20 20 20 61 73 73 65 72 74 28 20 28 4f 50 5f      assert( (OP_
1fe70 53 65 65 6b 4c 54 20 26 20 30 78 30 30 30 31 29  SeekLT & 0x0001)
1fe80 3d 3d 28 4f 50 5f 53 65 65 6b 47 45 20 26 20 30  ==(OP_SeekGE & 0
1fe90 78 30 30 30 31 29 20 29 3b 0a 20 20 20 20 20 20  x0001) );.      
1fea0 20 20 69 66 28 20 28 6f 63 20 26 20 30 78 30 30    if( (oc & 0x00
1feb0 30 31 29 3d 3d 28 4f 50 5f 53 65 65 6b 4c 54 20  01)==(OP_SeekLT 
1fec0 26 20 30 78 30 30 30 31 29 20 29 20 6f 63 2b 2b  & 0x0001) ) oc++
1fed0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 20  ;.      }.    } 
1fee0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
1fef0 33 42 74 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61  3BtreeMovetoUnpa
1ff00 63 6b 65 64 28 70 43 2d 3e 75 63 2e 70 43 75 72  cked(pC->uc.pCur
1ff10 73 6f 72 2c 20 30 2c 20 28 75 36 34 29 69 4b 65  sor, 0, (u64)iKe
1ff20 79 2c 20 30 2c 20 26 72 65 73 29 3b 0a 20 20 20  y, 0, &res);.   
1ff30 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65   pC->movetoTarge
1ff40 74 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73  t = iKey;  /* Us
1ff50 65 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20  ed by OP_Delete 
1ff60 2a 2f 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  */.    if( rc!=S
1ff70 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
1ff80 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
1ff90 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
1ffa0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 2f 2a  .  }else{.    /*
1ffb0 20 46 6f 72 20 61 20 63 75 72 73 6f 72 20 77 69   For a cursor wi
1ffc0 74 68 20 74 68 65 20 42 54 52 45 45 5f 53 45 45  th the BTREE_SEE
1ffd0 4b 5f 45 51 20 68 69 6e 74 2c 20 6f 6e 6c 79 20  K_EQ hint, only 
1ffe0 74 68 65 20 4f 50 5f 53 65 65 6b 47 45 20 61 6e  the OP_SeekGE an
1fff0 64 0a 20 20 20 20 2a 2a 20 4f 50 5f 53 65 65 6b  d.    ** OP_Seek
20000 4c 45 20 6f 70 63 6f 64 65 73 20 61 72 65 20 61  LE opcodes are a
20010 6c 6c 6f 77 65 64 2c 20 61 6e 64 20 74 68 65 73  llowed, and thes
20020 65 20 6d 75 73 74 20 62 65 20 69 6d 6d 65 64 69  e must be immedi
20030 61 74 65 6c 79 20 66 6f 6c 6c 6f 77 65 64 0a 20  ately followed. 
20040 20 20 20 2a 2a 20 62 79 20 61 6e 20 4f 50 5f 49     ** by an OP_I
20050 64 78 47 54 20 6f 72 20 4f 50 5f 49 64 78 4c 54  dxGT or OP_IdxLT
20060 20 6f 70 63 6f 64 65 2c 20 72 65 73 70 65 63 74   opcode, respect
20070 69 76 65 6c 79 2c 20 77 69 74 68 20 74 68 65 20  ively, with the 
20080 73 61 6d 65 20 6b 65 79 2e 0a 20 20 20 20 2a 2f  same key..    */
20090 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
200a0 42 74 72 65 65 43 75 72 73 6f 72 48 61 73 48 69  BtreeCursorHasHi
200b0 6e 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  nt(pC->uc.pCurso
200c0 72 2c 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51  r, BTREE_SEEK_EQ
200d0 29 20 29 7b 0a 20 20 20 20 20 20 65 71 4f 6e 6c  ) ){.      eqOnl
200e0 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 61 73 73  y = 1;.      ass
200f0 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  ert( pOp->opcode
20100 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 70  ==OP_SeekGE || p
20110 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53  Op->opcode==OP_S
20120 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  eekLE );.      a
20130 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 6f 70  ssert( pOp[1].op
20140 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 7c  code==OP_IdxLT |
20150 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63 6f 64 65 3d  | pOp[1].opcode=
20160 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20 20 20  =OP_IdxGT );.   
20170 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20180 5d 2e 70 31 3d 3d 70 4f 70 5b 30 5d 2e 70 31 20  ].p1==pOp[0].p1 
20190 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
201a0 20 70 4f 70 5b 31 5d 2e 70 32 3d 3d 70 4f 70 5b   pOp[1].p2==pOp[
201b0 30 5d 2e 70 32 20 29 3b 0a 20 20 20 20 20 20 61  0].p2 );.      a
201c0 73 73 65 72 74 28 20 70 4f 70 5b 31 5d 2e 70 33  ssert( pOp[1].p3
201d0 3d 3d 70 4f 70 5b 30 5d 2e 70 33 20 29 3b 0a 20  ==pOp[0].p3 );. 
201e0 20 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70       assert( pOp
201f0 5b 31 5d 2e 70 34 2e 69 3d 3d 70 4f 70 5b 30 5d  [1].p4.i==pOp[0]
20200 2e 70 34 2e 69 20 29 3b 0a 20 20 20 20 7d 0a 0a  .p4.i );.    }..
20210 20 20 20 20 6e 46 69 65 6c 64 20 3d 20 70 4f 70      nField = pOp
20220 2d 3e 70 34 2e 69 3b 0a 20 20 20 20 61 73 73 65  ->p4.i;.    asse
20230 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d  rt( pOp->p4type=
20240 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20 20  =P4_INT32 );.   
20250 20 61 73 73 65 72 74 28 20 6e 46 69 65 6c 64 3e   assert( nField>
20260 30 20 29 3b 0a 20 20 20 20 72 2e 70 4b 65 79 49  0 );.    r.pKeyI
20270 6e 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e  nfo = pC->pKeyIn
20280 66 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64  fo;.    r.nField
20290 20 3d 20 28 75 31 36 29 6e 46 69 65 6c 64 3b 0a   = (u16)nField;.
202a0 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
202b0 20 6c 69 6e 65 20 6f 66 20 63 6f 64 65 20 63 6f   line of code co
202c0 6d 70 75 74 65 73 20 61 73 20 66 6f 6c 6c 6f 77  mputes as follow
202d0 73 2c 20 6f 6e 6c 79 20 66 61 73 74 65 72 3a 0a  s, only faster:.
202e0 20 20 20 20 2a 2a 20 20 20 69 66 28 20 6f 63 3d      **   if( oc=
202f0 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c 20 6f 63  =OP_SeekGT || oc
20300 3d 3d 4f 50 5f 53 65 65 6b 4c 45 20 29 7b 0a 20  ==OP_SeekLE ){. 
20310 20 20 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61     **     r.defa
20320 75 6c 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 20  ult_rc = -1;.   
20330 20 2a 2a 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20   **   }else{.   
20340 20 2a 2a 20 20 20 20 20 72 2e 64 65 66 61 75 6c   **     r.defaul
20350 74 5f 72 63 20 3d 20 2b 31 3b 0a 20 20 20 20 2a  t_rc = +1;.    *
20360 2a 20 20 20 7d 0a 20 20 20 20 2a 2f 0a 20 20 20  *   }.    */.   
20370 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 20 3d 20   r.default_rc = 
20380 28 28 31 20 26 20 28 6f 63 20 2d 20 4f 50 5f 53  ((1 & (oc - OP_S
20390 65 65 6b 4c 54 29 29 20 3f 20 2d 31 20 3a 20 2b  eekLT)) ? -1 : +
203a0 31 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  1);.    assert( 
203b0 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 54 20 7c 7c  oc!=OP_SeekGT ||
203c0 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d 2d   r.default_rc==-
203d0 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  1 );.    assert(
203e0 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 45 20 7c   oc!=OP_SeekLE |
203f0 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d 3d  | r.default_rc==
20400 2d 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  -1 );.    assert
20410 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 47 45 20  ( oc!=OP_SeekGE 
20420 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63 3d  || r.default_rc=
20430 3d 2b 31 20 29 3b 0a 20 20 20 20 61 73 73 65 72  =+1 );.    asser
20440 74 28 20 6f 63 21 3d 4f 50 5f 53 65 65 6b 4c 54  t( oc!=OP_SeekLT
20450 20 7c 7c 20 72 2e 64 65 66 61 75 6c 74 5f 72 63   || r.default_rc
20460 3d 3d 2b 31 20 29 3b 0a 0a 20 20 20 20 72 2e 61  ==+1 );..    r.a
20470 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
20480 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51 4c  >p3];.#ifdef SQL
20490 49 54 45 5f 44 45 42 55 47 0a 20 20 20 20 7b 20  ITE_DEBUG.    { 
204a0 69 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20  int i; for(i=0; 
204b0 69 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29  i<r.nField; i++)
204c0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
204d0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20  lid(&r.aMem[i]) 
204e0 29 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 20 20  ); }.#endif.    
204f0 72 2e 65 71 53 65 65 6e 20 3d 20 30 3b 0a 20 20  r.eqSeen = 0;.  
20500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
20510 72 65 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65  reeMovetoUnpacke
20520 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
20530 2c 20 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73  , &r, 0, 0, &res
20540 29 3b 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53  );.    if( rc!=S
20550 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
20560 20 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65    goto abort_due
20570 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d  _to_error;.    }
20580 0a 20 20 20 20 69 66 28 20 65 71 4f 6e 6c 79 20  .    if( eqOnly 
20590 26 26 20 72 2e 65 71 53 65 65 6e 3d 3d 30 20 29  && r.eqSeen==0 )
205a0 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  {.      assert( 
205b0 72 65 73 21 3d 30 20 29 3b 0a 20 20 20 20 20 20  res!=0 );.      
205c0 67 6f 74 6f 20 73 65 65 6b 5f 6e 6f 74 5f 66 6f  goto seek_not_fo
205d0 75 6e 64 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  und;.    }.  }. 
205e0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
205f0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
20600 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
20610 48 45 5f 53 54 41 4c 45 3b 0a 23 69 66 64 65 66  HE_STALE;.#ifdef
20620 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 73   SQLITE_TEST.  s
20630 71 6c 69 74 65 33 5f 73 65 61 72 63 68 5f 63 6f  qlite3_search_co
20640 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 20 20  unt++;.#endif.  
20650 69 66 28 20 6f 63 3e 3d 4f 50 5f 53 65 65 6b 47  if( oc>=OP_SeekG
20660 45 20 29 7b 20 20 61 73 73 65 72 74 28 20 6f 63  E ){  assert( oc
20670 3d 3d 4f 50 5f 53 65 65 6b 47 45 20 7c 7c 20 6f  ==OP_SeekGE || o
20680 63 3d 3d 4f 50 5f 53 65 65 6b 47 54 20 29 3b 0a  c==OP_SeekGT );.
20690 20 20 20 20 69 66 28 20 72 65 73 3c 30 20 7c 7c      if( res<0 ||
206a0 20 28 72 65 73 3d 3d 30 20 26 26 20 6f 63 3d 3d   (res==0 && oc==
206b0 4f 50 5f 53 65 65 6b 47 54 29 20 29 7b 0a 20 20  OP_SeekGT) ){.  
206c0 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
206d0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
206e0 74 72 65 65 4e 65 78 74 28 70 43 2d 3e 75 63 2e  treeNext(pC->uc.
206f0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
20700 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
20710 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61  LITE_OK ) goto a
20720 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
20730 72 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  r;.    }else{.  
20740 20 20 20 20 72 65 73 20 3d 20 30 3b 0a 20 20 20      res = 0;.   
20750 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20   }.  }else{.    
20760 61 73 73 65 72 74 28 20 6f 63 3d 3d 4f 50 5f 53  assert( oc==OP_S
20770 65 65 6b 4c 54 20 7c 7c 20 6f 63 3d 3d 4f 50 5f  eekLT || oc==OP_
20780 53 65 65 6b 4c 45 20 29 3b 0a 20 20 20 20 69 66  SeekLE );.    if
20790 28 20 72 65 73 3e 30 20 7c 7c 20 28 72 65 73 3d  ( res>0 || (res=
207a0 3d 30 20 26 26 20 6f 63 3d 3d 4f 50 5f 53 65 65  =0 && oc==OP_See
207b0 6b 4c 54 29 20 29 7b 0a 20 20 20 20 20 20 72 65  kLT) ){.      re
207c0 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 72 63 20  s = 0;.      rc 
207d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72  = sqlite3BtreePr
207e0 65 76 69 6f 75 73 28 70 43 2d 3e 75 63 2e 70 43  evious(pC->uc.pC
207f0 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20  ursor, &res);.  
20800 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
20810 54 45 5f 4f 4b 20 29 20 67 6f 74 6f 20 61 62 6f  TE_OK ) goto abo
20820 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
20830 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
20840 20 20 2f 2a 20 72 65 73 20 6d 69 67 68 74 20 62    /* res might b
20850 65 20 6e 65 67 61 74 69 76 65 20 62 65 63 61 75  e negative becau
20860 73 65 20 74 68 65 20 74 61 62 6c 65 20 69 73 20  se the table is 
20870 65 6d 70 74 79 2e 20 20 43 68 65 63 6b 20 74 6f  empty.  Check to
20880 0a 20 20 20 20 20 20 2a 2a 20 73 65 65 20 69 66  .      ** see if
20890 20 74 68 69 73 20 69 73 20 74 68 65 20 63 61 73   this is the cas
208a0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
208b0 20 20 72 65 73 20 3d 20 73 71 6c 69 74 65 33 42    res = sqlite3B
208c0 74 72 65 65 45 6f 66 28 70 43 2d 3e 75 63 2e 70  treeEof(pC->uc.p
208d0 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 7d 0a 20  Cursor);.    }. 
208e0 20 7d 0a 73 65 65 6b 5f 6e 6f 74 5f 66 6f 75 6e   }.seek_not_foun
208f0 64 3a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  d:.  assert( pOp
20900 2d 3e 70 32 3e 30 20 29 3b 0a 20 20 56 64 62 65  ->p2>0 );.  Vdbe
20910 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65 73 21  BranchTaken(res!
20920 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72 65 73  =0,2);.  if( res
20930 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d   ){.    goto jum
20940 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65  p_to_p2;.  }else
20950 20 69 66 28 20 65 71 4f 6e 6c 79 20 29 7b 0a 20   if( eqOnly ){. 
20960 20 20 20 61 73 73 65 72 74 28 20 70 4f 70 5b 31     assert( pOp[1
20970 5d 2e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ].opcode==OP_Idx
20980 4c 54 20 7c 7c 20 70 4f 70 5b 31 5d 2e 6f 70 63  LT || pOp[1].opc
20990 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b  ode==OP_IdxGT );
209a0 0a 20 20 20 20 70 4f 70 2b 2b 3b 20 2f 2a 20 53  .    pOp++; /* S
209b0 6b 69 70 20 74 68 65 20 4f 50 5f 49 64 78 4c 74  kip the OP_IdxLt
209c0 20 6f 72 20 4f 50 5f 49 64 78 47 54 20 74 68 61   or OP_IdxGT tha
209d0 74 20 66 6f 6c 6c 6f 77 73 20 2a 2f 0a 20 20 7d  t follows */.  }
209e0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
209f0 4f 70 63 6f 64 65 3a 20 46 6f 75 6e 64 20 50 31  Opcode: Found P1
20a00 20 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53   P2 P3 P4 *.** S
20a10 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
20a20 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50  3@P4].**.** If P
20a30 34 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74  4==0 then regist
20a40 65 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c  er P3 holds a bl
20a50 6f 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ob constructed b
20a60 79 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49  y MakeRecord.  I
20a70 66 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72  f.** P4>0 then r
20a80 65 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68  egister P3 is th
20a90 65 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65  e first of P4 re
20aa0 67 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72  gisters that for
20ab0 6d 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a  m an unpacked.**
20ac0 20 72 65 63 6f 72 64 2e 0a 2a 2a 0a 2a 2a 20 43   record..**.** C
20ad0 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20ae0 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20af0 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20b00 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20b10 6e 64 20 50 34 0a 2a 2a 20 69 73 20 61 20 70 72  nd P4.** is a pr
20b20 65 66 69 78 20 6f 66 20 61 6e 79 20 65 6e 74 72  efix of any entr
20b30 79 20 69 6e 20 50 31 20 74 68 65 6e 20 61 20 6a  y in P1 then a j
20b40 75 6d 70 20 69 73 20 6d 61 64 65 20 74 6f 20 50  ump is made to P
20b50 32 20 61 6e 64 0a 2a 2a 20 50 31 20 69 73 20 6c  2 and.** P1 is l
20b60 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74 20  eft pointing at 
20b70 74 68 65 20 6d 61 74 63 68 69 6e 67 20 65 6e 74  the matching ent
20b80 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f  ry..**.** This o
20b90 70 65 72 61 74 69 6f 6e 20 6c 65 61 76 65 73 20  peration leaves 
20ba0 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20 61 20  the cursor in a 
20bb0 73 74 61 74 65 20 77 68 65 72 65 20 69 74 20 63  state where it c
20bc0 61 6e 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65  an be.** advance
20bd0 64 20 69 6e 20 74 68 65 20 66 6f 72 77 61 72 64  d in the forward
20be0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 54 68 65   direction.  The
20bf0 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69 6f   Next instructio
20c00 6e 20 77 69 6c 6c 20 77 6f 72 6b 2c 0a 2a 2a 20  n will work,.** 
20c10 62 75 74 20 6e 6f 74 20 74 68 65 20 50 72 65 76  but not the Prev
20c20 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
20c30 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 4e 6f  .** See also: No
20c40 74 46 6f 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69  tFound, NoConfli
20c50 63 74 2c 20 4e 6f 74 45 78 69 73 74 73 2e 20 53  ct, NotExists. S
20c60 65 65 6b 47 65 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  eekGe.*/./* Opco
20c70 64 65 3a 20 4e 6f 74 46 6f 75 6e 64 20 50 31 20  de: NotFound P1 
20c80 50 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79  P2 P3 P4 *.** Sy
20c90 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
20ca0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34  @P4].**.** If P4
20cb0 3d 3d 30 20 74 68 65 6e 20 72 65 67 69 73 74 65  ==0 then registe
20cc0 72 20 50 33 20 68 6f 6c 64 73 20 61 20 62 6c 6f  r P3 holds a blo
20cd0 62 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  b constructed by
20ce0 20 4d 61 6b 65 52 65 63 6f 72 64 2e 20 20 49 66   MakeRecord.  If
20cf0 0a 2a 2a 20 50 34 3e 30 20 74 68 65 6e 20 72 65  .** P4>0 then re
20d00 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
20d10 20 66 69 72 73 74 20 6f 66 20 50 34 20 72 65 67   first of P4 reg
20d20 69 73 74 65 72 73 20 74 68 61 74 20 66 6f 72 6d  isters that form
20d30 20 61 6e 20 75 6e 70 61 63 6b 65 64 0a 2a 2a 20   an unpacked.** 
20d40 72 65 63 6f 72 64 2e 0a 2a 2a 20 0a 2a 2a 20 43  record..** .** C
20d50 75 72 73 6f 72 20 50 31 20 69 73 20 6f 6e 20 61  ursor P1 is on a
20d60 6e 20 69 6e 64 65 78 20 62 74 72 65 65 2e 20 20  n index btree.  
20d70 49 66 20 74 68 65 20 72 65 63 6f 72 64 20 69 64  If the record id
20d80 65 6e 74 69 66 69 65 64 20 62 79 20 50 33 20 61  entified by P3 a
20d90 6e 64 20 50 34 0a 2a 2a 20 69 73 20 6e 6f 74 20  nd P4.** is not 
20da0 74 68 65 20 70 72 65 66 69 78 20 6f 66 20 61 6e  the prefix of an
20db0 79 20 65 6e 74 72 79 20 69 6e 20 50 31 20 74 68  y entry in P1 th
20dc0 65 6e 20 61 20 6a 75 6d 70 20 69 73 20 6d 61 64  en a jump is mad
20dd0 65 20 74 6f 20 50 32 2e 20 20 49 66 20 50 31 20  e to P2.  If P1 
20de0 0a 2a 2a 20 64 6f 65 73 20 63 6f 6e 74 61 69 6e  .** does contain
20df0 20 61 6e 20 65 6e 74 72 79 20 77 68 6f 73 65 20   an entry whose 
20e00 70 72 65 66 69 78 20 6d 61 74 63 68 65 73 20 74  prefix matches t
20e10 68 65 20 50 33 2f 50 34 20 72 65 63 6f 72 64 20  he P3/P4 record 
20e20 74 68 65 6e 20 63 6f 6e 74 72 6f 6c 0a 2a 2a 20  then control.** 
20e30 66 61 6c 6c 73 20 74 68 72 6f 75 67 68 20 74 6f  falls through to
20e40 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72 75   the next instru
20e50 63 74 69 6f 6e 20 61 6e 64 20 50 31 20 69 73 20  ction and P1 is 
20e60 6c 65 66 74 20 70 6f 69 6e 74 69 6e 67 20 61 74  left pointing at
20e70 20 74 68 65 0a 2a 2a 20 6d 61 74 63 68 69 6e 67   the.** matching
20e80 20 65 6e 74 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68   entry..**.** Th
20e90 69 73 20 6f 70 65 72 61 74 69 6f 6e 20 6c 65 61  is operation lea
20ea0 76 65 73 20 74 68 65 20 63 75 72 73 6f 72 20 69  ves the cursor i
20eb0 6e 20 61 20 73 74 61 74 65 20 77 68 65 72 65 20  n a state where 
20ec0 69 74 20 63 61 6e 6e 6f 74 20 62 65 0a 2a 2a 20  it cannot be.** 
20ed0 61 64 76 61 6e 63 65 64 20 69 6e 20 65 69 74 68  advanced in eith
20ee0 65 72 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49  er direction.  I
20ef0 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
20f00 68 65 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76  he Next and Prev
20f10 0a 2a 2a 20 6f 70 63 6f 64 65 73 20 64 6f 20 6e  .** opcodes do n
20f20 6f 74 20 77 6f 72 6b 20 61 66 74 65 72 20 74 68  ot work after th
20f30 69 73 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 2a 2a  is operation..**
20f40 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46 6f  .** See also: Fo
20f50 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 2c 20  und, NotExists, 
20f60 4e 6f 43 6f 6e 66 6c 69 63 74 0a 2a 2f 0a 2f 2a  NoConflict.*/./*
20f70 20 4f 70 63 6f 64 65 3a 20 4e 6f 43 6f 6e 66 6c   Opcode: NoConfl
20f80 69 63 74 20 50 31 20 50 32 20 50 33 20 50 34 20  ict P1 P2 P3 P4 
20f90 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b  *.** Synopsis: k
20fa0 65 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a  ey=r[P3@P4].**.*
20fb0 2a 20 49 66 20 50 34 3d 3d 30 20 74 68 65 6e 20  * If P4==0 then 
20fc0 72 65 67 69 73 74 65 72 20 50 33 20 68 6f 6c 64  register P3 hold
20fd0 73 20 61 20 62 6c 6f 62 20 63 6f 6e 73 74 72 75  s a blob constru
20fe0 63 74 65 64 20 62 79 20 4d 61 6b 65 52 65 63 6f  cted by MakeReco
20ff0 72 64 2e 20 20 49 66 0a 2a 2a 20 50 34 3e 30 20  rd.  If.** P4>0 
21000 74 68 65 6e 20 72 65 67 69 73 74 65 72 20 50 33  then register P3
21010 20 69 73 20 74 68 65 20 66 69 72 73 74 20 6f 66   is the first of
21020 20 50 34 20 72 65 67 69 73 74 65 72 73 20 74 68   P4 registers th
21030 61 74 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61 63  at form an unpac
21040 6b 65 64 0a 2a 2a 20 72 65 63 6f 72 64 2e 0a 2a  ked.** record..*
21050 2a 20 0a 2a 2a 20 43 75 72 73 6f 72 20 50 31 20  * .** Cursor P1 
21060 69 73 20 6f 6e 20 61 6e 20 69 6e 64 65 78 20 62  is on an index b
21070 74 72 65 65 2e 20 20 49 66 20 74 68 65 20 72 65  tree.  If the re
21080 63 6f 72 64 20 69 64 65 6e 74 69 66 69 65 64 20  cord identified 
21090 62 79 20 50 33 20 61 6e 64 20 50 34 0a 2a 2a 20  by P3 and P4.** 
210a0 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 4e 55 4c  contains any NUL
210b0 4c 20 76 61 6c 75 65 2c 20 6a 75 6d 70 20 69 6d  L value, jump im
210c0 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e  mediately to P2.
210d0 20 20 49 66 20 61 6c 6c 20 74 65 72 6d 73 20 6f    If all terms o
210e0 66 20 74 68 65 0a 2a 2a 20 72 65 63 6f 72 64 20  f the.** record 
210f0 61 72 65 20 6e 6f 74 2d 4e 55 4c 4c 20 74 68 65  are not-NULL the
21100 6e 20 61 20 63 68 65 63 6b 20 69 73 20 64 6f 6e  n a check is don
21110 65 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  e to determine i
21120 66 20 61 6e 79 20 72 6f 77 20 69 6e 20 74 68 65  f any row in the
21130 0a 2a 2a 20 50 31 20 69 6e 64 65 78 20 62 74 72  .** P1 index btr
21140 65 65 20 68 61 73 20 61 20 6d 61 74 63 68 69 6e  ee has a matchin
21150 67 20 6b 65 79 20 70 72 65 66 69 78 2e 20 20 49  g key prefix.  I
21160 66 20 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6d  f there are no m
21170 61 74 63 68 65 73 2c 20 6a 75 6d 70 0a 2a 2a 20  atches, jump.** 
21180 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50  immediately to P
21190 32 2e 20 20 49 66 20 74 68 65 72 65 20 69 73 20  2.  If there is 
211a0 61 20 6d 61 74 63 68 2c 20 66 61 6c 6c 20 74 68  a match, fall th
211b0 72 6f 75 67 68 20 61 6e 64 20 6c 65 61 76 65 20  rough and leave 
211c0 74 68 65 20 50 31 0a 2a 2a 20 63 75 72 73 6f 72  the P1.** cursor
211d0 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 74 68 65   pointing to the
211e0 20 6d 61 74 63 68 69 6e 67 20 72 6f 77 2e 0a 2a   matching row..*
211f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
21200 20 69 73 20 73 69 6d 69 6c 61 72 20 74 6f 20 4f   is similar to O
21210 50 5f 4e 6f 74 46 6f 75 6e 64 20 77 69 74 68 20  P_NotFound with 
21220 74 68 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74  the exceptions t
21230 68 61 74 20 74 68 65 0a 2a 2a 20 62 72 61 6e 63  hat the.** branc
21240 68 20 69 73 20 61 6c 77 61 79 73 20 74 61 6b 65  h is always take
21250 6e 20 69 66 20 61 6e 79 20 70 61 72 74 20 6f 66  n if any part of
21260 20 74 68 65 20 73 65 61 72 63 68 20 6b 65 79 20   the search key 
21270 69 6e 70 75 74 20 69 73 20 4e 55 4c 4c 2e 0a 2a  input is NULL..*
21280 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 65 72 61 74  *.** This operat
21290 69 6f 6e 20 6c 65 61 76 65 73 20 74 68 65 20 63  ion leaves the c
212a0 75 72 73 6f 72 20 69 6e 20 61 20 73 74 61 74 65  ursor in a state
212b0 20 77 68 65 72 65 20 69 74 20 63 61 6e 6e 6f 74   where it cannot
212c0 20 62 65 0a 2a 2a 20 61 64 76 61 6e 63 65 64 20   be.** advanced 
212d0 69 6e 20 65 69 74 68 65 72 20 64 69 72 65 63 74  in either direct
212e0 69 6f 6e 2e 20 20 49 6e 20 6f 74 68 65 72 20 77  ion.  In other w
212f0 6f 72 64 73 2c 20 74 68 65 20 4e 65 78 74 20 61  ords, the Next a
21300 6e 64 20 50 72 65 76 0a 2a 2a 20 6f 70 63 6f 64  nd Prev.** opcod
21310 65 73 20 64 6f 20 6e 6f 74 20 77 6f 72 6b 20 61  es do not work a
21320 66 74 65 72 20 74 68 69 73 20 6f 70 65 72 61 74  fter this operat
21330 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61  ion..**.** See a
21340 6c 73 6f 3a 20 4e 6f 74 46 6f 75 6e 64 2c 20 46  lso: NotFound, F
21350 6f 75 6e 64 2c 20 4e 6f 74 45 78 69 73 74 73 0a  ound, NotExists.
21360 2a 2f 0a 63 61 73 65 20 4f 50 5f 4e 6f 43 6f 6e  */.case OP_NoCon
21370 66 6c 69 63 74 3a 20 20 20 20 20 2f 2a 20 6a 75  flict:     /* ju
21380 6d 70 2c 20 69 6e 33 20 2a 2f 0a 63 61 73 65 20  mp, in3 */.case 
21390 4f 50 5f 4e 6f 74 46 6f 75 6e 64 3a 20 20 20 20  OP_NotFound:    
213a0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 33 20     /* jump, in3 
213b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 46 6f 75 6e 64  */.case OP_Found
213c0 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
213d0 6d 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74  mp, in3 */.  int
213e0 20 61 6c 72 65 61 64 79 45 78 69 73 74 73 3b 0a   alreadyExists;.
213f0 20 20 69 6e 74 20 74 61 6b 65 4a 75 6d 70 3b 0a    int takeJump;.
21400 20 20 69 6e 74 20 69 69 3b 0a 20 20 56 64 62 65    int ii;.  Vdbe
21410 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69 6e  Cursor *pC;.  in
21420 74 20 72 65 73 3b 0a 20 20 63 68 61 72 20 2a 70  t res;.  char *p
21430 46 72 65 65 3b 0a 20 20 55 6e 70 61 63 6b 65 64  Free;.  Unpacked
21440 52 65 63 6f 72 64 20 2a 70 49 64 78 4b 65 79 3b  Record *pIdxKey;
21450 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  .  UnpackedRecor
21460 64 20 72 3b 0a 20 20 63 68 61 72 20 61 54 65 6d  d r;.  char aTem
21470 70 52 65 63 5b 52 4f 55 4e 44 38 28 73 69 7a 65  pRec[ROUND8(size
21480 6f 66 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  of(UnpackedRecor
21490 64 29 29 20 2b 20 73 69 7a 65 6f 66 28 4d 65 6d  d)) + sizeof(Mem
214a0 29 2a 34 20 2b 20 37 5d 3b 0a 0a 23 69 66 64 65  )*4 + 7];..#ifde
214b0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
214c0 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21  if( pOp->opcode!
214d0 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74 20 29  =OP_NoConflict )
214e0 20 73 71 6c 69 74 65 33 5f 66 6f 75 6e 64 5f 63   sqlite3_found_c
214f0 6f 75 6e 74 2b 2b 3b 0a 23 65 6e 64 69 66 0a 0a  ount++;.#endif..
21500 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
21510 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
21520 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
21530 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74  assert( pOp->p4t
21540 79 70 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b  ype==P4_INT32 );
21550 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73 72  .  pC = p->apCsr
21560 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73  [pOp->p1];.  ass
21570 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23 69  ert( pC!=0 );.#i
21580 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
21590 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20 3d  G.  pC->seekOp =
215a0 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3b 0a 23 65   pOp->opcode;.#e
215b0 6e 64 69 66 0a 20 20 70 49 6e 33 20 3d 20 26 61  ndif.  pIn3 = &a
215c0 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
215d0 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
215e0 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
215f0 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74 28  REE );.  assert(
21600 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21   pC->uc.pCursor!
21610 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
21620 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20 29  pC->isTable==0 )
21630 3b 0a 20 20 70 46 72 65 65 20 3d 20 30 3b 0a 20  ;.  pFree = 0;. 
21640 20 69 66 28 20 70 4f 70 2d 3e 70 34 2e 69 3e 30   if( pOp->p4.i>0
21650 20 29 7b 0a 20 20 20 20 72 2e 70 4b 65 79 49 6e   ){.    r.pKeyIn
21660 66 6f 20 3d 20 70 43 2d 3e 70 4b 65 79 49 6e 66  fo = pC->pKeyInf
21670 6f 3b 0a 20 20 20 20 72 2e 6e 46 69 65 6c 64 20  o;.    r.nField 
21680 3d 20 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69  = (u16)pOp->p4.i
21690 3b 0a 20 20 20 20 72 2e 61 4d 65 6d 20 3d 20 70  ;.    r.aMem = p
216a0 49 6e 33 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  In3;.#ifdef SQLI
216b0 54 45 5f 44 45 42 55 47 0a 20 20 20 20 66 6f 72  TE_DEBUG.    for
216c0 28 69 69 3d 30 3b 20 69 69 3c 72 2e 6e 46 69 65  (ii=0; ii<r.nFie
216d0 6c 64 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  ld; ii++){.     
216e0 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
216f0 6c 69 64 28 26 72 2e 61 4d 65 6d 5b 69 69 5d 29  lid(&r.aMem[ii])
21700 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
21710 28 20 28 72 2e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  ( (r.aMem[ii].fl
21720 61 67 73 20 26 20 4d 45 4d 5f 5a 65 72 6f 29 3d  ags & MEM_Zero)=
21730 3d 30 20 7c 7c 20 72 2e 61 4d 65 6d 5b 69 69 5d  =0 || r.aMem[ii]
21740 2e 6e 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20 69  .n==0 );.      i
21750 66 28 20 69 69 20 29 20 52 45 47 49 53 54 45 52  f( ii ) REGISTER
21760 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2b 69  _TRACE(pOp->p3+i
21770 69 2c 20 26 72 2e 61 4d 65 6d 5b 69 69 5d 29 3b  i, &r.aMem[ii]);
21780 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20  .    }.#endif.  
21790 20 20 70 49 64 78 4b 65 79 20 3d 20 26 72 3b 0a    pIdxKey = &r;.
217a0 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 49 64    }else{.    pId
217b0 78 4b 65 79 20 3d 20 73 71 6c 69 74 65 33 56 64  xKey = sqlite3Vd
217c0 62 65 41 6c 6c 6f 63 55 6e 70 61 63 6b 65 64 52  beAllocUnpackedR
217d0 65 63 6f 72 64 28 0a 20 20 20 20 20 20 20 20 70  ecord(.        p
217e0 43 2d 3e 70 4b 65 79 49 6e 66 6f 2c 20 61 54 65  C->pKeyInfo, aTe
217f0 6d 70 52 65 63 2c 20 73 69 7a 65 6f 66 28 61 54  mpRec, sizeof(aT
21800 65 6d 70 52 65 63 29 2c 20 26 70 46 72 65 65 0a  empRec), &pFree.
21810 20 20 20 20 29 3b 0a 20 20 20 20 69 66 28 20 70      );.    if( p
21820 49 64 78 4b 65 79 3d 3d 30 20 29 20 67 6f 74 6f  IdxKey==0 ) goto
21830 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 20 20 61 73 73   no_mem;.    ass
21840 65 72 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73  ert( pIn3->flags
21850 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
21860 20 20 20 28 76 6f 69 64 29 45 78 70 61 6e 64 42     (void)ExpandB
21870 6c 6f 62 28 70 49 6e 33 29 3b 0a 20 20 20 20 73  lob(pIn3);.    s
21880 71 6c 69 74 65 33 56 64 62 65 52 65 63 6f 72 64  qlite3VdbeRecord
21890 55 6e 70 61 63 6b 28 70 43 2d 3e 70 4b 65 79 49  Unpack(pC->pKeyI
218a0 6e 66 6f 2c 20 70 49 6e 33 2d 3e 6e 2c 20 70 49  nfo, pIn3->n, pI
218b0 6e 33 2d 3e 7a 2c 20 70 49 64 78 4b 65 79 29 3b  n3->z, pIdxKey);
218c0 0a 20 20 7d 0a 20 20 70 49 64 78 4b 65 79 2d 3e  .  }.  pIdxKey->
218d0 64 65 66 61 75 6c 74 5f 72 63 20 3d 20 30 3b 0a  default_rc = 0;.
218e0 20 20 74 61 6b 65 4a 75 6d 70 20 3d 20 30 3b 0a    takeJump = 0;.
218f0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
21900 65 3d 3d 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  e==OP_NoConflict
21910 20 29 7b 0a 20 20 20 20 2f 2a 20 46 6f 72 20 74   ){.    /* For t
21920 68 65 20 4f 50 5f 4e 6f 43 6f 6e 66 6c 69 63 74  he OP_NoConflict
21930 20 6f 70 63 6f 64 65 2c 20 74 61 6b 65 20 74 68   opcode, take th
21940 65 20 6a 75 6d 70 20 69 66 20 61 6e 79 20 6f 66  e jump if any of
21950 20 74 68 65 0a 20 20 20 20 2a 2a 20 69 6e 70 75   the.    ** inpu
21960 74 20 66 69 65 6c 64 73 20 61 72 65 20 4e 55 4c  t fields are NUL
21970 4c 2c 20 73 69 6e 63 65 20 61 6e 79 20 6b 65 79  L, since any key
21980 20 77 69 74 68 20 61 20 4e 55 4c 4c 20 77 69 6c   with a NULL wil
21990 6c 20 6e 6f 74 0a 20 20 20 20 2a 2a 20 63 6f 6e  l not.    ** con
219a0 66 6c 69 63 74 20 2a 2f 0a 20 20 20 20 66 6f 72  flict */.    for
219b0 28 69 69 3d 30 3b 20 69 69 3c 70 49 64 78 4b 65  (ii=0; ii<pIdxKe
219c0 79 2d 3e 6e 46 69 65 6c 64 3b 20 69 69 2b 2b 29  y->nField; ii++)
219d0 7b 0a 20 20 20 20 20 20 69 66 28 20 70 49 64 78  {.      if( pIdx
219e0 4b 65 79 2d 3e 61 4d 65 6d 5b 69 69 5d 2e 66 6c  Key->aMem[ii].fl
219f0 61 67 73 20 26 20 4d 45 4d 5f 4e 75 6c 6c 20 29  ags & MEM_Null )
21a00 7b 0a 20 20 20 20 20 20 20 20 74 61 6b 65 4a 75  {.        takeJu
21a10 6d 70 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20  mp = 1;.        
21a20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
21a30 20 20 20 7d 0a 20 20 7d 0a 20 20 72 63 20 3d 20     }.  }.  rc = 
21a40 73 71 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65  sqlite3BtreeMove
21a50 74 6f 55 6e 70 61 63 6b 65 64 28 70 43 2d 3e 75  toUnpacked(pC->u
21a60 63 2e 70 43 75 72 73 6f 72 2c 20 70 49 64 78 4b  c.pCursor, pIdxK
21a70 65 79 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  ey, 0, 0, &res);
21a80 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
21a90 28 64 62 2c 20 70 46 72 65 65 29 3b 0a 20 20 69  (db, pFree);.  i
21aa0 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
21ab0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f   ){.    goto abo
21ac0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
21ad0 0a 20 20 7d 0a 20 20 70 43 2d 3e 73 65 65 6b 52  .  }.  pC->seekR
21ae0 65 73 75 6c 74 20 3d 20 72 65 73 3b 0a 20 20 61  esult = res;.  a
21af0 6c 72 65 61 64 79 45 78 69 73 74 73 20 3d 20 28  lreadyExists = (
21b00 72 65 73 3d 3d 30 29 3b 0a 20 20 70 43 2d 3e 6e  res==0);.  pC->n
21b10 75 6c 6c 52 6f 77 20 3d 20 31 2d 61 6c 72 65 61  ullRow = 1-alrea
21b20 64 79 45 78 69 73 74 73 3b 0a 20 20 70 43 2d 3e  dyExists;.  pC->
21b30 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d  deferredMoveto =
21b40 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65 53   0;.  pC->cacheS
21b50 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54  tatus = CACHE_ST
21b60 41 4c 45 3b 0a 20 20 69 66 28 20 70 4f 70 2d 3e  ALE;.  if( pOp->
21b70 6f 70 63 6f 64 65 3d 3d 4f 50 5f 46 6f 75 6e 64  opcode==OP_Found
21b80 20 29 7b 0a 20 20 20 20 56 64 62 65 42 72 61 6e   ){.    VdbeBran
21b90 63 68 54 61 6b 65 6e 28 61 6c 72 65 61 64 79 45  chTaken(alreadyE
21ba0 78 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20  xists!=0,2);.   
21bb0 20 69 66 28 20 61 6c 72 65 61 64 79 45 78 69 73   if( alreadyExis
21bc0 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  ts ) goto jump_t
21bd0 6f 5f 70 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  o_p2;.  }else{. 
21be0 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b     VdbeBranchTak
21bf0 65 6e 28 74 61 6b 65 4a 75 6d 70 7c 7c 61 6c 72  en(takeJump||alr
21c00 65 61 64 79 45 78 69 73 74 73 3d 3d 30 2c 32 29  eadyExists==0,2)
21c10 3b 0a 20 20 20 20 69 66 28 20 74 61 6b 65 4a 75  ;.    if( takeJu
21c20 6d 70 20 7c 7c 20 21 61 6c 72 65 61 64 79 45 78  mp || !alreadyEx
21c30 69 73 74 73 20 29 20 67 6f 74 6f 20 6a 75 6d 70  ists ) goto jump
21c40 5f 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72  _to_p2;.  }.  br
21c50 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
21c60 65 3a 20 53 65 65 6b 52 6f 77 69 64 20 50 31 20  e: SeekRowid P1 
21c70 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e  P2 P3 * *.** Syn
21c80 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72 5b  opsis: intkey=r[
21c90 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20  P3].**.** P1 is 
21ca0 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20 63  the index of a c
21cb0 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61 6e  ursor open on an
21cc0 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65 65   SQL table btree
21cd0 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a 2a   (with integer.*
21ce0 2a 20 6b 65 79 73 29 2e 20 20 49 66 20 72 65 67  * keys).  If reg
21cf0 69 73 74 65 72 20 50 33 20 64 6f 65 73 20 6e 6f  ister P3 does no
21d00 74 20 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74  t contain an int
21d10 65 67 65 72 20 6f 72 20 69 66 20 50 31 20 64 6f  eger or if P1 do
21d20 65 73 20 6e 6f 74 0a 2a 2a 20 63 6f 6e 74 61 69  es not.** contai
21d30 6e 20 61 20 72 65 63 6f 72 64 20 77 69 74 68 20  n a record with 
21d40 72 6f 77 69 64 20 50 33 20 74 68 65 6e 20 6a 75  rowid P3 then ju
21d50 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
21d60 6f 20 50 32 2e 20 20 0a 2a 2a 20 4f 72 2c 20 69  o P2.  .** Or, i
21d70 66 20 50 32 20 69 73 20 30 2c 20 72 61 69 73 65  f P2 is 0, raise
21d80 20 61 6e 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   an SQLITE_CORRU
21d90 50 54 20 65 72 72 6f 72 2e 20 49 66 20 50 31 20  PT error. If P1 
21da0 64 6f 65 73 20 63 6f 6e 74 61 69 6e 0a 2a 2a 20  does contain.** 
21db0 61 20 72 65 63 6f 72 64 20 77 69 74 68 20 72 6f  a record with ro
21dc0 77 69 64 20 50 33 20 74 68 65 6e 20 0a 2a 2a 20  wid P3 then .** 
21dd0 6c 65 61 76 65 20 74 68 65 20 63 75 72 73 6f 72  leave the cursor
21de0 20 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 61   pointing at tha
21df0 74 20 72 65 63 6f 72 64 20 61 6e 64 20 66 61 6c  t record and fal
21e00 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
21e10 20 6e 65 78 74 0a 2a 2a 20 69 6e 73 74 72 75 63   next.** instruc
21e20 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  tion..**.** The 
21e30 4f 50 5f 4e 6f 74 45 78 69 73 74 73 20 6f 70 63  OP_NotExists opc
21e40 6f 64 65 20 70 65 72 66 6f 72 6d 73 20 74 68 65  ode performs the
21e50 20 73 61 6d 65 20 6f 70 65 72 61 74 69 6f 6e 2c   same operation,
21e60 20 62 75 74 20 77 69 74 68 20 4f 50 5f 4e 6f 74   but with OP_Not
21e70 45 78 69 73 74 73 0a 2a 2a 20 74 68 65 20 50 33  Exists.** the P3
21e80 20 72 65 67 69 73 74 65 72 20 6d 75 73 74 20 62   register must b
21e90 65 20 67 75 61 72 61 6e 74 65 65 64 20 74 6f 20  e guaranteed to 
21ea0 63 6f 6e 74 61 69 6e 20 61 6e 20 69 6e 74 65 67  contain an integ
21eb0 65 72 20 76 61 6c 75 65 2e 20 20 57 69 74 68 20  er value.  With 
21ec0 74 68 69 73 0a 2a 2a 20 6f 70 63 6f 64 65 2c 20  this.** opcode, 
21ed0 72 65 67 69 73 74 65 72 20 50 33 20 6d 69 67 68  register P3 migh
21ee0 74 20 6e 6f 74 20 63 6f 6e 74 61 69 6e 20 61 6e  t not contain an
21ef0 20 69 6e 74 65 67 65 72 2e 0a 2a 2a 0a 2a 2a 20   integer..**.** 
21f00 54 68 65 20 4f 50 5f 4e 6f 74 46 6f 75 6e 64 20  The OP_NotFound 
21f10 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d 73 20  opcode performs 
21f20 74 68 65 20 73 61 6d 65 20 6f 70 65 72 61 74 69  the same operati
21f30 6f 6e 20 6f 6e 20 69 6e 64 65 78 20 62 74 72 65  on on index btre
21f40 65 73 0a 2a 2a 20 28 77 69 74 68 20 61 72 62 69  es.** (with arbi
21f50 74 72 61 72 79 20 6d 75 6c 74 69 2d 76 61 6c 75  trary multi-valu
21f60 65 20 6b 65 79 73 29 2e 0a 2a 2a 0a 2a 2a 20 54  e keys)..**.** T
21f70 68 69 73 20 6f 70 63 6f 64 65 20 6c 65 61 76 65  his opcode leave
21f80 73 20 74 68 65 20 63 75 72 73 6f 72 20 69 6e 20  s the cursor in 
21f90 61 20 73 74 61 74 65 20 77 68 65 72 65 20 69 74  a state where it
21fa0 20 63 61 6e 6e 6f 74 20 62 65 20 61 64 76 61 6e   cannot be advan
21fb0 63 65 64 0a 2a 2a 20 69 6e 20 65 69 74 68 65 72  ced.** in either
21fc0 20 64 69 72 65 63 74 69 6f 6e 2e 20 20 49 6e 20   direction.  In 
21fd0 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
21fe0 20 4e 65 78 74 20 61 6e 64 20 50 72 65 76 20 6f   Next and Prev o
21ff0 70 63 6f 64 65 73 20 77 69 6c 6c 0a 2a 2a 20 6e  pcodes will.** n
22000 6f 74 20 77 6f 72 6b 20 66 6f 6c 6c 6f 77 69 6e  ot work followin
22010 67 20 74 68 69 73 20 6f 70 63 6f 64 65 2e 0a 2a  g this opcode..*
22020 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 46  *.** See also: F
22030 6f 75 6e 64 2c 20 4e 6f 74 46 6f 75 6e 64 2c 20  ound, NotFound, 
22040 4e 6f 43 6f 6e 66 6c 69 63 74 2c 20 53 65 65 6b  NoConflict, Seek
22050 52 6f 77 69 64 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f  Rowid.*/./* Opco
22060 64 65 3a 20 4e 6f 74 45 78 69 73 74 73 20 50 31  de: NotExists P1
22070 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79   P2 P3 * *.** Sy
22080 6e 6f 70 73 69 73 3a 20 69 6e 74 6b 65 79 3d 72  nopsis: intkey=r
22090 5b 50 33 5d 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  [P3].**.** P1 is
220a0 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 61 20   the index of a 
220b0 63 75 72 73 6f 72 20 6f 70 65 6e 20 6f 6e 20 61  cursor open on a
220c0 6e 20 53 51 4c 20 74 61 62 6c 65 20 62 74 72 65  n SQL table btre
220d0 65 20 28 77 69 74 68 20 69 6e 74 65 67 65 72 0a  e (with integer.
220e0 2a 2a 20 6b 65 79 73 29 2e 20 20 50 33 20 69 73  ** keys).  P3 is
220f0 20 61 6e 20 69 6e 74 65 67 65 72 20 72 6f 77 69   an integer rowi
22100 64 2e 20 20 49 66 20 50 31 20 64 6f 65 73 20 6e  d.  If P1 does n
22110 6f 74 20 63 6f 6e 74 61 69 6e 20 61 20 72 65 63  ot contain a rec
22120 6f 72 64 20 77 69 74 68 0a 2a 2a 20 72 6f 77 69  ord with.** rowi
22130 64 20 50 33 20 74 68 65 6e 20 6a 75 6d 70 20 69  d P3 then jump i
22140 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20 50 32  mmediately to P2
22150 2e 20 20 4f 72 2c 20 69 66 20 50 32 20 69 73 20  .  Or, if P2 is 
22160 30 2c 20 72 61 69 73 65 20 61 6e 0a 2a 2a 20 53  0, raise an.** S
22170 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 65 72  QLITE_CORRUPT er
22180 72 6f 72 2e 20 49 66 20 50 31 20 64 6f 65 73 20  ror. If P1 does 
22190 63 6f 6e 74 61 69 6e 20 61 20 72 65 63 6f 72 64  contain a record
221a0 20 77 69 74 68 20 72 6f 77 69 64 20 50 33 20 74   with rowid P3 t
221b0 68 65 6e 20 0a 2a 2a 20 6c 65 61 76 65 20 74 68  hen .** leave th
221c0 65 20 63 75 72 73 6f 72 20 70 6f 69 6e 74 69 6e  e cursor pointin
221d0 67 20 61 74 20 74 68 61 74 20 72 65 63 6f 72 64  g at that record
221e0 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75 67   and fall throug
221f0 68 20 74 6f 20 74 68 65 20 6e 65 78 74 0a 2a 2a  h to the next.**
22200 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a   instruction..**
22210 0a 2a 2a 20 54 68 65 20 4f 50 5f 53 65 65 6b 52  .** The OP_SeekR
22220 6f 77 69 64 20 6f 70 63 6f 64 65 20 70 65 72 66  owid opcode perf
22230 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22240 65 72 61 74 69 6f 6e 20 62 75 74 20 61 6c 73 6f  eration but also
22250 20 61 6c 6c 6f 77 73 20 74 68 65 0a 2a 2a 20 50   allows the.** P
22260 33 20 72 65 67 69 73 74 65 72 20 74 6f 20 63 6f  3 register to co
22270 6e 74 61 69 6e 20 61 20 6e 6f 6e 2d 69 6e 74 65  ntain a non-inte
22280 67 65 72 20 76 61 6c 75 65 2c 20 69 6e 20 77 68  ger value, in wh
22290 69 63 68 20 63 61 73 65 20 74 68 65 20 6a 75 6d  ich case the jum
222a0 70 20 69 73 0a 2a 2a 20 61 6c 77 61 79 73 20 74  p is.** always t
222b0 61 6b 65 6e 2e 20 20 54 68 69 73 20 6f 70 63 6f  aken.  This opco
222c0 64 65 20 72 65 71 75 69 72 65 73 20 74 68 61 74  de requires that
222d0 20 50 33 20 61 6c 77 61 79 73 20 63 6f 6e 74 61   P3 always conta
222e0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
222f0 2a 0a 2a 2a 20 54 68 65 20 4f 50 5f 4e 6f 74 46  *.** The OP_NotF
22300 6f 75 6e 64 20 6f 70 63 6f 64 65 20 70 65 72 66  ound opcode perf
22310 6f 72 6d 73 20 74 68 65 20 73 61 6d 65 20 6f 70  orms the same op
22320 65 72 61 74 69 6f 6e 20 6f 6e 20 69 6e 64 65 78  eration on index
22330 20 62 74 72 65 65 73 0a 2a 2a 20 28 77 69 74 68   btrees.** (with
22340 20 61 72 62 69 74 72 61 72 79 20 6d 75 6c 74 69   arbitrary multi
22350 2d 76 61 6c 75 65 20 6b 65 79 73 29 2e 0a 2a 2a  -value keys)..**
22360 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
22370 6c 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f  leaves the curso
22380 72 20 69 6e 20 61 20 73 74 61 74 65 20 77 68 65  r in a state whe
22390 72 65 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  re it cannot be 
223a0 61 64 76 61 6e 63 65 64 0a 2a 2a 20 69 6e 20 65  advanced.** in e
223b0 69 74 68 65 72 20 64 69 72 65 63 74 69 6f 6e 2e  ither direction.
223c0 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
223d0 2c 20 74 68 65 20 4e 65 78 74 20 61 6e 64 20 50  , the Next and P
223e0 72 65 76 20 6f 70 63 6f 64 65 73 20 77 69 6c 6c  rev opcodes will
223f0 0a 2a 2a 20 6e 6f 74 20 77 6f 72 6b 20 66 6f 6c  .** not work fol
22400 6c 6f 77 69 6e 67 20 74 68 69 73 20 6f 70 63 6f  lowing this opco
22410 64 65 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c  de..**.** See al
22420 73 6f 3a 20 46 6f 75 6e 64 2c 20 4e 6f 74 46 6f  so: Found, NotFo
22430 75 6e 64 2c 20 4e 6f 43 6f 6e 66 6c 69 63 74 2c  und, NoConflict,
22440 20 53 65 65 6b 52 6f 77 69 64 0a 2a 2f 0a 63 61   SeekRowid.*/.ca
22450 73 65 20 4f 50 5f 53 65 65 6b 52 6f 77 69 64 3a  se OP_SeekRowid:
22460 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d   {        /* jum
22470 70 2c 20 69 6e 33 20 2a 2f 0a 20 20 56 64 62 65  p, in3 */.  Vdbe
22480 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
22490 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
224a0 20 69 6e 74 20 72 65 73 3b 0a 20 20 75 36 34 20   int res;.  u64 
224b0 69 4b 65 79 3b 0a 0a 20 20 70 49 6e 33 20 3d 20  iKey;..  pIn3 = 
224c0 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  &aMem[pOp->p3];.
224d0 20 20 69 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61    if( (pIn3->fla
224e0 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30  gs & MEM_Int)==0
224f0 20 29 7b 0a 20 20 20 20 61 70 70 6c 79 41 66 66   ){.    applyAff
22500 69 6e 69 74 79 28 70 49 6e 33 2c 20 53 51 4c 49  inity(pIn3, SQLI
22510 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 2c 20  TE_AFF_NUMERIC, 
22520 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20 20 20 69  encoding);.    i
22530 66 28 20 28 70 49 6e 33 2d 3e 66 6c 61 67 73 20  f( (pIn3->flags 
22540 26 20 4d 45 4d 5f 49 6e 74 29 3d 3d 30 20 29 20  & MEM_Int)==0 ) 
22550 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b  goto jump_to_p2;
22560 0a 20 20 7d 0a 20 20 2f 2a 20 46 61 6c 6c 20 74  .  }.  /* Fall t
22570 68 72 6f 75 67 68 20 69 6e 74 6f 20 4f 50 5f 4e  hrough into OP_N
22580 6f 74 45 78 69 73 74 73 20 2a 2f 0a 63 61 73 65  otExists */.case
22590 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 3a 20 20   OP_NotExists:  
225a0 20 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 2c          /* jump,
225b0 20 69 6e 33 20 2a 2f 0a 20 20 70 49 6e 33 20 3d   in3 */.  pIn3 =
225c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
225d0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
225e0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
225f0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
22600 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
22610 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
22620 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
22630 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
22640 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 23  sert( pC!=0 );.#
22650 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
22660 55 47 0a 20 20 70 43 2d 3e 73 65 65 6b 4f 70 20  UG.  pC->seekOp 
22670 3d 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 61 73  = 0;.#endif.  as
22680 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
22690 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  e );.  assert( p
226a0 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
226b0 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
226c0 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e 70  pCrsr = pC->uc.p
226d0 43 75 72 73 6f 72 3b 0a 20 20 61 73 73 65 72 74  Cursor;.  assert
226e0 28 20 70 43 72 73 72 21 3d 30 20 29 3b 0a 20 20  ( pCrsr!=0 );.  
226f0 72 65 73 20 3d 20 30 3b 0a 20 20 69 4b 65 79 20  res = 0;.  iKey 
22700 3d 20 70 49 6e 33 2d 3e 75 2e 69 3b 0a 20 20 72  = pIn3->u.i;.  r
22710 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
22720 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28 70  MovetoUnpacked(p
22730 43 72 73 72 2c 20 30 2c 20 69 4b 65 79 2c 20 30  Crsr, 0, iKey, 0
22740 2c 20 26 72 65 73 29 3b 0a 20 20 61 73 73 65 72  , &res);.  asser
22750 74 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  t( rc==SQLITE_OK
22760 20 7c 7c 20 72 65 73 3d 3d 30 20 29 3b 0a 20 20   || res==0 );.  
22770 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74  pC->movetoTarget
22780 20 3d 20 69 4b 65 79 3b 20 20 2f 2a 20 55 73 65   = iKey;  /* Use
22790 64 20 62 79 20 4f 50 5f 44 65 6c 65 74 65 20 2a  d by OP_Delete *
227a0 2f 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  /.  pC->nullRow 
227b0 3d 20 30 3b 0a 20 20 70 43 2d 3e 63 61 63 68 65  = 0;.  pC->cache
227c0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
227d0 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 64 65 66 65  TALE;.  pC->defe
227e0 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b 0a  rredMoveto = 0;.
227f0 20 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65    VdbeBranchTake
22800 6e 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 70  n(res!=0,2);.  p
22810 43 2d 3e 73 65 65 6b 52 65 73 75 6c 74 20 3d 20  C->seekResult = 
22820 72 65 73 3b 0a 20 20 69 66 28 20 72 65 73 21 3d  res;.  if( res!=
22830 30 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28  0 ){.    assert(
22840 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29   rc==SQLITE_OK )
22850 3b 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70  ;.    if( pOp->p
22860 32 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 63  2==0 ){.      rc
22870 20 3d 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50   = SQLITE_CORRUP
22880 54 5f 42 4b 50 54 3b 0a 20 20 20 20 7d 65 6c 73  T_BKPT;.    }els
22890 65 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6a 75  e{.      goto ju
228a0 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 20 20 7d 0a  mp_to_p2;.    }.
228b0 20 20 7d 0a 20 20 69 66 28 20 72 63 20 29 20 67    }.  if( rc ) g
228c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
228d0 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b 3b  _error;.  break;
228e0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 53  .}../* Opcode: S
228f0 65 71 75 65 6e 63 65 20 50 31 20 50 32 20 2a 20  equence P1 P2 * 
22900 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22910 20 72 5b 50 32 5d 3d 63 75 72 73 6f 72 5b 50 31   r[P2]=cursor[P1
22920 5d 2e 63 74 72 2b 2b 0a 2a 2a 0a 2a 2a 20 46 69  ].ctr++.**.** Fi
22930 6e 64 20 74 68 65 20 6e 65 78 74 20 61 76 61 69  nd the next avai
22940 6c 61 62 6c 65 20 73 65 71 75 65 6e 63 65 20 6e  lable sequence n
22950 75 6d 62 65 72 20 66 6f 72 20 63 75 72 73 6f 72  umber for cursor
22960 20 50 31 2e 0a 2a 2a 20 57 72 69 74 65 20 74 68   P1..** Write th
22970 65 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65  e sequence numbe
22980 72 20 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20  r into register 
22990 50 32 2e 0a 2a 2a 20 54 68 65 20 73 65 71 75 65  P2..** The seque
229a0 6e 63 65 20 6e 75 6d 62 65 72 20 6f 6e 20 74 68  nce number on th
229b0 65 20 63 75 72 73 6f 72 20 69 73 20 69 6e 63 72  e cursor is incr
229c0 65 6d 65 6e 74 65 64 20 61 66 74 65 72 20 74 68  emented after th
229d0 69 73 0a 2a 2a 20 69 6e 73 74 72 75 63 74 69 6f  is.** instructio
229e0 6e 2e 20 20 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  n.  .*/.case OP_
229f0 53 65 71 75 65 6e 63 65 3a 20 7b 20 20 20 20 20  Sequence: {     
22a00 20 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f        /* out2 */
22a10 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e  .  assert( pOp->
22a20 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31  p1>=0 && pOp->p1
22a30 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20  <p->nCursor );. 
22a40 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70 43 73   assert( p->apCs
22a50 72 5b 70 4f 70 2d 3e 70 31 5d 21 3d 30 20 29 3b  r[pOp->p1]!=0 );
22a60 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 61 70  .  assert( p->ap
22a70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 2d 3e 65 43  Csr[pOp->p1]->eC
22a80 75 72 54 79 70 65 21 3d 43 55 52 54 59 50 45 5f  urType!=CURTYPE_
22a90 56 54 41 42 20 29 3b 0a 20 20 70 4f 75 74 20 3d  VTAB );.  pOut =
22aa0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
22ab0 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f 75 74 2d  p, pOp);.  pOut-
22ac0 3e 75 2e 69 20 3d 20 70 2d 3e 61 70 43 73 72 5b  >u.i = p->apCsr[
22ad0 70 4f 70 2d 3e 70 31 5d 2d 3e 73 65 71 43 6f 75  pOp->p1]->seqCou
22ae0 6e 74 2b 2b 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  nt++;.  break;.}
22af0 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65  .../* Opcode: Ne
22b00 77 52 6f 77 69 64 20 50 31 20 50 32 20 50 33 20  wRowid P1 P2 P3 
22b10 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
22b20 20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a   r[P2]=rowid.**.
22b30 2a 2a 20 47 65 74 20 61 20 6e 65 77 20 69 6e 74  ** Get a new int
22b40 65 67 65 72 20 72 65 63 6f 72 64 20 6e 75 6d 62  eger record numb
22b50 65 72 20 28 61 2e 6b 2e 61 20 22 72 6f 77 69 64  er (a.k.a "rowid
22b60 22 29 20 75 73 65 64 20 61 73 20 74 68 65 20 6b  ") used as the k
22b70 65 79 20 74 6f 20 61 20 74 61 62 6c 65 2e 0a 2a  ey to a table..*
22b80 2a 20 54 68 65 20 72 65 63 6f 72 64 20 6e 75 6d  * The record num
22b90 62 65 72 20 69 73 20 6e 6f 74 20 70 72 65 76 69  ber is not previ
22ba0 6f 75 73 6c 79 20 75 73 65 64 20 61 73 20 61 20  ously used as a 
22bb0 6b 65 79 20 69 6e 20 74 68 65 20 64 61 74 61 62  key in the datab
22bc0 61 73 65 0a 2a 2a 20 74 61 62 6c 65 20 74 68 61  ase.** table tha
22bd0 74 20 63 75 72 73 6f 72 20 50 31 20 70 6f 69 6e  t cursor P1 poin
22be0 74 73 20 74 6f 2e 20 20 54 68 65 20 6e 65 77 20  ts to.  The new 
22bf0 72 65 63 6f 72 64 20 6e 75 6d 62 65 72 20 69 73  record number is
22c00 20 77 72 69 74 74 65 6e 0a 2a 2a 20 77 72 69 74   written.** writ
22c10 74 65 6e 20 74 6f 20 72 65 67 69 73 74 65 72 20  ten to register 
22c20 50 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 3e  P2..**.** If P3>
22c30 30 20 74 68 65 6e 20 50 33 20 69 73 20 61 20 72  0 then P3 is a r
22c40 65 67 69 73 74 65 72 20 69 6e 20 74 68 65 20 72  egister in the r
22c50 6f 6f 74 20 66 72 61 6d 65 20 6f 66 20 74 68 69  oot frame of thi
22c60 73 20 56 44 42 45 20 74 68 61 74 20 68 6f 6c 64  s VDBE that hold
22c70 73 20 0a 2a 2a 20 74 68 65 20 6c 61 72 67 65 73  s .** the larges
22c80 74 20 70 72 65 76 69 6f 75 73 6c 79 20 67 65 6e  t previously gen
22c90 65 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75  erated record nu
22ca0 6d 62 65 72 2e 20 4e 6f 20 6e 65 77 20 72 65 63  mber. No new rec
22cb0 6f 72 64 20 6e 75 6d 62 65 72 73 20 61 72 65 0a  ord numbers are.
22cc0 2a 2a 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  ** allowed to be
22cd0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
22ce0 76 61 6c 75 65 2e 20 57 68 65 6e 20 74 68 69 73  value. When this
22cf0 20 76 61 6c 75 65 20 72 65 61 63 68 65 73 20 69   value reaches i
22d00 74 73 20 6d 61 78 69 6d 75 6d 2c 20 0a 2a 2a 20  ts maximum, .** 
22d10 61 6e 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 65  an SQLITE_FULL e
22d20 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74 65  rror is generate
22d30 64 2e 20 54 68 65 20 50 33 20 72 65 67 69 73 74  d. The P3 regist
22d40 65 72 20 69 73 20 75 70 64 61 74 65 64 20 77 69  er is updated wi
22d50 74 68 20 74 68 65 20 27 0a 2a 2a 20 67 65 6e 65  th the '.** gene
22d60 72 61 74 65 64 20 72 65 63 6f 72 64 20 6e 75 6d  rated record num
22d70 62 65 72 2e 20 54 68 69 73 20 50 33 20 6d 65 63  ber. This P3 mec
22d80 68 61 6e 69 73 6d 20 69 73 20 75 73 65 64 20 74  hanism is used t
22d90 6f 20 68 65 6c 70 20 69 6d 70 6c 65 6d 65 6e 74  o help implement
22da0 20 74 68 65 0a 2a 2a 20 41 55 54 4f 49 4e 43 52   the.** AUTOINCR
22db0 45 4d 45 4e 54 20 66 65 61 74 75 72 65 2e 0a 2a  EMENT feature..*
22dc0 2f 0a 63 61 73 65 20 4f 50 5f 4e 65 77 52 6f 77  /.case OP_NewRow
22dd0 69 64 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20  id: {           
22de0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 36 34  /* out2 */.  i64
22df0 20 76 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   v;             
22e00 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 77 20 72      /* The new r
22e10 6f 77 69 64 20 2a 2f 0a 20 20 56 64 62 65 43 75  owid */.  VdbeCu
22e20 72 73 6f 72 20 2a 70 43 3b 20 20 20 20 20 20 20  rsor *pC;       
22e30 20 2f 2a 20 43 75 72 73 6f 72 20 6f 66 20 74 61   /* Cursor of ta
22e40 62 6c 65 20 74 6f 20 67 65 74 20 74 68 65 20 6e  ble to get the n
22e50 65 77 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 6e  ew rowid */.  in
22e60 74 20 72 65 73 3b 20 20 20 20 20 20 20 20 20 20  t res;          
22e70 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 6f       /* Result o
22e80 66 20 61 6e 20 73 71 6c 69 74 65 33 42 74 72 65  f an sqlite3Btre
22e90 65 4c 61 73 74 28 29 20 2a 2f 0a 20 20 69 6e 74  eLast() */.  int
22ea0 20 63 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20   cnt;           
22eb0 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65 72 20 74      /* Counter t
22ec0 6f 20 6c 69 6d 69 74 20 74 68 65 20 6e 75 6d 62  o limit the numb
22ed0 65 72 20 6f 66 20 73 65 61 72 63 68 65 73 20 2a  er of searches *
22ee0 2f 0a 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20  /.  Mem *pMem;  
22ef0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
22f00 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 6c  gister holding l
22f10 61 72 67 65 73 74 20 72 6f 77 69 64 20 66 6f 72  argest rowid for
22f20 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a   AUTOINCREMENT *
22f30 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a 70  /.  VdbeFrame *p
22f40 46 72 61 6d 65 3b 20 20 20 20 20 2f 2a 20 52 6f  Frame;     /* Ro
22f50 6f 74 20 66 72 61 6d 65 20 6f 66 20 56 44 42 45  ot frame of VDBE
22f60 20 2a 2f 0a 0a 20 20 76 20 3d 20 30 3b 0a 20 20   */..  v = 0;.  
22f70 72 65 73 20 3d 20 30 3b 0a 20 20 70 4f 75 74 20  res = 0;.  pOut 
22f80 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
22f90 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
22fa0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
22fb0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
22fc0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
22fd0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
22fe0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
22ff0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
23000 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  C->eCurType==CUR
23010 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20  TYPE_BTREE );.  
23020 61 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70  assert( pC->uc.p
23030 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 7b  Cursor!=0 );.  {
23040 0a 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74  .    /* The next
23050 20 72 6f 77 69 64 20 6f 72 20 72 65 63 6f 72 64   rowid or record
23060 20 6e 75 6d 62 65 72 20 28 64 69 66 66 65 72 65   number (differe
23070 6e 74 20 74 65 72 6d 73 20 66 6f 72 20 74 68 65  nt terms for the
23080 20 73 61 6d 65 0a 20 20 20 20 2a 2a 20 74 68 69   same.    ** thi
23090 6e 67 29 20 69 73 20 6f 62 74 61 69 6e 65 64 20  ng) is obtained 
230a0 69 6e 20 61 20 74 77 6f 2d 73 74 65 70 20 61 6c  in a two-step al
230b0 67 6f 72 69 74 68 6d 2e 0a 20 20 20 20 2a 2a 0a  gorithm..    **.
230c0 20 20 20 20 2a 2a 20 46 69 72 73 74 20 77 65 20      ** First we 
230d0 61 74 74 65 6d 70 74 20 74 6f 20 66 69 6e 64 20  attempt to find 
230e0 74 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73  the largest exis
230f0 74 69 6e 67 20 72 6f 77 69 64 20 61 6e 64 20 61  ting rowid and a
23100 64 64 20 6f 6e 65 0a 20 20 20 20 2a 2a 20 74 6f  dd one.    ** to
23110 20 74 68 61 74 2e 20 20 42 75 74 20 69 66 20 74   that.  But if t
23120 68 65 20 6c 61 72 67 65 73 74 20 65 78 69 73 74  he largest exist
23130 69 6e 67 20 72 6f 77 69 64 20 69 73 20 61 6c 72  ing rowid is alr
23140 65 61 64 79 20 74 68 65 20 6d 61 78 69 6d 75 6d  eady the maximum
23150 0a 20 20 20 20 2a 2a 20 70 6f 73 69 74 69 76 65  .    ** positive
23160 20 69 6e 74 65 67 65 72 2c 20 77 65 20 68 61 76   integer, we hav
23170 65 20 74 6f 20 66 61 6c 6c 20 74 68 72 6f 75 67  e to fall throug
23180 68 20 74 6f 20 74 68 65 20 73 65 63 6f 6e 64 0a  h to the second.
23190 20 20 20 20 2a 2a 20 70 72 6f 62 61 62 69 6c 69      ** probabili
231a0 73 74 69 63 20 61 6c 67 6f 72 69 74 68 6d 0a 20  stic algorithm. 
231b0 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 54 68 65     **.    ** The
231c0 20 73 65 63 6f 6e 64 20 61 6c 67 6f 72 69 74 68   second algorith
231d0 6d 20 69 73 20 74 6f 20 73 65 6c 65 63 74 20 61  m is to select a
231e0 20 72 6f 77 69 64 20 61 74 20 72 61 6e 64 6f 6d   rowid at random
231f0 20 61 6e 64 20 73 65 65 20 69 66 0a 20 20 20 20   and see if.    
23200 2a 2a 20 69 74 20 61 6c 72 65 61 64 79 20 65 78  ** it already ex
23210 69 73 74 73 20 69 6e 20 74 68 65 20 74 61 62 6c  ists in the tabl
23220 65 2e 20 20 49 66 20 69 74 20 64 6f 65 73 20 6e  e.  If it does n
23230 6f 74 20 65 78 69 73 74 2c 20 77 65 20 68 61 76  ot exist, we hav
23240 65 0a 20 20 20 20 2a 2a 20 73 75 63 63 65 65 64  e.    ** succeed
23250 65 64 2e 20 20 49 66 20 74 68 65 20 72 61 6e 64  ed.  If the rand
23260 6f 6d 20 72 6f 77 69 64 20 64 6f 65 73 20 65 78  om rowid does ex
23270 69 73 74 2c 20 77 65 20 73 65 6c 65 63 74 20 61  ist, we select a
23280 20 6e 65 77 20 6f 6e 65 0a 20 20 20 20 2a 2a 20   new one.    ** 
23290 61 6e 64 20 74 72 79 20 61 67 61 69 6e 2c 20 75  and try again, u
232a0 70 20 74 6f 20 31 30 30 20 74 69 6d 65 73 2e 0a  p to 100 times..
232b0 20 20 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72      */.    asser
232c0 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  t( pC->isTable )
232d0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
232e0 5f 33 32 42 49 54 5f 52 4f 57 49 44 0a 23 20 20  _32BIT_ROWID.#  
232f0 20 64 65 66 69 6e 65 20 4d 41 58 5f 52 4f 57 49   define MAX_ROWI
23300 44 20 30 78 37 66 66 66 66 66 66 66 0a 23 65 6c  D 0x7fffffff.#el
23310 73 65 0a 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63  se.    /* Some c
23320 6f 6d 70 69 6c 65 72 73 20 63 6f 6d 70 6c 61 69  ompilers complai
23330 6e 20 61 62 6f 75 74 20 63 6f 6e 73 74 61 6e 74  n about constant
23340 73 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 30 78  s of the form 0x
23350 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66 66  7fffffffffffffff
23360 2e 0a 20 20 20 20 2a 2a 20 4f 74 68 65 72 73 20  ..    ** Others 
23370 63 6f 6d 70 6c 61 69 6e 20 61 62 6f 75 74 20 30  complain about 0
23380 78 37 66 66 66 66 66 66 66 66 66 66 66 66 66 66  x7ffffffffffffff
23390 66 66 4c 4c 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  ffLL.  The follo
233a0 77 69 6e 67 20 6d 61 63 72 6f 20 73 65 65 6d 73  wing macro seems
233b0 0a 20 20 20 20 2a 2a 20 74 6f 20 70 72 6f 76 69  .    ** to provi
233c0 64 65 20 74 68 65 20 63 6f 6e 73 74 61 6e 74 20  de the constant 
233d0 77 68 69 6c 65 20 6d 61 6b 69 6e 67 20 61 6c 6c  while making all
233e0 20 63 6f 6d 70 69 6c 65 72 73 20 68 61 70 70 79   compilers happy
233f0 2e 0a 20 20 20 20 2a 2f 0a 23 20 20 20 64 65 66  ..    */.#   def
23400 69 6e 65 20 4d 41 58 5f 52 4f 57 49 44 20 20 28  ine MAX_ROWID  (
23410 69 36 34 29 28 20 28 28 28 75 36 34 29 30 78 37  i64)( (((u64)0x7
23420 66 66 66 66 66 66 66 29 3c 3c 33 32 29 20 7c 20  fffffff)<<32) | 
23430 28 75 36 34 29 30 78 66 66 66 66 66 66 66 66 20  (u64)0xffffffff 
23440 29 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 69 66  ).#endif..    if
23450 28 20 21 70 43 2d 3e 75 73 65 52 61 6e 64 6f 6d  ( !pC->useRandom
23460 52 6f 77 69 64 20 29 7b 0a 20 20 20 20 20 20 72  Rowid ){.      r
23470 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
23480 4c 61 73 74 28 70 43 2d 3e 75 63 2e 70 43 75 72  Last(pC->uc.pCur
23490 73 6f 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  sor, &res);.    
234a0 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
234b0 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 67  _OK ){.        g
234c0 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
234d0 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d 0a  _error;.      }.
234e0 20 20 20 20 20 20 69 66 28 20 72 65 73 20 29 7b        if( res ){
234f0 0a 20 20 20 20 20 20 20 20 76 20 3d 20 31 3b 20  .        v = 1; 
23500 20 20 2f 2a 20 49 4d 50 3a 20 52 2d 36 31 39 31    /* IMP: R-6191
23510 34 2d 34 38 30 37 34 20 2a 2f 0a 20 20 20 20 20  4-48074 */.     
23520 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
23530 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 42  assert( sqlite3B
23540 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c 69  treeCursorIsVali
23550 64 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  d(pC->uc.pCursor
23560 29 20 29 3b 0a 20 20 20 20 20 20 20 20 76 20 3d  ) );.        v =
23570 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74   sqlite3BtreeInt
23580 65 67 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70  egerKey(pC->uc.p
23590 43 75 72 73 6f 72 29 3b 0a 20 20 20 20 20 20 20  Cursor);.       
235a0 20 69 66 28 20 76 3e 3d 4d 41 58 5f 52 4f 57 49   if( v>=MAX_ROWI
235b0 44 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  D ){.          p
235c0 43 2d 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69  C->useRandomRowi
235d0 64 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d  d = 1;.        }
235e0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
235f0 76 2b 2b 3b 20 20 20 2f 2a 20 49 4d 50 3a 20 52  v++;   /* IMP: R
23600 2d 32 39 35 33 38 2d 33 34 39 38 37 20 2a 2f 0a  -29538-34987 */.
23610 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
23620 7d 0a 20 20 20 20 7d 0a 0a 23 69 66 6e 64 65 66  }.    }..#ifndef
23630 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
23640 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 20 20 69  OINCREMENT.    i
23650 66 28 20 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20  f( pOp->p3 ){.  
23660 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68      /* Assert th
23670 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64  at P3 is a valid
23680 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f   memory cell. */
23690 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70  .      assert( p
236a0 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20 20 20  Op->p3>0 );.    
236b0 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d 65 20    if( p->pFrame 
236c0 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70  ){.        for(p
236d0 46 72 61 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b  Frame=p->pFrame;
236e0 20 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74   pFrame->pParent
236f0 3b 20 70 46 72 61 6d 65 3d 70 46 72 61 6d 65 2d  ; pFrame=pFrame-
23700 3e 70 50 61 72 65 6e 74 29 3b 0a 20 20 20 20 20  >pParent);.     
23710 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61     /* Assert tha
23720 74 20 50 33 20 69 73 20 61 20 76 61 6c 69 64 20  t P3 is a valid 
23730 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a 2f 0a  memory cell. */.
23740 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20          assert( 
23750 70 4f 70 2d 3e 70 33 3c 3d 70 46 72 61 6d 65 2d  pOp->p3<=pFrame-
23760 3e 6e 4d 65 6d 20 29 3b 0a 20 20 20 20 20 20 20  >nMem );.       
23770 20 70 4d 65 6d 20 3d 20 26 70 46 72 61 6d 65 2d   pMem = &pFrame-
23780 3e 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a  >aMem[pOp->p3];.
23790 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
237a0 20 20 20 20 20 2f 2a 20 41 73 73 65 72 74 20 74       /* Assert t
237b0 68 61 74 20 50 33 20 69 73 20 61 20 76 61 6c 69  hat P3 is a vali
237c0 64 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 2e 20 2a  d memory cell. *
237d0 2f 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  /.        assert
237e0 28 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  ( pOp->p3<=(p->n
237f0 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
23800 6f 72 29 20 29 3b 0a 20 20 20 20 20 20 20 20 70  or) );.        p
23810 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Mem = &aMem[pOp-
23820 3e 70 33 5d 3b 0a 20 20 20 20 20 20 20 20 6d 65  >p3];.        me
23830 6d 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70  mAboutToChange(p
23840 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 7d  , pMem);.      }
23850 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d  .      assert( m
23860 65 6d 49 73 56 61 6c 69 64 28 70 4d 65 6d 29 20  emIsValid(pMem) 
23870 29 3b 0a 0a 20 20 20 20 20 20 52 45 47 49 53 54  );..      REGIST
23880 45 52 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33  ER_TRACE(pOp->p3
23890 2c 20 70 4d 65 6d 29 3b 0a 20 20 20 20 20 20 73  , pMem);.      s
238a0 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74  qlite3VdbeMemInt
238b0 65 67 65 72 69 66 79 28 70 4d 65 6d 29 3b 0a 20  egerify(pMem);. 
238c0 20 20 20 20 20 61 73 73 65 72 74 28 20 28 70 4d       assert( (pM
238d0 65 6d 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  em->flags & MEM_
238e0 49 6e 74 29 21 3d 30 20 29 3b 20 20 2f 2a 20 6d  Int)!=0 );  /* m
238f0 65 6d 28 50 33 29 20 68 6f 6c 64 73 20 61 6e 20  em(P3) holds an 
23900 69 6e 74 65 67 65 72 20 2a 2f 0a 20 20 20 20 20  integer */.     
23910 20 69 66 28 20 70 4d 65 6d 2d 3e 75 2e 69 3d 3d   if( pMem->u.i==
23920 4d 41 58 5f 52 4f 57 49 44 20 7c 7c 20 70 43 2d  MAX_ROWID || pC-
23930 3e 75 73 65 52 61 6e 64 6f 6d 52 6f 77 69 64 20  >useRandomRowid 
23940 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23950 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23960 2a 20 49 4d 50 3a 20 52 2d 31 37 38 31 37 2d 30  * IMP: R-17817-0
23970 30 36 33 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  0630 */.        
23980 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23990 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
239a0 0a 20 20 20 20 20 20 69 66 28 20 76 3c 70 4d 65  .      if( v<pMe
239b0 6d 2d 3e 75 2e 69 2b 31 20 29 7b 0a 20 20 20 20  m->u.i+1 ){.    
239c0 20 20 20 20 76 20 3d 20 70 4d 65 6d 2d 3e 75 2e      v = pMem->u.
239d0 69 20 2b 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20  i + 1;.      }. 
239e0 20 20 20 20 20 70 4d 65 6d 2d 3e 75 2e 69 20 3d       pMem->u.i =
239f0 20 76 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66   v;.    }.#endif
23a00 0a 20 20 20 20 69 66 28 20 70 43 2d 3e 75 73 65  .    if( pC->use
23a10 52 61 6e 64 6f 6d 52 6f 77 69 64 20 29 7b 0a 20  RandomRowid ){. 
23a20 20 20 20 20 20 2f 2a 20 49 4d 50 4c 45 4d 45 4e       /* IMPLEMEN
23a30 54 41 54 49 4f 4e 2d 4f 46 3a 20 52 2d 30 37 36  TATION-OF: R-076
23a40 37 37 2d 34 31 38 38 31 20 49 66 20 74 68 65 20  77-41881 If the 
23a50 6c 61 72 67 65 73 74 20 52 4f 57 49 44 20 69 73  largest ROWID is
23a60 20 65 71 75 61 6c 20 74 6f 20 74 68 65 0a 20 20   equal to the.  
23a70 20 20 20 20 2a 2a 20 6c 61 72 67 65 73 74 20 70      ** largest p
23a80 6f 73 73 69 62 6c 65 20 69 6e 74 65 67 65 72 20  ossible integer 
23a90 28 39 32 32 33 33 37 32 30 33 36 38 35 34 37 37  (922337203685477
23aa0 35 38 30 37 29 20 74 68 65 6e 20 74 68 65 20 64  5807) then the d
23ab0 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 2a 2a  atabase.      **
23ac0 20 65 6e 67 69 6e 65 20 73 74 61 72 74 73 20 70   engine starts p
23ad0 69 63 6b 69 6e 67 20 70 6f 73 69 74 69 76 65 20  icking positive 
23ae0 63 61 6e 64 69 64 61 74 65 20 52 4f 57 49 44 73  candidate ROWIDs
23af0 20 61 74 20 72 61 6e 64 6f 6d 20 75 6e 74 69 6c   at random until
23b00 0a 20 20 20 20 20 20 2a 2a 20 69 74 20 66 69 6e  .      ** it fin
23b10 64 73 20 6f 6e 65 20 74 68 61 74 20 69 73 20 6e  ds one that is n
23b20 6f 74 20 70 72 65 76 69 6f 75 73 6c 79 20 75 73  ot previously us
23b30 65 64 2e 20 2a 2f 0a 20 20 20 20 20 20 61 73 73  ed. */.      ass
23b40 65 72 74 28 20 70 4f 70 2d 3e 70 33 3d 3d 30 20  ert( pOp->p3==0 
23b50 29 3b 20 20 2f 2a 20 57 65 20 63 61 6e 6e 6f 74  );  /* We cannot
23b60 20 62 65 20 69 6e 20 72 61 6e 64 6f 6d 20 72 6f   be in random ro
23b70 77 69 64 20 6d 6f 64 65 20 69 66 20 74 68 69 73  wid mode if this
23b80 20 69 73 0a 20 20 20 20 20 20 20 20 20 20 20 20   is.            
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 2a 2a 20 61 6e 20 41 55 54 4f 49 4e 43 52 45   ** an AUTOINCRE
23bb0 4d 45 4e 54 20 74 61 62 6c 65 2e 20 2a 2f 0a 20  MENT table. */. 
23bc0 20 20 20 20 20 63 6e 74 20 3d 20 30 3b 0a 20 20       cnt = 0;.  
23bd0 20 20 20 20 64 6f 7b 0a 20 20 20 20 20 20 20 20      do{.        
23be0 73 71 6c 69 74 65 33 5f 72 61 6e 64 6f 6d 6e 65  sqlite3_randomne
23bf0 73 73 28 73 69 7a 65 6f 66 28 76 29 2c 20 26 76  ss(sizeof(v), &v
23c00 29 3b 0a 20 20 20 20 20 20 20 20 76 20 26 3d 20  );.        v &= 
23c10 28 4d 41 58 5f 52 4f 57 49 44 3e 3e 31 29 3b 20  (MAX_ROWID>>1); 
23c20 76 2b 2b 3b 20 20 2f 2a 20 45 6e 73 75 72 65 20  v++;  /* Ensure 
23c30 74 68 61 74 20 76 20 69 73 20 67 72 65 61 74 65  that v is greate
23c40 72 20 74 68 61 6e 20 7a 65 72 6f 20 2a 2f 0a 20  r than zero */. 
23c50 20 20 20 20 20 7d 77 68 69 6c 65 28 20 20 28 28       }while(  ((
23c60 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
23c70 65 4d 6f 76 65 74 6f 55 6e 70 61 63 6b 65 64 28  eMovetoUnpacked(
23c80 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c 20  pC->uc.pCursor, 
23c90 30 2c 20 28 75 36 34 29 76 2c 0a 20 20 20 20 20  0, (u64)v,.     
23ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 30 2c 20 26              0, &
23cd0 72 65 73 29 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  res))==SQLITE_OK
23ce0 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 26 26  ).            &&
23cf0 20 28 72 65 73 3d 3d 30 29 0a 20 20 20 20 20 20   (res==0).      
23d00 20 20 20 20 20 20 26 26 20 28 2b 2b 63 6e 74 3c        && (++cnt<
23d10 31 30 30 29 29 3b 0a 20 20 20 20 20 20 69 66 28  100));.      if(
23d20 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
23d30 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
23d40 20 20 20 20 20 69 66 28 20 72 65 73 3d 3d 30 20       if( res==0 
23d50 29 7b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  ){.        rc = 
23d60 53 51 4c 49 54 45 5f 46 55 4c 4c 3b 20 20 20 2f  SQLITE_FULL;   /
23d70 2a 20 49 4d 50 3a 20 52 2d 33 38 32 31 39 2d 35  * IMP: R-38219-5
23d80 33 30 30 32 20 2a 2f 0a 20 20 20 20 20 20 20 20  3002 */.        
23d90 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
23da0 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 20 20 7d  o_error;.      }
23db0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 76  .      assert( v
23dc0 3e 30 20 29 3b 20 20 2f 2a 20 45 56 3a 20 52 2d  >0 );  /* EV: R-
23dd0 34 30 38 31 32 2d 30 33 35 37 30 20 2a 2f 0a 20  40812-03570 */. 
23de0 20 20 20 7d 0a 20 20 20 20 70 43 2d 3e 64 65 66     }.    pC->def
23df0 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20 30 3b  erredMoveto = 0;
23e00 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65 53 74  .    pC->cacheSt
23e10 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41  atus = CACHE_STA
23e20 4c 45 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d 3e  LE;.  }.  pOut->
23e30 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72 65 61 6b  u.i = v;.  break
23e40 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
23e50 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
23e60 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
23e70 73 3a 20 69 6e 74 6b 65 79 3d 72 5b 50 33 5d 20  s: intkey=r[P3] 
23e80 64 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a  data=r[P2].**.**
23e90 20 57 72 69 74 65 20 61 6e 20 65 6e 74 72 79 20   Write an entry 
23ea0 69 6e 74 6f 20 74 68 65 20 74 61 62 6c 65 20 6f  into the table o
23eb0 66 20 63 75 72 73 6f 72 20 50 31 2e 20 20 41 20  f cursor P1.  A 
23ec0 6e 65 77 20 65 6e 74 72 79 20 69 73 0a 2a 2a 20  new entry is.** 
23ed0 63 72 65 61 74 65 64 20 69 66 20 69 74 20 64 6f  created if it do
23ee0 65 73 6e 27 74 20 61 6c 72 65 61 64 79 20 65 78  esn't already ex
23ef0 69 73 74 20 6f 72 20 74 68 65 20 64 61 74 61 20  ist or the data 
23f00 66 6f 72 20 61 6e 20 65 78 69 73 74 69 6e 67 0a  for an existing.
23f10 2a 2a 20 65 6e 74 72 79 20 69 73 20 6f 76 65 72  ** entry is over
23f20 77 72 69 74 74 65 6e 2e 20 20 54 68 65 20 64 61  written.  The da
23f30 74 61 20 69 73 20 74 68 65 20 76 61 6c 75 65 20  ta is the value 
23f40 4d 45 4d 5f 42 6c 6f 62 20 73 74 6f 72 65 64 20  MEM_Blob stored 
23f50 69 6e 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 6e  in register.** n
23f60 75 6d 62 65 72 20 50 32 2e 20 54 68 65 20 6b 65  umber P2. The ke
23f70 79 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72  y is stored in r
23f80 65 67 69 73 74 65 72 20 50 33 2e 20 54 68 65 20  egister P3. The 
23f90 6b 65 79 20 6d 75 73 74 0a 2a 2a 20 62 65 20 61  key must.** be a
23fa0 20 4d 45 4d 5f 49 6e 74 2e 0a 2a 2a 0a 2a 2a 20   MEM_Int..**.** 
23fb0 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43  If the OPFLAG_NC
23fc0 48 41 4e 47 45 20 66 6c 61 67 20 6f 66 20 50 35  HANGE flag of P5
23fd0 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 74 68   is set, then th
23fe0 65 20 72 6f 77 20 63 68 61 6e 67 65 20 63 6f 75  e row change cou
23ff0 6e 74 20 69 73 0a 2a 2a 20 69 6e 63 72 65 6d 65  nt is.** increme
24000 6e 74 65 64 20 28 6f 74 68 65 72 77 69 73 65 20  nted (otherwise 
24010 6e 6f 74 29 2e 20 20 49 66 20 74 68 65 20 4f 50  not).  If the OP
24020 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 66  FLAG_LASTROWID f
24030 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
24040 2c 0a 2a 2a 20 74 68 65 6e 20 72 6f 77 69 64 20  ,.** then rowid 
24050 69 73 20 73 74 6f 72 65 64 20 66 6f 72 20 73 75  is stored for su
24060 62 73 65 71 75 65 6e 74 20 72 65 74 75 72 6e 20  bsequent return 
24070 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
24080 33 5f 6c 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f  3_last_insert_ro
24090 77 69 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 28  wid() function (
240a0 6f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  otherwise it is 
240b0 75 6e 6d 6f 64 69 66 69 65 64 29 2e 0a 2a 2a 0a  unmodified)..**.
240c0 2a 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47  ** If the OPFLAG
240d0 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66  _USESEEKRESULT f
240e0 6c 61 67 20 6f 66 20 50 35 20 69 73 20 73 65 74  lag of P5 is set
240f0 2c 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  , the implementa
24100 74 69 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75  tion might.** ru
24110 6e 20 66 61 73 74 65 72 20 62 79 20 61 76 6f 69  n faster by avoi
24120 64 69 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73  ding an unnecess
24130 61 72 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73  ary seek on curs
24140 6f 72 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c  or P1.  However,
24150 0a 2a 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55  .** the OPFLAG_U
24160 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
24170 67 20 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73  g must only be s
24180 65 74 20 69 66 20 74 68 65 72 65 20 68 61 76 65  et if there have
24190 20 62 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a   been no prior.*
241a0 2a 20 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63  * seeks on the c
241b0 75 72 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20  ursor or if the 
241c0 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b  most recent seek
241d0 20 75 73 65 64 20 61 20 6b 65 79 20 65 71 75 61   used a key equa
241e0 6c 20 74 6f 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 49  l to P3..**.** I
241f0 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 49 53 55  f the OPFLAG_ISU
24200 50 44 41 54 45 20 66 6c 61 67 20 69 73 20 73 65  PDATE flag is se
24210 74 2c 20 74 68 65 6e 20 74 68 69 73 20 6f 70 63  t, then this opc
24220 6f 64 65 20 69 73 20 70 61 72 74 20 6f 66 20 61  ode is part of a
24230 6e 0a 2a 2a 20 55 50 44 41 54 45 20 6f 70 65 72  n.** UPDATE oper
24240 61 74 69 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73  ation.  Otherwis
24250 65 20 28 69 66 20 74 68 65 20 66 6c 61 67 20 69  e (if the flag i
24260 73 20 63 6c 65 61 72 29 20 74 68 65 6e 20 74 68  s clear) then th
24270 69 73 20 6f 70 63 6f 64 65 0a 2a 2a 20 69 73 20  is opcode.** is 
24280 70 61 72 74 20 6f 66 20 61 6e 20 49 4e 53 45 52  part of an INSER
24290 54 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 54 68  T operation.  Th
242a0 65 20 64 69 66 66 65 72 65 6e 63 65 20 69 73 20  e difference is 
242b0 6f 6e 6c 79 20 69 6d 70 6f 72 74 61 6e 74 20 74  only important t
242c0 6f 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20  o.** the update 
242d0 68 6f 6f 6b 2e 0a 2a 2a 0a 2a 2a 20 50 61 72 61  hook..**.** Para
242e0 6d 65 74 65 72 20 50 34 20 6d 61 79 20 70 6f 69  meter P4 may poi
242f0 6e 74 20 74 6f 20 61 20 54 61 62 6c 65 20 73 74  nt to a Table st
24300 72 75 63 74 75 72 65 2c 20 6f 72 20 6d 61 79 20  ructure, or may 
24310 62 65 20 4e 55 4c 4c 2e 20 49 66 20 69 74 20 69  be NULL. If it i
24320 73 20 0a 2a 2a 20 6e 6f 74 20 4e 55 4c 4c 2c 20  s .** not NULL, 
24330 74 68 65 6e 20 74 68 65 20 75 70 64 61 74 65 2d  then the update-
24340 68 6f 6f 6b 20 28 73 71 6c 69 74 65 33 2e 78 55  hook (sqlite3.xU
24350 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 20 69  pdateCallback) i
24360 73 20 69 6e 76 6f 6b 65 64 20 0a 2a 2a 20 66 6f  s invoked .** fo
24370 6c 6c 6f 77 69 6e 67 20 61 20 73 75 63 63 65 73  llowing a succes
24380 73 66 75 6c 20 69 6e 73 65 72 74 2e 0a 2a 2a 0a  sful insert..**.
24390 2a 2a 20 28 57 41 52 4e 49 4e 47 2f 54 4f 44 4f  ** (WARNING/TODO
243a0 3a 20 49 66 20 50 31 20 69 73 20 61 20 70 73 65  : If P1 is a pse
243b0 75 64 6f 2d 63 75 72 73 6f 72 20 61 6e 64 20 50  udo-cursor and P
243c0 32 20 69 73 20 64 79 6e 61 6d 69 63 61 6c 6c 79  2 is dynamically
243d0 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20 74  .** allocated, t
243e0 68 65 6e 20 6f 77 6e 65 72 73 68 69 70 20 6f 66  hen ownership of
243f0 20 50 32 20 69 73 20 74 72 61 6e 73 66 65 72 72   P2 is transferr
24400 65 64 20 74 6f 20 74 68 65 20 70 73 65 75 64 6f  ed to the pseudo
24410 2d 63 75 72 73 6f 72 0a 2a 2a 20 61 6e 64 20 72  -cursor.** and r
24420 65 67 69 73 74 65 72 20 50 32 20 62 65 63 6f 6d  egister P2 becom
24430 65 73 20 65 70 68 65 6d 65 72 61 6c 2e 20 20 49  es ephemeral.  I
24440 66 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 20  f the cursor is 
24450 63 68 61 6e 67 65 64 2c 20 74 68 65 0a 2a 2a 20  changed, the.** 
24460 76 61 6c 75 65 20 6f 66 20 72 65 67 69 73 74 65  value of registe
24470 72 20 50 32 20 77 69 6c 6c 20 74 68 65 6e 20 63  r P2 will then c
24480 68 61 6e 67 65 2e 20 20 4d 61 6b 65 20 73 75 72  hange.  Make sur
24490 65 20 74 68 69 73 20 64 6f 65 73 20 6e 6f 74 0a  e this does not.
244a0 2a 2a 20 63 61 75 73 65 20 61 6e 79 20 70 72 6f  ** cause any pro
244b0 62 6c 65 6d 73 2e 29 0a 2a 2a 0a 2a 2a 20 54 68  blems.).**.** Th
244c0 69 73 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 6f  is instruction o
244d0 6e 6c 79 20 77 6f 72 6b 73 20 6f 6e 20 74 61 62  nly works on tab
244e0 6c 65 73 2e 20 20 54 68 65 20 65 71 75 69 76 61  les.  The equiva
244f0 6c 65 6e 74 20 69 6e 73 74 72 75 63 74 69 6f 6e  lent instruction
24500 0a 2a 2a 20 66 6f 72 20 69 6e 64 69 63 65 73 20  .** for indices 
24510 69 73 20 4f 50 5f 49 64 78 49 6e 73 65 72 74 2e  is OP_IdxInsert.
24520 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49  .*/./* Opcode: I
24530 6e 73 65 72 74 49 6e 74 20 50 31 20 50 32 20 50  nsertInt P1 P2 P
24540 33 20 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70  3 P4 P5.** Synop
24550 73 69 73 3a 20 69 6e 74 6b 65 79 3d 50 33 20 64  sis: intkey=P3 d
24560 61 74 61 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  ata=r[P2].**.** 
24570 54 68 69 73 20 77 6f 72 6b 73 20 65 78 61 63 74  This works exact
24580 6c 79 20 6c 69 6b 65 20 4f 50 5f 49 6e 73 65 72  ly like OP_Inser
24590 74 20 65 78 63 65 70 74 20 74 68 61 74 20 74 68  t except that th
245a0 65 20 6b 65 79 20 69 73 20 74 68 65 0a 2a 2a 20  e key is the.** 
245b0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 50 33  integer value P3
245c0 2c 20 6e 6f 74 20 74 68 65 20 76 61 6c 75 65 20  , not the value 
245d0 6f 66 20 74 68 65 20 69 6e 74 65 67 65 72 20 73  of the integer s
245e0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
245f0 72 20 50 33 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  r P3..*/.case OP
24600 5f 49 6e 73 65 72 74 3a 20 0a 63 61 73 65 20 4f  _Insert: .case O
24610 50 5f 49 6e 73 65 72 74 49 6e 74 3a 20 7b 0a 20  P_InsertInt: {. 
24620 20 4d 65 6d 20 2a 70 44 61 74 61 3b 20 20 20 20   Mem *pData;    
24630 20 20 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68     /* MEM cell h
24640 6f 6c 64 69 6e 67 20 64 61 74 61 20 66 6f 72 20  olding data for 
24650 74 68 65 20 72 65 63 6f 72 64 20 74 6f 20 62 65  the record to be
24660 20 69 6e 73 65 72 74 65 64 20 2a 2f 0a 20 20 4d   inserted */.  M
24670 65 6d 20 2a 70 4b 65 79 3b 20 20 20 20 20 20 20  em *pKey;       
24680 20 2f 2a 20 4d 45 4d 20 63 65 6c 6c 20 68 6f 6c   /* MEM cell hol
24690 64 69 6e 67 20 6b 65 79 20 20 66 6f 72 20 74 68  ding key  for th
246a0 65 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 56 64  e record */.  Vd
246b0 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
246c0 2f 2a 20 43 75 72 73 6f 72 20 74 6f 20 74 61 62  /* Cursor to tab
246d0 6c 65 20 69 6e 74 6f 20 77 68 69 63 68 20 69 6e  le into which in
246e0 73 65 72 74 20 69 73 20 77 72 69 74 74 65 6e 20  sert is written 
246f0 2a 2f 0a 20 20 69 6e 74 20 73 65 65 6b 52 65 73  */.  int seekRes
24700 75 6c 74 3b 20 20 20 2f 2a 20 52 65 73 75 6c 74  ult;   /* Result
24710 20 6f 66 20 70 72 69 6f 72 20 73 65 65 6b 20 6f   of prior seek o
24720 72 20 30 20 69 66 20 6e 6f 20 55 53 45 53 45 45  r 0 if no USESEE
24730 4b 52 45 53 55 4c 54 20 66 6c 61 67 20 2a 2f 0a  KRESULT flag */.
24740 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
24750 62 3b 20 20 2f 2a 20 64 61 74 61 62 61 73 65 20  b;  /* database 
24760 6e 61 6d 65 20 2d 20 75 73 65 64 20 62 79 20 74  name - used by t
24770 68 65 20 75 70 64 61 74 65 20 68 6f 6f 6b 20 2a  he update hook *
24780 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
24790 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 73        /* Table s
247a0 74 72 75 63 74 75 72 65 20 2d 20 75 73 65 64 20  tructure - used 
247b0 62 79 20 75 70 64 61 74 65 20 61 6e 64 20 70 72  by update and pr
247c0 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b 73 20 2a  e-update hooks *
247d0 2f 0a 20 20 69 6e 74 20 6f 70 3b 20 20 20 20 20  /.  int op;     
247e0 20 20 20 20 20 20 2f 2a 20 4f 70 63 6f 64 65 20        /* Opcode 
247f0 66 6f 72 20 75 70 64 61 74 65 20 68 6f 6f 6b 3a  for update hook:
24800 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20 6f   SQLITE_UPDATE o
24810 72 20 53 51 4c 49 54 45 5f 49 4e 53 45 52 54 20  r SQLITE_INSERT 
24820 2a 2f 0a 20 20 42 74 72 65 65 50 61 79 6c 6f 61  */.  BtreePayloa
24830 64 20 78 3b 20 20 20 2f 2a 20 50 61 79 6c 6f 61  d x;   /* Payloa
24840 64 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64  d to be inserted
24850 20 2a 2f 0a 0a 20 20 6f 70 20 3d 20 30 3b 0a 20   */..  op = 0;. 
24860 20 70 44 61 74 61 20 3d 20 26 61 4d 65 6d 5b 70   pData = &aMem[p
24870 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73 65 72  Op->p2];.  asser
24880 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
24890 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
248a0 73 6f 72 20 29 3b 0a 20 20 61 73 73 65 72 74 28  sor );.  assert(
248b0 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 44 61 74   memIsValid(pDat
248c0 61 29 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  a) );.  pC = p->
248d0 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
248e0 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
248f0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d  );.  assert( pC-
24900 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
24910 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73  PE_BTREE );.  as
24920 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75  sert( pC->uc.pCu
24930 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73  rsor!=0 );.  ass
24940 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c 65  ert( pC->isTable
24950 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
24960 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
24970 42 4c 45 20 7c 7c 20 70 4f 70 2d 3e 70 34 74 79  BLE || pOp->p4ty
24980 70 65 3e 3d 50 34 5f 53 54 41 54 49 43 20 29 3b  pe>=P4_STATIC );
24990 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
249a0 45 28 70 4f 70 2d 3e 70 32 2c 20 70 44 61 74 61  E(pOp->p2, pData
249b0 29 3b 0a 0a 20 20 69 66 28 20 70 4f 70 2d 3e 6f  );..  if( pOp->o
249c0 70 63 6f 64 65 3d 3d 4f 50 5f 49 6e 73 65 72 74  pcode==OP_Insert
249d0 20 29 7b 0a 20 20 20 20 70 4b 65 79 20 3d 20 26   ){.    pKey = &
249e0 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20  aMem[pOp->p3];. 
249f0 20 20 20 61 73 73 65 72 74 28 20 70 4b 65 79 2d     assert( pKey-
24a00 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
24a10 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
24a20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4b 65 79 29  memIsValid(pKey)
24a30 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
24a40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 33 2c 20  _TRACE(pOp->p3, 
24a50 70 4b 65 79 29 3b 0a 20 20 20 20 78 2e 6e 4b 65  pKey);.    x.nKe
24a60 79 20 3d 20 70 4b 65 79 2d 3e 75 2e 69 3b 0a 20  y = pKey->u.i;. 
24a70 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65   }else{.    asse
24a80 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d  rt( pOp->opcode=
24a90 3d 4f 50 5f 49 6e 73 65 72 74 49 6e 74 20 29 3b  =OP_InsertInt );
24aa0 0a 20 20 20 20 78 2e 6e 4b 65 79 20 3d 20 70 4f  .    x.nKey = pO
24ab0 70 2d 3e 70 33 3b 0a 20 20 7d 0a 0a 20 20 69 66  p->p3;.  }..  if
24ac0 28 20 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50  ( pOp->p4type==P
24ad0 34 5f 54 41 42 4c 45 20 26 26 20 48 41 53 5f 55  4_TABLE && HAS_U
24ae0 50 44 41 54 45 5f 48 4f 4f 4b 28 64 62 29 20 29  PDATE_HOOK(db) )
24af0 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43  {.    assert( pC
24b00 2d 3e 69 73 54 61 62 6c 65 20 29 3b 0a 20 20 20  ->isTable );.   
24b10 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44 62   assert( pC->iDb
24b20 3e 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  >=0 );.    zDb =
24b30 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
24b40 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
24b50 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
24b60 54 61 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28  Tab;.    assert(
24b70 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
24b80 29 3b 0a 20 20 20 20 6f 70 20 3d 20 28 28 70 4f  );.    op = ((pO
24b90 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 49  p->p5 & OPFLAG_I
24ba0 53 55 50 44 41 54 45 29 20 3f 20 53 51 4c 49 54  SUPDATE) ? SQLIT
24bb0 45 5f 55 50 44 41 54 45 20 3a 20 53 51 4c 49 54  E_UPDATE : SQLIT
24bc0 45 5f 49 4e 53 45 52 54 29 3b 0a 20 20 7d 65 6c  E_INSERT);.  }el
24bd0 73 65 7b 0a 20 20 20 20 70 54 61 62 20 3d 20 30  se{.    pTab = 0
24be0 3b 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e  ; /* Not needed.
24bf0 20 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 69    Silence a comi
24c00 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
24c10 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20 2f 2a      zDb = 0;  /*
24c20 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53 69   Not needed.  Si
24c30 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65 72  lence a compiler
24c40 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 7d   warning. */.  }
24c50 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
24c60 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
24c70 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f 6b  _HOOK.  /* Invok
24c80 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74 65  e the pre-update
24c90 20 68 6f 6f 6b 2c 20 69 66 20 61 6e 79 20 2a 2f   hook, if any */
24ca0 0a 20 20 69 66 28 20 64 62 2d 3e 78 50 72 65 55  .  if( db->xPreU
24cb0 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 0a 20  pdateCallback . 
24cc0 20 20 26 26 20 70 4f 70 2d 3e 70 34 74 79 70 65    && pOp->p4type
24cd0 3d 3d 50 34 5f 54 41 42 4c 45 0a 20 20 20 26 26  ==P4_TABLE.   &&
24ce0 20 21 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46   !(pOp->p5 & OPF
24cf0 4c 41 47 5f 49 53 55 50 44 41 54 45 29 0a 20 20  LAG_ISUPDATE).  
24d00 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  ){.    sqlite3Vd
24d10 62 65 50 72 65 55 70 64 61 74 65 48 6f 6f 6b 28  bePreUpdateHook(
24d20 70 2c 20 70 43 2c 20 53 51 4c 49 54 45 5f 49 4e  p, pC, SQLITE_IN
24d30 53 45 52 54 2c 20 7a 44 62 2c 20 70 54 61 62 2c  SERT, zDb, pTab,
24d40 20 78 2e 6e 4b 65 79 2c 20 70 4f 70 2d 3e 70 32   x.nKey, pOp->p2
24d50 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  );.  }.#endif.. 
24d60 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
24d70 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
24d80 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
24d90 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f 50  if( pOp->p5 & OP
24da0 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 29  FLAG_LASTROWID )
24db0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 3d   db->lastRowid =
24dc0 20 6c 61 73 74 52 6f 77 69 64 20 3d 20 78 2e 6e   lastRowid = x.n
24dd0 4b 65 79 3b 0a 20 20 69 66 28 20 70 44 61 74 61  Key;.  if( pData
24de0 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 4e 75  ->flags & MEM_Nu
24df0 6c 6c 20 29 7b 0a 20 20 20 20 78 2e 70 44 61 74  ll ){.    x.pDat
24e00 61 20 3d 20 30 3b 0a 20 20 20 20 78 2e 6e 44 61  a = 0;.    x.nDa
24e10 74 61 20 3d 20 30 3b 0a 20 20 7d 65 6c 73 65 7b  ta = 0;.  }else{
24e20 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 44 61  .    assert( pDa
24e30 74 61 2d 3e 66 6c 61 67 73 20 26 20 28 4d 45 4d  ta->flags & (MEM
24e40 5f 42 6c 6f 62 7c 4d 45 4d 5f 53 74 72 29 20 29  _Blob|MEM_Str) )
24e50 3b 0a 20 20 20 20 78 2e 70 44 61 74 61 20 3d 20  ;.    x.pData = 
24e60 70 44 61 74 61 2d 3e 7a 3b 0a 20 20 20 20 78 2e  pData->z;.    x.
24e70 6e 44 61 74 61 20 3d 20 70 44 61 74 61 2d 3e 6e  nData = pData->n
24e80 3b 0a 20 20 7d 0a 20 20 73 65 65 6b 52 65 73 75  ;.  }.  seekResu
24e90 6c 74 20 3d 20 28 28 70 4f 70 2d 3e 70 35 20 26  lt = ((pOp->p5 &
24ea0 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52   OPFLAG_USESEEKR
24eb0 45 53 55 4c 54 29 20 3f 20 70 43 2d 3e 73 65 65  ESULT) ? pC->see
24ec0 6b 52 65 73 75 6c 74 20 3a 20 30 29 3b 0a 20 20  kResult : 0);.  
24ed0 69 66 28 20 70 44 61 74 61 2d 3e 66 6c 61 67 73  if( pData->flags
24ee0 20 26 20 4d 45 4d 5f 5a 65 72 6f 20 29 7b 0a 20   & MEM_Zero ){. 
24ef0 20 20 20 78 2e 6e 5a 65 72 6f 20 3d 20 70 44 61     x.nZero = pDa
24f00 74 61 2d 3e 75 2e 6e 5a 65 72 6f 3b 0a 20 20 7d  ta->u.nZero;.  }
24f10 65 6c 73 65 7b 0a 20 20 20 20 78 2e 6e 5a 65 72  else{.    x.nZer
24f20 6f 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 78 2e 70  o = 0;.  }.  x.p
24f30 4b 65 79 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20  Key = 0;.  rc = 
24f40 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e 73 65  sqlite3BtreeInse
24f50 72 74 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f  rt(pC->uc.pCurso
24f60 72 2c 20 26 78 2c 0a 20 20 20 20 20 20 20 20 20  r, &x,.         
24f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f80 20 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c   (pOp->p5 & OPFL
24f90 41 47 5f 41 50 50 45 4e 44 29 21 3d 30 2c 20 73  AG_APPEND)!=0, s
24fa0 65 65 6b 52 65 73 75 6c 74 0a 20 20 29 3b 0a 20  eekResult.  );. 
24fb0 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76   pC->deferredMov
24fc0 65 74 6f 20 3d 20 30 3b 0a 20 20 70 43 2d 3e 63  eto = 0;.  pC->c
24fd0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
24fe0 48 45 5f 53 54 41 4c 45 3b 0a 0a 20 20 2f 2a 20  HE_STALE;..  /* 
24ff0 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64 61 74  Invoke the updat
25000 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25010 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 72 63 20  ed. */.  if( rc 
25020 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
25030 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69 66 28  _to_error;.  if(
25040 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c 6c   db->xUpdateCall
25050 62 61 63 6b 20 26 26 20 6f 70 20 29 7b 0a 20 20  back && op ){.  
25060 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43 61 6c    db->xUpdateCal
25070 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64 61 74  lback(db->pUpdat
25080 65 41 72 67 2c 20 6f 70 2c 20 7a 44 62 2c 20 70  eArg, op, zDb, p
25090 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 78 2e 6e 4b  Tab->zName, x.nK
250a0 65 79 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  ey);.  }.  break
250b0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
250c0 44 65 6c 65 74 65 20 50 31 20 50 32 20 50 33 20  Delete P1 P2 P3 
250d0 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 44 65 6c 65  P4 P5.**.** Dele
250e0 74 65 20 74 68 65 20 72 65 63 6f 72 64 20 61 74  te the record at
250f0 20 77 68 69 63 68 20 74 68 65 20 50 31 20 63 75   which the P1 cu
25100 72 73 6f 72 20 69 73 20 63 75 72 72 65 6e 74 6c  rsor is currentl
25110 79 20 70 6f 69 6e 74 69 6e 67 2e 0a 2a 2a 0a 2a  y pointing..**.*
25120 2a 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f  * If the OPFLAG_
25130 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
25140 20 6f 66 20 74 68 65 20 50 35 20 70 61 72 61 6d   of the P5 param
25150 65 74 65 72 20 69 73 20 73 65 74 2c 20 74 68 65  eter is set, the
25160 6e 0a 2a 2a 20 74 68 65 20 63 75 72 73 6f 72 20  n.** the cursor 
25170 77 69 6c 6c 20 62 65 20 6c 65 66 74 20 70 6f 69  will be left poi
25180 6e 74 69 6e 67 20 61 74 20 20 65 69 74 68 65 72  nting at  either
25190 20 74 68 65 20 6e 65 78 74 20 6f 72 20 74 68 65   the next or the
251a0 20 70 72 65 76 69 6f 75 73 0a 2a 2a 20 72 65 63   previous.** rec
251b0 6f 72 64 20 69 6e 20 74 68 65 20 74 61 62 6c 65  ord in the table
251c0 2e 20 49 66 20 69 74 20 69 73 20 6c 65 66 74 20  . If it is left 
251d0 70 6f 69 6e 74 69 6e 67 20 61 74 20 74 68 65 20  pointing at the 
251e0 6e 65 78 74 20 72 65 63 6f 72 64 2c 20 74 68 65  next record, the
251f0 6e 0a 2a 2a 20 74 68 65 20 6e 65 78 74 20 4e 65  n.** the next Ne
25200 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 77  xt instruction w
25210 69 6c 6c 20 62 65 20 61 20 6e 6f 2d 6f 70 2e 20  ill be a no-op. 
25220 41 73 20 61 20 72 65 73 75 6c 74 2c 20 69 6e 20  As a result, in 
25230 74 68 69 73 20 63 61 73 65 0a 2a 2a 20 69 74 20  this case.** it 
25240 69 73 20 6f 6b 20 74 6f 20 64 65 6c 65 74 65 20  is ok to delete 
25250 61 20 72 65 63 6f 72 64 20 66 72 6f 6d 20 77 69  a record from wi
25260 74 68 69 6e 20 61 20 4e 65 78 74 20 6c 6f 6f 70  thin a Next loop
25270 2e 20 49 66 20 0a 2a 2a 20 4f 50 46 4c 41 47 5f  . If .** OPFLAG_
25280 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 62 69 74  SAVEPOSITION bit
25290 20 6f 66 20 50 35 20 69 73 20 63 6c 65 61 72 2c   of P5 is clear,
252a0 20 74 68 65 6e 20 74 68 65 20 63 75 72 73 6f 72   then the cursor
252b0 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 6c 65 66 74   will be.** left
252c0 20 69 6e 20 61 6e 20 75 6e 64 65 66 69 6e 65 64   in an undefined
252d0 20 73 74 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 49 66   state..**.** If
252e0 20 74 68 65 20 4f 50 46 4c 41 47 5f 41 55 58 44   the OPFLAG_AUXD
252f0 45 4c 45 54 45 20 62 69 74 20 69 73 20 73 65 74  ELETE bit is set
25300 20 6f 6e 20 50 35 2c 20 74 68 61 74 20 69 6e 64   on P5, that ind
25310 69 63 61 74 65 73 20 74 68 61 74 20 74 68 69 73  icates that this
25320 0a 2a 2a 20 64 65 6c 65 74 65 20 6f 6e 65 20 6f  .** delete one o
25330 66 20 73 65 76 65 72 61 6c 20 61 73 73 6f 63 69  f several associ
25340 61 74 65 64 20 77 69 74 68 20 64 65 6c 65 74 69  ated with deleti
25350 6e 67 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  ng a table row a
25360 6e 64 20 61 6c 6c 20 69 74 73 0a 2a 2a 20 61 73  nd all its.** as
25370 73 6f 63 69 61 74 65 64 20 69 6e 64 65 78 20 65  sociated index e
25380 6e 74 72 69 65 73 2e 20 20 45 78 61 63 74 6c 79  ntries.  Exactly
25390 20 6f 6e 65 20 6f 66 20 74 68 6f 73 65 20 64 65   one of those de
253a0 6c 65 74 65 73 20 69 73 20 74 68 65 20 22 70 72  letes is the "pr
253b0 69 6d 61 72 79 22 0a 2a 2a 20 64 65 6c 65 74 65  imary".** delete
253c0 2e 20 20 54 68 65 20 6f 74 68 65 72 73 20 61 72  .  The others ar
253d0 65 20 61 6c 6c 20 6f 6e 20 4f 50 46 4c 41 47 5f  e all on OPFLAG_
253e0 46 4f 52 44 45 4c 45 54 45 20 63 75 72 73 6f 72  FORDELETE cursor
253f0 73 20 6f 72 20 65 6c 73 65 20 61 72 65 0a 2a 2a  s or else are.**
25400 20 6d 61 72 6b 65 64 20 77 69 74 68 20 74 68 65   marked with the
25410 20 41 55 58 44 45 4c 45 54 45 20 66 6c 61 67 2e   AUXDELETE flag.
25420 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f 50  .**.** If the OP
25430 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66 6c 61  FLAG_NCHANGE fla
25440 67 20 6f 66 20 50 32 20 28 4e 42 3a 20 50 32 20  g of P2 (NB: P2 
25450 6e 6f 74 20 50 35 29 20 69 73 20 73 65 74 2c 20  not P5) is set, 
25460 74 68 65 6e 20 74 68 65 20 72 6f 77 0a 2a 2a 20  then the row.** 
25470 63 68 61 6e 67 65 20 63 6f 75 6e 74 20 69 73 20  change count is 
25480 69 6e 63 72 65 6d 65 6e 74 65 64 20 28 6f 74 68  incremented (oth
25490 65 72 77 69 73 65 20 6e 6f 74 29 2e 0a 2a 2a 0a  erwise not)..**.
254a0 2a 2a 20 50 31 20 6d 75 73 74 20 6e 6f 74 20 62  ** P1 must not b
254b0 65 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 2e 20  e pseudo-table. 
254c0 20 49 74 20 68 61 73 20 74 6f 20 62 65 20 61 20   It has to be a 
254d0 72 65 61 6c 20 74 61 62 6c 65 20 77 69 74 68 0a  real table with.
254e0 2a 2a 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  ** multiple rows
254f0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73  ..**.** If P4 is
25500 20 6e 6f 74 20 4e 55 4c 4c 20 74 68 65 6e 20 69   not NULL then i
25510 74 20 70 6f 69 6e 74 73 20 74 6f 20 61 20 54 61  t points to a Ta
25520 62 6c 65 20 6f 62 6a 65 63 74 2e 20 49 6e 20 74  ble object. In t
25530 68 69 73 20 63 61 73 65 20 65 69 74 68 65 72 20  his case either 
25540 0a 2a 2a 20 74 68 65 20 75 70 64 61 74 65 20 6f  .** the update o
25550 72 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f  r pre-update hoo
25560 6b 2c 20 6f 72 20 62 6f 74 68 2c 20 6d 61 79 20  k, or both, may 
25570 62 65 20 69 6e 76 6f 6b 65 64 2e 20 54 68 65 20  be invoked. The 
25580 50 31 20 63 75 72 73 6f 72 20 6d 75 73 74 0a 2a  P1 cursor must.*
25590 2a 20 68 61 76 65 20 62 65 65 6e 20 70 6f 73 69  * have been posi
255a0 74 69 6f 6e 65 64 20 75 73 69 6e 67 20 4f 50 5f  tioned using OP_
255b0 4e 6f 74 46 6f 75 6e 64 20 70 72 69 6f 72 20 74  NotFound prior t
255c0 6f 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  o invoking this 
255d0 6f 70 63 6f 64 65 20 69 6e 20 0a 2a 2a 20 74 68  opcode in .** th
255e0 69 73 20 63 61 73 65 2e 20 53 70 65 63 69 66 69  is case. Specifi
255f0 63 61 6c 6c 79 2c 20 69 66 20 6f 6e 65 20 69 73  cally, if one is
25600 20 63 6f 6e 66 69 67 75 72 65 64 2c 20 74 68 65   configured, the
25610 20 70 72 65 2d 75 70 64 61 74 65 20 68 6f 6f 6b   pre-update hook
25620 20 69 73 20 0a 2a 2a 20 69 6e 76 6f 6b 65 64 20   is .** invoked 
25630 69 66 20 50 34 20 69 73 20 6e 6f 74 20 4e 55 4c  if P4 is not NUL
25640 4c 2e 20 54 68 65 20 75 70 64 61 74 65 2d 68 6f  L. The update-ho
25650 6f 6b 20 69 73 20 69 6e 76 6f 6b 65 64 20 69 66  ok is invoked if
25660 20 6f 6e 65 20 69 73 20 63 6f 6e 66 69 67 75 72   one is configur
25670 65 64 2c 20 0a 2a 2a 20 50 34 20 69 73 20 6e 6f  ed, .** P4 is no
25680 74 20 4e 55 4c 4c 2c 20 61 6e 64 20 74 68 65 20  t NULL, and the 
25690 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 66  OPFLAG_NCHANGE f
256a0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
256b0 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 4f  ..**.** If the O
256c0 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 66  PFLAG_ISUPDATE f
256d0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 50 32  lag is set in P2
256e0 2c 20 74 68 65 6e 20 50 33 20 63 6f 6e 74 61 69  , then P3 contai
256f0 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 0a 2a  ns the address.*
25700 2a 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79 20  * of the memory 
25710 63 65 6c 6c 20 74 68 61 74 20 63 6f 6e 74 61 69  cell that contai
25720 6e 73 20 74 68 65 20 76 61 6c 75 65 20 74 68 61  ns the value tha
25730 74 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74  t the rowid of t
25740 68 65 20 72 6f 77 20 77 69 6c 6c 0a 2a 2a 20 62  he row will.** b
25750 65 20 73 65 74 20 74 6f 20 62 79 20 74 68 65 20  e set to by the 
25760 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
25770 4f 50 5f 44 65 6c 65 74 65 3a 20 7b 0a 20 20 56  OP_Delete: {.  V
25780 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20  dbeCursor *pC;. 
25790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
257a0 3b 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  ;.  Table *pTab;
257b0 0a 20 20 69 6e 74 20 6f 70 66 6c 61 67 73 3b 0a  .  int opflags;.
257c0 0a 20 20 6f 70 66 6c 61 67 73 20 3d 20 70 4f 70  .  opflags = pOp
257d0 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
257e0 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f  pOp->p1>=0 && pO
257f0 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72  p->p1<p->nCursor
25800 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70   );.  pC = p->ap
25810 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Csr[pOp->p1];.  
25820 61 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b  assert( pC!=0 );
25830 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65  .  assert( pC->e
25840 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45  CurType==CURTYPE
25850 5f 42 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65  _BTREE );.  asse
25860 72 74 28 20 70 43 2d 3e 75 63 2e 70 43 75 72 73  rt( pC->uc.pCurs
25870 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  or!=0 );.  asser
25880 74 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d  t( pC->deferredM
25890 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 0a 23 69 66  oveto==0 );..#if
258a0 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
258b0 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 34 74 79  .  if( pOp->p4ty
258c0 70 65 3d 3d 50 34 5f 54 41 42 4c 45 20 26 26 20  pe==P4_TABLE && 
258d0 48 61 73 52 6f 77 69 64 28 70 4f 70 2d 3e 70 34  HasRowid(pOp->p4
258e0 2e 70 54 61 62 29 20 26 26 20 70 4f 70 2d 3e 70  .pTab) && pOp->p
258f0 35 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20 49  5==0 ){.    /* I
25900 66 20 70 35 20 69 73 20 7a 65 72 6f 2c 20 74 68  f p5 is zero, th
25910 65 20 73 65 65 6b 20 6f 70 65 72 61 74 69 6f 6e  e seek operation
25920 20 74 68 61 74 20 70 6f 73 69 74 69 6f 6e 65 64   that positioned
25930 20 74 68 65 20 63 75 72 73 6f 72 20 70 72 69 6f   the cursor prio
25940 72 20 74 6f 0a 20 20 20 20 2a 2a 20 4f 50 5f 44  r to.    ** OP_D
25950 65 6c 65 74 65 20 77 69 6c 6c 20 68 61 76 65 20  elete will have 
25960 61 6c 73 6f 20 73 65 74 20 74 68 65 20 70 43 2d  also set the pC-
25970 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 66 69  >movetoTarget fi
25980 65 6c 64 20 74 6f 20 74 68 65 20 72 6f 77 69 64  eld to the rowid
25990 20 6f 66 0a 20 20 20 20 2a 2a 20 74 68 65 20 72   of.    ** the r
259a0 6f 77 20 74 68 61 74 20 69 73 20 62 65 69 6e 67  ow that is being
259b0 20 64 65 6c 65 74 65 64 20 2a 2f 0a 20 20 20 20   deleted */.    
259c0 69 36 34 20 69 4b 65 79 20 3d 20 73 71 6c 69 74  i64 iKey = sqlit
259d0 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
259e0 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
259f0 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
25a00 43 2d 3e 6d 6f 76 65 74 6f 54 61 72 67 65 74 3d  C->movetoTarget=
25a10 3d 69 4b 65 79 20 29 3b 0a 20 20 7d 0a 23 65 6e  =iKey );.  }.#en
25a20 64 69 66 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  dif..  /* If the
25a30 20 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 72 20   update-hook or 
25a40 70 72 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20  pre-update-hook 
25a50 77 69 6c 6c 20 62 65 20 69 6e 76 6f 6b 65 64 2c  will be invoked,
25a60 20 73 65 74 20 7a 44 62 20 74 6f 0a 20 20 2a 2a   set zDb to.  **
25a70 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
25a80 20 64 62 20 74 6f 20 70 61 73 73 20 61 73 20 74   db to pass as t
25a90 6f 20 69 74 2e 20 41 6c 73 6f 20 73 65 74 20 6c  o it. Also set l
25aa0 6f 63 61 6c 20 70 54 61 62 20 74 6f 20 61 20 63  ocal pTab to a c
25ab0 6f 70 79 0a 20 20 2a 2a 20 6f 66 20 70 34 2e 70  opy.  ** of p4.p
25ac0 54 61 62 2e 20 46 69 6e 61 6c 6c 79 2c 20 69 66  Tab. Finally, if
25ad0 20 70 35 20 69 73 20 74 72 75 65 2c 20 69 6e 64   p5 is true, ind
25ae0 69 63 61 74 69 6e 67 20 74 68 61 74 20 74 68 69  icating that thi
25af0 73 20 63 75 72 73 6f 72 20 77 61 73 0a 20 20 2a  s cursor was.  *
25b00 2a 20 6c 61 73 74 20 6d 6f 76 65 64 20 77 69 74  * last moved wit
25b10 68 20 4f 50 5f 4e 65 78 74 20 6f 72 20 4f 50 5f  h OP_Next or OP_
25b20 50 72 65 76 2c 20 6e 6f 74 20 53 65 65 6b 20 6f  Prev, not Seek o
25b30 72 20 4e 6f 74 46 6f 75 6e 64 2c 20 73 65 74 20  r NotFound, set 
25b40 0a 20 20 2a 2a 20 56 64 62 65 43 75 72 73 6f 72  .  ** VdbeCursor
25b50 2e 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 74 6f  .movetoTarget to
25b60 20 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77   the current row
25b70 69 64 2e 20 20 2a 2f 0a 20 20 69 66 28 20 70 4f  id.  */.  if( pO
25b80 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 54 41  p->p4type==P4_TA
25b90 42 4c 45 20 26 26 20 48 41 53 5f 55 50 44 41 54  BLE && HAS_UPDAT
25ba0 45 5f 48 4f 4f 4b 28 64 62 29 20 29 7b 0a 20 20  E_HOOK(db) ){.  
25bb0 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 44    assert( pC->iD
25bc0 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
25bd0 72 74 28 20 70 4f 70 2d 3e 70 34 2e 70 54 61 62  rt( pOp->p4.pTab
25be0 21 3d 30 20 29 3b 0a 20 20 20 20 7a 44 62 20 3d  !=0 );.    zDb =
25bf0 20 64 62 2d 3e 61 44 62 5b 70 43 2d 3e 69 44 62   db->aDb[pC->iDb
25c00 5d 2e 7a 44 62 53 4e 61 6d 65 3b 0a 20 20 20 20  ].zDbSName;.    
25c10 70 54 61 62 20 3d 20 70 4f 70 2d 3e 70 34 2e 70  pTab = pOp->p4.p
25c20 54 61 62 3b 0a 20 20 20 20 69 66 28 20 28 70 4f  Tab;.    if( (pO
25c30 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f 53  p->p5 & OPFLAG_S
25c40 41 56 45 50 4f 53 49 54 49 4f 4e 29 21 3d 30 20  AVEPOSITION)!=0 
25c50 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 20 29  && pC->isTable )
25c60 7b 0a 20 20 20 20 20 20 70 43 2d 3e 6d 6f 76 65  {.      pC->move
25c70 74 6f 54 61 72 67 65 74 20 3d 20 73 71 6c 69 74  toTarget = sqlit
25c80 65 33 42 74 72 65 65 49 6e 74 65 67 65 72 4b 65  e3BtreeIntegerKe
25c90 79 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  y(pC->uc.pCursor
25ca0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  );.    }.  }else
25cb0 7b 0a 20 20 20 20 7a 44 62 20 3d 20 30 3b 20 20  {.    zDb = 0;  
25cc0 20 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20   /* Not needed. 
25cd0 20 53 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69   Silence a compi
25ce0 6c 65 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  ler warning. */.
25cf0 20 20 20 20 70 54 61 62 20 3d 20 30 3b 20 20 2f      pTab = 0;  /
25d00 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 53  * Not needed.  S
25d10 69 6c 65 6e 63 65 20 61 20 63 6f 6d 70 69 6c 65  ilence a compile
25d20 72 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  r warning. */.  
25d30 7d 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  }..#ifdef SQLITE
25d40 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54  _ENABLE_PREUPDAT
25d50 45 5f 48 4f 4f 4b 0a 20 20 2f 2a 20 49 6e 76 6f  E_HOOK.  /* Invo
25d60 6b 65 20 74 68 65 20 70 72 65 2d 75 70 64 61 74  ke the pre-updat
25d70 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75 69 72  e-hook if requir
25d80 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 64 62 2d  ed. */.  if( db-
25d90 3e 78 50 72 65 55 70 64 61 74 65 43 61 6c 6c 62  >xPreUpdateCallb
25da0 61 63 6b 20 26 26 20 70 4f 70 2d 3e 70 34 2e 70  ack && pOp->p4.p
25db0 54 61 62 20 26 26 20 48 61 73 52 6f 77 69 64 28  Tab && HasRowid(
25dc0 70 54 61 62 29 20 29 7b 0a 20 20 20 20 61 73 73  pTab) ){.    ass
25dd0 65 72 74 28 20 21 28 6f 70 66 6c 61 67 73 20 26  ert( !(opflags &
25de0 20 4f 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45   OPFLAG_ISUPDATE
25df0 29 20 7c 7c 20 28 61 4d 65 6d 5b 70 4f 70 2d 3e  ) || (aMem[pOp->
25e00 70 33 5d 2e 66 6c 61 67 73 20 26 20 4d 45 4d 5f  p3].flags & MEM_
25e10 49 6e 74 29 20 29 3b 0a 20 20 20 20 73 71 6c 69  Int) );.    sqli
25e20 74 65 33 56 64 62 65 50 72 65 55 70 64 61 74 65  te3VdbePreUpdate
25e30 48 6f 6f 6b 28 70 2c 20 70 43 2c 0a 20 20 20 20  Hook(p, pC,.    
25e40 20 20 20 20 28 6f 70 66 6c 61 67 73 20 26 20 4f      (opflags & O
25e50 50 46 4c 41 47 5f 49 53 55 50 44 41 54 45 29 20  PFLAG_ISUPDATE) 
25e60 3f 20 53 51 4c 49 54 45 5f 55 50 44 41 54 45 20  ? SQLITE_UPDATE 
25e70 3a 20 53 51 4c 49 54 45 5f 44 45 4c 45 54 45 2c  : SQLITE_DELETE,
25e80 20 0a 20 20 20 20 20 20 20 20 7a 44 62 2c 20 70   .        zDb, p
25e90 54 61 62 2c 20 70 43 2d 3e 6d 6f 76 65 74 6f 54  Tab, pC->movetoT
25ea0 61 72 67 65 74 2c 0a 20 20 20 20 20 20 20 20 70  arget,.        p
25eb0 4f 70 2d 3e 70 33 0a 20 20 20 20 29 3b 0a 20 20  Op->p3.    );.  
25ec0 7d 0a 20 20 69 66 28 20 6f 70 66 6c 61 67 73 20  }.  if( opflags 
25ed0 26 20 4f 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20  & OPFLAG_ISNOOP 
25ee0 29 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a  ) break;.#endif.
25ef0 20 0a 20 20 2f 2a 20 4f 6e 6c 79 20 66 6c 61 67   .  /* Only flag
25f00 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 65  s that can be se
25f10 74 20 61 72 65 20 53 41 56 45 50 4f 49 53 54 49  t are SAVEPOISTI
25f20 4f 4e 20 61 6e 64 20 41 55 58 44 45 4c 45 54 45  ON and AUXDELETE
25f30 20 2a 2f 20 0a 20 20 61 73 73 65 72 74 28 20 28   */ .  assert( (
25f40 70 4f 70 2d 3e 70 35 20 26 20 7e 28 4f 50 46 4c  pOp->p5 & ~(OPFL
25f50 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 7c  AG_SAVEPOSITION|
25f60 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
25f70 29 29 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ))==0 );.  asser
25f80 74 28 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f  t( OPFLAG_SAVEPO
25f90 53 49 54 49 4f 4e 3d 3d 42 54 52 45 45 5f 53 41  SITION==BTREE_SA
25fa0 56 45 50 4f 53 49 54 49 4f 4e 20 29 3b 0a 20 20  VEPOSITION );.  
25fb0 61 73 73 65 72 74 28 20 4f 50 46 4c 41 47 5f 41  assert( OPFLAG_A
25fc0 55 58 44 45 4c 45 54 45 3d 3d 42 54 52 45 45 5f  UXDELETE==BTREE_
25fd0 41 55 58 44 45 4c 45 54 45 20 29 3b 0a 0a 23 69  AUXDELETE );..#i
25fe0 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
25ff0 47 0a 20 20 69 66 28 20 70 2d 3e 70 46 72 61 6d  G.  if( p->pFram
26000 65 3d 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20  e==0 ){.    if( 
26010 70 43 2d 3e 69 73 45 70 68 65 6d 65 72 61 6c 3d  pC->isEphemeral=
26020 3d 30 0a 20 20 20 20 20 20 20 20 26 26 20 28 70  =0.        && (p
26030 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c 41 47 5f  Op->p5 & OPFLAG_
26040 41 55 58 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20  AUXDELETE)==0.  
26050 20 20 20 20 20 20 26 26 20 28 70 43 2d 3e 77 72        && (pC->wr
26060 46 6c 61 67 20 26 20 4f 50 46 4c 41 47 5f 46 4f  Flag & OPFLAG_FO
26070 52 44 45 4c 45 54 45 29 3d 3d 30 0a 20 20 20 20  RDELETE)==0.    
26080 20 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72    ){.      nExtr
26090 61 44 65 6c 65 74 65 2b 2b 3b 0a 20 20 20 20 7d  aDelete++;.    }
260a0 0a 20 20 20 20 69 66 28 20 70 4f 70 2d 3e 70 32  .    if( pOp->p2
260b0 20 26 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47   & OPFLAG_NCHANG
260c0 45 20 29 7b 0a 20 20 20 20 20 20 6e 45 78 74 72  E ){.      nExtr
260d0 61 44 65 6c 65 74 65 2d 2d 3b 0a 20 20 20 20 7d  aDelete--;.    }
260e0 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 72  .  }.#endif..  r
260f0 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  c = sqlite3Btree
26100 44 65 6c 65 74 65 28 70 43 2d 3e 75 63 2e 70 43  Delete(pC->uc.pC
26110 75 72 73 6f 72 2c 20 70 4f 70 2d 3e 70 35 29 3b  ursor, pOp->p5);
26120 0a 20 20 70 43 2d 3e 63 61 63 68 65 53 74 61 74  .  pC->cacheStat
26130 75 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45  us = CACHE_STALE
26140 3b 0a 20 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ;.  pC->seekResu
26150 6c 74 20 3d 20 30 3b 0a 20 20 69 66 28 20 72 63  lt = 0;.  if( rc
26160 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
26170 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f  e_to_error;..  /
26180 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 75 70 64  * Invoke the upd
26190 61 74 65 2d 68 6f 6f 6b 20 69 66 20 72 65 71 75  ate-hook if requ
261a0 69 72 65 64 2e 20 2a 2f 0a 20 20 69 66 28 20 6f  ired. */.  if( o
261b0 70 66 6c 61 67 73 20 26 20 4f 50 46 4c 41 47 5f  pflags & OPFLAG_
261c0 4e 43 48 41 4e 47 45 20 29 7b 0a 20 20 20 20 70  NCHANGE ){.    p
261d0 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
261e0 20 69 66 28 20 64 62 2d 3e 78 55 70 64 61 74 65   if( db->xUpdate
261f0 43 61 6c 6c 62 61 63 6b 20 26 26 20 48 61 73 52  Callback && HasR
26200 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
26210 20 20 20 20 64 62 2d 3e 78 55 70 64 61 74 65 43      db->xUpdateC
26220 61 6c 6c 62 61 63 6b 28 64 62 2d 3e 70 55 70 64  allback(db->pUpd
26230 61 74 65 41 72 67 2c 20 53 51 4c 49 54 45 5f 44  ateArg, SQLITE_D
26240 45 4c 45 54 45 2c 20 7a 44 62 2c 20 70 54 61 62  ELETE, zDb, pTab
26250 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ->zName,.       
26260 20 20 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61 72     pC->movetoTar
26270 67 65 74 29 3b 0a 20 20 20 20 20 20 61 73 73 65  get);.      asse
26280 72 74 28 20 70 43 2d 3e 69 44 62 3e 3d 30 20 29  rt( pC->iDb>=0 )
26290 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 0a 20 20 62  ;.    }.  }..  b
262a0 72 65 61 6b 3b 0a 7d 0a 2f 2a 20 4f 70 63 6f 64  reak;.}./* Opcod
262b0 65 3a 20 52 65 73 65 74 43 6f 75 6e 74 20 2a 20  e: ResetCount * 
262c0 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68  * * * *.**.** Th
262d0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
262e0 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73  hange counter is
262f0 20 63 6f 70 69 65 64 20 74 6f 20 74 68 65 20 64   copied to the d
26300 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 0a 2a  atabase handle.*
26310 2a 20 63 68 61 6e 67 65 20 63 6f 75 6e 74 65 72  * change counter
26320 20 28 72 65 74 75 72 6e 65 64 20 62 79 20 73 75   (returned by su
26330 62 73 65 71 75 65 6e 74 20 63 61 6c 6c 73 20 74  bsequent calls t
26340 6f 20 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  o sqlite3_change
26350 73 28 29 29 2e 0a 2a 2a 20 54 68 65 6e 20 74 68  s())..** Then th
26360 65 20 56 4d 73 20 69 6e 74 65 72 6e 61 6c 20 63  e VMs internal c
26370 68 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 72 65  hange counter re
26380 73 65 74 73 20 74 6f 20 30 2e 0a 2a 2a 20 54 68  sets to 0..** Th
26390 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
263a0 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 0a  igger programs..
263b0 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 73 65 74  */.case OP_Reset
263c0 43 6f 75 6e 74 3a 20 7b 0a 20 20 73 71 6c 69 74  Count: {.  sqlit
263d0 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65 73  e3VdbeSetChanges
263e0 28 64 62 2c 20 70 2d 3e 6e 43 68 61 6e 67 65 29  (db, p->nChange)
263f0 3b 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d  ;.  p->nChange =
26400 20 30 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a   0;.  break;.}..
26410 2f 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65  /* Opcode: Sorte
26420 72 43 6f 6d 70 61 72 65 20 50 31 20 50 32 20 50  rCompare P1 P2 P
26430 33 20 50 34 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  3 P4.** Synopsis
26440 3a 20 69 66 20 6b 65 79 28 50 31 29 21 3d 74 72  : if key(P1)!=tr
26450 69 6d 28 72 5b 50 33 5d 2c 50 34 29 20 67 6f 74  im(r[P3],P4) got
26460 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73  o P2.**.** P1 is
26470 20 61 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72   a sorter cursor
26480 2e 20 54 68 69 73 20 69 6e 73 74 72 75 63 74 69  . This instructi
26490 6f 6e 20 63 6f 6d 70 61 72 65 73 20 61 20 70 72  on compares a pr
264a0 65 66 69 78 20 6f 66 20 74 68 65 0a 2a 2a 20 72  efix of the.** r
264b0 65 63 6f 72 64 20 62 6c 6f 62 20 69 6e 20 72 65  ecord blob in re
264c0 67 69 73 74 65 72 20 50 33 20 61 67 61 69 6e 73  gister P3 agains
264d0 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74 68  t a prefix of th
264e0 65 20 65 6e 74 72 79 20 74 68 61 74 20 0a 2a 2a  e entry that .**
264f0 20 74 68 65 20 73 6f 72 74 65 72 20 63 75 72 73   the sorter curs
26500 6f 72 20 63 75 72 72 65 6e 74 6c 79 20 70 6f 69  or currently poi
26510 6e 74 73 20 74 6f 2e 20 20 4f 6e 6c 79 20 74 68  nts to.  Only th
26520 65 20 66 69 72 73 74 20 50 34 20 66 69 65 6c 64  e first P4 field
26530 73 0a 2a 2a 20 6f 66 20 72 5b 50 33 5d 20 61 6e  s.** of r[P3] an
26540 64 20 74 68 65 20 73 6f 72 74 65 72 20 72 65 63  d the sorter rec
26550 6f 72 64 20 61 72 65 20 63 6f 6d 70 61 72 65 64  ord are compared
26560 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 65 69 74 68 65  ..**.** If eithe
26570 72 20 50 33 20 6f 72 20 74 68 65 20 73 6f 72 74  r P3 or the sort
26580 65 72 20 63 6f 6e 74 61 69 6e 73 20 61 20 4e 55  er contains a NU
26590 4c 4c 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 65  LL in one of the
265a0 69 72 20 73 69 67 6e 69 66 69 63 61 6e 74 0a 2a  ir significant.*
265b0 2a 20 66 69 65 6c 64 73 20 28 6e 6f 74 20 63 6f  * fields (not co
265c0 75 6e 74 69 6e 67 20 74 68 65 20 50 34 20 66 69  unting the P4 fi
265d0 65 6c 64 73 20 61 74 20 74 68 65 20 65 6e 64 20  elds at the end 
265e0 77 68 69 63 68 20 61 72 65 20 69 67 6e 6f 72 65  which are ignore
265f0 64 29 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 63  d) then.** the c
26600 6f 6d 70 61 72 69 73 6f 6e 20 69 73 20 61 73 73  omparison is ass
26610 75 6d 65 64 20 74 6f 20 62 65 20 65 71 75 61 6c  umed to be equal
26620 2e 0a 2a 2a 0a 2a 2a 20 46 61 6c 6c 20 74 68 72  ..**.** Fall thr
26630 6f 75 67 68 20 74 6f 20 6e 65 78 74 20 69 6e 73  ough to next ins
26640 74 72 75 63 74 69 6f 6e 20 69 66 20 74 68 65 20  truction if the 
26650 74 77 6f 20 72 65 63 6f 72 64 73 20 63 6f 6d 70  two records comp
26660 61 72 65 20 65 71 75 61 6c 20 74 6f 0a 2a 2a 20  are equal to.** 
26670 65 61 63 68 20 6f 74 68 65 72 2e 20 20 4a 75 6d  each other.  Jum
26680 70 20 74 6f 20 50 32 20 69 66 20 74 68 65 79 20  p to P2 if they 
26690 61 72 65 20 64 69 66 66 65 72 65 6e 74 2e 0a 2a  are different..*
266a0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
266b0 43 6f 6d 70 61 72 65 3a 20 7b 0a 20 20 56 64 62  Compare: {.  Vdb
266c0 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 69  eCursor *pC;.  i
266d0 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20 6e 4b  nt res;.  int nK
266e0 65 79 43 6f 6c 3b 0a 0a 20 20 70 43 20 3d 20 70  eyCol;..  pC = p
266f0 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
26700 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53 6f  ;.  assert( isSo
26710 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20 61 73  rter(pC) );.  as
26720 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70  sert( pOp->p4typ
26730 65 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20  e==P4_INT32 );. 
26740 20 70 49 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f   pIn3 = &aMem[pO
26750 70 2d 3e 70 33 5d 3b 0a 20 20 6e 4b 65 79 43 6f  p->p3];.  nKeyCo
26760 6c 20 3d 20 70 4f 70 2d 3e 70 34 2e 69 3b 0a 20  l = pOp->p4.i;. 
26770 20 72 65 73 20 3d 20 30 3b 0a 20 20 72 63 20 3d   res = 0;.  rc =
26780 20 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74   sqlite3VdbeSort
26790 65 72 43 6f 6d 70 61 72 65 28 70 43 2c 20 70 49  erCompare(pC, pI
267a0 6e 33 2c 20 6e 4b 65 79 43 6f 6c 2c 20 26 72 65  n3, nKeyCol, &re
267b0 73 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68  s);.  VdbeBranch
267c0 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
267d0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
267e0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
267f0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 20 29  ror;.  if( res )
26800 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32   goto jump_to_p2
26810 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 0a 2f  ;.  break;.};../
26820 2a 20 4f 70 63 6f 64 65 3a 20 53 6f 72 74 65 72  * Opcode: Sorter
26830 44 61 74 61 20 50 31 20 50 32 20 50 33 20 2a 20  Data P1 P2 P3 * 
26840 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72  *.** Synopsis: r
26850 5b 50 32 5d 3d 64 61 74 61 0a 2a 2a 0a 2a 2a 20  [P2]=data.**.** 
26860 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67 69 73  Write into regis
26870 74 65 72 20 50 32 20 74 68 65 20 63 75 72 72 65  ter P2 the curre
26880 6e 74 20 73 6f 72 74 65 72 20 64 61 74 61 20 66  nt sorter data f
26890 6f 72 20 73 6f 72 74 65 72 20 63 75 72 73 6f 72  or sorter cursor
268a0 20 50 31 2e 0a 2a 2a 20 54 68 65 6e 20 63 6c 65   P1..** Then cle
268b0 61 72 20 74 68 65 20 63 6f 6c 75 6d 6e 20 68 65  ar the column he
268c0 61 64 65 72 20 63 61 63 68 65 20 6f 6e 20 63 75  ader cache on cu
268d0 72 73 6f 72 20 50 33 2e 0a 2a 2a 0a 2a 2a 20 54  rsor P3..**.** T
268e0 68 69 73 20 6f 70 63 6f 64 65 20 69 73 20 6e 6f  his opcode is no
268f0 72 6d 61 6c 6c 79 20 75 73 65 20 74 6f 20 6d 6f  rmally use to mo
26900 76 65 20 61 20 72 65 63 6f 72 64 20 6f 75 74 20  ve a record out 
26910 6f 66 20 74 68 65 20 73 6f 72 74 65 72 20 61 6e  of the sorter an
26920 64 20 69 6e 74 6f 0a 2a 2a 20 61 20 72 65 67 69  d into.** a regi
26930 73 74 65 72 20 74 68 61 74 20 69 73 20 74 68 65  ster that is the
26940 20 73 6f 75 72 63 65 20 66 6f 72 20 61 20 70 73   source for a ps
26950 65 75 64 6f 2d 74 61 62 6c 65 20 63 75 72 73 6f  eudo-table curso
26960 72 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 0a  r created using.
26970 2a 2a 20 4f 70 65 6e 50 73 65 75 64 6f 2e 20 20  ** OpenPseudo.  
26980 54 68 61 74 20 70 73 65 75 64 6f 2d 74 61 62 6c  That pseudo-tabl
26990 65 20 63 75 72 73 6f 72 20 69 73 20 74 68 65 20  e cursor is the 
269a0 6f 6e 65 20 74 68 61 74 20 69 73 20 69 64 65 6e  one that is iden
269b0 74 69 66 69 65 64 20 62 79 0a 2a 2a 20 70 61 72  tified by.** par
269c0 61 6d 65 74 65 72 20 50 33 2e 20 20 43 6c 65 61  ameter P3.  Clea
269d0 72 69 6e 67 20 74 68 65 20 50 33 20 63 6f 6c 75  ring the P3 colu
269e0 6d 6e 20 63 61 63 68 65 20 61 73 20 70 61 72 74  mn cache as part
269f0 20 6f 66 20 74 68 69 73 20 6f 70 63 6f 64 65 20   of this opcode 
26a00 73 61 76 65 73 0a 2a 2a 20 75 73 20 66 72 6f 6d  saves.** us from
26a10 20 68 61 76 69 6e 67 20 74 6f 20 69 73 73 75 65   having to issue
26a20 20 61 20 73 65 70 61 72 61 74 65 20 4e 75 6c 6c   a separate Null
26a30 52 6f 77 20 69 6e 73 74 72 75 63 74 69 6f 6e 20  Row instruction 
26a40 74 6f 20 63 6c 65 61 72 20 74 68 61 74 20 63 61  to clear that ca
26a50 63 68 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  che..*/.case OP_
26a60 53 6f 72 74 65 72 44 61 74 61 3a 20 7b 0a 20 20  SorterData: {.  
26a70 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26a80 0a 20 20 70 4f 75 74 20 3d 20 26 61 4d 65 6d 5b  .  pOut = &aMem[
26a90 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 70 43 20 3d  pOp->p2];.  pC =
26aa0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
26ab0 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73  1];.  assert( is
26ac0 53 6f 72 74 65 72 28 70 43 29 20 29 3b 0a 20 20  Sorter(pC) );.  
26ad0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
26ae0 53 6f 72 74 65 72 52 6f 77 6b 65 79 28 70 43 2c  SorterRowkey(pC,
26af0 20 70 4f 75 74 29 3b 0a 20 20 61 73 73 65 72 74   pOut);.  assert
26b00 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
26b10 7c 7c 20 28 70 4f 75 74 2d 3e 66 6c 61 67 73 20  || (pOut->flags 
26b20 26 20 4d 45 4d 5f 42 6c 6f 62 29 20 29 3b 0a 20  & MEM_Blob) );. 
26b30 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31   assert( pOp->p1
26b40 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70  >=0 && pOp->p1<p
26b50 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 69  ->nCursor );.  i
26b60 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
26b70 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
26b80 0a 20 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d  .  p->apCsr[pOp-
26b90 3e 70 33 5d 2d 3e 63 61 63 68 65 53 74 61 74 75  >p3]->cacheStatu
26ba0 73 20 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b  s = CACHE_STALE;
26bb0 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
26bc0 4f 70 63 6f 64 65 3a 20 52 6f 77 44 61 74 61 20  Opcode: RowData 
26bd0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
26be0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32 5d 3d 64  ynopsis: r[P2]=d
26bf0 61 74 61 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20  ata.**.** Write 
26c00 69 6e 74 6f 20 72 65 67 69 73 74 65 72 20 50 32  into register P2
26c10 20 74 68 65 20 63 6f 6d 70 6c 65 74 65 20 72 6f   the complete ro
26c20 77 20 63 6f 6e 74 65 6e 74 20 66 6f 72 20 74 68  w content for th
26c30 65 20 72 6f 77 20 61 74 20 0a 2a 2a 20 77 68 69  e row at .** whi
26c40 63 68 20 63 75 72 73 6f 72 20 50 31 20 69 73 20  ch cursor P1 is 
26c50 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
26c60 6e 67 2e 0a 2a 2a 20 54 68 65 72 65 20 69 73 20  ng..** There is 
26c70 6e 6f 20 69 6e 74 65 72 70 72 65 74 61 74 69 6f  no interpretatio
26c80 6e 20 6f 66 20 74 68 65 20 64 61 74 61 2e 20 20  n of the data.  
26c90 0a 2a 2a 20 49 74 20 69 73 20 6a 75 73 74 20 63  .** It is just c
26ca0 6f 70 69 65 64 20 6f 6e 74 6f 20 74 68 65 20 50  opied onto the P
26cb0 32 20 72 65 67 69 73 74 65 72 20 65 78 61 63 74  2 register exact
26cc0 6c 79 20 61 73 20 0a 2a 2a 20 69 74 20 69 73 20  ly as .** it is 
26cd0 66 6f 75 6e 64 20 69 6e 20 74 68 65 20 64 61 74  found in the dat
26ce0 61 62 61 73 65 20 66 69 6c 65 2e 0a 2a 2a 0a 2a  abase file..**.*
26cf0 2a 20 49 66 20 63 75 72 73 6f 72 20 50 31 20 69  * If cursor P1 i
26d00 73 20 61 6e 20 69 6e 64 65 78 2c 20 74 68 65 6e  s an index, then
26d10 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 69 73 20   the content is 
26d20 74 68 65 20 6b 65 79 20 6f 66 20 74 68 65 20 72  the key of the r
26d30 6f 77 2e 0a 2a 2a 20 49 66 20 63 75 72 73 6f 72  ow..** If cursor
26d40 20 50 32 20 69 73 20 61 20 74 61 62 6c 65 2c 20   P2 is a table, 
26d50 74 68 65 6e 20 74 68 65 20 63 6f 6e 74 65 6e 74  then the content
26d60 20 65 78 74 72 61 63 74 65 64 20 69 73 20 74 68   extracted is th
26d70 65 20 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  e data..**.** If
26d80 20 74 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d   the P1 cursor m
26d90 75 73 74 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  ust be pointing 
26da0 74 6f 20 61 20 76 61 6c 69 64 20 72 6f 77 20 28  to a valid row (
26db0 6e 6f 74 20 61 20 4e 55 4c 4c 20 72 6f 77 29 0a  not a NULL row).
26dc0 2a 2a 20 6f 66 20 61 20 72 65 61 6c 20 74 61 62  ** of a real tab
26dd0 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f  le, not a pseudo
26de0 2d 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20  -table..*/.case 
26df0 4f 50 5f 52 6f 77 44 61 74 61 3a 20 7b 0a 20 20  OP_RowData: {.  
26e00 56 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a  VdbeCursor *pC;.
26e10 20 20 42 74 43 75 72 73 6f 72 20 2a 70 43 72 73    BtCursor *pCrs
26e20 72 3b 0a 20 20 75 33 32 20 6e 3b 0a 0a 20 20 70  r;.  u32 n;..  p
26e30 4f 75 74 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  Out = &aMem[pOp-
26e40 3e 70 32 5d 3b 0a 20 20 6d 65 6d 41 62 6f 75 74  >p2];.  memAbout
26e50 54 6f 43 68 61 6e 67 65 28 70 2c 20 70 4f 75 74  ToChange(p, pOut
26e60 29 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f  );..  assert( pO
26e70 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
26e80 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
26e90 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
26ea0 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
26eb0 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
26ec0 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
26ed0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
26ee0 54 52 45 45 20 29 3b 0a 20 20 61 73 73 65 72 74  TREE );.  assert
26ef0 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
26f00 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
26f10 43 2d 3e 6e 75 6c 6c 52 6f 77 3d 3d 30 20 29 3b  C->nullRow==0 );
26f20 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 75  .  assert( pC->u
26f30 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29 3b 0a  c.pCursor!=0 );.
26f40 20 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63    pCrsr = pC->uc
26f50 2e 70 43 75 72 73 6f 72 3b 0a 0a 20 20 2f 2a 20  .pCursor;..  /* 
26f60 54 68 65 20 4f 50 5f 52 6f 77 44 61 74 61 20 6f  The OP_RowData o
26f70 70 63 6f 64 65 73 20 61 6c 77 61 79 73 20 66 6f  pcodes always fo
26f80 6c 6c 6f 77 20 4f 50 5f 4e 6f 74 45 78 69 73 74  llow OP_NotExist
26f90 73 20 6f 72 0a 20 20 2a 2a 20 4f 50 5f 53 65 65  s or.  ** OP_See
26fa0 6b 52 6f 77 69 64 20 6f 72 20 4f 50 5f 52 65 77  kRowid or OP_Rew
26fb0 69 6e 64 2f 4f 70 5f 4e 65 78 74 20 77 69 74 68  ind/Op_Next with
26fc0 20 6e 6f 20 69 6e 74 65 72 76 65 6e 69 6e 67 20   no intervening 
26fd0 69 6e 73 74 72 75 63 74 69 6f 6e 73 0a 20 20 2a  instructions.  *
26fe0 2a 20 74 68 61 74 20 6d 69 67 68 74 20 69 6e 76  * that might inv
26ff0 61 6c 69 64 61 74 65 20 74 68 65 20 63 75 72 73  alidate the curs
27000 6f 72 2e 0a 20 20 2a 2a 20 49 66 20 74 68 69 73  or..  ** If this
27010 20 77 68 65 72 65 20 6e 6f 74 20 74 68 65 20 63   where not the c
27020 61 73 65 2c 20 6f 6e 20 6f 66 20 74 68 65 20 66  ase, on of the f
27030 6f 6c 6c 6f 77 69 6e 67 20 61 73 73 65 72 74 28  ollowing assert(
27040 29 73 0a 20 20 2a 2a 20 77 6f 75 6c 64 20 66 61  )s.  ** would fa
27050 69 6c 2e 20 20 53 68 6f 75 6c 64 20 74 68 69 73  il.  Should this
27060 20 65 76 65 72 20 63 68 61 6e 67 65 20 28 62 65   ever change (be
27070 63 61 75 73 65 20 6f 66 20 63 68 61 6e 67 65 73  cause of changes
27080 20 69 6e 20 74 68 65 20 63 6f 64 65 0a 20 20 2a   in the code.  *
27090 2a 20 67 65 6e 65 72 61 74 6f 72 29 20 74 68 65  * generator) the
270a0 6e 20 74 68 65 20 66 69 78 20 77 6f 75 6c 64 20  n the fix would 
270b0 62 65 20 74 6f 20 69 6e 73 65 72 74 20 61 20 63  be to insert a c
270c0 61 6c 6c 20 74 6f 0a 20 20 2a 2a 20 73 71 6c 69  all to.  ** sqli
270d0 74 65 33 56 64 62 65 43 75 72 73 6f 72 4d 6f 76  te3VdbeCursorMov
270e0 65 74 6f 28 29 2e 0a 20 20 2a 2f 0a 20 20 61 73  eto()..  */.  as
270f0 73 65 72 74 28 20 70 43 2d 3e 64 65 66 65 72 72  sert( pC->deferr
27100 65 64 4d 6f 76 65 74 6f 3d 3d 30 20 29 3b 0a 20  edMoveto==0 );. 
27110 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
27120 42 74 72 65 65 43 75 72 73 6f 72 49 73 56 61 6c  BtreeCursorIsVal
27130 69 64 28 70 43 72 73 72 29 20 29 3b 0a 23 69 66  id(pCrsr) );.#if
27140 20 30 20 20 2f 2a 20 4e 6f 74 20 72 65 71 75 69   0  /* Not requi
27150 72 65 64 20 64 75 65 20 74 6f 20 74 68 65 20 70  red due to the p
27160 72 65 76 69 6f 75 73 20 74 6f 20 61 73 73 65 72  revious to asser
27170 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 2a  t() statements *
27180 2f 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  /.  rc = sqlite3
27190 56 64 62 65 43 75 72 73 6f 72 4d 6f 76 65 74 6f  VdbeCursorMoveto
271a0 28 70 43 29 3b 0a 20 20 69 66 28 20 72 63 21 3d  (pC);.  if( rc!=
271b0 53 51 4c 49 54 45 5f 4f 4b 20 29 20 67 6f 74 6f  SQLITE_OK ) goto
271c0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
271d0 72 6f 72 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 6e  ror;.#endif..  n
271e0 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
271f0 61 79 6c 6f 61 64 53 69 7a 65 28 70 43 72 73 72  ayloadSize(pCrsr
27200 29 3b 0a 20 20 69 66 28 20 6e 3e 28 75 33 32 29  );.  if( n>(u32)
27210 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49 54  db->aLimit[SQLIT
27220 45 5f 4c 49 4d 49 54 5f 4c 45 4e 47 54 48 5d 20  E_LIMIT_LENGTH] 
27230 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f 5f  ){.    goto too_
27240 62 69 67 3b 0a 20 20 7d 0a 20 20 74 65 73 74 63  big;.  }.  testc
27250 61 73 65 28 20 6e 3d 3d 30 20 29 3b 0a 20 20 69  ase( n==0 );.  i
27260 66 28 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65  f( sqlite3VdbeMe
27270 6d 43 6c 65 61 72 41 6e 64 52 65 73 69 7a 65 28  mClearAndResize(
27280 70 4f 75 74 2c 20 4d 41 58 28 6e 2c 33 32 29 29  pOut, MAX(n,32))
27290 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 6e 6f 5f   ){.    goto no_
272a0 6d 65 6d 3b 0a 20 20 7d 0a 20 20 70 4f 75 74 2d  mem;.  }.  pOut-
272b0 3e 6e 20 3d 20 6e 3b 0a 20 20 4d 65 6d 53 65 74  >n = n;.  MemSet
272c0 54 79 70 65 46 6c 61 67 28 70 4f 75 74 2c 20 4d  TypeFlag(pOut, M
272d0 45 4d 5f 42 6c 6f 62 29 3b 0a 20 20 72 63 20 3d  EM_Blob);.  rc =
272e0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 79   sqlite3BtreePay
272f0 6c 6f 61 64 28 70 43 72 73 72 2c 20 30 2c 20 6e  load(pCrsr, 0, n
27300 2c 20 70 4f 75 74 2d 3e 7a 29 3b 0a 20 20 69 66  , pOut->z);.  if
27310 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
27320 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
27330 20 20 70 4f 75 74 2d 3e 65 6e 63 20 3d 20 53 51    pOut->enc = SQ
27340 4c 49 54 45 5f 55 54 46 38 3b 20 20 2f 2a 20 49  LITE_UTF8;  /* I
27350 6e 20 63 61 73 65 20 74 68 65 20 62 6c 6f 62 20  n case the blob 
27360 69 73 20 65 76 65 72 20 63 61 73 74 20 74 6f 20  is ever cast to 
27370 74 65 78 74 20 2a 2f 0a 20 20 55 50 44 41 54 45  text */.  UPDATE
27380 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a 45 28 70 4f  _MAX_BLOBSIZE(pO
27390 75 74 29 3b 0a 20 20 52 45 47 49 53 54 45 52 5f  ut);.  REGISTER_
273a0 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2c 20 70  TRACE(pOp->p2, p
273b0 4f 75 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  Out);.  break;.}
273c0 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 6f 77  ../* Opcode: Row
273d0 69 64 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  id P1 P2 * * *.*
273e0 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b 50 32  * Synopsis: r[P2
273f0 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 53 74  ]=rowid.**.** St
27400 6f 72 65 20 69 6e 20 72 65 67 69 73 74 65 72 20  ore in register 
27410 50 32 20 61 6e 20 69 6e 74 65 67 65 72 20 77 68  P2 an integer wh
27420 69 63 68 20 69 73 20 74 68 65 20 6b 65 79 20 6f  ich is the key o
27430 66 20 74 68 65 20 74 61 62 6c 65 20 65 6e 74 72  f the table entr
27440 79 20 74 68 61 74 0a 2a 2a 20 50 31 20 69 73 20  y that.** P1 is 
27450 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 20  currently point 
27460 74 6f 2e 0a 2a 2a 0a 2a 2a 20 50 31 20 63 61 6e  to..**.** P1 can
27470 20 62 65 20 65 69 74 68 65 72 20 61 6e 20 6f 72   be either an or
27480 64 69 6e 61 72 79 20 74 61 62 6c 65 20 6f 72 20  dinary table or 
27490 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  a virtual table.
274a0 20 20 54 68 65 72 65 20 75 73 65 64 20 74 6f 0a    There used to.
274b0 2a 2a 20 62 65 20 61 20 73 65 70 61 72 61 74 65  ** be a separate
274c0 20 4f 50 5f 56 52 6f 77 69 64 20 6f 70 63 6f 64   OP_VRowid opcod
274d0 65 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 76  e for use with v
274e0 69 72 74 75 61 6c 20 74 61 62 6c 65 73 2c 20 62  irtual tables, b
274f0 75 74 20 74 68 69 73 0a 2a 2a 20 6f 6e 65 20 6f  ut this.** one o
27500 70 63 6f 64 65 20 6e 6f 77 20 77 6f 72 6b 73 20  pcode now works 
27510 66 6f 72 20 62 6f 74 68 20 74 61 62 6c 65 20 74  for both table t
27520 79 70 65 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  ypes..*/.case OP
27530 5f 52 6f 77 69 64 3a 20 7b 20 20 20 20 20 20 20  _Rowid: {       
27540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75 74            /* out
27550 32 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f  2 */.  VdbeCurso
27560 72 20 2a 70 43 3b 0a 20 20 69 36 34 20 76 3b 0a  r *pC;.  i64 v;.
27570 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a    sqlite3_vtab *
27580 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73  pVtab;.  const s
27590 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70  qlite3_module *p
275a0 4d 6f 64 75 6c 65 3b 0a 0a 20 20 70 4f 75 74 20  Module;..  pOut 
275b0 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65  = out2Prerelease
275c0 28 70 2c 20 70 4f 70 29 3b 0a 20 20 61 73 73 65  (p, pOp);.  asse
275d0 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26  rt( pOp->p1>=0 &
275e0 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75  & pOp->p1<p->nCu
275f0 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70  rsor );.  pC = p
27600 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d  ->apCsr[pOp->p1]
27610 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d  ;.  assert( pC!=
27620 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
27630 43 2d 3e 65 43 75 72 54 79 70 65 21 3d 43 55 52  C->eCurType!=CUR
27640 54 59 50 45 5f 50 53 45 55 44 4f 20 7c 7c 20 70  TYPE_PSEUDO || p
27650 43 2d 3e 6e 75 6c 6c 52 6f 77 20 29 3b 0a 20 20  C->nullRow );.  
27660 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  if( pC->nullRow 
27670 29 7b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61  ){.    pOut->fla
27680 67 73 20 3d 20 4d 45 4d 5f 4e 75 6c 6c 3b 0a 20  gs = MEM_Null;. 
27690 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 65 6c 73     break;.  }els
276a0 65 20 69 66 28 20 70 43 2d 3e 64 65 66 65 72 72  e if( pC->deferr
276b0 65 64 4d 6f 76 65 74 6f 20 29 7b 0a 20 20 20 20  edMoveto ){.    
276c0 76 20 3d 20 70 43 2d 3e 6d 6f 76 65 74 6f 54 61  v = pC->movetoTa
276d0 72 67 65 74 3b 0a 23 69 66 6e 64 65 66 20 53 51  rget;.#ifndef SQ
276e0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
276f0 4c 54 41 42 4c 45 0a 20 20 7d 65 6c 73 65 20 69  LTABLE.  }else i
27700 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d  f( pC->eCurType=
27710 3d 43 55 52 54 59 50 45 5f 56 54 41 42 20 29 7b  =CURTYPE_VTAB ){
27720 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27730 3e 75 63 2e 70 56 43 75 72 21 3d 30 20 29 3b 0a  >uc.pVCur!=0 );.
27740 20 20 20 20 70 56 74 61 62 20 3d 20 70 43 2d 3e      pVtab = pC->
27750 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
27760 0a 20 20 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70  .    pModule = p
27770 56 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20  Vtab->pModule;. 
27780 20 20 20 61 73 73 65 72 74 28 20 70 4d 6f 64 75     assert( pModu
27790 6c 65 2d 3e 78 52 6f 77 69 64 20 29 3b 0a 20 20  le->xRowid );.  
277a0 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e    rc = pModule->
277b0 78 52 6f 77 69 64 28 70 43 2d 3e 75 63 2e 70 56  xRowid(pC->uc.pV
277c0 43 75 72 2c 20 26 76 29 3b 0a 20 20 20 20 73 71  Cur, &v);.    sq
277d0 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45  lite3VtabImportE
277e0 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b  rrmsg(p, pVtab);
277f0 0a 20 20 20 20 69 66 28 20 72 63 20 29 20 67 6f  .    if( rc ) go
27800 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
27810 65 72 72 6f 72 3b 0a 23 65 6e 64 69 66 20 2f 2a  error;.#endif /*
27820 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
27830 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 20 20 7d  TUALTABLE */.  }
27840 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
27850 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
27860 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
27870 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d  .    assert( pC-
27880 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20 29  >uc.pCursor!=0 )
27890 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
278a0 65 33 56 64 62 65 43 75 72 73 6f 72 52 65 73 74  e3VdbeCursorRest
278b0 6f 72 65 28 70 43 29 3b 0a 20 20 20 20 69 66 28  ore(pC);.    if(
278c0 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74   rc ) goto abort
278d0 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20  _due_to_error;. 
278e0 20 20 20 69 66 28 20 70 43 2d 3e 6e 75 6c 6c 52     if( pC->nullR
278f0 6f 77 20 29 7b 0a 20 20 20 20 20 20 70 4f 75 74  ow ){.      pOut
27900 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 4e 75  ->flags = MEM_Nu
27910 6c 6c 3b 0a 20 20 20 20 20 20 62 72 65 61 6b 3b  ll;.      break;
27920 0a 20 20 20 20 7d 0a 20 20 20 20 76 20 3d 20 73  .    }.    v = s
27930 71 6c 69 74 65 33 42 74 72 65 65 49 6e 74 65 67  qlite3BtreeInteg
27940 65 72 4b 65 79 28 70 43 2d 3e 75 63 2e 70 43 75  erKey(pC->uc.pCu
27950 72 73 6f 72 29 3b 0a 20 20 7d 0a 20 20 70 4f 75  rsor);.  }.  pOu
27960 74 2d 3e 75 2e 69 20 3d 20 76 3b 0a 20 20 62 72  t->u.i = v;.  br
27970 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64  eak;.}../* Opcod
27980 65 3a 20 4e 75 6c 6c 52 6f 77 20 50 31 20 2a 20  e: NullRow P1 * 
27990 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 4d 6f 76 65  * * *.**.** Move
279a0 20 74 68 65 20 63 75 72 73 6f 72 20 50 31 20 74   the cursor P1 t
279b0 6f 20 61 20 6e 75 6c 6c 20 72 6f 77 2e 20 20 41  o a null row.  A
279c0 6e 79 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 65  ny OP_Column ope
279d0 72 61 74 69 6f 6e 73 0a 2a 2a 20 74 68 61 74 20  rations.** that 
279e0 6f 63 63 75 72 20 77 68 69 6c 65 20 74 68 65 20  occur while the 
279f0 63 75 72 73 6f 72 20 69 73 20 6f 6e 20 74 68 65  cursor is on the
27a00 20 6e 75 6c 6c 20 72 6f 77 20 77 69 6c 6c 20 61   null row will a
27a10 6c 77 61 79 73 0a 2a 2a 20 77 72 69 74 65 20 61  lways.** write a
27a20 20 4e 55 4c 4c 2e 0a 2a 2f 0a 63 61 73 65 20 4f   NULL..*/.case O
27a30 50 5f 4e 75 6c 6c 52 6f 77 3a 20 7b 0a 20 20 56  P_NullRow: {.  V
27a40 64 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 0a 0a  dbeCursor *pC;..
27a50 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
27a60 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
27a70 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
27a80 70 43 20 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f  pC = p->apCsr[pO
27a90 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
27aa0 28 20 70 43 21 3d 30 20 29 3b 0a 20 20 70 43 2d  ( pC!=0 );.  pC-
27ab0 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20 20  >nullRow = 1;.  
27ac0 70 43 2d 3e 63 61 63 68 65 53 74 61 74 75 73 20  pC->cacheStatus 
27ad0 3d 20 43 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20  = CACHE_STALE;. 
27ae0 20 69 66 28 20 70 43 2d 3e 65 43 75 72 54 79 70   if( pC->eCurTyp
27af0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
27b00 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
27b10 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d  pC->uc.pCursor!=
27b20 30 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 );.    sqlite3
27b30 42 74 72 65 65 43 6c 65 61 72 43 75 72 73 6f 72  BtreeClearCursor
27b40 28 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 29  (pC->uc.pCursor)
27b50 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d  ;.  }.  break;.}
27b60 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4c 61 73  ../* Opcode: Las
27b70 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a  t P1 P2 P3 * *.*
27b80 2a 0a 2a 2a 20 54 68 65 20 6e 65 78 74 20 75 73  *.** The next us
27b90 65 20 6f 66 20 74 68 65 20 52 6f 77 69 64 20 6f  e of the Rowid o
27ba0 72 20 43 6f 6c 75 6d 6e 20 6f 72 20 50 72 65 76  r Column or Prev
27bb0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 66 6f 72   instruction for
27bc0 20 50 31 20 0a 2a 2a 20 77 69 6c 6c 20 72 65 66   P1 .** will ref
27bd0 65 72 20 74 6f 20 74 68 65 20 6c 61 73 74 20 65  er to the last e
27be0 6e 74 72 79 20 69 6e 20 74 68 65 20 64 61 74 61  ntry in the data
27bf0 62 61 73 65 20 74 61 62 6c 65 20 6f 72 20 69 6e  base table or in
27c00 64 65 78 2e 0a 2a 2a 20 49 66 20 74 68 65 20 74  dex..** If the t
27c10 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20 69 73  able or index is
27c20 20 65 6d 70 74 79 20 61 6e 64 20 50 32 3e 30 2c   empty and P2>0,
27c30 20 74 68 65 6e 20 6a 75 6d 70 20 69 6d 6d 65 64   then jump immed
27c40 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a 2a  iately to P2..**
27c50 20 49 66 20 50 32 20 69 73 20 30 20 6f 72 20 69   If P2 is 0 or i
27c60 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
27c70 6e 64 65 78 20 69 73 20 6e 6f 74 20 65 6d 70 74  ndex is not empt
27c80 79 2c 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a  y, fall through.
27c90 2a 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77  ** to the follow
27ca0 69 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e  ing instruction.
27cb0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
27cc0 64 65 20 6c 65 61 76 65 73 20 74 68 65 20 63 75  de leaves the cu
27cd0 72 73 6f 72 20 63 6f 6e 66 69 67 75 72 65 64 20  rsor configured 
27ce0 74 6f 20 6d 6f 76 65 20 69 6e 20 72 65 76 65 72  to move in rever
27cf0 73 65 20 6f 72 64 65 72 2c 0a 2a 2a 20 66 72 6f  se order,.** fro
27d00 6d 20 74 68 65 20 65 6e 64 20 74 6f 77 61 72 64  m the end toward
27d10 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 2e 20   the beginning. 
27d20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
27d30 20 74 68 65 20 63 75 72 73 6f 72 20 69 73 0a 2a   the cursor is.*
27d40 2a 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20  * configured to 
27d50 75 73 65 20 50 72 65 76 2c 20 6e 6f 74 20 4e 65  use Prev, not Ne
27d60 78 74 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 33 20  xt..**.** If P3 
27d70 69 73 20 2d 31 2c 20 74 68 65 6e 20 74 68 65 20  is -1, then the 
27d80 63 75 72 73 6f 72 20 69 73 20 70 6f 73 69 74 69  cursor is positi
27d90 6f 6e 65 64 20 61 74 20 74 68 65 20 65 6e 64 20  oned at the end 
27da0 6f 66 20 74 68 65 20 62 74 72 65 65 0a 2a 2a 20  of the btree.** 
27db0 66 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 20  for the purpose 
27dc0 6f 66 20 61 70 70 65 6e 64 69 6e 67 20 61 20 6e  of appending a n
27dd0 65 77 20 65 6e 74 72 79 20 6f 6e 74 6f 20 74 68  ew entry onto th
27de0 65 20 62 74 72 65 65 2e 20 20 49 6e 20 74 68 61  e btree.  In tha
27df0 74 0a 2a 2a 20 63 61 73 65 20 50 32 20 6d 75 73  t.** case P2 mus
27e00 74 20 62 65 20 30 2e 20 20 49 74 20 69 73 20 61  t be 0.  It is a
27e10 73 73 75 6d 65 64 20 74 68 61 74 20 74 68 65 20  ssumed that the 
27e20 63 75 72 73 6f 72 20 69 73 20 75 73 65 64 20 6f  cursor is used o
27e30 6e 6c 79 20 66 6f 72 0a 2a 2a 20 61 70 70 65 6e  nly for.** appen
27e40 64 69 6e 67 20 61 6e 64 20 73 6f 20 69 66 20 74  ding and so if t
27e50 68 65 20 63 75 72 73 6f 72 20 69 73 20 76 61 6c  he cursor is val
27e60 69 64 2c 20 74 68 65 6e 20 74 68 65 20 63 75 72  id, then the cur
27e70 73 6f 72 20 6d 75 73 74 20 61 6c 72 65 61 64 79  sor must already
27e80 0a 2a 2a 20 62 65 20 70 6f 69 6e 74 69 6e 67 20  .** be pointing 
27e90 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68  at the end of th
27ea0 65 20 62 74 72 65 65 20 61 6e 64 20 73 6f 20 6e  e btree and so n
27eb0 6f 20 63 68 61 6e 67 65 73 20 61 72 65 20 6d 61  o changes are ma
27ec0 64 65 20 74 6f 0a 2a 2a 20 74 68 65 20 63 75 72  de to.** the cur
27ed0 73 6f 72 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  sor..*/.case OP_
27ee0 4c 61 73 74 3a 20 7b 20 20 20 20 20 20 20 20 2f  Last: {        /
27ef0 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65  * jump */.  Vdbe
27f00 43 75 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74  Cursor *pC;.  Bt
27f10 43 75 72 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20  Cursor *pCrsr;. 
27f20 20 69 6e 74 20 72 65 73 3b 0a 0a 20 20 61 73 73   int res;..  ass
27f30 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
27f40 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
27f50 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
27f60 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
27f70 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
27f80 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
27f90 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55  pC->eCurType==CU
27fa0 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20  RTYPE_BTREE );. 
27fb0 20 70 43 72 73 72 20 3d 20 70 43 2d 3e 75 63 2e   pCrsr = pC->uc.
27fc0 70 43 75 72 73 6f 72 3b 0a 20 20 72 65 73 20 3d  pCursor;.  res =
27fd0 20 30 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   0;.  assert( pC
27fe0 72 73 72 21 3d 30 20 29 3b 0a 20 20 70 43 2d 3e  rsr!=0 );.  pC->
27ff0 73 65 65 6b 52 65 73 75 6c 74 20 3d 20 70 4f 70  seekResult = pOp
28000 2d 3e 70 33 3b 0a 23 69 66 64 65 66 20 53 51 4c  ->p3;.#ifdef SQL
28010 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
28020 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 4c 61 73 74  seekOp = OP_Last
28030 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28 20 70  ;.#endif.  if( p
28040 4f 70 2d 3e 70 33 3d 3d 30 20 7c 7c 20 21 73 71  Op->p3==0 || !sq
28050 6c 69 74 65 33 42 74 72 65 65 43 75 72 73 6f 72  lite3BtreeCursor
28060 49 73 56 61 6c 69 64 4e 4e 28 70 43 72 73 72 29  IsValidNN(pCrsr)
28070 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   ){.    rc = sql
28080 69 74 65 33 42 74 72 65 65 4c 61 73 74 28 70 43  ite3BtreeLast(pC
28090 72 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  rsr, &res);.    
280a0 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 28 75  pC->nullRow = (u
280b0 38 29 72 65 73 3b 0a 20 20 20 20 70 43 2d 3e 64  8)res;.    pC->d
280c0 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 20 3d 20  eferredMoveto = 
280d0 30 3b 0a 20 20 20 20 70 43 2d 3e 63 61 63 68 65  0;.    pC->cache
280e0 53 74 61 74 75 73 20 3d 20 43 41 43 48 45 5f 53  Status = CACHE_S
280f0 54 41 4c 45 3b 0a 20 20 20 20 69 66 28 20 72 63  TALE;.    if( rc
28100 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
28110 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20  e_to_error;.    
28120 69 66 28 20 70 4f 70 2d 3e 70 32 3e 30 20 29 7b  if( pOp->p2>0 ){
28130 0a 20 20 20 20 20 20 56 64 62 65 42 72 61 6e 63  .      VdbeBranc
28140 68 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29  hTaken(res!=0,2)
28150 3b 0a 20 20 20 20 20 20 69 66 28 20 72 65 73 20  ;.      if( res 
28160 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70  ) goto jump_to_p
28170 32 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65  2;.    }.  }else
28180 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f  {.    assert( pO
28190 70 2d 3e 70 32 3d 3d 30 20 29 3b 0a 20 20 7d 0a  p->p2==0 );.  }.
281a0 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 0a 2f 2a 20    break;.}.../* 
281b0 4f 70 63 6f 64 65 3a 20 53 6f 72 74 20 50 31 20  Opcode: Sort P1 
281c0 50 32 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54  P2 * * *.**.** T
281d0 68 69 73 20 6f 70 63 6f 64 65 20 64 6f 65 73 20  his opcode does 
281e0 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65  exactly the same
281f0 20 74 68 69 6e 67 20 61 73 20 4f 50 5f 52 65 77   thing as OP_Rew
28200 69 6e 64 20 65 78 63 65 70 74 20 74 68 61 74 0a  ind except that.
28210 2a 2a 20 69 74 20 69 6e 63 72 65 6d 65 6e 74 73  ** it increments
28220 20 61 6e 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   an undocumented
28230 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
28240 20 75 73 65 64 20 66 6f 72 20 74 65 73 74 69 6e   used for testin
28250 67 2e 0a 2a 2a 0a 2a 2a 20 53 6f 72 74 69 6e 67  g..**.** Sorting
28260 20 69 73 20 61 63 63 6f 6d 70 6c 69 73 68 65 64   is accomplished
28270 20 62 79 20 77 72 69 74 69 6e 67 20 72 65 63 6f   by writing reco
28280 72 64 73 20 69 6e 74 6f 20 61 20 73 6f 72 74 69  rds into a sorti
28290 6e 67 20 69 6e 64 65 78 2c 0a 2a 2a 20 74 68 65  ng index,.** the
282a0 6e 20 72 65 77 69 6e 64 69 6e 67 20 74 68 61 74  n rewinding that
282b0 20 69 6e 64 65 78 20 61 6e 64 20 70 6c 61 79 69   index and playi
282c0 6e 67 20 69 74 20 62 61 63 6b 20 66 72 6f 6d 20  ng it back from 
282d0 62 65 67 69 6e 6e 69 6e 67 20 74 6f 0a 2a 2a 20  beginning to.** 
282e0 65 6e 64 2e 20 20 57 65 20 75 73 65 20 74 68 65  end.  We use the
282f0 20 4f 50 5f 53 6f 72 74 20 6f 70 63 6f 64 65 20   OP_Sort opcode 
28300 69 6e 73 74 65 61 64 20 6f 66 20 4f 50 5f 52 65  instead of OP_Re
28310 77 69 6e 64 20 74 6f 20 64 6f 20 74 68 65 0a 2a  wind to do the.*
28320 2a 20 72 65 77 69 6e 64 69 6e 67 20 73 6f 20 74  * rewinding so t
28330 68 61 74 20 74 68 65 20 67 6c 6f 62 61 6c 20 76  hat the global v
28340 61 72 69 61 62 6c 65 20 77 69 6c 6c 20 62 65 20  ariable will be 
28350 69 6e 63 72 65 6d 65 6e 74 65 64 20 61 6e 64 0a  incremented and.
28360 2a 2a 20 72 65 67 72 65 73 73 69 6f 6e 20 74 65  ** regression te
28370 73 74 73 20 63 61 6e 20 64 65 74 65 72 6d 69 6e  sts can determin
28380 65 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74  e whether or not
28390 20 74 68 65 20 6f 70 74 69 6d 69 7a 65 72 20 69   the optimizer i
283a0 73 0a 2a 2a 20 63 6f 72 72 65 63 74 6c 79 20 6f  s.** correctly o
283b0 70 74 69 6d 69 7a 69 6e 67 20 6f 75 74 20 73 6f  ptimizing out so
283c0 72 74 73 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f  rts..*/.case OP_
283d0 53 6f 72 74 65 72 53 6f 72 74 3a 20 20 20 20 2f  SorterSort:    /
283e0 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
283f0 50 5f 53 6f 72 74 3a 20 7b 20 20 20 20 20 20 20  P_Sort: {       
28400 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 23 69 66 64   /* jump */.#ifd
28410 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20  ef SQLITE_TEST. 
28420 20 73 71 6c 69 74 65 33 5f 73 6f 72 74 5f 63 6f   sqlite3_sort_co
28430 75 6e 74 2b 2b 3b 0a 20 20 73 71 6c 69 74 65 33  unt++;.  sqlite3
28440 5f 73 65 61 72 63 68 5f 63 6f 75 6e 74 2d 2d 3b  _search_count--;
28450 0a 23 65 6e 64 69 66 0a 20 20 70 2d 3e 61 43 6f  .#endif.  p->aCo
28460 75 6e 74 65 72 5b 53 51 4c 49 54 45 5f 53 54 4d  unter[SQLITE_STM
28470 54 53 54 41 54 55 53 5f 53 4f 52 54 5d 2b 2b 3b  TSTATUS_SORT]++;
28480 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f 75  .  /* Fall throu
28490 67 68 20 69 6e 74 6f 20 4f 50 5f 52 65 77 69 6e  gh into OP_Rewin
284a0 64 20 2a 2f 0a 7d 0a 2f 2a 20 4f 70 63 6f 64 65  d */.}./* Opcode
284b0 3a 20 52 65 77 69 6e 64 20 50 31 20 50 32 20 2a  : Rewind P1 P2 *
284c0 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e   * *.**.** The n
284d0 65 78 74 20 75 73 65 20 6f 66 20 74 68 65 20 52  ext use of the R
284e0 6f 77 69 64 20 6f 72 20 43 6f 6c 75 6d 6e 20 6f  owid or Column o
284f0 72 20 4e 65 78 74 20 69 6e 73 74 72 75 63 74 69  r Next instructi
28500 6f 6e 20 66 6f 72 20 50 31 20 0a 2a 2a 20 77 69  on for P1 .** wi
28510 6c 6c 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  ll refer to the 
28520 66 69 72 73 74 20 65 6e 74 72 79 20 69 6e 20 74  first entry in t
28530 68 65 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  he database tabl
28540 65 20 6f 72 20 69 6e 64 65 78 2e 0a 2a 2a 20 49  e or index..** I
28550 66 20 74 68 65 20 74 61 62 6c 65 20 6f 72 20 69  f the table or i
28560 6e 64 65 78 20 69 73 20 65 6d 70 74 79 2c 20 6a  ndex is empty, j
28570 75 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ump immediately 
28580 74 6f 20 50 32 2e 0a 2a 2a 20 49 66 20 74 68 65  to P2..** If the
28590 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 20   table or index 
285a0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2c 20 66 61  is not empty, fa
285b0 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
285c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 0a 2a 2a 20  e following .** 
285d0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2a 0a  instruction..**.
285e0 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6c  ** This opcode l
285f0 65 61 76 65 73 20 74 68 65 20 63 75 72 73 6f 72  eaves the cursor
28600 20 63 6f 6e 66 69 67 75 72 65 64 20 74 6f 20 6d   configured to m
28610 6f 76 65 20 69 6e 20 66 6f 72 77 61 72 64 20 6f  ove in forward o
28620 72 64 65 72 2c 0a 2a 2a 20 66 72 6f 6d 20 74 68  rder,.** from th
28630 65 20 62 65 67 69 6e 6e 69 6e 67 20 74 6f 77 61  e beginning towa
28640 72 64 20 74 68 65 20 65 6e 64 2e 20 20 49 6e 20  rd the end.  In 
28650 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68 65  other words, the
28660 20 63 75 72 73 6f 72 20 69 73 0a 2a 2a 20 63 6f   cursor is.** co
28670 6e 66 69 67 75 72 65 64 20 74 6f 20 75 73 65 20  nfigured to use 
28680 4e 65 78 74 2c 20 6e 6f 74 20 50 72 65 76 2e 0a  Next, not Prev..
28690 2a 2f 0a 63 61 73 65 20 4f 50 5f 52 65 77 69 6e  */.case OP_Rewin
286a0 64 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a  d: {        /* j
286b0 75 6d 70 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  ump */.  VdbeCur
286c0 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 43 75 72  sor *pC;.  BtCur
286d0 73 6f 72 20 2a 70 43 72 73 72 3b 0a 20 20 69 6e  sor *pCrsr;.  in
286e0 74 20 72 65 73 3b 0a 0a 20 20 61 73 73 65 72 74  t res;..  assert
286f0 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20  ( pOp->p1>=0 && 
28700 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73  pOp->p1<p->nCurs
28710 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e  or );.  pC = p->
28720 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
28730 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30 20    assert( pC!=0 
28740 29 3b 0a 20 20 61 73 73 65 72 74 28 20 69 73 53  );.  assert( isS
28750 6f 72 74 65 72 28 70 43 29 3d 3d 28 70 4f 70 2d  orter(pC)==(pOp-
28760 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 53 6f 72 74  >opcode==OP_Sort
28770 65 72 53 6f 72 74 29 20 29 3b 0a 20 20 72 65 73  erSort) );.  res
28780 20 3d 20 31 3b 0a 23 69 66 64 65 66 20 53 51 4c   = 1;.#ifdef SQL
28790 49 54 45 5f 44 45 42 55 47 0a 20 20 70 43 2d 3e  ITE_DEBUG.  pC->
287a0 73 65 65 6b 4f 70 20 3d 20 4f 50 5f 52 65 77 69  seekOp = OP_Rewi
287b0 6e 64 3b 0a 23 65 6e 64 69 66 0a 20 20 69 66 28  nd;.#endif.  if(
287c0 20 69 73 53 6f 72 74 65 72 28 70 43 29 20 29 7b   isSorter(pC) ){
287d0 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
287e0 33 56 64 62 65 53 6f 72 74 65 72 52 65 77 69 6e  3VdbeSorterRewin
287f0 64 28 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 7d  d(pC, &res);.  }
28800 65 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74  else{.    assert
28810 28 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d  ( pC->eCurType==
28820 43 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b  CURTYPE_BTREE );
28830 0a 20 20 20 20 70 43 72 73 72 20 3d 20 70 43 2d  .    pCrsr = pC-
28840 3e 75 63 2e 70 43 75 72 73 6f 72 3b 0a 20 20 20  >uc.pCursor;.   
28850 20 61 73 73 65 72 74 28 20 70 43 72 73 72 20 29   assert( pCrsr )
28860 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
28870 65 33 42 74 72 65 65 46 69 72 73 74 28 70 43 72  e3BtreeFirst(pCr
28880 73 72 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 70  sr, &res);.    p
28890 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
288a0 6f 20 3d 20 30 3b 0a 20 20 20 20 70 43 2d 3e 63  o = 0;.    pC->c
288b0 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41 43  acheStatus = CAC
288c0 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20 20  HE_STALE;.  }.  
288d0 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
288e0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
288f0 3b 0a 20 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20  ;.  pC->nullRow 
28900 3d 20 28 75 38 29 72 65 73 3b 0a 20 20 61 73 73  = (u8)res;.  ass
28910 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e 30 20 26  ert( pOp->p2>0 &
28920 26 20 70 4f 70 2d 3e 70 32 3c 70 2d 3e 6e 4f 70  & pOp->p2<p->nOp
28930 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63 68   );.  VdbeBranch
28940 54 61 6b 65 6e 28 72 65 73 21 3d 30 2c 32 29 3b  Taken(res!=0,2);
28950 0a 20 20 69 66 28 20 72 65 73 20 29 20 67 6f 74  .  if( res ) got
28960 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
28970 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
28980 6f 64 65 3a 20 4e 65 78 74 20 50 31 20 50 32 20  ode: Next P1 P2 
28990 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 41  P3 P4 P5.**.** A
289a0 64 76 61 6e 63 65 20 63 75 72 73 6f 72 20 50 31  dvance cursor P1
289b0 20 73 6f 20 74 68 61 74 20 69 74 20 70 6f 69 6e   so that it poin
289c0 74 73 20 74 6f 20 74 68 65 20 6e 65 78 74 20 6b  ts to the next k
289d0 65 79 2f 64 61 74 61 20 70 61 69 72 20 69 6e 20  ey/data pair in 
289e0 69 74 73 0a 2a 2a 20 74 61 62 6c 65 20 6f 72 20  its.** table or 
289f0 69 6e 64 65 78 2e 20 20 49 66 20 74 68 65 72 65  index.  If there
28a00 20 61 72 65 20 6e 6f 20 6d 6f 72 65 20 6b 65 79   are no more key
28a10 2f 76 61 6c 75 65 20 70 61 69 72 73 20 74 68 65  /value pairs the
28a20 6e 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 0a 2a  n fall through.*
28a30 2a 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f 77 69  * to the followi
28a40 6e 67 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20  ng instruction. 
28a50 20 42 75 74 20 69 66 20 74 68 65 20 63 75 72 73   But if the curs
28a60 6f 72 20 61 64 76 61 6e 63 65 20 77 61 73 20 73  or advance was s
28a70 75 63 63 65 73 73 66 75 6c 2c 0a 2a 2a 20 6a 75  uccessful,.** ju
28a80 6d 70 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  mp immediately t
28a90 6f 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  o P2..**.** The 
28aa0 4e 65 78 74 20 6f 70 63 6f 64 65 20 69 73 20 6f  Next opcode is o
28ab0 6e 6c 79 20 76 61 6c 69 64 20 66 6f 6c 6c 6f 77  nly valid follow
28ac0 69 6e 67 20 61 6e 20 53 65 65 6b 47 54 2c 20 53  ing an SeekGT, S
28ad0 65 65 6b 47 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f  eekGE, or.** OP_
28ae0 52 65 77 69 6e 64 20 6f 70 63 6f 64 65 20 75 73  Rewind opcode us
28af0 65 64 20 74 6f 20 70 6f 73 69 74 69 6f 6e 20 74  ed to position t
28b00 68 65 20 63 75 72 73 6f 72 2e 20 20 4e 65 78 74  he cursor.  Next
28b10 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 0a   is not allowed.
28b20 2a 2a 20 74 6f 20 66 6f 6c 6c 6f 77 20 53 65 65  ** to follow See
28b30 6b 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 6f 72 20  kLT, SeekLE, or 
28b40 4f 50 5f 4c 61 73 74 2e 0a 2a 2a 0a 2a 2a 20 54  OP_Last..**.** T
28b50 68 65 20 50 31 20 63 75 72 73 6f 72 20 6d 75 73  he P1 cursor mus
28b60 74 20 62 65 20 66 6f 72 20 61 20 72 65 61 6c 20  t be for a real 
28b70 74 61 62 6c 65 2c 20 6e 6f 74 20 61 20 70 73 65  table, not a pse
28b80 75 64 6f 2d 74 61 62 6c 65 2e 20 20 50 31 20 6d  udo-table.  P1 m
28b90 75 73 74 20 68 61 76 65 0a 2a 2a 20 62 65 65 6e  ust have.** been
28ba0 20 6f 70 65 6e 65 64 20 70 72 69 6f 72 20 74 6f   opened prior to
28bb0 20 74 68 69 73 20 6f 70 63 6f 64 65 20 6f 72 20   this opcode or 
28bc0 74 68 65 20 70 72 6f 67 72 61 6d 20 77 69 6c 6c  the program will
28bd0 20 73 65 67 66 61 75 6c 74 2e 0a 2a 2a 0a 2a 2a   segfault..**.**
28be0 20 54 68 65 20 50 33 20 76 61 6c 75 65 20 69 73   The P3 value is
28bf0 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65 20 62   a hint to the b
28c00 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74  tree implementat
28c10 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c 20 74  ion. If P3==1, t
28c20 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50 31 20  hat.** means P1 
28c30 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65 78 20  is an SQL index 
28c40 61 6e 64 20 74 68 61 74 20 74 68 69 73 20 69 6e  and that this in
28c50 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c 64 20  struction could 
28c60 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f 6d 69  have been.** omi
28c70 74 74 65 64 20 69 66 20 74 68 61 74 20 69 6e 64  tted if that ind
28c80 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e 69 71  ex had been uniq
28c90 75 65 2e 20 20 50 33 20 69 73 20 75 73 75 61 6c  ue.  P3 is usual
28ca0 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a 2a 20  ly 0.  P3 is.** 
28cb0 61 6c 77 61 79 73 20 65 69 74 68 65 72 20 30 20  always either 0 
28cc0 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69  or 1..**.** P4 i
28cd0 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79 70 65  s always of type
28ce0 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54 68 65   P4_ADVANCE. The
28cf0 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e 74 65   function pointe
28d00 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73  r points to.** s
28d10 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74 28  qlite3BtreeNext(
28d20 29 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  )..**.** If P5 i
28d30 73 20 70 6f 73 69 74 69 76 65 20 61 6e 64 20 74  s positive and t
28d40 68 65 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e  he jump is taken
28d50 2c 20 74 68 65 6e 20 65 76 65 6e 74 20 63 6f 75  , then event cou
28d60 6e 74 65 72 0a 2a 2a 20 6e 75 6d 62 65 72 20 50  nter.** number P
28d70 35 2d 31 20 69 6e 20 74 68 65 20 70 72 65 70 61  5-1 in the prepa
28d80 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73  red statement is
28d90 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a   incremented..**
28da0 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a 20 50 72  .** See also: Pr
28db0 65 76 2c 20 4e 65 78 74 49 66 4f 70 65 6e 0a 2a  ev, NextIfOpen.*
28dc0 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 4e 65 78  /./* Opcode: Nex
28dd0 74 49 66 4f 70 65 6e 20 50 31 20 50 32 20 50 33  tIfOpen P1 P2 P3
28de0 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 54 68 69   P4 P5.**.** Thi
28df0 73 20 6f 70 63 6f 64 65 20 77 6f 72 6b 73 20 6a  s opcode works j
28e00 75 73 74 20 6c 69 6b 65 20 4e 65 78 74 20 65 78  ust like Next ex
28e10 63 65 70 74 20 74 68 61 74 20 69 66 20 63 75 72  cept that if cur
28e20 73 6f 72 20 50 31 20 69 73 20 6e 6f 74 0a 2a 2a  sor P1 is not.**
28e30 20 6f 70 65 6e 20 69 74 20 62 65 68 61 76 65 73   open it behaves
28e40 20 61 20 6e 6f 2d 6f 70 2e 0a 2a 2f 0a 2f 2a 20   a no-op..*/./* 
28e50 4f 70 63 6f 64 65 3a 20 50 72 65 76 20 50 31 20  Opcode: Prev P1 
28e60 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
28e70 2a 20 42 61 63 6b 20 75 70 20 63 75 72 73 6f 72  * Back up cursor
28e80 20 50 31 20 73 6f 20 74 68 61 74 20 69 74 20 70   P1 so that it p
28e90 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 70 72 65  oints to the pre
28ea0 76 69 6f 75 73 20 6b 65 79 2f 64 61 74 61 20 70  vious key/data p
28eb0 61 69 72 20 69 6e 20 69 74 73 0a 2a 2a 20 74 61  air in its.** ta
28ec0 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 49  ble or index.  I
28ed0 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 70 72  f there is no pr
28ee0 65 76 69 6f 75 73 20 6b 65 79 2f 76 61 6c 75 65  evious key/value
28ef0 20 70 61 69 72 73 20 74 68 65 6e 20 66 61 6c 6c   pairs then fall
28f00 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74 6f 20 74   through.** to t
28f10 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 73  he following ins
28f20 74 72 75 63 74 69 6f 6e 2e 20 20 42 75 74 20 69  truction.  But i
28f30 66 20 74 68 65 20 63 75 72 73 6f 72 20 62 61 63  f the cursor bac
28f40 6b 75 70 20 77 61 73 20 73 75 63 63 65 73 73 66  kup was successf
28f50 75 6c 2c 0a 2a 2a 20 6a 75 6d 70 20 69 6d 6d 65  ul,.** jump imme
28f60 64 69 61 74 65 6c 79 20 74 6f 20 50 32 2e 0a 2a  diately to P2..*
28f70 2a 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 72 65 76  *.**.** The Prev
28f80 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20   opcode is only 
28f90 76 61 6c 69 64 20 66 6f 6c 6c 6f 77 69 6e 67 20  valid following 
28fa0 61 6e 20 53 65 65 6b 4c 54 2c 20 53 65 65 6b 4c  an SeekLT, SeekL
28fb0 45 2c 20 6f 72 0a 2a 2a 20 4f 50 5f 4c 61 73 74  E, or.** OP_Last
28fc0 20 6f 70 63 6f 64 65 20 75 73 65 64 20 74 6f 20   opcode used to 
28fd0 70 6f 73 69 74 69 6f 6e 20 74 68 65 20 63 75 72  position the cur
28fe0 73 6f 72 2e 20 20 50 72 65 76 20 69 73 20 6e 6f  sor.  Prev is no
28ff0 74 20 61 6c 6c 6f 77 65 64 0a 2a 2a 20 74 6f 20  t allowed.** to 
29000 66 6f 6c 6c 6f 77 20 53 65 65 6b 47 54 2c 20 53  follow SeekGT, S
29010 65 65 6b 47 45 2c 20 6f 72 20 4f 50 5f 52 65 77  eekGE, or OP_Rew
29020 69 6e 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  ind..**.** The P
29030 31 20 63 75 72 73 6f 72 20 6d 75 73 74 20 62 65  1 cursor must be
29040 20 66 6f 72 20 61 20 72 65 61 6c 20 74 61 62 6c   for a real tabl
29050 65 2c 20 6e 6f 74 20 61 20 70 73 65 75 64 6f 2d  e, not a pseudo-
29060 74 61 62 6c 65 2e 20 20 49 66 20 50 31 20 69 73  table.  If P1 is
29070 0a 2a 2a 20 6e 6f 74 20 6f 70 65 6e 20 74 68 65  .** not open the
29080 6e 20 74 68 65 20 62 65 68 61 76 69 6f 72 20 69  n the behavior i
29090 73 20 75 6e 64 65 66 69 6e 65 64 2e 0a 2a 2a 0a  s undefined..**.
290a0 2a 2a 20 54 68 65 20 50 33 20 76 61 6c 75 65 20  ** The P3 value 
290b0 69 73 20 61 20 68 69 6e 74 20 74 6f 20 74 68 65  is a hint to the
290c0 20 62 74 72 65 65 20 69 6d 70 6c 65 6d 65 6e 74   btree implement
290d0 61 74 69 6f 6e 2e 20 49 66 20 50 33 3d 3d 31 2c  ation. If P3==1,
290e0 20 74 68 61 74 0a 2a 2a 20 6d 65 61 6e 73 20 50   that.** means P
290f0 31 20 69 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  1 is an SQL inde
29100 78 20 61 6e 64 20 74 68 61 74 20 74 68 69 73 20  x and that this 
29110 69 6e 73 74 72 75 63 74 69 6f 6e 20 63 6f 75 6c  instruction coul
29120 64 20 68 61 76 65 20 62 65 65 6e 0a 2a 2a 20 6f  d have been.** o
29130 6d 69 74 74 65 64 20 69 66 20 74 68 61 74 20 69  mitted if that i
29140 6e 64 65 78 20 68 61 64 20 62 65 65 6e 20 75 6e  ndex had been un
29150 69 71 75 65 2e 20 20 50 33 20 69 73 20 75 73 75  ique.  P3 is usu
29160 61 6c 6c 79 20 30 2e 20 20 50 33 20 69 73 0a 2a  ally 0.  P3 is.*
29170 2a 20 61 6c 77 61 79 73 20 65 69 74 68 65 72 20  * always either 
29180 30 20 6f 72 20 31 2e 0a 2a 2a 0a 2a 2a 20 50 34  0 or 1..**.** P4
29190 20 69 73 20 61 6c 77 61 79 73 20 6f 66 20 74 79   is always of ty
291a0 70 65 20 50 34 5f 41 44 56 41 4e 43 45 2e 20 54  pe P4_ADVANCE. T
291b0 68 65 20 66 75 6e 63 74 69 6f 6e 20 70 6f 69 6e  he function poin
291c0 74 65 72 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a  ter points to.**
291d0 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 72 65   sqlite3BtreePre
291e0 76 69 6f 75 73 28 29 2e 0a 2a 2a 0a 2a 2a 20 49  vious()..**.** I
291f0 66 20 50 35 20 69 73 20 70 6f 73 69 74 69 76 65  f P5 is positive
29200 20 61 6e 64 20 74 68 65 20 6a 75 6d 70 20 69 73   and the jump is
29210 20 74 61 6b 65 6e 2c 20 74 68 65 6e 20 65 76 65   taken, then eve
29220 6e 74 20 63 6f 75 6e 74 65 72 0a 2a 2a 20 6e 75  nt counter.** nu
29230 6d 62 65 72 20 50 35 2d 31 20 69 6e 20 74 68 65  mber P5-1 in the
29240 20 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d   prepared statem
29250 65 6e 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  ent is increment
29260 65 64 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65  ed..*/./* Opcode
29270 3a 20 50 72 65 76 49 66 4f 70 65 6e 20 50 31 20  : PrevIfOpen P1 
29280 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a 2a  P2 P3 P4 P5.**.*
29290 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 6f  * This opcode wo
292a0 72 6b 73 20 6a 75 73 74 20 6c 69 6b 65 20 50 72  rks just like Pr
292b0 65 76 20 65 78 63 65 70 74 20 74 68 61 74 20 69  ev except that i
292c0 66 20 63 75 72 73 6f 72 20 50 31 20 69 73 20 6e  f cursor P1 is n
292d0 6f 74 0a 2a 2a 20 6f 70 65 6e 20 69 74 20 62 65  ot.** open it be
292e0 68 61 76 65 73 20 61 20 6e 6f 2d 6f 70 2e 0a 2a  haves a no-op..*
292f0 2f 0a 63 61 73 65 20 4f 50 5f 53 6f 72 74 65 72  /.case OP_Sorter
29300 4e 65 78 74 3a 20 7b 20 20 2f 2a 20 6a 75 6d 70  Next: {  /* jump
29310 20 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72   */.  VdbeCursor
29320 20 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b   *pC;.  int res;
29330 0a 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ..  pC = p->apCs
29340 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
29350 73 65 72 74 28 20 69 73 53 6f 72 74 65 72 28 70  sert( isSorter(p
29360 43 29 20 29 3b 0a 20 20 72 65 73 20 3d 20 30 3b  C) );.  res = 0;
29370 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 56  .  rc = sqlite3V
29380 64 62 65 53 6f 72 74 65 72 4e 65 78 74 28 64 62  dbeSorterNext(db
29390 2c 20 70 43 2c 20 26 72 65 73 29 3b 0a 20 20 67  , pC, &res);.  g
293a0 6f 74 6f 20 6e 65 78 74 5f 74 61 69 6c 3b 0a 63  oto next_tail;.c
293b0 61 73 65 20 4f 50 5f 50 72 65 76 49 66 4f 70 65  ase OP_PrevIfOpe
293c0 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  n:    /* jump */
293d0 0a 63 61 73 65 20 4f 50 5f 4e 65 78 74 49 66 4f  .case OP_NextIfO
293e0 70 65 6e 3a 20 20 20 20 2f 2a 20 6a 75 6d 70 20  pen:    /* jump 
293f0 2a 2f 0a 20 20 69 66 28 20 70 2d 3e 61 70 43 73  */.  if( p->apCs
29400 72 5b 70 4f 70 2d 3e 70 31 5d 3d 3d 30 20 29 20  r[pOp->p1]==0 ) 
29410 62 72 65 61 6b 3b 0a 20 20 2f 2a 20 46 61 6c 6c  break;.  /* Fall
29420 20 74 68 72 6f 75 67 68 20 2a 2f 0a 63 61 73 65   through */.case
29430 20 4f 50 5f 50 72 65 76 3a 20 20 20 20 20 20 20   OP_Prev:       
29440 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61     /* jump */.ca
29450 73 65 20 4f 50 5f 4e 65 78 74 3a 20 20 20 20 20  se OP_Next:     
29460 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
29470 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70    assert( pOp->p
29480 31 3e 3d 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c  1>=0 && pOp->p1<
29490 70 2d 3e 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20  p->nCursor );.  
294a0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 35 3c  assert( pOp->p5<
294b0 41 72 72 61 79 53 69 7a 65 28 70 2d 3e 61 43 6f  ArraySize(p->aCo
294c0 75 6e 74 65 72 29 20 29 3b 0a 20 20 70 43 20 3d  unter) );.  pC =
294d0 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70   p->apCsr[pOp->p
294e0 31 5d 3b 0a 20 20 72 65 73 20 3d 20 70 4f 70 2d  1];.  res = pOp-
294f0 3e 70 33 3b 0a 20 20 61 73 73 65 72 74 28 20 70  >p3;.  assert( p
29500 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
29510 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
29520 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
29530 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
29540 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
29550 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72 65   );.  assert( re
29560 73 3d 3d 30 20 7c 7c 20 28 72 65 73 3d 3d 31 20  s==0 || (res==1 
29570 26 26 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d  && pC->isTable==
29580 30 29 20 29 3b 0a 20 20 74 65 73 74 63 61 73 65  0) );.  testcase
29590 28 20 72 65 73 3d 3d 31 20 29 3b 0a 20 20 61 73  ( res==1 );.  as
295a0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
295b0 65 21 3d 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f  e!=OP_Next || pO
295c0 70 2d 3e 70 34 2e 78 41 64 76 61 6e 63 65 3d 3d  p->p4.xAdvance==
295d0 73 71 6c 69 74 65 33 42 74 72 65 65 4e 65 78 74  sqlite3BtreeNext
295e0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
295f0 70 2d 3e 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72  p->opcode!=OP_Pr
29600 65 76 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  ev || pOp->p4.xA
29610 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
29620 74 72 65 65 50 72 65 76 69 6f 75 73 20 29 3b 0a  treePrevious );.
29630 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
29640 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49 66  pcode!=OP_NextIf
29650 4f 70 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e  Open || pOp->p4.
29660 78 41 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65  xAdvance==sqlite
29670 33 42 74 72 65 65 4e 65 78 74 20 29 3b 0a 20 20  3BtreeNext );.  
29680 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63  assert( pOp->opc
29690 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49 66 4f 70  ode!=OP_PrevIfOp
296a0 65 6e 20 7c 7c 20 70 4f 70 2d 3e 70 34 2e 78 41  en || pOp->p4.xA
296b0 64 76 61 6e 63 65 3d 3d 73 71 6c 69 74 65 33 42  dvance==sqlite3B
296c0 74 72 65 65 50 72 65 76 69 6f 75 73 29 3b 0a 0a  treePrevious);..
296d0 20 20 2f 2a 20 54 68 65 20 4e 65 78 74 20 6f 70    /* The Next op
296e0 63 6f 64 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  code is only use
296f0 64 20 61 66 74 65 72 20 53 65 65 6b 47 54 2c 20  d after SeekGT, 
29700 53 65 65 6b 47 45 2c 20 61 6e 64 20 52 65 77 69  SeekGE, and Rewi
29710 6e 64 2e 0a 20 20 2a 2a 20 54 68 65 20 50 72 65  nd..  ** The Pre
29720 76 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  v opcode is only
29730 20 75 73 65 64 20 61 66 74 65 72 20 53 65 65 6b   used after Seek
29740 4c 54 2c 20 53 65 65 6b 4c 45 2c 20 61 6e 64 20  LT, SeekLE, and 
29750 4c 61 73 74 2e 20 2a 2f 0a 20 20 61 73 73 65 72  Last. */.  asser
29760 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29770 4f 50 5f 4e 65 78 74 20 7c 7c 20 70 4f 70 2d 3e  OP_Next || pOp->
29780 6f 70 63 6f 64 65 21 3d 4f 50 5f 4e 65 78 74 49  opcode!=OP_NextI
29790 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
297a0 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
297b0 65 65 6b 47 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekGT || pC->see
297c0 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 47 45 0a 20  kOp==OP_SeekGE. 
297d0 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
297e0 6b 4f 70 3d 3d 4f 50 5f 52 65 77 69 6e 64 20 7c  kOp==OP_Rewind |
297f0 7c 20 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50  | pC->seekOp==OP
29800 5f 46 6f 75 6e 64 29 3b 0a 20 20 61 73 73 65 72  _Found);.  asser
29810 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 21 3d  t( pOp->opcode!=
29820 4f 50 5f 50 72 65 76 20 7c 7c 20 70 4f 70 2d 3e  OP_Prev || pOp->
29830 6f 70 63 6f 64 65 21 3d 4f 50 5f 50 72 65 76 49  opcode!=OP_PrevI
29840 66 4f 70 65 6e 0a 20 20 20 20 20 20 20 7c 7c 20  fOpen.       || 
29850 70 43 2d 3e 73 65 65 6b 4f 70 3d 3d 4f 50 5f 53  pC->seekOp==OP_S
29860 65 65 6b 4c 54 20 7c 7c 20 70 43 2d 3e 73 65 65  eekLT || pC->see
29870 6b 4f 70 3d 3d 4f 50 5f 53 65 65 6b 4c 45 0a 20  kOp==OP_SeekLE. 
29880 20 20 20 20 20 20 7c 7c 20 70 43 2d 3e 73 65 65        || pC->see
29890 6b 4f 70 3d 3d 4f 50 5f 4c 61 73 74 20 29 3b 0a  kOp==OP_Last );.
298a0 0a 20 20 72 63 20 3d 20 70 4f 70 2d 3e 70 34 2e  .  rc = pOp->p4.
298b0 78 41 64 76 61 6e 63 65 28 70 43 2d 3e 75 63 2e  xAdvance(pC->uc.
298c0 70 43 75 72 73 6f 72 2c 20 26 72 65 73 29 3b 0a  pCursor, &res);.
298d0 6e 65 78 74 5f 74 61 69 6c 3a 0a 20 20 70 43 2d  next_tail:.  pC-
298e0 3e 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43  >cacheStatus = C
298f0 41 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 56 64  ACHE_STALE;.  Vd
29900 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 72 65  beBranchTaken(re
29910 73 3d 3d 30 2c 32 29 3b 0a 20 20 69 66 28 20 72  s==0,2);.  if( r
29920 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
29930 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 69  ue_to_error;.  i
29940 66 28 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  f( res==0 ){.   
29950 20 70 43 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30   pC->nullRow = 0
29960 3b 0a 20 20 20 20 70 2d 3e 61 43 6f 75 6e 74 65  ;.    p->aCounte
29970 72 5b 70 4f 70 2d 3e 70 35 5d 2b 2b 3b 0a 23 69  r[pOp->p5]++;.#i
29980 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53 54  fdef SQLITE_TEST
29990 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 73 65 61  .    sqlite3_sea
299a0 72 63 68 5f 63 6f 75 6e 74 2b 2b 3b 0a 23 65 6e  rch_count++;.#en
299b0 64 69 66 0a 20 20 20 20 67 6f 74 6f 20 6a 75 6d  dif.    goto jum
299c0 70 5f 74 6f 5f 70 32 5f 61 6e 64 5f 63 68 65 63  p_to_p2_and_chec
299d0 6b 5f 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b  k_for_interrupt;
299e0 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70 43  .  }else{.    pC
299f0 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 31 3b 0a 20  ->nullRow = 1;. 
29a00 20 7d 0a 20 20 67 6f 74 6f 20 63 68 65 63 6b 5f   }.  goto check_
29a10 66 6f 72 5f 69 6e 74 65 72 72 75 70 74 3b 0a 7d  for_interrupt;.}
29a20 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78  ../* Opcode: Idx
29a30 49 6e 73 65 72 74 20 50 31 20 50 32 20 50 33 20  Insert P1 P2 P3 
29a40 50 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69  P4 P5.** Synopsi
29a50 73 3a 20 6b 65 79 3d 72 5b 50 32 5d 0a 2a 2a 0a  s: key=r[P2].**.
29a60 2a 2a 20 52 65 67 69 73 74 65 72 20 50 32 20 68  ** Register P2 h
29a70 6f 6c 64 73 20 61 6e 20 53 51 4c 20 69 6e 64 65  olds an SQL inde
29a80 78 20 6b 65 79 20 6d 61 64 65 20 75 73 69 6e 67  x key made using
29a90 20 74 68 65 0a 2a 2a 20 4d 61 6b 65 52 65 63 6f   the.** MakeReco
29aa0 72 64 20 69 6e 73 74 72 75 63 74 69 6f 6e 73 2e  rd instructions.
29ab0 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 77 72    This opcode wr
29ac0 69 74 65 73 20 74 68 61 74 20 6b 65 79 0a 2a 2a  ites that key.**
29ad0 20 69 6e 74 6f 20 74 68 65 20 69 6e 64 65 78 20   into the index 
29ae0 50 31 2e 20 20 44 61 74 61 20 66 6f 72 20 74 68  P1.  Data for th
29af0 65 20 65 6e 74 72 79 20 69 73 20 6e 69 6c 2e 0a  e entry is nil..
29b00 2a 2a 0a 2a 2a 20 49 66 20 50 34 20 69 73 20 6e  **.** If P4 is n
29b10 6f 74 20 7a 65 72 6f 2c 20 74 68 65 6e 20 69 74  ot zero, then it
29b20 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   is the number o
29b30 66 20 76 61 6c 75 65 73 20 69 6e 20 74 68 65 20  f values in the 
29b40 75 6e 70 61 63 6b 65 64 0a 2a 2a 20 6b 65 79 20  unpacked.** key 
29b50 6f 66 20 72 65 67 28 50 32 29 2e 20 20 49 6e 20  of reg(P2).  In 
29b60 74 68 61 74 20 63 61 73 65 2c 20 50 33 20 69 73  that case, P3 is
29b70 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
29b80 65 20 66 69 72 73 74 20 72 65 67 69 73 74 65 72  e first register
29b90 0a 2a 2a 20 66 6f 72 20 74 68 65 20 75 6e 70 61  .** for the unpa
29ba0 63 6b 65 64 20 6b 65 79 2e 20 20 54 68 65 20 61  cked key.  The a
29bb0 76 61 69 6c 61 62 69 6c 69 74 79 20 6f 66 20 74  vailability of t
29bc0 68 65 20 75 6e 70 61 63 6b 65 64 20 6b 65 79 20  he unpacked key 
29bd0 63 61 6e 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  can sometimes.**
29be0 20 62 65 20 61 6e 20 6f 70 74 69 6d 69 7a 61 74   be an optimizat
29bf0 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35  ion..**.** If P5
29c00 20 68 61 73 20 74 68 65 20 4f 50 46 4c 41 47 5f   has the OPFLAG_
29c10 41 50 50 45 4e 44 20 62 69 74 20 73 65 74 2c 20  APPEND bit set, 
29c20 74 68 61 74 20 69 73 20 61 20 68 69 6e 74 20 74  that is a hint t
29c30 6f 20 74 68 65 20 62 2d 74 72 65 65 20 6c 61 79  o the b-tree lay
29c40 65 72 0a 2a 2a 20 74 68 61 74 20 74 68 69 73 20  er.** that this 
29c50 69 6e 73 65 72 74 20 69 73 20 6c 69 6b 65 6c 79  insert is likely
29c60 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
29c70 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 68 61  ..**.** If P5 ha
29c80 73 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48  s the OPFLAG_NCH
29c90 41 4e 47 45 20 62 69 74 20 73 65 74 2c 20 74 68  ANGE bit set, th
29ca0 65 6e 20 74 68 65 20 63 68 61 6e 67 65 20 63 6f  en the change co
29cb0 75 6e 74 65 72 20 69 73 0a 2a 2a 20 69 6e 63 72  unter is.** incr
29cc0 65 6d 65 6e 74 65 64 20 62 79 20 74 68 69 73 20  emented by this 
29cd0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 20 20 49 66  instruction.  If
29ce0 20 74 68 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41   the OPFLAG_NCHA
29cf0 4e 47 45 20 62 69 74 20 69 73 20 63 6c 65 61 72  NGE bit is clear
29d00 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63 68  ,.** then the ch
29d10 61 6e 67 65 20 63 6f 75 6e 74 65 72 20 69 73 20  ange counter is 
29d20 75 6e 63 68 61 6e 67 65 64 2e 0a 2a 2a 0a 2a 2a  unchanged..**.**
29d30 20 49 66 20 74 68 65 20 4f 50 46 4c 41 47 5f 55   If the OPFLAG_U
29d40 53 45 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61  SESEEKRESULT fla
29d50 67 20 6f 66 20 50 35 20 69 73 20 73 65 74 2c 20  g of P5 is set, 
29d60 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69  the implementati
29d70 6f 6e 20 6d 69 67 68 74 0a 2a 2a 20 72 75 6e 20  on might.** run 
29d80 66 61 73 74 65 72 20 62 79 20 61 76 6f 69 64 69  faster by avoidi
29d90 6e 67 20 61 6e 20 75 6e 6e 65 63 65 73 73 61 72  ng an unnecessar
29da0 79 20 73 65 65 6b 20 6f 6e 20 63 75 72 73 6f 72  y seek on cursor
29db0 20 50 31 2e 20 20 48 6f 77 65 76 65 72 2c 0a 2a   P1.  However,.*
29dc0 2a 20 74 68 65 20 4f 50 46 4c 41 47 5f 55 53 45  * the OPFLAG_USE
29dd0 53 45 45 4b 52 45 53 55 4c 54 20 66 6c 61 67 20  SEEKRESULT flag 
29de0 6d 75 73 74 20 6f 6e 6c 79 20 62 65 20 73 65 74  must only be set
29df0 20 69 66 20 74 68 65 72 65 20 68 61 76 65 20 62   if there have b
29e00 65 65 6e 20 6e 6f 20 70 72 69 6f 72 0a 2a 2a 20  een no prior.** 
29e10 73 65 65 6b 73 20 6f 6e 20 74 68 65 20 63 75 72  seeks on the cur
29e20 73 6f 72 20 6f 72 20 69 66 20 74 68 65 20 6d 6f  sor or if the mo
29e30 73 74 20 72 65 63 65 6e 74 20 73 65 65 6b 20 75  st recent seek u
29e40 73 65 64 20 61 20 6b 65 79 20 65 71 75 69 76 61  sed a key equiva
29e50 6c 65 6e 74 0a 2a 2a 20 74 6f 20 50 32 2e 20 0a  lent.** to P2. .
29e60 2a 2a 0a 2a 2a 20 54 68 69 73 20 69 6e 73 74 72  **.** This instr
29e70 75 63 74 69 6f 6e 20 6f 6e 6c 79 20 77 6f 72 6b  uction only work
29e80 73 20 66 6f 72 20 69 6e 64 69 63 65 73 2e 20 20  s for indices.  
29e90 54 68 65 20 65 71 75 69 76 61 6c 65 6e 74 20 69  The equivalent i
29ea0 6e 73 74 72 75 63 74 69 6f 6e 0a 2a 2a 20 66 6f  nstruction.** fo
29eb0 72 20 74 61 62 6c 65 73 20 69 73 20 4f 50 5f 49  r tables is OP_I
29ec0 6e 73 65 72 74 2e 0a 2a 2f 0a 2f 2a 20 4f 70 63  nsert..*/./* Opc
29ed0 6f 64 65 3a 20 53 6f 72 74 65 72 49 6e 73 65 72  ode: SorterInser
29ee0 74 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  t P1 P2 * * *.**
29ef0 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72   Synopsis: key=r
29f00 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73  [P2].**.** Regis
29f10 74 65 72 20 50 32 20 68 6f 6c 64 73 20 61 6e 20  ter P2 holds an 
29f20 53 51 4c 20 69 6e 64 65 78 20 6b 65 79 20 6d 61  SQL index key ma
29f30 64 65 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  de using the.** 
29f40 4d 61 6b 65 52 65 63 6f 72 64 20 69 6e 73 74 72  MakeRecord instr
29f50 75 63 74 69 6f 6e 73 2e 20 20 54 68 69 73 20 6f  uctions.  This o
29f60 70 63 6f 64 65 20 77 72 69 74 65 73 20 74 68 61  pcode writes tha
29f70 74 20 6b 65 79 0a 2a 2a 20 69 6e 74 6f 20 74 68  t key.** into th
29f80 65 20 73 6f 72 74 65 72 20 50 31 2e 20 20 44 61  e sorter P1.  Da
29f90 74 61 20 66 6f 72 20 74 68 65 20 65 6e 74 72 79  ta for the entry
29fa0 20 69 73 20 6e 69 6c 2e 0a 2a 2f 0a 63 61 73 65   is nil..*/.case
29fb0 20 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65 72 74   OP_SorterInsert
29fc0 3a 20 20 20 20 20 20 20 2f 2a 20 69 6e 32 20 2a  :       /* in2 *
29fd0 2f 0a 63 61 73 65 20 4f 50 5f 49 64 78 49 6e 73  /.case OP_IdxIns
29fe0 65 72 74 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a  ert: {        /*
29ff0 20 69 6e 32 20 2a 2f 0a 20 20 56 64 62 65 43 75   in2 */.  VdbeCu
2a000 72 73 6f 72 20 2a 70 43 3b 0a 20 20 42 74 72 65  rsor *pC;.  Btre
2a010 65 50 61 79 6c 6f 61 64 20 78 3b 0a 0a 20 20 61  ePayload x;..  a
2a020 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2a030 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e  0 && pOp->p1<p->
2a040 6e 43 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20  nCursor );.  pC 
2a050 3d 20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e  = p->apCsr[pOp->
2a060 70 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70  p1];.  assert( p
2a070 43 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  C!=0 );.  assert
2a080 28 20 69 73 53 6f 72 74 65 72 28 70 43 29 3d 3d  ( isSorter(pC)==
2a090 28 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50  (pOp->opcode==OP
2a0a0 5f 53 6f 72 74 65 72 49 6e 73 65 72 74 29 20 29  _SorterInsert) )
2a0b0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2a0c0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2a0d0 65 72 74 28 20 70 49 6e 32 2d 3e 66 6c 61 67 73  ert( pIn2->flags
2a0e0 20 26 20 4d 45 4d 5f 42 6c 6f 62 20 29 3b 0a 20   & MEM_Blob );. 
2a0f0 20 69 66 28 20 70 4f 70 2d 3e 70 35 20 26 20 4f   if( pOp->p5 & O
2a100 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 29 20  PFLAG_NCHANGE ) 
2a110 70 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20  p->nChange++;.  
2a120 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75 72  assert( pC->eCur
2a130 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42 54  Type==CURTYPE_BT
2a140 52 45 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f  REE || pOp->opco
2a150 64 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73  de==OP_SorterIns
2a160 65 72 74 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ert );.  assert(
2a170 20 70 43 2d 3e 69 73 54 61 62 6c 65 3d 3d 30 20   pC->isTable==0 
2a180 29 3b 0a 20 20 72 63 20 3d 20 45 78 70 61 6e 64  );.  rc = Expand
2a190 42 6c 6f 62 28 70 49 6e 32 29 3b 0a 20 20 69 66  Blob(pIn2);.  if
2a1a0 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a1b0 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a1c0 20 20 69 66 28 20 70 4f 70 2d 3e 6f 70 63 6f 64    if( pOp->opcod
2a1d0 65 3d 3d 4f 50 5f 53 6f 72 74 65 72 49 6e 73 65  e==OP_SorterInse
2a1e0 72 74 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73  rt ){.    rc = s
2a1f0 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65 72  qlite3VdbeSorter
2a200 57 72 69 74 65 28 70 43 2c 20 70 49 6e 32 29 3b  Write(pC, pIn2);
2a210 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 78 2e  .  }else{.    x.
2a220 6e 4b 65 79 20 3d 20 70 49 6e 32 2d 3e 6e 3b 0a  nKey = pIn2->n;.
2a230 20 20 20 20 78 2e 70 4b 65 79 20 3d 20 70 49 6e      x.pKey = pIn
2a240 32 2d 3e 7a 3b 0a 20 20 20 20 78 2e 61 4d 65 6d  2->z;.    x.aMem
2a250 20 3d 20 61 4d 65 6d 20 2b 20 70 4f 70 2d 3e 70   = aMem + pOp->p
2a260 33 3b 0a 20 20 20 20 78 2e 6e 4d 65 6d 20 3d 20  3;.    x.nMem = 
2a270 28 75 31 36 29 70 4f 70 2d 3e 70 34 2e 69 3b 0a  (u16)pOp->p4.i;.
2a280 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2a290 42 74 72 65 65 49 6e 73 65 72 74 28 70 43 2d 3e  BtreeInsert(pC->
2a2a0 75 63 2e 70 43 75 72 73 6f 72 2c 20 26 78 2c 0a  uc.pCursor, &x,.
2a2b0 20 20 20 20 20 20 20 20 20 28 70 4f 70 2d 3e 70           (pOp->p
2a2c0 35 20 26 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e  5 & OPFLAG_APPEN
2a2d0 44 29 21 3d 30 2c 20 0a 20 20 20 20 20 20 20 20  D)!=0, .        
2a2e0 28 28 70 4f 70 2d 3e 70 35 20 26 20 4f 50 46 4c  ((pOp->p5 & OPFL
2a2f0 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
2a300 29 20 3f 20 70 43 2d 3e 73 65 65 6b 52 65 73 75  ) ? pC->seekResu
2a310 6c 74 20 3a 20 30 29 0a 20 20 20 20 20 20 20 20  lt : 0).        
2a320 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  );.    assert( p
2a330 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74  C->deferredMovet
2a340 6f 3d 3d 30 20 29 3b 0a 20 20 20 20 70 43 2d 3e  o==0 );.    pC->
2a350 63 61 63 68 65 53 74 61 74 75 73 20 3d 20 43 41  cacheStatus = CA
2a360 43 48 45 5f 53 54 41 4c 45 3b 0a 20 20 7d 0a 20  CHE_STALE;.  }. 
2a370 20 69 66 28 20 72 63 29 20 67 6f 74 6f 20 61 62   if( rc) goto ab
2a380 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2a390 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2a3a0 20 4f 70 63 6f 64 65 3a 20 49 64 78 44 65 6c 65   Opcode: IdxDele
2a3b0 74 65 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a  te P1 P2 P3 * *.
2a3c0 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65 79  ** Synopsis: key
2a3d0 3d 72 5b 50 32 40 50 33 5d 0a 2a 2a 0a 2a 2a 20  =r[P2@P3].**.** 
2a3e0 54 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 50  The content of P
2a3f0 33 20 72 65 67 69 73 74 65 72 73 20 73 74 61 72  3 registers star
2a400 74 69 6e 67 20 61 74 20 72 65 67 69 73 74 65 72  ting at register
2a410 20 50 32 20 66 6f 72 6d 0a 2a 2a 20 61 6e 20 75   P2 form.** an u
2a420 6e 70 61 63 6b 65 64 20 69 6e 64 65 78 20 6b 65  npacked index ke
2a430 79 2e 20 54 68 69 73 20 6f 70 63 6f 64 65 20 72  y. This opcode r
2a440 65 6d 6f 76 65 73 20 74 68 61 74 20 65 6e 74 72  emoves that entr
2a450 79 20 66 72 6f 6d 20 74 68 65 20 0a 2a 2a 20 69  y from the .** i
2a460 6e 64 65 78 20 6f 70 65 6e 65 64 20 62 79 20 63  ndex opened by c
2a470 75 72 73 6f 72 20 50 31 2e 0a 2a 2f 0a 63 61 73  ursor P1..*/.cas
2a480 65 20 4f 50 5f 49 64 78 44 65 6c 65 74 65 3a 20  e OP_IdxDelete: 
2a490 7b 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20 2a  {.  VdbeCursor *
2a4a0 70 43 3b 0a 20 20 42 74 43 75 72 73 6f 72 20 2a  pC;.  BtCursor *
2a4b0 70 43 72 73 72 3b 0a 20 20 69 6e 74 20 72 65 73  pCrsr;.  int res
2a4c0 3b 0a 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ;.  UnpackedReco
2a4d0 72 64 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28  rd r;..  assert(
2a4e0 20 70 4f 70 2d 3e 70 33 3e 30 20 29 3b 0a 20 20   pOp->p3>0 );.  
2a4f0 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3e  assert( pOp->p2>
2a500 30 20 26 26 20 70 4f 70 2d 3e 70 32 2b 70 4f 70  0 && pOp->p2+pOp
2a510 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
2a520 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 2b 31   - p->nCursor)+1
2a530 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f   );.  assert( pO
2a540 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70 2d  p->p1>=0 && pOp-
2a550 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20 29  >p1<p->nCursor )
2a560 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43 73  ;.  pC = p->apCs
2a570 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  r[pOp->p1];.  as
2a580 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a 20  sert( pC!=0 );. 
2a590 20 61 73 73 65 72 74 28 20 70 43 2d 3e 65 43 75   assert( pC->eCu
2a5a0 72 54 79 70 65 3d 3d 43 55 52 54 59 50 45 5f 42  rType==CURTYPE_B
2a5b0 54 52 45 45 20 29 3b 0a 20 20 70 43 72 73 72 20  TREE );.  pCrsr 
2a5c0 3d 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72  = pC->uc.pCursor
2a5d0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 72 73  ;.  assert( pCrs
2a5e0 72 21 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  r!=0 );.  assert
2a5f0 28 20 70 4f 70 2d 3e 70 35 3d 3d 30 20 29 3b 0a  ( pOp->p5==0 );.
2a600 20 20 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70    r.pKeyInfo = p
2a610 43 2d 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72  C->pKeyInfo;.  r
2a620 2e 6e 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70  .nField = (u16)p
2a630 4f 70 2d 3e 70 33 3b 0a 20 20 72 2e 64 65 66 61  Op->p3;.  r.defa
2a640 75 6c 74 5f 72 63 20 3d 20 30 3b 0a 20 20 72 2e  ult_rc = 0;.  r.
2a650 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2a660 2d 3e 70 32 5d 3b 0a 20 20 72 63 20 3d 20 73 71  ->p2];.  rc = sq
2a670 6c 69 74 65 33 42 74 72 65 65 4d 6f 76 65 74 6f  lite3BtreeMoveto
2a680 55 6e 70 61 63 6b 65 64 28 70 43 72 73 72 2c 20  Unpacked(pCrsr, 
2a690 26 72 2c 20 30 2c 20 30 2c 20 26 72 65 73 29 3b  &r, 0, 0, &res);
2a6a0 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f  .  if( rc ) goto
2a6b0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
2a6c0 72 6f 72 3b 0a 20 20 69 66 28 20 72 65 73 3d 3d  ror;.  if( res==
2a6d0 30 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  0 ){.    rc = sq
2a6e0 6c 69 74 65 33 42 74 72 65 65 44 65 6c 65 74 65  lite3BtreeDelete
2a6f0 28 70 43 72 73 72 2c 20 42 54 52 45 45 5f 41 55  (pCrsr, BTREE_AU
2a700 58 44 45 4c 45 54 45 29 3b 0a 20 20 20 20 69 66  XDELETE);.    if
2a710 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72  ( rc ) goto abor
2a720 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2a730 20 20 7d 0a 20 20 61 73 73 65 72 74 28 20 70 43    }.  assert( pC
2a740 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f  ->deferredMoveto
2a750 3d 3d 30 20 29 3b 0a 20 20 70 43 2d 3e 63 61 63  ==0 );.  pC->cac
2a760 68 65 53 74 61 74 75 73 20 3d 20 43 41 43 48 45  heStatus = CACHE
2a770 5f 53 54 41 4c 45 3b 0a 20 20 70 43 2d 3e 73 65  _STALE;.  pC->se
2a780 65 6b 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  ekResult = 0;.  
2a790 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2a7a0 6f 64 65 3a 20 53 65 65 6b 20 50 31 20 2a 20 50  ode: Seek P1 * P
2a7b0 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73  3 P4 *.** Synops
2a7c0 69 73 3a 20 4d 6f 76 65 20 50 33 20 74 6f 20 50  is: Move P3 to P
2a7d0 31 2e 72 6f 77 69 64 0a 2a 2a 0a 2a 2a 20 50 31  1.rowid.**.** P1
2a7e0 20 69 73 20 61 6e 20 6f 70 65 6e 20 69 6e 64 65   is an open inde
2a7f0 78 20 63 75 72 73 6f 72 20 61 6e 64 20 50 33 20  x cursor and P3 
2a800 69 73 20 61 20 63 75 72 73 6f 72 20 6f 6e 20 74  is a cursor on t
2a810 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67  he corresponding
2a820 0a 2a 2a 20 74 61 62 6c 65 2e 20 20 54 68 69 73  .** table.  This
2a830 20 6f 70 63 6f 64 65 20 64 6f 65 73 20 61 20 64   opcode does a d
2a840 65 66 65 72 72 65 64 20 73 65 65 6b 20 6f 66 20  eferred seek of 
2a850 74 68 65 20 50 33 20 74 61 62 6c 65 20 63 75 72  the P3 table cur
2a860 73 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 72 6f  sor.** to the ro
2a870 77 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  w that correspon
2a880 64 73 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e  ds to the curren
2a890 74 20 72 6f 77 20 6f 66 20 50 31 2e 0a 2a 2a 0a  t row of P1..**.
2a8a0 2a 2a 20 54 68 69 73 20 69 73 20 61 20 64 65 66  ** This is a def
2a8b0 65 72 72 65 64 20 73 65 65 6b 2e 20 20 4e 6f 74  erred seek.  Not
2a8c0 68 69 6e 67 20 61 63 74 75 61 6c 6c 79 20 68 61  hing actually ha
2a8d0 70 70 65 6e 73 20 75 6e 74 69 6c 0a 2a 2a 20 74  ppens until.** t
2a8e0 68 65 20 63 75 72 73 6f 72 20 69 73 20 75 73 65  he cursor is use
2a8f0 64 20 74 6f 20 72 65 61 64 20 61 20 72 65 63 6f  d to read a reco
2a900 72 64 2e 20 20 54 68 61 74 20 77 61 79 2c 20 69  rd.  That way, i
2a910 66 20 6e 6f 20 72 65 61 64 73 0a 2a 2a 20 6f 63  f no reads.** oc
2a920 63 75 72 2c 20 6e 6f 20 75 6e 6e 65 63 65 73 73  cur, no unnecess
2a930 61 72 79 20 49 2f 4f 20 68 61 70 70 65 6e 73 2e  ary I/O happens.
2a940 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20 62 65  .**.** P4 may be
2a950 20 61 6e 20 61 72 72 61 79 20 6f 66 20 69 6e 74   an array of int
2a960 65 67 65 72 73 20 28 74 79 70 65 20 50 34 5f 49  egers (type P4_I
2a970 4e 54 41 52 52 41 59 29 20 63 6f 6e 74 61 69 6e  NTARRAY) contain
2a980 69 6e 67 0a 2a 2a 20 6f 6e 65 20 65 6e 74 72 79  ing.** one entry
2a990 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
2a9a0 20 69 6e 20 74 68 65 20 50 33 20 74 61 62 6c 65   in the P3 table
2a9b0 2e 20 20 49 66 20 61 72 72 61 79 20 65 6e 74 72  .  If array entr
2a9c0 79 20 61 28 69 29 0a 2a 2a 20 69 73 20 6e 6f 6e  y a(i).** is non
2a9d0 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 72 65 61 64  -zero, then read
2a9e0 69 6e 67 20 63 6f 6c 75 6d 6e 20 61 28 69 29 2d  ing column a(i)-
2a9f0 31 20 66 72 6f 6d 20 63 75 72 73 6f 72 20 50 33  1 from cursor P3
2aa00 20 69 73 20 0a 2a 2a 20 65 71 75 69 76 61 6c 65   is .** equivale
2aa10 6e 74 20 74 6f 20 70 65 72 66 6f 72 6d 69 6e 67  nt to performing
2aa20 20 74 68 65 20 64 65 66 65 72 72 65 64 20 73 65   the deferred se
2aa30 65 6b 20 61 6e 64 20 74 68 65 6e 20 72 65 61 64  ek and then read
2aa40 69 6e 67 20 63 6f 6c 75 6d 6e 20 69 20 0a 2a 2a  ing column i .**
2aa50 20 66 72 6f 6d 20 50 31 2e 20 20 54 68 69 73 20   from P1.  This 
2aa60 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 73  information is s
2aa70 74 6f 72 65 64 20 69 6e 20 50 33 20 61 6e 64 20  tored in P3 and 
2aa80 75 73 65 64 20 74 6f 20 72 65 64 69 72 65 63 74  used to redirect
2aa90 0a 2a 2a 20 72 65 61 64 73 20 61 67 61 69 6e 73  .** reads agains
2aaa0 74 20 50 33 20 6f 76 65 72 20 74 6f 20 50 31 2c  t P3 over to P1,
2aab0 20 74 68 75 73 20 70 6f 73 73 69 62 6c 79 20 61   thus possibly a
2aac0 76 6f 69 64 69 6e 67 20 74 68 65 20 6e 65 65 64  voiding the need
2aad0 20 74 6f 0a 2a 2a 20 73 65 65 6b 20 61 6e 64 20   to.** seek and 
2aae0 72 65 61 64 20 63 75 72 73 6f 72 20 50 33 2e 0a  read cursor P3..
2aaf0 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64  */./* Opcode: Id
2ab00 78 52 6f 77 69 64 20 50 31 20 50 32 20 2a 20 2a  xRowid P1 P2 * *
2ab10 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
2ab20 72 5b 50 32 5d 3d 72 6f 77 69 64 0a 2a 2a 0a 2a  r[P2]=rowid.**.*
2ab30 2a 20 57 72 69 74 65 20 69 6e 74 6f 20 72 65 67  * Write into reg
2ab40 69 73 74 65 72 20 50 32 20 61 6e 20 69 6e 74 65  ister P2 an inte
2ab50 67 65 72 20 77 68 69 63 68 20 69 73 20 74 68 65  ger which is the
2ab60 20 6c 61 73 74 20 65 6e 74 72 79 20 69 6e 20 74   last entry in t
2ab70 68 65 20 72 65 63 6f 72 64 20 61 74 0a 2a 2a 20  he record at.** 
2ab80 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
2ab90 6e 64 65 78 20 6b 65 79 20 70 6f 69 6e 74 65 64  ndex key pointed
2aba0 20 74 6f 20 62 79 20 63 75 72 73 6f 72 20 50 31   to by cursor P1
2abb0 2e 20 20 54 68 69 73 20 69 6e 74 65 67 65 72 20  .  This integer 
2abc0 73 68 6f 75 6c 64 20 62 65 0a 2a 2a 20 74 68 65  should be.** the
2abd0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2abe0 62 6c 65 20 65 6e 74 72 79 20 74 6f 20 77 68 69  ble entry to whi
2abf0 63 68 20 74 68 69 73 20 69 6e 64 65 78 20 65 6e  ch this index en
2ac00 74 72 79 20 70 6f 69 6e 74 73 2e 0a 2a 2a 0a 2a  try points..**.*
2ac10 2a 20 53 65 65 20 61 6c 73 6f 3a 20 52 6f 77 69  * See also: Rowi
2ac20 64 2c 20 4d 61 6b 65 52 65 63 6f 72 64 2e 0a 2a  d, MakeRecord..*
2ac30 2f 0a 63 61 73 65 20 4f 50 5f 53 65 65 6b 3a 0a  /.case OP_Seek:.
2ac40 63 61 73 65 20 4f 50 5f 49 64 78 52 6f 77 69 64  case OP_IdxRowid
2ac50 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  : {             
2ac60 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 56 64   /* out2 */.  Vd
2ac70 62 65 43 75 72 73 6f 72 20 2a 70 43 3b 20 20 20  beCursor *pC;   
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2ac90 54 68 65 20 50 31 20 69 6e 64 65 78 20 63 75 72  The P1 index cur
2aca0 73 6f 72 20 2a 2f 0a 20 20 56 64 62 65 43 75 72  sor */.  VdbeCur
2acb0 73 6f 72 20 2a 70 54 61 62 43 75 72 3b 20 20 20  sor *pTabCur;   
2acc0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
2acd0 32 20 74 61 62 6c 65 20 63 75 72 73 6f 72 20 28  2 table cursor (
2ace0 4f 50 5f 53 65 65 6b 20 6f 6e 6c 79 29 20 2a 2f  OP_Seek only) */
2acf0 0a 20 20 69 36 34 20 72 6f 77 69 64 3b 20 20 20  .  i64 rowid;   
2ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ad10 20 20 2f 2a 20 52 6f 77 69 64 20 74 68 61 74 20    /* Rowid that 
2ad20 50 31 20 63 75 72 72 65 6e 74 20 70 6f 69 6e 74  P1 current point
2ad30 73 20 74 6f 20 2a 2f 0a 0a 20 20 61 73 73 65 72  s to */..  asser
2ad40 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2ad50 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72   pOp->p1<p->nCur
2ad60 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20 70 2d  sor );.  pC = p-
2ad70 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
2ad80 0a 20 20 61 73 73 65 72 74 28 20 70 43 21 3d 30  .  assert( pC!=0
2ad90 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2ada0 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54  ->eCurType==CURT
2adb0 59 50 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 61  YPE_BTREE );.  a
2adc0 73 73 65 72 74 28 20 70 43 2d 3e 75 63 2e 70 43  ssert( pC->uc.pC
2add0 75 72 73 6f 72 21 3d 30 20 29 3b 0a 20 20 61 73  ursor!=0 );.  as
2ade0 73 65 72 74 28 20 70 43 2d 3e 69 73 54 61 62 6c  sert( pC->isTabl
2adf0 65 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  e==0 );.  assert
2ae00 28 20 70 43 2d 3e 64 65 66 65 72 72 65 64 4d 6f  ( pC->deferredMo
2ae10 76 65 74 6f 3d 3d 30 20 29 3b 0a 20 20 61 73 73  veto==0 );.  ass
2ae20 65 72 74 28 20 21 70 43 2d 3e 6e 75 6c 6c 52 6f  ert( !pC->nullRo
2ae30 77 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64 65  w || pOp->opcode
2ae40 3d 3d 4f 50 5f 49 64 78 52 6f 77 69 64 20 29 3b  ==OP_IdxRowid );
2ae50 0a 0a 20 20 2f 2a 20 54 68 65 20 49 64 78 52 6f  ..  /* The IdxRo
2ae60 77 69 64 20 61 6e 64 20 53 65 65 6b 20 6f 70 63  wid and Seek opc
2ae70 6f 64 65 73 20 61 72 65 20 63 6f 6d 62 69 6e 65  odes are combine
2ae80 64 20 62 65 63 61 75 73 65 20 6f 66 20 74 68 65  d because of the
2ae90 20 63 6f 6d 6d 6f 6e 61 6c 69 74 79 0a 20 20 2a   commonality.  *
2aea0 2a 20 6f 66 20 73 71 6c 69 74 65 33 56 64 62 65  * of sqlite3Vdbe
2aeb0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 29 20  CursorRestore() 
2aec0 61 6e 64 20 73 71 6c 69 74 65 33 56 64 62 65 49  and sqlite3VdbeI
2aed0 64 78 52 6f 77 69 64 28 29 2e 20 2a 2f 0a 20 20  dxRowid(). */.  
2aee0 72 63 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  rc = sqlite3Vdbe
2aef0 43 75 72 73 6f 72 52 65 73 74 6f 72 65 28 70 43  CursorRestore(pC
2af00 29 3b 0a 0a 20 20 2f 2a 20 73 71 6c 69 74 65 33  );..  /* sqlite3
2af10 56 62 65 43 75 72 73 6f 72 52 65 73 74 6f 72 65  VbeCursorRestore
2af20 28 29 20 63 61 6e 20 6f 6e 6c 79 20 66 61 69 6c  () can only fail
2af30 20 69 66 20 74 68 65 20 72 65 63 6f 72 64 20 68   if the record h
2af40 61 73 20 62 65 65 6e 20 64 65 6c 65 74 65 64 0a  as been deleted.
2af50 20 20 2a 2a 20 6f 75 74 20 66 72 6f 6d 20 75 6e    ** out from un
2af60 64 65 72 20 74 68 65 20 63 75 72 73 6f 72 2e 20  der the cursor. 
2af70 20 54 68 61 74 20 77 69 6c 6c 20 6e 65 76 65 72   That will never
2af80 20 68 61 70 70 65 6e 73 20 66 6f 72 20 61 6e 20   happens for an 
2af90 49 64 78 52 6f 77 69 64 0a 20 20 2a 2a 20 6f 72  IdxRowid.  ** or
2afa0 20 53 65 65 6b 20 6f 70 63 6f 64 65 20 2a 2f 0a   Seek opcode */.
2afb0 20 20 69 66 28 20 4e 45 56 45 52 28 72 63 21 3d    if( NEVER(rc!=
2afc0 53 51 4c 49 54 45 5f 4f 4b 29 20 29 20 67 6f 74  SQLITE_OK) ) got
2afd0 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2afe0 72 72 6f 72 3b 0a 0a 20 20 69 66 28 20 21 70 43  rror;..  if( !pC
2aff0 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b 0a 20 20 20  ->nullRow ){.   
2b000 20 72 6f 77 69 64 20 3d 20 30 3b 20 20 2f 2a 20   rowid = 0;  /* 
2b010 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20 4f 6e 6c  Not needed.  Onl
2b020 79 20 75 73 65 64 20 74 6f 20 73 69 6c 65 6e 63  y used to silenc
2b030 65 20 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a  e a warning. */.
2b040 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
2b050 56 64 62 65 49 64 78 52 6f 77 69 64 28 64 62 2c  VdbeIdxRowid(db,
2b060 20 70 43 2d 3e 75 63 2e 70 43 75 72 73 6f 72 2c   pC->uc.pCursor,
2b070 20 26 72 6f 77 69 64 29 3b 0a 20 20 20 20 69 66   &rowid);.    if
2b080 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
2b090 29 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62  ){.      goto ab
2b0a0 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
2b0b0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
2b0c0 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2b0d0 53 65 65 6b 20 29 7b 0a 20 20 20 20 20 20 61 73  Seek ){.      as
2b0e0 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 3d 30  sert( pOp->p3>=0
2b0f0 20 26 26 20 70 4f 70 2d 3e 70 33 3c 70 2d 3e 6e   && pOp->p3<p->n
2b100 43 75 72 73 6f 72 20 29 3b 0a 20 20 20 20 20 20  Cursor );.      
2b110 70 54 61 62 43 75 72 20 3d 20 70 2d 3e 61 70 43  pTabCur = p->apC
2b120 73 72 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 20  sr[pOp->p3];.   
2b130 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 43     assert( pTabC
2b140 75 72 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 61  ur!=0 );.      a
2b150 73 73 65 72 74 28 20 70 54 61 62 43 75 72 2d 3e  ssert( pTabCur->
2b160 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
2b170 45 5f 42 54 52 45 45 20 29 3b 0a 20 20 20 20 20  E_BTREE );.     
2b180 20 61 73 73 65 72 74 28 20 70 54 61 62 43 75 72   assert( pTabCur
2b190 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 20  ->uc.pCursor!=0 
2b1a0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
2b1b0 20 70 54 61 62 43 75 72 2d 3e 69 73 54 61 62 6c   pTabCur->isTabl
2b1c0 65 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43  e );.      pTabC
2b1d0 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b  ur->nullRow = 0;
2b1e0 0a 20 20 20 20 20 20 70 54 61 62 43 75 72 2d 3e  .      pTabCur->
2b1f0 6d 6f 76 65 74 6f 54 61 72 67 65 74 20 3d 20 72  movetoTarget = r
2b200 6f 77 69 64 3b 0a 20 20 20 20 20 20 70 54 61 62  owid;.      pTab
2b210 43 75 72 2d 3e 64 65 66 65 72 72 65 64 4d 6f 76  Cur->deferredMov
2b220 65 74 6f 20 3d 20 31 3b 0a 20 20 20 20 20 20 61  eto = 1;.      a
2b230 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79  ssert( pOp->p4ty
2b240 70 65 3d 3d 50 34 5f 49 4e 54 41 52 52 41 59 20  pe==P4_INTARRAY 
2b250 7c 7c 20 70 4f 70 2d 3e 70 34 2e 61 69 3d 3d 30  || pOp->p4.ai==0
2b260 20 29 3b 0a 20 20 20 20 20 20 70 54 61 62 43 75   );.      pTabCu
2b270 72 2d 3e 61 41 6c 74 4d 61 70 20 3d 20 70 4f 70  r->aAltMap = pOp
2b280 2d 3e 70 34 2e 61 69 3b 0a 20 20 20 20 20 20 70  ->p4.ai;.      p
2b290 54 61 62 43 75 72 2d 3e 70 41 6c 74 43 75 72 73  TabCur->pAltCurs
2b2a0 6f 72 20 3d 20 70 43 3b 0a 20 20 20 20 7d 65 6c  or = pC;.    }el
2b2b0 73 65 7b 0a 20 20 20 20 20 20 70 4f 75 74 20 3d  se{.      pOut =
2b2c0 20 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28   out2Prerelease(
2b2d0 70 2c 20 70 4f 70 29 3b 0a 20 20 20 20 20 20 70  p, pOp);.      p
2b2e0 4f 75 74 2d 3e 75 2e 69 20 3d 20 72 6f 77 69 64  Out->u.i = rowid
2b2f0 3b 0a 20 20 20 20 20 20 70 4f 75 74 2d 3e 66 6c  ;.      pOut->fl
2b300 61 67 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20  ags = MEM_Int;. 
2b310 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b 0a 20 20     }.  }else{.  
2b320 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d 3e 6f    assert( pOp->o
2b330 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 52 6f 77  pcode==OP_IdxRow
2b340 69 64 20 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  id );.    sqlite
2b350 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
2b360 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 5d 29 3b  &aMem[pOp->p2]);
2b370 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
2b380 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 64 78 47  ./* Opcode: IdxG
2b390 45 20 50 31 20 50 32 20 50 33 20 50 34 20 50 35  E P1 P2 P3 P4 P5
2b3a0 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 6b 65  .** Synopsis: ke
2b3b0 79 3d 72 5b 50 33 40 50 34 5d 0a 2a 2a 0a 2a 2a  y=r[P3@P4].**.**
2b3c0 20 54 68 65 20 50 34 20 72 65 67 69 73 74 65 72   The P4 register
2b3d0 20 76 61 6c 75 65 73 20 62 65 67 69 6e 6e 69 6e   values beginnin
2b3e0 67 20 77 69 74 68 20 50 33 20 66 6f 72 6d 20 61  g with P3 form a
2b3f0 6e 20 75 6e 70 61 63 6b 65 64 20 69 6e 64 65 78  n unpacked index
2b400 20 0a 2a 2a 20 6b 65 79 20 74 68 61 74 20 6f 6d   .** key that om
2b410 69 74 73 20 74 68 65 20 50 52 49 4d 41 52 59 20  its the PRIMARY 
2b420 4b 45 59 2e 20 20 43 6f 6d 70 61 72 65 20 74 68  KEY.  Compare th
2b430 69 73 20 6b 65 79 20 76 61 6c 75 65 20 61 67 61  is key value aga
2b440 69 6e 73 74 20 74 68 65 20 69 6e 64 65 78 20 0a  inst the index .
2b450 2a 2a 20 74 68 61 74 20 50 31 20 69 73 20 63 75  ** that P1 is cu
2b460 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69 6e 67  rrently pointing
2b470 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20 74 68   to, ignoring th
2b480 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2b490 20 52 4f 57 49 44 20 0a 2a 2a 20 66 69 65 6c 64   ROWID .** field
2b4a0 73 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2a  s at the end..**
2b4b0 0a 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e  .** If the P1 in
2b4c0 64 65 78 20 65 6e 74 72 79 20 69 73 20 67 72 65  dex entry is gre
2b4d0 61 74 65 72 20 74 68 61 6e 20 6f 72 20 65 71 75  ater than or equ
2b4e0 61 6c 20 74 6f 20 74 68 65 20 6b 65 79 20 76 61  al to the key va
2b4f0 6c 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70  lue.** then jump
2b500 20 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69   to P2.  Otherwi
2b510 73 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20  se fall through 
2b520 74 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74  to the next inst
2b530 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f  ruction..*/./* O
2b540 70 63 6f 64 65 3a 20 49 64 78 47 54 20 50 31 20  pcode: IdxGT P1 
2b550 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53  P2 P3 P4 P5.** S
2b560 79 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50  ynopsis: key=r[P
2b570 33 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  3@P4].**.** The 
2b580 50 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75  P4 register valu
2b590 65 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74  es beginning wit
2b5a0 68 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70  h P3 form an unp
2b5b0 61 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20  acked index .** 
2b5c0 6b 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74  key that omits t
2b5d0 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 2e 20  he PRIMARY KEY. 
2b5e0 20 43 6f 6d 70 61 72 65 20 74 68 69 73 20 6b 65   Compare this ke
2b5f0 79 20 76 61 6c 75 65 20 61 67 61 69 6e 73 74 20  y value against 
2b600 74 68 65 20 69 6e 64 65 78 20 0a 2a 2a 20 74 68  the index .** th
2b610 61 74 20 50 31 20 69 73 20 63 75 72 72 65 6e 74  at P1 is current
2b620 6c 79 20 70 6f 69 6e 74 69 6e 67 20 74 6f 2c 20  ly pointing to, 
2b630 69 67 6e 6f 72 69 6e 67 20 74 68 65 20 50 52 49  ignoring the PRI
2b640 4d 41 52 59 20 4b 45 59 20 6f 72 20 52 4f 57 49  MARY KEY or ROWI
2b650 44 20 0a 2a 2a 20 66 69 65 6c 64 73 20 61 74 20  D .** fields at 
2b660 74 68 65 20 65 6e 64 2e 0a 2a 2a 0a 2a 2a 20 49  the end..**.** I
2b670 66 20 74 68 65 20 50 31 20 69 6e 64 65 78 20 65  f the P1 index e
2b680 6e 74 72 79 20 69 73 20 67 72 65 61 74 65 72 20  ntry is greater 
2b690 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61 6c  than the key val
2b6a0 75 65 0a 2a 2a 20 74 68 65 6e 20 6a 75 6d 70 20  ue.** then jump 
2b6b0 74 6f 20 50 32 2e 20 20 4f 74 68 65 72 77 69 73  to P2.  Otherwis
2b6c0 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2b6d0 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2b6e0 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
2b6f0 63 6f 64 65 3a 20 49 64 78 4c 54 20 50 31 20 50  code: IdxLT P1 P
2b700 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2b710 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2b720 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2b730 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2b740 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2b750 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2b760 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2b770 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2b780 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2b790 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
2b7a0 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2b7b0 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
2b7c0 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
2b7d0 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2b7e0 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2b7f0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2b800 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
2b810 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
2b820 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2b830 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
2b840 20 74 68 61 6e 20 74 68 65 20 6b 65 79 20 76 61   than the key va
2b850 6c 75 65 20 74 68 65 6e 20 6a 75 6d 70 20 74 6f  lue then jump to
2b860 20 50 32 2e 0a 2a 2a 20 4f 74 68 65 72 77 69 73   P2..** Otherwis
2b870 65 20 66 61 6c 6c 20 74 68 72 6f 75 67 68 20 74  e fall through t
2b880 6f 20 74 68 65 20 6e 65 78 74 20 69 6e 73 74 72  o the next instr
2b890 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 2f 2a 20 4f 70  uction..*/./* Op
2b8a0 63 6f 64 65 3a 20 49 64 78 4c 45 20 50 31 20 50  code: IdxLE P1 P
2b8b0 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 20 53 79  2 P3 P4 P5.** Sy
2b8c0 6e 6f 70 73 69 73 3a 20 6b 65 79 3d 72 5b 50 33  nopsis: key=r[P3
2b8d0 40 50 34 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50  @P4].**.** The P
2b8e0 34 20 72 65 67 69 73 74 65 72 20 76 61 6c 75 65  4 register value
2b8f0 73 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68  s beginning with
2b900 20 50 33 20 66 6f 72 6d 20 61 6e 20 75 6e 70 61   P3 form an unpa
2b910 63 6b 65 64 20 69 6e 64 65 78 20 0a 2a 2a 20 6b  cked index .** k
2b920 65 79 20 74 68 61 74 20 6f 6d 69 74 73 20 74 68  ey that omits th
2b930 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 6f 72  e PRIMARY KEY or
2b940 20 52 4f 57 49 44 2e 20 20 43 6f 6d 70 61 72 65   ROWID.  Compare
2b950 20 74 68 69 73 20 6b 65 79 20 76 61 6c 75 65 20   this key value 
2b960 61 67 61 69 6e 73 74 0a 2a 2a 20 74 68 65 20 69  against.** the i
2b970 6e 64 65 78 20 74 68 61 74 20 50 31 20 69 73 20  ndex that P1 is 
2b980 63 75 72 72 65 6e 74 6c 79 20 70 6f 69 6e 74 69  currently pointi
2b990 6e 67 20 74 6f 2c 20 69 67 6e 6f 72 69 6e 67 20  ng to, ignoring 
2b9a0 74 68 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20  the PRIMARY KEY 
2b9b0 6f 72 0a 2a 2a 20 52 4f 57 49 44 20 6f 6e 20 74  or.** ROWID on t
2b9c0 68 65 20 50 31 20 69 6e 64 65 78 2e 0a 2a 2a 0a  he P1 index..**.
2b9d0 2a 2a 20 49 66 20 74 68 65 20 50 31 20 69 6e 64  ** If the P1 ind
2b9e0 65 78 20 65 6e 74 72 79 20 69 73 20 6c 65 73 73  ex entry is less
2b9f0 20 74 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74   than or equal t
2ba00 6f 20 74 68 65 20 6b 65 79 20 76 61 6c 75 65 20  o the key value 
2ba10 74 68 65 6e 20 6a 75 6d 70 0a 2a 2a 20 74 6f 20  then jump.** to 
2ba20 50 32 2e 20 4f 74 68 65 72 77 69 73 65 20 66 61  P2. Otherwise fa
2ba30 6c 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68  ll through to th
2ba40 65 20 6e 65 78 74 20 69 6e 73 74 72 75 63 74 69  e next instructi
2ba50 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  on..*/.case OP_I
2ba60 64 78 4c 45 3a 20 20 20 20 20 20 20 20 20 20 2f  dxLE:          /
2ba70 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73 65 20 4f  * jump */.case O
2ba80 50 5f 49 64 78 47 54 3a 20 20 20 20 20 20 20 20  P_IdxGT:        
2ba90 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 63 61 73    /* jump */.cas
2baa0 65 20 4f 50 5f 49 64 78 4c 54 3a 20 20 20 20 20  e OP_IdxLT:     
2bab0 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a       /* jump */.
2bac0 63 61 73 65 20 4f 50 5f 49 64 78 47 45 3a 20 20  case OP_IdxGE:  
2bad0 7b 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20  {       /* jump 
2bae0 2a 2f 0a 20 20 56 64 62 65 43 75 72 73 6f 72 20  */.  VdbeCursor 
2baf0 2a 70 43 3b 0a 20 20 69 6e 74 20 72 65 73 3b 0a  *pC;.  int res;.
2bb00 20 20 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64    UnpackedRecord
2bb10 20 72 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   r;..  assert( p
2bb20 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
2bb30 2d 3e 70 31 3c 70 2d 3e 6e 43 75 72 73 6f 72 20  ->p1<p->nCursor 
2bb40 29 3b 0a 20 20 70 43 20 3d 20 70 2d 3e 61 70 43  );.  pC = p->apC
2bb50 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  sr[pOp->p1];.  a
2bb60 73 73 65 72 74 28 20 70 43 21 3d 30 20 29 3b 0a  ssert( pC!=0 );.
2bb70 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e 69 73    assert( pC->is
2bb80 4f 72 64 65 72 65 64 20 29 3b 0a 20 20 61 73 73  Ordered );.  ass
2bb90 65 72 74 28 20 70 43 2d 3e 65 43 75 72 54 79 70  ert( pC->eCurTyp
2bba0 65 3d 3d 43 55 52 54 59 50 45 5f 42 54 52 45 45  e==CURTYPE_BTREE
2bbb0 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43   );.  assert( pC
2bbc0 2d 3e 75 63 2e 70 43 75 72 73 6f 72 21 3d 30 29  ->uc.pCursor!=0)
2bbd0 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e  ;.  assert( pC->
2bbe0 64 65 66 65 72 72 65 64 4d 6f 76 65 74 6f 3d 3d  deferredMoveto==
2bbf0 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70  0 );.  assert( p
2bc00 4f 70 2d 3e 70 35 3d 3d 30 20 7c 7c 20 70 4f 70  Op->p5==0 || pOp
2bc10 2d 3e 70 35 3d 3d 31 20 29 3b 0a 20 20 61 73 73  ->p5==1 );.  ass
2bc20 65 72 74 28 20 70 4f 70 2d 3e 70 34 74 79 70 65  ert( pOp->p4type
2bc30 3d 3d 50 34 5f 49 4e 54 33 32 20 29 3b 0a 20 20  ==P4_INT32 );.  
2bc40 72 2e 70 4b 65 79 49 6e 66 6f 20 3d 20 70 43 2d  r.pKeyInfo = pC-
2bc50 3e 70 4b 65 79 49 6e 66 6f 3b 0a 20 20 72 2e 6e  >pKeyInfo;.  r.n
2bc60 46 69 65 6c 64 20 3d 20 28 75 31 36 29 70 4f 70  Field = (u16)pOp
2bc70 2d 3e 70 34 2e 69 3b 0a 20 20 69 66 28 20 70 4f  ->p4.i;.  if( pO
2bc80 70 2d 3e 6f 70 63 6f 64 65 3c 4f 50 5f 49 64 78  p->opcode<OP_Idx
2bc90 4c 54 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74  LT ){.    assert
2bca0 28 20 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f  ( pOp->opcode==O
2bcb0 50 5f 49 64 78 4c 45 20 7c 7c 20 70 4f 70 2d 3e  P_IdxLE || pOp->
2bcc0 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 47 54  opcode==OP_IdxGT
2bcd0 20 29 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c   );.    r.defaul
2bce0 74 5f 72 63 20 3d 20 2d 31 3b 0a 20 20 7d 65 6c  t_rc = -1;.  }el
2bcf0 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  se{.    assert( 
2bd00 70 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f  pOp->opcode==OP_
2bd10 49 64 78 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70  IdxGE || pOp->op
2bd20 63 6f 64 65 3d 3d 4f 50 5f 49 64 78 4c 54 20 29  code==OP_IdxLT )
2bd30 3b 0a 20 20 20 20 72 2e 64 65 66 61 75 6c 74 5f  ;.    r.default_
2bd40 72 63 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 2e  rc = 0;.  }.  r.
2bd50 61 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f 70  aMem = &aMem[pOp
2bd60 2d 3e 70 33 5d 3b 0a 23 69 66 64 65 66 20 53 51  ->p3];.#ifdef SQ
2bd70 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 7b 20 69  LITE_DEBUG.  { i
2bd80 6e 74 20 69 3b 20 66 6f 72 28 69 3d 30 3b 20 69  nt i; for(i=0; i
2bd90 3c 72 2e 6e 46 69 65 6c 64 3b 20 69 2b 2b 29 20  <r.nField; i++) 
2bda0 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c  assert( memIsVal
2bdb0 69 64 28 26 72 2e 61 4d 65 6d 5b 69 5d 29 20 29  id(&r.aMem[i]) )
2bdc0 3b 20 7d 0a 23 65 6e 64 69 66 0a 20 20 72 65 73  ; }.#endif.  res
2bdd0 20 3d 20 30 3b 20 20 2f 2a 20 4e 6f 74 20 6e 65   = 0;  /* Not ne
2bde0 65 64 65 64 2e 20 20 4f 6e 6c 79 20 75 73 65 64  eded.  Only used
2bdf0 20 74 6f 20 73 69 6c 65 6e 63 65 20 61 20 77 61   to silence a wa
2be00 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20 72 63 20 3d  rning. */.  rc =
2be10 20 73 71 6c 69 74 65 33 56 64 62 65 49 64 78 4b   sqlite3VdbeIdxK
2be20 65 79 43 6f 6d 70 61 72 65 28 64 62 2c 20 70 43  eyCompare(db, pC
2be30 2c 20 26 72 2c 20 26 72 65 73 29 3b 0a 20 20 61  , &r, &res);.  a
2be40 73 73 65 72 74 28 20 28 4f 50 5f 49 64 78 4c 45  ssert( (OP_IdxLE
2be50 26 31 29 3d 3d 28 4f 50 5f 49 64 78 4c 54 26 31  &1)==(OP_IdxLT&1
2be60 29 20 26 26 20 28 4f 50 5f 49 64 78 47 45 26 31  ) && (OP_IdxGE&1
2be70 29 3d 3d 28 4f 50 5f 49 64 78 47 54 26 31 29 20  )==(OP_IdxGT&1) 
2be80 29 3b 0a 20 20 69 66 28 20 28 70 4f 70 2d 3e 6f  );.  if( (pOp->o
2be90 70 63 6f 64 65 26 31 29 3d 3d 28 4f 50 5f 49 64  pcode&1)==(OP_Id
2bea0 78 4c 54 26 31 29 20 29 7b 0a 20 20 20 20 61 73  xLT&1) ){.    as
2beb0 73 65 72 74 28 20 70 4f 70 2d 3e 6f 70 63 6f 64  sert( pOp->opcod
2bec0 65 3d 3d 4f 50 5f 49 64 78 4c 45 20 7c 7c 20 70  e==OP_IdxLE || p
2bed0 4f 70 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49  Op->opcode==OP_I
2bee0 64 78 4c 54 20 29 3b 0a 20 20 20 20 72 65 73 20  dxLT );.    res 
2bef0 3d 20 2d 72 65 73 3b 0a 20 20 7d 65 6c 73 65 7b  = -res;.  }else{
2bf00 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 4f 70  .    assert( pOp
2bf10 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 49 64 78  ->opcode==OP_Idx
2bf20 47 45 20 7c 7c 20 70 4f 70 2d 3e 6f 70 63 6f 64  GE || pOp->opcod
2bf30 65 3d 3d 4f 50 5f 49 64 78 47 54 20 29 3b 0a 20  e==OP_IdxGT );. 
2bf40 20 20 20 72 65 73 2b 2b 3b 0a 20 20 7d 0a 20 20     res++;.  }.  
2bf50 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2bf60 72 65 73 3e 30 2c 32 29 3b 0a 20 20 69 66 28 20  res>0,2);.  if( 
2bf70 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2bf80 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2bf90 69 66 28 20 72 65 73 3e 30 20 29 20 67 6f 74 6f  if( res>0 ) goto
2bfa0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 62   jump_to_p2;.  b
2bfb0 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f  reak;.}../* Opco
2bfc0 64 65 3a 20 44 65 73 74 72 6f 79 20 50 31 20 50  de: Destroy P1 P
2bfd0 32 20 50 33 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 44  2 P3 * *.**.** D
2bfe0 65 6c 65 74 65 20 61 6e 20 65 6e 74 69 72 65 20  elete an entire 
2bff0 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 6f  database table o
2c000 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72 6f  r index whose ro
2c010 6f 74 20 70 61 67 65 20 69 6e 20 74 68 65 20 64  ot page in the d
2c020 61 74 61 62 61 73 65 0a 2a 2a 20 66 69 6c 65 20  atabase.** file 
2c030 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e 0a  is given by P1..
2c040 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62 6c 65 20  **.** The table 
2c050 62 65 69 6e 67 20 64 65 73 74 72 6f 79 65 64 20  being destroyed 
2c060 69 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64  is in the main d
2c070 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
2c080 50 33 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 33  P3==0.  If.** P3
2c090 3d 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62  ==1 then the tab
2c0a0 6c 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69  le to be clear i
2c0b0 73 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61  s in the auxilia
2c0c0 72 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ry database file
2c0d0 0a 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64  .** that is used
2c0e0 20 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73   to store tables
2c0f0 20 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52   create using CR
2c100 45 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54  EATE TEMPORARY T
2c110 41 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 41  ABLE..**.** If A
2c120 55 54 4f 56 41 43 55 55 4d 20 69 73 20 65 6e 61  UTOVACUUM is ena
2c130 62 6c 65 64 20 74 68 65 6e 20 69 74 20 69 73 20  bled then it is 
2c140 70 6f 73 73 69 62 6c 65 20 74 68 61 74 20 61 6e  possible that an
2c150 6f 74 68 65 72 20 72 6f 6f 74 20 70 61 67 65 0a  other root page.
2c160 2a 2a 20 6d 69 67 68 74 20 62 65 20 6d 6f 76 65  ** might be move
2c170 64 20 69 6e 74 6f 20 74 68 65 20 6e 65 77 6c 79  d into the newly
2c180 20 64 65 6c 65 74 65 64 20 72 6f 6f 74 20 70 61   deleted root pa
2c190 67 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b  ge in order to k
2c1a0 65 65 70 20 61 6c 6c 0a 2a 2a 20 72 6f 6f 74 20  eep all.** root 
2c1b0 70 61 67 65 73 20 63 6f 6e 74 69 67 75 6f 75 73  pages contiguous
2c1c0 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e   at the beginnin
2c1d0 67 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  g of the databas
2c1e0 65 2e 20 20 54 68 65 20 66 6f 72 6d 65 72 0a 2a  e.  The former.*
2c1f0 2a 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 72  * value of the r
2c200 6f 6f 74 20 70 61 67 65 20 74 68 61 74 20 6d 6f  oot page that mo
2c210 76 65 64 20 2d 20 69 74 73 20 76 61 6c 75 65 20  ved - its value 
2c220 62 65 66 6f 72 65 20 74 68 65 20 6d 6f 76 65 20  before the move 
2c230 6f 63 63 75 72 72 65 64 20 2d 0a 2a 2a 20 69 73  occurred -.** is
2c240 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
2c250 74 65 72 20 50 32 2e 20 20 49 66 20 6e 6f 20 70  ter P2.  If no p
2c260 61 67 65 20 0a 2a 2a 20 6d 6f 76 65 6d 65 6e 74  age .** movement
2c270 20 77 61 73 20 72 65 71 75 69 72 65 64 20 28 62   was required (b
2c280 65 63 61 75 73 65 20 74 68 65 20 74 61 62 6c 65  ecause the table
2c290 20 62 65 69 6e 67 20 64 72 6f 70 70 65 64 20 77   being dropped w
2c2a0 61 73 20 61 6c 72 65 61 64 79 20 0a 2a 2a 20 74  as already .** t
2c2b0 68 65 20 6c 61 73 74 20 6f 6e 65 20 69 6e 20 74  he last one in t
2c2c0 68 65 20 64 61 74 61 62 61 73 65 29 20 74 68 65  he database) the
2c2d0 6e 20 61 20 7a 65 72 6f 20 69 73 20 73 74 6f 72  n a zero is stor
2c2e0 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20 50  ed in register P
2c2f0 32 2e 0a 2a 2a 20 49 66 20 41 55 54 4f 56 41 43  2..** If AUTOVAC
2c300 55 55 4d 20 69 73 20 64 69 73 61 62 6c 65 64 20  UUM is disabled 
2c310 74 68 65 6e 20 61 20 7a 65 72 6f 20 69 73 20 73  then a zero is s
2c320 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
2c330 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  r P2..**.** See 
2c340 61 6c 73 6f 3a 20 43 6c 65 61 72 0a 2a 2f 0a 63  also: Clear.*/.c
2c350 61 73 65 20 4f 50 5f 44 65 73 74 72 6f 79 3a 20  ase OP_Destroy: 
2c360 7b 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f  {     /* out2 */
2c370 0a 20 20 69 6e 74 20 69 4d 6f 76 65 64 3b 0a 20  .  int iMoved;. 
2c380 20 69 6e 74 20 69 44 62 3b 0a 0a 20 20 61 73 73   int iDb;..  ass
2c390 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e 6c 79  ert( p->readOnly
2c3a0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2c3b0 20 70 4f 70 2d 3e 70 31 3e 31 20 29 3b 0a 20 20   pOp->p1>1 );.  
2c3c0 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65  pOut = out2Prere
2c3d0 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20  lease(p, pOp);. 
2c3e0 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d 20 4d   pOut->flags = M
2c3f0 45 4d 5f 4e 75 6c 6c 3b 0a 20 20 69 66 28 20 64  EM_Null;.  if( d
2c400 62 2d 3e 6e 56 64 62 65 52 65 61 64 20 3e 20 64  b->nVdbeRead > d
2c410 62 2d 3e 6e 56 44 65 73 74 72 6f 79 2b 31 20 29  b->nVDestroy+1 )
2c420 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  {.    rc = SQLIT
2c430 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20 70 2d  E_LOCKED;.    p-
2c440 3e 65 72 72 6f 72 41 63 74 69 6f 6e 20 3d 20 4f  >errorAction = O
2c450 45 5f 41 62 6f 72 74 3b 0a 20 20 20 20 67 6f 74  E_Abort;.    got
2c460 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65  o abort_due_to_e
2c470 72 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rror;.  }else{. 
2c480 20 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70 33     iDb = pOp->p3
2c490 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 44 62  ;.    assert( Db
2c4a0 4d 61 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65  MaskTest(p->btre
2c4b0 65 4d 61 73 6b 2c 20 69 44 62 29 20 29 3b 0a 20  eMask, iDb) );. 
2c4c0 20 20 20 69 4d 6f 76 65 64 20 3d 20 30 3b 20 20     iMoved = 0;  
2c4d0 2f 2a 20 4e 6f 74 20 6e 65 65 64 65 64 2e 20 20  /* Not needed.  
2c4e0 4f 6e 6c 79 20 74 6f 20 73 69 6c 65 6e 63 65 20  Only to silence 
2c4f0 61 20 77 61 72 6e 69 6e 67 2e 20 2a 2f 0a 20 20  a warning. */.  
2c500 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74    rc = sqlite3Bt
2c510 72 65 65 44 72 6f 70 54 61 62 6c 65 28 64 62 2d  reeDropTable(db-
2c520 3e 61 44 62 5b 69 44 62 5d 2e 70 42 74 2c 20 70  >aDb[iDb].pBt, p
2c530 4f 70 2d 3e 70 31 2c 20 26 69 4d 6f 76 65 64 29  Op->p1, &iMoved)
2c540 3b 0a 20 20 20 20 70 4f 75 74 2d 3e 66 6c 61 67  ;.    pOut->flag
2c550 73 20 3d 20 4d 45 4d 5f 49 6e 74 3b 0a 20 20 20  s = MEM_Int;.   
2c560 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 69 4d 6f   pOut->u.i = iMo
2c570 76 65 64 3b 0a 20 20 20 20 69 66 28 20 72 63 20  ved;.    if( rc 
2c580 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65  ) goto abort_due
2c590 5f 74 6f 5f 65 72 72 6f 72 3b 0a 23 69 66 6e 64  _to_error;.#ifnd
2c5a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
2c5b0 55 54 4f 56 41 43 55 55 4d 0a 20 20 20 20 69 66  UTOVACUUM.    if
2c5c0 28 20 69 4d 6f 76 65 64 21 3d 30 20 29 7b 0a 20  ( iMoved!=0 ){. 
2c5d0 20 20 20 20 20 73 71 6c 69 74 65 33 52 6f 6f 74       sqlite3Root
2c5e0 50 61 67 65 4d 6f 76 65 64 28 64 62 2c 20 69 44  PageMoved(db, iD
2c5f0 62 2c 20 69 4d 6f 76 65 64 2c 20 70 4f 70 2d 3e  b, iMoved, pOp->
2c600 70 31 29 3b 0a 20 20 20 20 20 20 2f 2a 20 41 6c  p1);.      /* Al
2c610 6c 20 4f 50 5f 44 65 73 74 72 6f 79 20 6f 70 65  l OP_Destroy ope
2c620 72 61 74 69 6f 6e 73 20 6f 63 63 75 72 20 6f 6e  rations occur on
2c630 20 74 68 65 20 73 61 6d 65 20 62 74 72 65 65 20   the same btree 
2c640 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
2c650 20 72 65 73 65 74 53 63 68 65 6d 61 4f 6e 46 61   resetSchemaOnFa
2c660 75 6c 74 3d 3d 30 20 7c 7c 20 72 65 73 65 74 53  ult==0 || resetS
2c670 63 68 65 6d 61 4f 6e 46 61 75 6c 74 3d 3d 69 44  chemaOnFault==iD
2c680 62 2b 31 20 29 3b 0a 20 20 20 20 20 20 72 65 73  b+1 );.      res
2c690 65 74 53 63 68 65 6d 61 4f 6e 46 61 75 6c 74 20  etSchemaOnFault 
2c6a0 3d 20 69 44 62 2b 31 3b 0a 20 20 20 20 7d 0a 23  = iDb+1;.    }.#
2c6b0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
2c6c0 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  k;.}../* Opcode:
2c6d0 20 43 6c 65 61 72 20 50 31 20 50 32 20 50 33 0a   Clear P1 P2 P3.
2c6e0 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61 6c 6c  **.** Delete all
2c6f0 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 65   contents of the
2c700 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 20   database table 
2c710 6f 72 20 69 6e 64 65 78 20 77 68 6f 73 65 20 72  or index whose r
2c720 6f 6f 74 20 70 61 67 65 0a 2a 2a 20 69 6e 20 74  oot page.** in t
2c730 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
2c740 20 69 73 20 67 69 76 65 6e 20 62 79 20 50 31 2e   is given by P1.
2c750 20 20 42 75 74 2c 20 75 6e 6c 69 6b 65 20 44 65    But, unlike De
2c760 73 74 72 6f 79 2c 20 64 6f 20 6e 6f 74 0a 2a 2a  stroy, do not.**
2c770 20 72 65 6d 6f 76 65 20 74 68 65 20 74 61 62 6c   remove the tabl
2c780 65 20 6f 72 20 69 6e 64 65 78 20 66 72 6f 6d 20  e or index from 
2c790 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
2c7a0 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 74 61 62  e..**.** The tab
2c7b0 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 20 69  le being clear i
2c7c0 73 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  s in the main da
2c7d0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2c7e0 32 3d 3d 30 2e 20 20 49 66 0a 2a 2a 20 50 32 3d  2==0.  If.** P2=
2c7f0 3d 31 20 74 68 65 6e 20 74 68 65 20 74 61 62 6c  =1 then the tabl
2c800 65 20 74 6f 20 62 65 20 63 6c 65 61 72 20 69 73  e to be clear is
2c810 20 69 6e 20 74 68 65 20 61 75 78 69 6c 69 61 72   in the auxiliar
2c820 79 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a  y database file.
2c830 2a 2a 20 74 68 61 74 20 69 73 20 75 73 65 64 20  ** that is used 
2c840 74 6f 20 73 74 6f 72 65 20 74 61 62 6c 65 73 20  to store tables 
2c850 63 72 65 61 74 65 20 75 73 69 6e 67 20 43 52 45  create using CRE
2c860 41 54 45 20 54 45 4d 50 4f 52 41 52 59 20 54 41  ATE TEMPORARY TA
2c870 42 4c 45 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  BLE..**.** If th
2c880 65 20 50 33 20 76 61 6c 75 65 20 69 73 20 6e 6f  e P3 value is no
2c890 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e 20 74 68 65  n-zero, then the
2c8a0 20 74 61 62 6c 65 20 72 65 66 65 72 72 65 64 20   table referred 
2c8b0 74 6f 20 6d 75 73 74 20 62 65 20 61 6e 0a 2a 2a  to must be an.**
2c8c0 20 69 6e 74 6b 65 79 20 74 61 62 6c 65 20 28 61   intkey table (a
2c8d0 6e 20 53 51 4c 20 74 61 62 6c 65 2c 20 6e 6f 74  n SQL table, not
2c8e0 20 61 6e 20 69 6e 64 65 78 29 2e 20 49 6e 20 74   an index). In t
2c8f0 68 69 73 20 63 61 73 65 20 74 68 65 20 72 6f 77  his case the row
2c900 20 63 68 61 6e 67 65 20 0a 2a 2a 20 63 6f 75 6e   change .** coun
2c910 74 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  t is incremented
2c920 20 62 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f   by the number o
2c930 66 20 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61  f rows in the ta
2c940 62 6c 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65  ble being cleare
2c950 64 2e 20 0a 2a 2a 20 49 66 20 50 33 20 69 73 20  d. .** If P3 is 
2c960 67 72 65 61 74 65 72 20 74 68 61 6e 20 7a 65 72  greater than zer
2c970 6f 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75  o, then the valu
2c980 65 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69  e stored in regi
2c990 73 74 65 72 20 50 33 20 69 73 0a 2a 2a 20 61 6c  ster P3 is.** al
2c9a0 73 6f 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62  so incremented b
2c9b0 79 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  y the number of 
2c9c0 72 6f 77 73 20 69 6e 20 74 68 65 20 74 61 62 6c  rows in the tabl
2c9d0 65 20 62 65 69 6e 67 20 63 6c 65 61 72 65 64 2e  e being cleared.
2c9e0 0a 2a 2a 0a 2a 2a 20 53 65 65 20 61 6c 73 6f 3a  .**.** See also:
2c9f0 20 44 65 73 74 72 6f 79 0a 2a 2f 0a 63 61 73 65   Destroy.*/.case
2ca00 20 4f 50 5f 43 6c 65 61 72 3a 20 7b 0a 20 20 69   OP_Clear: {.  i
2ca10 6e 74 20 6e 43 68 61 6e 67 65 3b 0a 20 0a 20 20  nt nChange;. .  
2ca20 6e 43 68 61 6e 67 65 20 3d 20 30 3b 0a 20 20 61  nChange = 0;.  a
2ca30 73 73 65 72 74 28 20 70 2d 3e 72 65 61 64 4f 6e  ssert( p->readOn
2ca40 6c 79 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  ly==0 );.  asser
2ca50 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d  t( DbMaskTest(p-
2ca60 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d  >btreeMask, pOp-
2ca70 3e 70 32 29 20 29 3b 0a 20 20 72 63 20 3d 20 73  >p2) );.  rc = s
2ca80 71 6c 69 74 65 33 42 74 72 65 65 43 6c 65 61 72  qlite3BtreeClear
2ca90 54 61 62 6c 65 28 0a 20 20 20 20 20 20 64 62 2d  Table(.      db-
2caa0 3e 61 44 62 5b 70 4f 70 2d 3e 70 32 5d 2e 70 42  >aDb[pOp->p2].pB
2cab0 74 2c 20 70 4f 70 2d 3e 70 31 2c 20 28 70 4f 70  t, pOp->p1, (pOp
2cac0 2d 3e 70 33 20 3f 20 26 6e 43 68 61 6e 67 65 20  ->p3 ? &nChange 
2cad0 3a 20 30 29 0a 20 20 29 3b 0a 20 20 69 66 28 20  : 0).  );.  if( 
2cae0 70 4f 70 2d 3e 70 33 20 29 7b 0a 20 20 20 20 70  pOp->p3 ){.    p
2caf0 2d 3e 6e 43 68 61 6e 67 65 20 2b 3d 20 6e 43 68  ->nChange += nCh
2cb00 61 6e 67 65 3b 0a 20 20 20 20 69 66 28 20 70 4f  ange;.    if( pO
2cb10 70 2d 3e 70 33 3e 30 20 29 7b 0a 20 20 20 20 20  p->p3>0 ){.     
2cb20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61   assert( memIsVa
2cb30 6c 69 64 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  lid(&aMem[pOp->p
2cb40 33 5d 29 20 29 3b 0a 20 20 20 20 20 20 6d 65 6d  3]) );.      mem
2cb50 41 62 6f 75 74 54 6f 43 68 61 6e 67 65 28 70 2c  AboutToChange(p,
2cb60 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 29   &aMem[pOp->p3])
2cb70 3b 0a 20 20 20 20 20 20 61 4d 65 6d 5b 70 4f 70  ;.      aMem[pOp
2cb80 2d 3e 70 33 5d 2e 75 2e 69 20 2b 3d 20 6e 43 68  ->p3].u.i += nCh
2cb90 61 6e 67 65 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  ange;.    }.  }.
2cba0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
2cbb0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
2cbc0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a  or;.  break;.}..
2cbd0 2f 2a 20 4f 70 63 6f 64 65 3a 20 52 65 73 65 74  /* Opcode: Reset
2cbe0 53 6f 72 74 65 72 20 50 31 20 2a 20 2a 20 2a 20  Sorter P1 * * * 
2cbf0 2a 0a 2a 2a 0a 2a 2a 20 44 65 6c 65 74 65 20 61  *.**.** Delete a
2cc00 6c 6c 20 63 6f 6e 74 65 6e 74 73 20 66 72 6f 6d  ll contents from
2cc10 20 74 68 65 20 65 70 68 65 6d 65 72 61 6c 20 74   the ephemeral t
2cc20 61 62 6c 65 20 6f 72 20 73 6f 72 74 65 72 0a 2a  able or sorter.*
2cc30 2a 20 74 68 61 74 20 69 73 20 6f 70 65 6e 20 6f  * that is open o
2cc40 6e 20 63 75 72 73 6f 72 20 50 31 2e 0a 2a 2a 0a  n cursor P1..**.
2cc50 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  ** This opcode o
2cc60 6e 6c 79 20 77 6f 72 6b 73 20 66 6f 72 20 63 75  nly works for cu
2cc70 72 73 6f 72 73 20 75 73 65 64 20 66 6f 72 20 73  rsors used for s
2cc80 6f 72 74 69 6e 67 20 61 6e 64 0a 2a 2a 20 6f 70  orting and.** op
2cc90 65 6e 65 64 20 77 69 74 68 20 4f 50 5f 4f 70 65  ened with OP_Ope
2cca0 6e 45 70 68 65 6d 65 72 61 6c 20 6f 72 20 4f 50  nEphemeral or OP
2ccb0 5f 53 6f 72 74 65 72 4f 70 65 6e 2e 0a 2a 2f 0a  _SorterOpen..*/.
2ccc0 63 61 73 65 20 4f 50 5f 52 65 73 65 74 53 6f 72  case OP_ResetSor
2ccd0 74 65 72 3a 20 7b 0a 20 20 56 64 62 65 43 75 72  ter: {.  VdbeCur
2cce0 73 6f 72 20 2a 70 43 3b 0a 20 0a 20 20 61 73 73  sor *pC;. .  ass
2ccf0 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20  ert( pOp->p1>=0 
2cd00 26 26 20 70 4f 70 2d 3e 70 31 3c 70 2d 3e 6e 43  && pOp->p1<p->nC
2cd10 75 72 73 6f 72 20 29 3b 0a 20 20 70 43 20 3d 20  ursor );.  pC = 
2cd20 70 2d 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31  p->apCsr[pOp->p1
2cd30 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 21  ];.  assert( pC!
2cd40 3d 30 20 29 3b 0a 20 20 69 66 28 20 69 73 53 6f  =0 );.  if( isSo
2cd50 72 74 65 72 28 70 43 29 20 29 7b 0a 20 20 20 20  rter(pC) ){.    
2cd60 73 71 6c 69 74 65 33 56 64 62 65 53 6f 72 74 65  sqlite3VdbeSorte
2cd70 72 52 65 73 65 74 28 64 62 2c 20 70 43 2d 3e 75  rReset(db, pC->u
2cd80 63 2e 70 53 6f 72 74 65 72 29 3b 0a 20 20 7d 65  c.pSorter);.  }e
2cd90 6c 73 65 7b 0a 20 20 20 20 61 73 73 65 72 74 28  lse{.    assert(
2cda0 20 70 43 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43   pC->eCurType==C
2cdb0 55 52 54 59 50 45 5f 42 54 52 45 45 20 29 3b 0a  URTYPE_BTREE );.
2cdc0 20 20 20 20 61 73 73 65 72 74 28 20 70 43 2d 3e      assert( pC->
2cdd0 69 73 45 70 68 65 6d 65 72 61 6c 20 29 3b 0a 20  isEphemeral );. 
2cde0 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42     rc = sqlite3B
2cdf0 74 72 65 65 43 6c 65 61 72 54 61 62 6c 65 4f 66  treeClearTableOf
2ce00 43 75 72 73 6f 72 28 70 43 2d 3e 75 63 2e 70 43  Cursor(pC->uc.pC
2ce10 75 72 73 6f 72 29 3b 0a 20 20 20 20 69 66 28 20  ursor);.    if( 
2ce20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f  rc ) goto abort_
2ce30 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20  due_to_error;.  
2ce40 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  }.  break;.}../*
2ce50 20 4f 70 63 6f 64 65 3a 20 43 72 65 61 74 65 54   Opcode: CreateT
2ce60 61 62 6c 65 20 50 31 20 50 32 20 2a 20 2a 20 2a  able P1 P2 * * *
2ce70 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 72 5b  .** Synopsis: r[
2ce80 50 32 5d 3d 72 6f 6f 74 20 69 44 62 3d 50 31 0a  P2]=root iDb=P1.
2ce90 2a 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  **.** Allocate a
2cea0 20 6e 65 77 20 74 61 62 6c 65 20 69 6e 20 74 68   new table in th
2ceb0 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
2cec0 66 69 6c 65 20 69 66 20 50 31 3d 3d 30 20 6f 72  file if P1==0 or
2ced0 20 69 6e 20 74 68 65 0a 2a 2a 20 61 75 78 69 6c   in the.** auxil
2cee0 69 61 72 79 20 64 61 74 61 62 61 73 65 20 66 69  iary database fi
2cef0 6c 65 20 69 66 20 50 31 3d 3d 31 20 6f 72 20 69  le if P1==1 or i
2cf00 6e 20 61 6e 20 61 74 74 61 63 68 65 64 20 64 61  n an attached da
2cf10 74 61 62 61 73 65 20 69 66 0a 2a 2a 20 50 31 3e  tabase if.** P1>
2cf20 31 2e 20 20 57 72 69 74 65 20 74 68 65 20 72 6f  1.  Write the ro
2cf30 6f 74 20 70 61 67 65 20 6e 75 6d 62 65 72 20 6f  ot page number o
2cf40 66 20 74 68 65 20 6e 65 77 20 74 61 62 6c 65 20  f the new table 
2cf50 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2cf60 20 50 32 0a 2a 2a 0a 2a 2a 20 54 68 65 20 64 69   P2.**.** The di
2cf70 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e  fference between
2cf80 20 61 20 74 61 62 6c 65 20 61 6e 64 20 61 6e 20   a table and an 
2cf90 69 6e 64 65 78 20 69 73 20 74 68 69 73 3a 20 20  index is this:  
2cfa0 41 20 74 61 62 6c 65 20 6d 75 73 74 0a 2a 2a 20  A table must.** 
2cfb0 68 61 76 65 20 61 20 34 2d 62 79 74 65 20 69 6e  have a 4-byte in
2cfc0 74 65 67 65 72 20 6b 65 79 20 61 6e 64 20 63 61  teger key and ca
2cfd0 6e 20 68 61 76 65 20 61 72 62 69 74 72 61 72 79  n have arbitrary
2cfe0 20 64 61 74 61 2e 20 20 41 6e 20 69 6e 64 65 78   data.  An index
2cff0 0a 2a 2a 20 68 61 73 20 61 6e 20 61 72 62 69 74  .** has an arbit
2d000 72 61 72 79 20 6b 65 79 20 62 75 74 20 6e 6f 20  rary key but no 
2d010 64 61 74 61 2e 0a 2a 2a 0a 2a 2a 20 53 65 65 20  data..**.** See 
2d020 61 6c 73 6f 3a 20 43 72 65 61 74 65 49 6e 64 65  also: CreateInde
2d030 78 0a 2a 2f 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  x.*/./* Opcode: 
2d040 43 72 65 61 74 65 49 6e 64 65 78 20 50 31 20 50  CreateIndex P1 P
2d050 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
2d060 73 69 73 3a 20 72 5b 50 32 5d 3d 72 6f 6f 74 20  sis: r[P2]=root 
2d070 69 44 62 3d 50 31 0a 2a 2a 0a 2a 2a 20 41 6c 6c  iDb=P1.**.** All
2d080 6f 63 61 74 65 20 61 20 6e 65 77 20 69 6e 64 65  ocate a new inde
2d090 78 20 69 6e 20 74 68 65 20 6d 61 69 6e 20 64 61  x in the main da
2d0a0 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20 50  tabase file if P
2d0b0 31 3d 3d 30 20 6f 72 20 69 6e 20 74 68 65 0a 2a  1==0 or in the.*
2d0c0 2a 20 61 75 78 69 6c 69 61 72 79 20 64 61 74 61  * auxiliary data
2d0d0 62 61 73 65 20 66 69 6c 65 20 69 66 20 50 31 3d  base file if P1=
2d0e0 3d 31 20 6f 72 20 69 6e 20 61 6e 20 61 74 74 61  =1 or in an atta
2d0f0 63 68 65 64 20 64 61 74 61 62 61 73 65 20 69 66  ched database if
2d100 0a 2a 2a 20 50 31 3e 31 2e 20 20 57 72 69 74 65  .** P1>1.  Write
2d110 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 20 6e   the root page n
2d120 75 6d 62 65 72 20 6f 66 20 74 68 65 20 6e 65 77  umber of the new
2d130 20 74 61 62 6c 65 20 69 6e 74 6f 0a 2a 2a 20 72   table into.** r
2d140 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2a 0a 2a  egister P2..**.*
2d150 2a 20 53 65 65 20 64 6f 63 75 6d 65 6e 74 61 74  * See documentat
2d160 69 6f 6e 20 6f 6e 20 4f 50 5f 43 72 65 61 74 65  ion on OP_Create
2d170 54 61 62 6c 65 20 66 6f 72 20 61 64 64 69 74 69  Table for additi
2d180 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
2d190 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 43 72 65  ..*/.case OP_Cre
2d1a0 61 74 65 49 6e 64 65 78 3a 20 20 20 20 20 20 20  ateIndex:       
2d1b0 20 20 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a       /* out2 */.
2d1c0 63 61 73 65 20 4f 50 5f 43 72 65 61 74 65 54 61  case OP_CreateTa
2d1d0 62 6c 65 3a 20 7b 20 20 20 20 20 20 20 20 20 20  ble: {          
2d1e0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 69 6e 74  /* out2 */.  int
2d1f0 20 70 67 6e 6f 3b 0a 20 20 69 6e 74 20 66 6c 61   pgno;.  int fla
2d200 67 73 3b 0a 20 20 44 62 20 2a 70 44 62 3b 0a 0a  gs;.  Db *pDb;..
2d210 20 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65    pOut = out2Pre
2d220 72 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b  release(p, pOp);
2d230 0a 20 20 70 67 6e 6f 20 3d 20 30 3b 0a 20 20 61  .  pgno = 0;.  a
2d240 73 73 65 72 74 28 20 70 4f 70 2d 3e 70 31 3e 3d  ssert( pOp->p1>=
2d250 30 20 26 26 20 70 4f 70 2d 3e 70 31 3c 64 62 2d  0 && pOp->p1<db-
2d260 3e 6e 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74  >nDb );.  assert
2d270 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70 2d 3e  ( DbMaskTest(p->
2d280 62 74 72 65 65 4d 61 73 6b 2c 20 70 4f 70 2d 3e  btreeMask, pOp->
2d290 70 31 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28  p1) );.  assert(
2d2a0 20 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20   p->readOnly==0 
2d2b0 29 3b 0a 20 20 70 44 62 20 3d 20 26 64 62 2d 3e  );.  pDb = &db->
2d2c0 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  aDb[pOp->p1];.  
2d2d0 61 73 73 65 72 74 28 20 70 44 62 2d 3e 70 42 74  assert( pDb->pBt
2d2e0 21 3d 30 20 29 3b 0a 20 20 69 66 28 20 70 4f 70  !=0 );.  if( pOp
2d2f0 2d 3e 6f 70 63 6f 64 65 3d 3d 4f 50 5f 43 72 65  ->opcode==OP_Cre
2d300 61 74 65 54 61 62 6c 65 20 29 7b 0a 20 20 20 20  ateTable ){.    
2d310 2f 2a 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45  /* flags = BTREE
2d320 5f 49 4e 54 4b 45 59 3b 20 2a 2f 0a 20 20 20 20  _INTKEY; */.    
2d330 66 6c 61 67 73 20 3d 20 42 54 52 45 45 5f 49 4e  flags = BTREE_IN
2d340 54 4b 45 59 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  TKEY;.  }else{. 
2d350 20 20 20 66 6c 61 67 73 20 3d 20 42 54 52 45 45     flags = BTREE
2d360 5f 42 4c 4f 42 4b 45 59 3b 0a 20 20 7d 0a 20 20  _BLOBKEY;.  }.  
2d370 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  rc = sqlite3Btre
2d380 65 43 72 65 61 74 65 54 61 62 6c 65 28 70 44 62  eCreateTable(pDb
2d390 2d 3e 70 42 74 2c 20 26 70 67 6e 6f 2c 20 66 6c  ->pBt, &pgno, fl
2d3a0 61 67 73 29 3b 0a 20 20 69 66 28 20 72 63 20 29  ags);.  if( rc )
2d3b0 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f   goto abort_due_
2d3c0 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 70 4f 75 74  to_error;.  pOut
2d3d0 2d 3e 75 2e 69 20 3d 20 70 67 6e 6f 3b 0a 20 20  ->u.i = pgno;.  
2d3e0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
2d3f0 6f 64 65 3a 20 50 61 72 73 65 53 63 68 65 6d 61  ode: ParseSchema
2d400 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a   P1 * * P4 *.**.
2d410 2a 2a 20 52 65 61 64 20 61 6e 64 20 70 61 72 73  ** Read and pars
2d420 65 20 61 6c 6c 20 65 6e 74 72 69 65 73 20 66 72  e all entries fr
2d430 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f 4d 41  om the SQLITE_MA
2d440 53 54 45 52 20 74 61 62 6c 65 20 6f 66 20 64 61  STER table of da
2d450 74 61 62 61 73 65 20 50 31 0a 2a 2a 20 74 68 61  tabase P1.** tha
2d460 74 20 6d 61 74 63 68 20 74 68 65 20 57 48 45 52  t match the WHER
2d470 45 20 63 6c 61 75 73 65 20 50 34 2e 20 0a 2a 2a  E clause P4. .**
2d480 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20  .** This opcode 
2d490 69 6e 76 6f 6b 65 73 20 74 68 65 20 70 61 72 73  invokes the pars
2d4a0 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e  er to create a n
2d4b0 65 77 20 76 69 72 74 75 61 6c 20 6d 61 63 68 69  ew virtual machi
2d4c0 6e 65 2c 0a 2a 2a 20 74 68 65 6e 20 72 75 6e 73  ne,.** then runs
2d4d0 20 74 68 65 20 6e 65 77 20 76 69 72 74 75 61 6c   the new virtual
2d4e0 20 6d 61 63 68 69 6e 65 2e 20 20 49 74 20 69 73   machine.  It is
2d4f0 20 74 68 75 73 20 61 20 72 65 2d 65 6e 74 72 61   thus a re-entra
2d500 6e 74 20 6f 70 63 6f 64 65 2e 0a 2a 2f 0a 63 61  nt opcode..*/.ca
2d510 73 65 20 4f 50 5f 50 61 72 73 65 53 63 68 65 6d  se OP_ParseSchem
2d520 61 3a 20 7b 0a 20 20 69 6e 74 20 69 44 62 3b 0a  a: {.  int iDb;.
2d530 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d    const char *zM
2d540 61 73 74 65 72 3b 0a 20 20 63 68 61 72 20 2a 7a  aster;.  char *z
2d550 53 71 6c 3b 0a 20 20 49 6e 69 74 44 61 74 61 20  Sql;.  InitData 
2d560 69 6e 69 74 44 61 74 61 3b 0a 0a 20 20 2f 2a 20  initData;..  /* 
2d570 41 6e 79 20 70 72 65 70 61 72 65 64 20 73 74 61  Any prepared sta
2d580 74 65 6d 65 6e 74 20 74 68 61 74 20 69 6e 76 6f  tement that invo
2d590 6b 65 73 20 74 68 69 73 20 6f 70 63 6f 64 65 20  kes this opcode 
2d5a0 77 69 6c 6c 20 68 6f 6c 64 20 6d 75 74 65 78 65  will hold mutexe
2d5b0 73 0a 20 20 2a 2a 20 6f 6e 20 65 76 65 72 79 20  s.  ** on every 
2d5c0 62 74 72 65 65 2e 20 20 54 68 69 73 20 69 73 20  btree.  This is 
2d5d0 61 20 70 72 65 72 65 71 75 69 73 69 74 65 20 66  a prerequisite f
2d5e0 6f 72 20 69 6e 76 6f 6b 69 6e 67 20 0a 20 20 2a  or invoking .  *
2d5f0 2a 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  * sqlite3InitCal
2d600 6c 62 61 63 6b 28 29 2e 0a 20 20 2a 2f 0a 23 69  lback()..  */.#i
2d610 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
2d620 47 0a 20 20 66 6f 72 28 69 44 62 3d 30 3b 20 69  G.  for(iDb=0; i
2d630 44 62 3c 64 62 2d 3e 6e 44 62 3b 20 69 44 62 2b  Db<db->nDb; iDb+
2d640 2b 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  +){.    assert( 
2d650 69 44 62 3d 3d 31 20 7c 7c 20 73 71 6c 69 74 65  iDb==1 || sqlite
2d660 33 42 74 72 65 65 48 6f 6c 64 73 4d 75 74 65 78  3BtreeHoldsMutex
2d670 28 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 42  (db->aDb[iDb].pB
2d680 74 29 20 29 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  t) );.  }.#endif
2d690 0a 0a 20 20 69 44 62 20 3d 20 70 4f 70 2d 3e 70  ..  iDb = pOp->p
2d6a0 31 3b 0a 20 20 61 73 73 65 72 74 28 20 69 44 62  1;.  assert( iDb
2d6b0 3e 3d 30 20 26 26 20 69 44 62 3c 64 62 2d 3e 6e  >=0 && iDb<db->n
2d6c0 44 62 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  Db );.  assert( 
2d6d0 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62  DbHasProperty(db
2d6e0 2c 20 69 44 62 2c 20 44 42 5f 53 63 68 65 6d 61  , iDb, DB_Schema
2d6f0 4c 6f 61 64 65 64 29 20 29 3b 0a 20 20 2f 2a 20  Loaded) );.  /* 
2d700 55 73 65 64 20 74 6f 20 62 65 20 61 20 63 6f 6e  Used to be a con
2d710 64 69 74 69 6f 6e 61 6c 20 2a 2f 20 7b 0a 20 20  ditional */ {.  
2d720 20 20 7a 4d 61 73 74 65 72 20 3d 20 53 43 48 45    zMaster = SCHE
2d730 4d 41 5f 54 41 42 4c 45 28 69 44 62 29 3b 0a 20  MA_TABLE(iDb);. 
2d740 20 20 20 69 6e 69 74 44 61 74 61 2e 64 62 20 3d     initData.db =
2d750 20 64 62 3b 0a 20 20 20 20 69 6e 69 74 44 61 74   db;.    initDat
2d760 61 2e 69 44 62 20 3d 20 70 4f 70 2d 3e 70 31 3b  a.iDb = pOp->p1;
2d770 0a 20 20 20 20 69 6e 69 74 44 61 74 61 2e 70 7a  .    initData.pz
2d780 45 72 72 4d 73 67 20 3d 20 26 70 2d 3e 7a 45 72  ErrMsg = &p->zEr
2d790 72 4d 73 67 3b 0a 20 20 20 20 7a 53 71 6c 20 3d  rMsg;.    zSql =
2d7a0 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28   sqlite3MPrintf(
2d7b0 64 62 2c 0a 20 20 20 20 20 20 20 22 53 45 4c 45  db,.       "SELE
2d7c0 43 54 20 6e 61 6d 65 2c 20 72 6f 6f 74 70 61 67  CT name, rootpag
2d7d0 65 2c 20 73 71 6c 20 46 52 4f 4d 20 27 25 71 27  e, sql FROM '%q'
2d7e0 2e 25 73 20 57 48 45 52 45 20 25 73 20 4f 52 44  .%s WHERE %s ORD
2d7f0 45 52 20 42 59 20 72 6f 77 69 64 22 2c 0a 20 20  ER BY rowid",.  
2d800 20 20 20 20 20 64 62 2d 3e 61 44 62 5b 69 44 62       db->aDb[iDb
2d810 5d 2e 7a 44 62 53 4e 61 6d 65 2c 20 7a 4d 61 73  ].zDbSName, zMas
2d820 74 65 72 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29 3b  ter, pOp->p4.z);
2d830 0a 20 20 20 20 69 66 28 20 7a 53 71 6c 3d 3d 30  .    if( zSql==0
2d840 20 29 7b 0a 20 20 20 20 20 20 72 63 20 3d 20 53   ){.      rc = S
2d850 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
2d860 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
2d870 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 69     assert( db->i
2d880 6e 69 74 2e 62 75 73 79 3d 3d 30 20 29 3b 0a 20  nit.busy==0 );. 
2d890 20 20 20 20 20 64 62 2d 3e 69 6e 69 74 2e 62 75       db->init.bu
2d8a0 73 79 20 3d 20 31 3b 0a 20 20 20 20 20 20 69 6e  sy = 1;.      in
2d8b0 69 74 44 61 74 61 2e 72 63 20 3d 20 53 51 4c 49  itData.rc = SQLI
2d8c0 54 45 5f 4f 4b 3b 0a 20 20 20 20 20 20 61 73 73  TE_OK;.      ass
2d8d0 65 72 74 28 20 21 64 62 2d 3e 6d 61 6c 6c 6f 63  ert( !db->malloc
2d8e0 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 20 20  Failed );.      
2d8f0 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 65 78 65  rc = sqlite3_exe
2d900 63 28 64 62 2c 20 7a 53 71 6c 2c 20 73 71 6c 69  c(db, zSql, sqli
2d910 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2c  te3InitCallback,
2d920 20 26 69 6e 69 74 44 61 74 61 2c 20 30 29 3b 0a   &initData, 0);.
2d930 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51        if( rc==SQ
2d940 4c 49 54 45 5f 4f 4b 20 29 20 72 63 20 3d 20 69  LITE_OK ) rc = i
2d950 6e 69 74 44 61 74 61 2e 72 63 3b 0a 20 20 20 20  nitData.rc;.    
2d960 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
2d970 64 62 2c 20 7a 53 71 6c 29 3b 0a 20 20 20 20 20  db, zSql);.     
2d980 20 64 62 2d 3e 69 6e 69 74 2e 62 75 73 79 20 3d   db->init.busy =
2d990 20 30 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20   0;.    }.  }.  
2d9a0 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20 73 71  if( rc ){.    sq
2d9b0 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68  lite3ResetAllSch
2d9c0 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e  emasOfConnection
2d9d0 28 64 62 29 3b 0a 20 20 20 20 69 66 28 20 72 63  (db);.    if( rc
2d9e0 3d 3d 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 29  ==SQLITE_NOMEM )
2d9f0 7b 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f  {.      goto no_
2da00 6d 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67  mem;.    }.    g
2da10 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
2da20 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62 72  _error;.  }.  br
2da30 65 61 6b 3b 20 20 0a 7d 0a 0a 23 69 66 20 21 64  eak;  .}..#if !d
2da40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2da50 49 54 5f 41 4e 41 4c 59 5a 45 29 0a 2f 2a 20 4f  IT_ANALYZE)./* O
2da60 70 63 6f 64 65 3a 20 4c 6f 61 64 41 6e 61 6c 79  pcode: LoadAnaly
2da70 73 69 73 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a  sis P1 * * * *.*
2da80 2a 0a 2a 2a 20 52 65 61 64 20 74 68 65 20 73 71  *.** Read the sq
2da90 6c 69 74 65 5f 73 74 61 74 31 20 74 61 62 6c 65  lite_stat1 table
2daa0 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 50 31   for database P1
2dab0 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 20 63 6f   and load the co
2dac0 6e 74 65 6e 74 0a 2a 2a 20 6f 66 20 74 68 61 74  ntent.** of that
2dad0 20 74 61 62 6c 65 20 69 6e 74 6f 20 74 68 65 20   table into the 
2dae0 69 6e 74 65 72 6e 61 6c 20 69 6e 64 65 78 20 68  internal index h
2daf0 61 73 68 20 74 61 62 6c 65 2e 20 20 54 68 69 73  ash table.  This
2db00 20 77 69 6c 6c 20 63 61 75 73 65 0a 2a 2a 20 74   will cause.** t
2db10 68 65 20 61 6e 61 6c 79 73 69 73 20 74 6f 20 62  he analysis to b
2db20 65 20 75 73 65 64 20 77 68 65 6e 20 70 72 65 70  e used when prep
2db30 61 72 69 6e 67 20 61 6c 6c 20 73 75 62 73 65 71  aring all subseq
2db40 75 65 6e 74 20 71 75 65 72 69 65 73 2e 0a 2a 2f  uent queries..*/
2db50 0a 63 61 73 65 20 4f 50 5f 4c 6f 61 64 41 6e 61  .case OP_LoadAna
2db60 6c 79 73 69 73 3a 20 7b 0a 20 20 61 73 73 65 72  lysis: {.  asser
2db70 74 28 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26  t( pOp->p1>=0 &&
2db80 20 70 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62   pOp->p1<db->nDb
2db90 20 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74   );.  rc = sqlit
2dba0 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 64  e3AnalysisLoad(d
2dbb0 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a 20 20 69  b, pOp->p1);.  i
2dbc0 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
2dbd0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
2dbe0 0a 20 20 62 72 65 61 6b 3b 20 20 0a 7d 0a 23 65  .  break;  .}.#e
2dbf0 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
2dc00 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4e 41  (SQLITE_OMIT_ANA
2dc10 4c 59 5a 45 29 20 2a 2f 0a 0a 2f 2a 20 4f 70 63  LYZE) */../* Opc
2dc20 6f 64 65 3a 20 44 72 6f 70 54 61 62 6c 65 20 50  ode: DropTable P
2dc30 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a 2a  1 * * P4 *.**.**
2dc40 20 52 65 6d 6f 76 65 20 74 68 65 20 69 6e 74 65   Remove the inte
2dc50 72 6e 61 6c 20 28 69 6e 2d 6d 65 6d 6f 72 79 29  rnal (in-memory)
2dc60 20 64 61 74 61 20 73 74 72 75 63 74 75 72 65 73   data structures
2dc70 20 74 68 61 74 20 64 65 73 63 72 69 62 65 0a 2a   that describe.*
2dc80 2a 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  * the table name
2dc90 64 20 50 34 20 69 6e 20 64 61 74 61 62 61 73 65  d P4 in database
2dca0 20 50 31 2e 20 20 54 68 69 73 20 69 73 20 63 61   P1.  This is ca
2dcb0 6c 6c 65 64 20 61 66 74 65 72 20 61 20 74 61 62  lled after a tab
2dcc0 6c 65 0a 2a 2a 20 69 73 20 64 72 6f 70 70 65 64  le.** is dropped
2dcd0 20 66 72 6f 6d 20 64 69 73 6b 20 28 75 73 69 6e   from disk (usin
2dce0 67 20 74 68 65 20 44 65 73 74 72 6f 79 20 6f 70  g the Destroy op
2dcf0 63 6f 64 65 29 20 69 6e 20 6f 72 64 65 72 20 74  code) in order t
2dd00 6f 20 6b 65 65 70 20 0a 2a 2a 20 74 68 65 20 69  o keep .** the i
2dd10 6e 74 65 72 6e 61 6c 20 72 65 70 72 65 73 65 6e  nternal represen
2dd20 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 0a 2a 2a  tation of the.**
2dd30 20 73 63 68 65 6d 61 20 63 6f 6e 73 69 73 74 65   schema consiste
2dd40 6e 74 20 77 69 74 68 20 77 68 61 74 20 69 73 20  nt with what is 
2dd50 6f 6e 20 64 69 73 6b 2e 0a 2a 2f 0a 63 61 73 65  on disk..*/.case
2dd60 20 4f 50 5f 44 72 6f 70 54 61 62 6c 65 3a 20 7b   OP_DropTable: {
2dd70 0a 20 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  .  sqlite3Unlink
2dd80 41 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 64  AndDeleteTable(d
2dd90 62 2c 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d  b, pOp->p1, pOp-
2dda0 3e 70 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b  >p4.z);.  break;
2ddb0 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
2ddc0 72 6f 70 49 6e 64 65 78 20 50 31 20 2a 20 2a 20  ropIndex P1 * * 
2ddd0 50 34 20 2a 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76  P4 *.**.** Remov
2dde0 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 28  e the internal (
2ddf0 69 6e 2d 6d 65 6d 6f 72 79 29 20 64 61 74 61 20  in-memory) data 
2de00 73 74 72 75 63 74 75 72 65 73 20 74 68 61 74 20  structures that 
2de10 64 65 73 63 72 69 62 65 0a 2a 2a 20 74 68 65 20  describe.** the 
2de20 69 6e 64 65 78 20 6e 61 6d 65 64 20 50 34 20 69  index named P4 i
2de30 6e 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 20  n database P1.  
2de40 54 68 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61  This is called a
2de50 66 74 65 72 20 61 6e 20 69 6e 64 65 78 0a 2a 2a  fter an index.**
2de60 20 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d   is dropped from
2de70 20 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65   disk (using the
2de80 20 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29   Destroy opcode)
2de90 0a 2a 2a 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .** in order to 
2dea0 6b 65 65 70 20 74 68 65 20 69 6e 74 65 72 6e 61  keep the interna
2deb0 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2dec0 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2ded0 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2dee0 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2def0 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2df00 6f 70 49 6e 64 65 78 3a 20 7b 0a 20 20 73 71 6c  opIndex: {.  sql
2df10 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
2df20 65 74 65 49 6e 64 65 78 28 64 62 2c 20 70 4f 70  eteIndex(db, pOp
2df30 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34 2e 7a 29  ->p1, pOp->p4.z)
2df40 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a  ;.  break;.}../*
2df50 20 4f 70 63 6f 64 65 3a 20 44 72 6f 70 54 72 69   Opcode: DropTri
2df60 67 67 65 72 20 50 31 20 2a 20 2a 20 50 34 20 2a  gger P1 * * P4 *
2df70 0a 2a 2a 0a 2a 2a 20 52 65 6d 6f 76 65 20 74 68  .**.** Remove th
2df80 65 20 69 6e 74 65 72 6e 61 6c 20 28 69 6e 2d 6d  e internal (in-m
2df90 65 6d 6f 72 79 29 20 64 61 74 61 20 73 74 72 75  emory) data stru
2dfa0 63 74 75 72 65 73 20 74 68 61 74 20 64 65 73 63  ctures that desc
2dfb0 72 69 62 65 0a 2a 2a 20 74 68 65 20 74 72 69 67  ribe.** the trig
2dfc0 67 65 72 20 6e 61 6d 65 64 20 50 34 20 69 6e 20  ger named P4 in 
2dfd0 64 61 74 61 62 61 73 65 20 50 31 2e 20 20 54 68  database P1.  Th
2dfe0 69 73 20 69 73 20 63 61 6c 6c 65 64 20 61 66 74  is is called aft
2dff0 65 72 20 61 20 74 72 69 67 67 65 72 0a 2a 2a 20  er a trigger.** 
2e000 69 73 20 64 72 6f 70 70 65 64 20 66 72 6f 6d 20  is dropped from 
2e010 64 69 73 6b 20 28 75 73 69 6e 67 20 74 68 65 20  disk (using the 
2e020 44 65 73 74 72 6f 79 20 6f 70 63 6f 64 65 29 20  Destroy opcode) 
2e030 69 6e 20 6f 72 64 65 72 20 74 6f 20 6b 65 65 70  in order to keep
2e040 20 0a 2a 2a 20 74 68 65 20 69 6e 74 65 72 6e 61   .** the interna
2e050 6c 20 72 65 70 72 65 73 65 6e 74 61 74 69 6f 6e  l representation
2e060 20 6f 66 20 74 68 65 0a 2a 2a 20 73 63 68 65 6d   of the.** schem
2e070 61 20 63 6f 6e 73 69 73 74 65 6e 74 20 77 69 74  a consistent wit
2e080 68 20 77 68 61 74 20 69 73 20 6f 6e 20 64 69 73  h what is on dis
2e090 6b 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44 72  k..*/.case OP_Dr
2e0a0 6f 70 54 72 69 67 67 65 72 3a 20 7b 0a 20 20 73  opTrigger: {.  s
2e0b0 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44  qlite3UnlinkAndD
2e0c0 65 6c 65 74 65 54 72 69 67 67 65 72 28 64 62 2c  eleteTrigger(db,
2e0d0 20 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70   pOp->p1, pOp->p
2e0e0 34 2e 7a 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  4.z);.  break;.}
2e0f0 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ...#ifndef SQLIT
2e100 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2e110 5f 43 48 45 43 4b 0a 2f 2a 20 4f 70 63 6f 64 65  _CHECK./* Opcode
2e120 3a 20 49 6e 74 65 67 72 69 74 79 43 6b 20 50 31  : IntegrityCk P1
2e130 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a 0a   P2 P3 P4 P5.**.
2e140 2a 2a 20 44 6f 20 61 6e 20 61 6e 61 6c 79 73 69  ** Do an analysi
2e150 73 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  s of the current
2e160 6c 79 20 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly open database
2e170 2e 20 20 53 74 6f 72 65 20 69 6e 0a 2a 2a 20 72  .  Store in.** r
2e180 65 67 69 73 74 65 72 20 50 31 20 74 68 65 20 74  egister P1 the t
2e190 65 78 74 20 6f 66 20 61 6e 20 65 72 72 6f 72 20  ext of an error 
2e1a0 6d 65 73 73 61 67 65 20 64 65 73 63 72 69 62 69  message describi
2e1b0 6e 67 20 61 6e 79 20 70 72 6f 62 6c 65 6d 73 2e  ng any problems.
2e1c0 0a 2a 2a 20 49 66 20 6e 6f 20 70 72 6f 62 6c 65  .** If no proble
2e1d0 6d 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 73 74  ms are found, st
2e1e0 6f 72 65 20 61 20 4e 55 4c 4c 20 69 6e 20 72 65  ore a NULL in re
2e1f0 67 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a  gister P1..**.**
2e200 20 54 68 65 20 72 65 67 69 73 74 65 72 20 50 33   The register P3
2e210 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6d 61   contains the ma
2e220 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
2e230 61 6c 6c 6f 77 65 64 20 65 72 72 6f 72 73 2e 0a  allowed errors..
2e240 2a 2a 20 41 74 20 6d 6f 73 74 20 72 65 67 28 50  ** At most reg(P
2e250 33 29 20 65 72 72 6f 72 73 20 77 69 6c 6c 20 62  3) errors will b
2e260 65 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 20 49  e reported..** I
2e270 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74  n other words, t
2e280 68 65 20 61 6e 61 6c 79 73 69 73 20 73 74 6f 70  he analysis stop
2e290 73 20 61 73 20 73 6f 6f 6e 20 61 73 20 72 65 67  s as soon as reg
2e2a0 28 50 31 29 20 65 72 72 6f 72 73 20 61 72 65 20  (P1) errors are 
2e2b0 0a 2a 2a 20 73 65 65 6e 2e 20 20 52 65 67 28 50  .** seen.  Reg(P
2e2c0 31 29 20 69 73 20 75 70 64 61 74 65 64 20 77 69  1) is updated wi
2e2d0 74 68 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  th the number of
2e2e0 20 65 72 72 6f 72 73 20 72 65 6d 61 69 6e 69 6e   errors remainin
2e2f0 67 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f  g..**.** The roo
2e300 74 20 70 61 67 65 20 6e 75 6d 62 65 72 73 20 6f  t page numbers o
2e310 66 20 61 6c 6c 20 74 61 62 6c 65 73 20 69 6e 20  f all tables in 
2e320 74 68 65 20 64 61 74 61 62 61 73 65 20 61 72 65  the database are
2e330 20 69 6e 74 65 67 65 72 73 0a 2a 2a 20 73 74 6f   integers.** sto
2e340 72 65 64 20 69 6e 20 50 34 5f 49 4e 54 41 52 52  red in P4_INTARR
2e350 41 59 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2a 0a  AY argument..**.
2e360 2a 2a 20 49 66 20 50 35 20 69 73 20 6e 6f 74 20  ** If P5 is not 
2e370 7a 65 72 6f 2c 20 74 68 65 20 63 68 65 63 6b 20  zero, the check 
2e380 69 73 20 64 6f 6e 65 20 6f 6e 20 74 68 65 20 61  is done on the a
2e390 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
2e3a0 65 0a 2a 2a 20 66 69 6c 65 2c 20 6e 6f 74 20 74  e.** file, not t
2e3b0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
2e3c0 20 66 69 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 69   file..**.** Thi
2e3d0 73 20 6f 70 63 6f 64 65 20 69 73 20 75 73 65 64  s opcode is used
2e3e0 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74 68   to implement th
2e3f0 65 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  e integrity_chec
2e400 6b 20 70 72 61 67 6d 61 2e 0a 2a 2f 0a 63 61 73  k pragma..*/.cas
2e410 65 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  e OP_IntegrityCk
2e420 3a 20 7b 0a 20 20 69 6e 74 20 6e 52 6f 6f 74 3b  : {.  int nRoot;
2e430 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
2e440 6f 66 20 74 61 62 6c 65 73 20 74 6f 20 63 68 65  of tables to che
2e450 63 6b 2e 20 20 28 4e 75 6d 62 65 72 20 6f 66 20  ck.  (Number of 
2e460 72 6f 6f 74 20 70 61 67 65 73 2e 29 20 2a 2f 0a  root pages.) */.
2e470 20 20 69 6e 74 20 2a 61 52 6f 6f 74 3b 20 20 20    int *aRoot;   
2e480 20 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 72 6f    /* Array of ro
2e490 6f 74 70 61 67 65 20 6e 75 6d 62 65 72 73 20 66  otpage numbers f
2e4a0 6f 72 20 74 61 62 6c 65 73 20 74 6f 20 62 65 20  or tables to be 
2e4b0 63 68 65 63 6b 65 64 20 2a 2f 0a 20 20 69 6e 74  checked */.  int
2e4c0 20 6e 45 72 72 3b 20 20 20 20 20 20 20 2f 2a 20   nErr;       /* 
2e4d0 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
2e4e0 20 72 65 70 6f 72 74 65 64 20 2a 2f 0a 20 20 63   reported */.  c
2e4f0 68 61 72 20 2a 7a 3b 20 20 20 20 20 20 20 20 2f  har *z;        /
2e500 2a 20 54 65 78 74 20 6f 66 20 74 68 65 20 65 72  * Text of the er
2e510 72 6f 72 20 72 65 70 6f 72 74 20 2a 2f 0a 20 20  ror report */.  
2e520 4d 65 6d 20 2a 70 6e 45 72 72 3b 20 20 20 20 20  Mem *pnErr;     
2e530 2f 2a 20 52 65 67 69 73 74 65 72 20 6b 65 65 70  /* Register keep
2e540 69 6e 67 20 74 72 61 63 6b 20 6f 66 20 65 72 72  ing track of err
2e550 6f 72 73 20 72 65 6d 61 69 6e 69 6e 67 20 2a 2f  ors remaining */
2e560 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 62  ..  assert( p->b
2e570 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 6e 52  IsReader );.  nR
2e580 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20  oot = pOp->p2;. 
2e590 20 61 52 6f 6f 74 20 3d 20 70 4f 70 2d 3e 70 34   aRoot = pOp->p4
2e5a0 2e 61 69 3b 0a 20 20 61 73 73 65 72 74 28 20 6e  .ai;.  assert( n
2e5b0 52 6f 6f 74 3e 30 20 29 3b 0a 20 20 61 73 73 65  Root>0 );.  asse
2e5c0 72 74 28 20 61 52 6f 6f 74 5b 6e 52 6f 6f 74 5d  rt( aRoot[nRoot]
2e5d0 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==0 );.  assert(
2e5e0 20 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f   pOp->p3>0 && pO
2e5f0 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b  p->p3<=(p->nMem+
2e600 31 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20  1 - p->nCursor) 
2e610 29 3b 0a 20 20 70 6e 45 72 72 20 3d 20 26 61 4d  );.  pnErr = &aM
2e620 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61  em[pOp->p3];.  a
2e630 73 73 65 72 74 28 20 28 70 6e 45 72 72 2d 3e 66  ssert( (pnErr->f
2e640 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21  lags & MEM_Int)!
2e650 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =0 );.  assert( 
2e660 28 70 6e 45 72 72 2d 3e 66 6c 61 67 73 20 26 20  (pnErr->flags & 
2e670 28 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 42 6c 6f  (MEM_Str|MEM_Blo
2e680 62 29 29 3d 3d 30 20 29 3b 0a 20 20 70 49 6e 31  b))==0 );.  pIn1
2e690 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31   = &aMem[pOp->p1
2e6a0 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  ];.  assert( pOp
2e6b0 2d 3e 70 35 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p5<db->nDb );.
2e6c0 20 20 61 73 73 65 72 74 28 20 44 62 4d 61 73 6b    assert( DbMask
2e6d0 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d 61 73  Test(p->btreeMas
2e6e0 6b 2c 20 70 4f 70 2d 3e 70 35 29 20 29 3b 0a 20  k, pOp->p5) );. 
2e6f0 20 7a 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   z = sqlite3Btre
2e700 65 49 6e 74 65 67 72 69 74 79 43 68 65 63 6b 28  eIntegrityCheck(
2e710 64 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 35 5d  db->aDb[pOp->p5]
2e720 2e 70 42 74 2c 20 61 52 6f 6f 74 2c 20 6e 52 6f  .pBt, aRoot, nRo
2e730 6f 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ot,.            
2e740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e750 20 20 20 20 20 28 69 6e 74 29 70 6e 45 72 72 2d       (int)pnErr-
2e760 3e 75 2e 69 2c 20 26 6e 45 72 72 29 3b 0a 20 20  >u.i, &nErr);.  
2e770 70 6e 45 72 72 2d 3e 75 2e 69 20 2d 3d 20 6e 45  pnErr->u.i -= nE
2e780 72 72 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  rr;.  sqlite3Vdb
2e790 65 4d 65 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31  eMemSetNull(pIn1
2e7a0 29 3b 0a 20 20 69 66 28 20 6e 45 72 72 3d 3d 30  );.  if( nErr==0
2e7b0 20 29 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20   ){.    assert( 
2e7c0 7a 3d 3d 30 20 29 3b 0a 20 20 7d 65 6c 73 65 20  z==0 );.  }else 
2e7d0 69 66 28 20 7a 3d 3d 30 20 29 7b 0a 20 20 20 20  if( z==0 ){.    
2e7e0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 7d  goto no_mem;.  }
2e7f0 65 6c 73 65 7b 0a 20 20 20 20 73 71 6c 69 74 65  else{.    sqlite
2e800 33 56 64 62 65 4d 65 6d 53 65 74 53 74 72 28 70  3VdbeMemSetStr(p
2e810 49 6e 31 2c 20 7a 2c 20 2d 31 2c 20 53 51 4c 49  In1, z, -1, SQLI
2e820 54 45 5f 55 54 46 38 2c 20 73 71 6c 69 74 65 33  TE_UTF8, sqlite3
2e830 5f 66 72 65 65 29 3b 0a 20 20 7d 0a 20 20 55 50  _free);.  }.  UP
2e840 44 41 54 45 5f 4d 41 58 5f 42 4c 4f 42 53 49 5a  DATE_MAX_BLOBSIZ
2e850 45 28 70 49 6e 31 29 3b 0a 20 20 73 71 6c 69 74  E(pIn1);.  sqlit
2e860 65 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f  e3VdbeChangeEnco
2e870 64 69 6e 67 28 70 49 6e 31 2c 20 65 6e 63 6f 64  ding(pIn1, encod
2e880 69 6e 67 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  ing);.  break;.}
2e890 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
2e8a0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2e8b0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 2f 2a 20 4f 70  _CHECK */../* Op
2e8c0 63 6f 64 65 3a 20 52 6f 77 53 65 74 41 64 64 20  code: RowSetAdd 
2e8d0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
2e8e0 79 6e 6f 70 73 69 73 3a 20 72 6f 77 73 65 74 28  ynopsis: rowset(
2e8f0 50 31 29 3d 72 5b 50 32 5d 0a 2a 2a 0a 2a 2a 20  P1)=r[P2].**.** 
2e900 49 6e 73 65 72 74 20 74 68 65 20 69 6e 74 65 67  Insert the integ
2e910 65 72 20 76 61 6c 75 65 20 68 65 6c 64 20 62 79  er value held by
2e920 20 72 65 67 69 73 74 65 72 20 50 32 20 69 6e 74   register P2 int
2e930 6f 20 61 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 65  o a boolean inde
2e940 78 0a 2a 2a 20 68 65 6c 64 20 69 6e 20 72 65 67  x.** held in reg
2e950 69 73 74 65 72 20 50 31 2e 0a 2a 2a 0a 2a 2a 20  ister P1..**.** 
2e960 41 6e 20 61 73 73 65 72 74 69 6f 6e 20 66 61 69  An assertion fai
2e970 6c 73 20 69 66 20 50 32 20 69 73 20 6e 6f 74 20  ls if P2 is not 
2e980 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a 2f 0a 63  an integer..*/.c
2e990 61 73 65 20 4f 50 5f 52 6f 77 53 65 74 41 64 64  ase OP_RowSetAdd
2e9a0 3a 20 7b 20 20 20 20 20 20 20 2f 2a 20 69 6e 31  : {       /* in1
2e9b0 2c 20 69 6e 32 20 2a 2f 0a 20 20 70 49 6e 31 20  , in2 */.  pIn1 
2e9c0 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
2e9d0 3b 0a 20 20 70 49 6e 32 20 3d 20 26 61 4d 65 6d  ;.  pIn2 = &aMem
2e9e0 5b 70 4f 70 2d 3e 70 32 5d 3b 0a 20 20 61 73 73  [pOp->p2];.  ass
2e9f0 65 72 74 28 20 28 70 49 6e 32 2d 3e 66 6c 61 67  ert( (pIn2->flag
2ea00 73 20 26 20 4d 45 4d 5f 49 6e 74 29 21 3d 30 20  s & MEM_Int)!=0 
2ea10 29 3b 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e  );.  if( (pIn1->
2ea20 66 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53  flags & MEM_RowS
2ea30 65 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71  et)==0 ){.    sq
2ea40 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52  lite3VdbeMemSetR
2ea50 6f 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20  owSet(pIn1);.   
2ea60 20 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67   if( (pIn1->flag
2ea70 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d  s & MEM_RowSet)=
2ea80 3d 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d  =0 ) goto no_mem
2ea90 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 52  ;.  }.  sqlite3R
2eaa0 6f 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31  owSetInsert(pIn1
2eab0 2d 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e  ->u.pRowSet, pIn
2eac0 32 2d 3e 75 2e 69 29 3b 0a 20 20 62 72 65 61 6b  2->u.i);.  break
2ead0 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ;.}../* Opcode: 
2eae0 52 6f 77 53 65 74 52 65 61 64 20 50 31 20 50 32  RowSetRead P1 P2
2eaf0 20 50 33 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70   P3 * *.** Synop
2eb00 73 69 73 3a 20 72 5b 50 33 5d 3d 72 6f 77 73 65  sis: r[P3]=rowse
2eb10 74 28 50 31 29 0a 2a 2a 0a 2a 2a 20 45 78 74 72  t(P1).**.** Extr
2eb20 61 63 74 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  act the smallest
2eb30 20 76 61 6c 75 65 20 66 72 6f 6d 20 62 6f 6f 6c   value from bool
2eb40 65 61 6e 20 69 6e 64 65 78 20 50 31 20 61 6e 64  ean index P1 and
2eb50 20 70 75 74 20 74 68 61 74 20 76 61 6c 75 65 20   put that value 
2eb60 69 6e 74 6f 0a 2a 2a 20 72 65 67 69 73 74 65 72  into.** register
2eb70 20 50 33 2e 20 20 4f 72 2c 20 69 66 20 62 6f 6f   P3.  Or, if boo
2eb80 6c 65 61 6e 20 69 6e 64 65 78 20 50 31 20 69 73  lean index P1 is
2eb90 20 69 6e 69 74 69 61 6c 6c 79 20 65 6d 70 74 79   initially empty
2eba0 2c 20 6c 65 61 76 65 20 50 33 0a 2a 2a 20 75 6e  , leave P3.** un
2ebb0 63 68 61 6e 67 65 64 20 61 6e 64 20 6a 75 6d 70  changed and jump
2ebc0 20 74 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20   to instruction 
2ebd0 50 32 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 52  P2..*/.case OP_R
2ebe0 6f 77 53 65 74 52 65 61 64 3a 20 7b 20 20 20 20  owSetRead: {    
2ebf0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2ec00 20 6f 75 74 33 20 2a 2f 0a 20 20 69 36 34 20 76   out3 */.  i64 v
2ec10 61 6c 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61  al;..  pIn1 = &a
2ec20 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20  Mem[pOp->p1];.  
2ec30 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2ec40 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2ec50 30 20 0a 20 20 20 7c 7c 20 73 71 6c 69 74 65 33  0 .   || sqlite3
2ec60 52 6f 77 53 65 74 4e 65 78 74 28 70 49 6e 31 2d  RowSetNext(pIn1-
2ec70 3e 75 2e 70 52 6f 77 53 65 74 2c 20 26 76 61 6c  >u.pRowSet, &val
2ec80 29 3d 3d 30 0a 20 20 29 7b 0a 20 20 20 20 2f 2a  )==0.  ){.    /*
2ec90 20 54 68 65 20 62 6f 6f 6c 65 61 6e 20 69 6e 64   The boolean ind
2eca0 65 78 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 20  ex is empty */. 
2ecb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65     sqlite3VdbeMe
2ecc0 6d 53 65 74 4e 75 6c 6c 28 70 49 6e 31 29 3b 0a  mSetNull(pIn1);.
2ecd0 20 20 20 20 56 64 62 65 42 72 61 6e 63 68 54 61      VdbeBranchTa
2ece0 6b 65 6e 28 31 2c 32 29 3b 0a 20 20 20 20 67 6f  ken(1,2);.    go
2ecf0 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 5f 61 6e  to jump_to_p2_an
2ed00 64 5f 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  d_check_for_inte
2ed10 72 72 75 70 74 3b 0a 20 20 7d 65 6c 73 65 7b 0a  rrupt;.  }else{.
2ed20 20 20 20 20 2f 2a 20 41 20 76 61 6c 75 65 20 77      /* A value w
2ed30 61 73 20 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74  as pulled from t
2ed40 68 65 20 69 6e 64 65 78 20 2a 2f 0a 20 20 20 20  he index */.    
2ed50 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
2ed60 30 2c 32 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  0,2);.    sqlite
2ed70 33 56 64 62 65 4d 65 6d 53 65 74 49 6e 74 36 34  3VdbeMemSetInt64
2ed80 28 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 2c  (&aMem[pOp->p3],
2ed90 20 76 61 6c 29 3b 0a 20 20 7d 0a 20 20 67 6f 74   val);.  }.  got
2eda0 6f 20 63 68 65 63 6b 5f 66 6f 72 5f 69 6e 74 65  o check_for_inte
2edb0 72 72 75 70 74 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  rrupt;.}../* Opc
2edc0 6f 64 65 3a 20 52 6f 77 53 65 74 54 65 73 74 20  ode: RowSetTest 
2edd0 50 31 20 50 32 20 50 33 20 50 34 0a 2a 2a 20 53  P1 P2 P3 P4.** S
2ede0 79 6e 6f 70 73 69 73 3a 20 69 66 20 72 5b 50 33  ynopsis: if r[P3
2edf0 5d 20 69 6e 20 72 6f 77 73 65 74 28 50 31 29 20  ] in rowset(P1) 
2ee00 67 6f 74 6f 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65  goto P2.**.** Re
2ee10 67 69 73 74 65 72 20 50 33 20 69 73 20 61 73 73  gister P3 is ass
2ee20 75 6d 65 64 20 74 6f 20 68 6f 6c 64 20 61 20 36  umed to hold a 6
2ee30 34 2d 62 69 74 20 69 6e 74 65 67 65 72 20 76 61  4-bit integer va
2ee40 6c 75 65 2e 20 49 66 20 72 65 67 69 73 74 65 72  lue. If register
2ee50 20 50 31 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20   P1.** contains 
2ee60 61 20 52 6f 77 53 65 74 20 6f 62 6a 65 63 74 20  a RowSet object 
2ee70 61 6e 64 20 74 68 61 74 20 52 6f 77 53 65 74 20  and that RowSet 
2ee80 6f 62 6a 65 63 74 20 63 6f 6e 74 61 69 6e 73 0a  object contains.
2ee90 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 68 65 6c  ** the value hel
2eea0 64 20 69 6e 20 50 33 2c 20 6a 75 6d 70 20 74 6f  d in P3, jump to
2eeb0 20 72 65 67 69 73 74 65 72 20 50 32 2e 20 4f 74   register P2. Ot
2eec0 68 65 72 77 69 73 65 2c 20 69 6e 73 65 72 74 20  herwise, insert 
2eed0 74 68 65 0a 2a 2a 20 69 6e 74 65 67 65 72 20 69  the.** integer i
2eee0 6e 20 50 33 20 69 6e 74 6f 20 74 68 65 20 52 6f  n P3 into the Ro
2eef0 77 53 65 74 20 61 6e 64 20 63 6f 6e 74 69 6e 75  wSet and continu
2ef00 65 20 6f 6e 20 74 6f 20 74 68 65 0a 2a 2a 20 6e  e on to the.** n
2ef10 65 78 74 20 6f 70 63 6f 64 65 2e 0a 2a 2a 0a 2a  ext opcode..**.*
2ef20 2a 20 54 68 65 20 52 6f 77 53 65 74 20 6f 62 6a  * The RowSet obj
2ef30 65 63 74 20 69 73 20 6f 70 74 69 6d 69 7a 65 64  ect is optimized
2ef40 20 66 6f 72 20 74 68 65 20 63 61 73 65 20 77 68   for the case wh
2ef50 65 72 65 20 73 75 63 63 65 73 73 69 76 65 20 73  ere successive s
2ef60 65 74 73 0a 2a 2a 20 6f 66 20 69 6e 74 65 67 65  ets.** of intege
2ef70 72 73 2c 20 77 68 65 72 65 20 65 61 63 68 20 73  rs, where each s
2ef80 65 74 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20 64  et contains no d
2ef90 75 70 6c 69 63 61 74 65 73 2e 20 45 61 63 68 20  uplicates. Each 
2efa0 73 65 74 0a 2a 2a 20 6f 66 20 76 61 6c 75 65 73  set.** of values
2efb0 20 69 73 20 69 64 65 6e 74 69 66 69 65 64 20 62   is identified b
2efc0 79 20 61 20 75 6e 69 71 75 65 20 50 34 20 76 61  y a unique P4 va
2efd0 6c 75 65 2e 20 54 68 65 20 66 69 72 73 74 20 73  lue. The first s
2efe0 65 74 0a 2a 2a 20 6d 75 73 74 20 68 61 76 65 20  et.** must have 
2eff0 50 34 3d 3d 30 2c 20 74 68 65 20 66 69 6e 61 6c  P4==0, the final
2f000 20 73 65 74 20 50 34 3d 2d 31 2e 20 20 50 34 20   set P4=-1.  P4 
2f010 6d 75 73 74 20 62 65 20 65 69 74 68 65 72 20 2d  must be either -
2f020 31 20 6f 72 0a 2a 2a 20 6e 6f 6e 2d 6e 65 67 61  1 or.** non-nega
2f030 74 69 76 65 2e 20 20 46 6f 72 20 6e 6f 6e 2d 6e  tive.  For non-n
2f040 65 67 61 74 69 76 65 20 76 61 6c 75 65 73 20 6f  egative values o
2f050 66 20 50 34 20 6f 6e 6c 79 20 74 68 65 20 6c 6f  f P4 only the lo
2f060 77 65 72 20 34 0a 2a 2a 20 62 69 74 73 20 61 72  wer 4.** bits ar
2f070 65 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 0a 2a  e significant..*
2f080 2a 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77 73  *.** This allows
2f090 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 3a 20   optimizations: 
2f0a0 28 61 29 20 77 68 65 6e 20 50 34 3d 3d 30 20 74  (a) when P4==0 t
2f0b0 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2f0c0 74 6f 20 74 65 73 74 0a 2a 2a 20 74 68 65 20 72  to test.** the r
2f0d0 6f 77 73 65 74 20 6f 62 6a 65 63 74 20 66 6f 72  owset object for
2f0e0 20 50 33 2c 20 61 73 20 69 74 20 69 73 20 67 75   P3, as it is gu
2f0f0 61 72 61 6e 74 65 65 64 20 6e 6f 74 20 74 6f 20  aranteed not to 
2f100 63 6f 6e 74 61 69 6e 20 69 74 2c 0a 2a 2a 20 28  contain it,.** (
2f110 62 29 20 77 68 65 6e 20 50 34 3d 3d 2d 31 20 74  b) when P4==-1 t
2f120 68 65 72 65 20 69 73 20 6e 6f 20 6e 65 65 64 20  here is no need 
2f130 74 6f 20 69 6e 73 65 72 74 20 74 68 65 20 76 61  to insert the va
2f140 6c 75 65 2c 20 61 73 20 69 74 20 77 69 6c 6c 0a  lue, as it will.
2f150 2a 2a 20 6e 65 76 65 72 20 62 65 20 74 65 73 74  ** never be test
2f160 65 64 20 66 6f 72 2c 20 61 6e 64 20 28 63 29 20  ed for, and (c) 
2f170 77 68 65 6e 20 61 20 76 61 6c 75 65 20 74 68 61  when a value tha
2f180 74 20 69 73 20 70 61 72 74 20 6f 66 20 73 65 74  t is part of set
2f190 20 58 20 69 73 0a 2a 2a 20 69 6e 73 65 72 74 65   X is.** inserte
2f1a0 64 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 6e  d, there is no n
2f1b0 65 65 64 20 74 6f 20 73 65 61 72 63 68 20 74 6f  eed to search to
2f1c0 20 73 65 65 20 69 66 20 74 68 65 20 73 61 6d 65   see if the same
2f1d0 20 76 61 6c 75 65 20 77 61 73 0a 2a 2a 20 70 72   value was.** pr
2f1e0 65 76 69 6f 75 73 6c 79 20 69 6e 73 65 72 74 65  eviously inserte
2f1f0 64 20 61 73 20 70 61 72 74 20 6f 66 20 73 65 74  d as part of set
2f200 20 58 20 28 6f 6e 6c 79 20 69 66 20 69 74 20 77   X (only if it w
2f210 61 73 20 70 72 65 76 69 6f 75 73 6c 79 0a 2a 2a  as previously.**
2f220 20 69 6e 73 65 72 74 65 64 20 61 73 20 70 61 72   inserted as par
2f230 74 20 6f 66 20 73 6f 6d 65 20 6f 74 68 65 72 20  t of some other 
2f240 73 65 74 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50  set)..*/.case OP
2f250 5f 52 6f 77 53 65 74 54 65 73 74 3a 20 7b 20 20  _RowSetTest: {  
2f260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f270 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 2c     /* jump, in1,
2f280 20 69 6e 33 20 2a 2f 0a 20 20 69 6e 74 20 69 53   in3 */.  int iS
2f290 65 74 3b 0a 20 20 69 6e 74 20 65 78 69 73 74 73  et;.  int exists
2f2a0 3b 0a 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  ;..  pIn1 = &aMe
2f2b0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 70 49  m[pOp->p1];.  pI
2f2c0 6e 33 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  n3 = &aMem[pOp->
2f2d0 70 33 5d 3b 0a 20 20 69 53 65 74 20 3d 20 70 4f  p3];.  iSet = pO
2f2e0 70 2d 3e 70 34 2e 69 3b 0a 20 20 61 73 73 65 72  p->p4.i;.  asser
2f2f0 74 28 20 70 49 6e 33 2d 3e 66 6c 61 67 73 26 4d  t( pIn3->flags&M
2f300 45 4d 5f 49 6e 74 20 29 3b 0a 0a 20 20 2f 2a 20  EM_Int );..  /* 
2f310 49 66 20 74 68 65 72 65 20 69 73 20 61 6e 79 74  If there is anyt
2f320 68 69 6e 67 20 6f 74 68 65 72 20 74 68 61 6e 20  hing other than 
2f330 61 20 72 6f 77 73 65 74 20 6f 62 6a 65 63 74 20  a rowset object 
2f340 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 50  in memory cell P
2f350 31 2c 0a 20 20 2a 2a 20 64 65 6c 65 74 65 20 69  1,.  ** delete i
2f360 74 20 6e 6f 77 20 61 6e 64 20 69 6e 69 74 69 61  t now and initia
2f370 6c 69 7a 65 20 50 31 20 77 69 74 68 20 61 6e 20  lize P1 with an 
2f380 65 6d 70 74 79 20 72 6f 77 73 65 74 0a 20 20 2a  empty rowset.  *
2f390 2f 0a 20 20 69 66 28 20 28 70 49 6e 31 2d 3e 66  /.  if( (pIn1->f
2f3a0 6c 61 67 73 20 26 20 4d 45 4d 5f 52 6f 77 53 65  lags & MEM_RowSe
2f3b0 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 73 71 6c  t)==0 ){.    sql
2f3c0 69 74 65 33 56 64 62 65 4d 65 6d 53 65 74 52 6f  ite3VdbeMemSetRo
2f3d0 77 53 65 74 28 70 49 6e 31 29 3b 0a 20 20 20 20  wSet(pIn1);.    
2f3e0 69 66 28 20 28 70 49 6e 31 2d 3e 66 6c 61 67 73  if( (pIn1->flags
2f3f0 20 26 20 4d 45 4d 5f 52 6f 77 53 65 74 29 3d 3d   & MEM_RowSet)==
2f400 30 20 29 20 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b  0 ) goto no_mem;
2f410 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
2f420 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
2f430 49 4e 54 33 32 20 29 3b 0a 20 20 61 73 73 65 72  INT32 );.  asser
2f440 74 28 20 69 53 65 74 3d 3d 2d 31 20 7c 7c 20 69  t( iSet==-1 || i
2f450 53 65 74 3e 3d 30 20 29 3b 0a 20 20 69 66 28 20  Set>=0 );.  if( 
2f460 69 53 65 74 20 29 7b 0a 20 20 20 20 65 78 69 73  iSet ){.    exis
2f470 74 73 20 3d 20 73 71 6c 69 74 65 33 52 6f 77 53  ts = sqlite3RowS
2f480 65 74 54 65 73 74 28 70 49 6e 31 2d 3e 75 2e 70  etTest(pIn1->u.p
2f490 52 6f 77 53 65 74 2c 20 69 53 65 74 2c 20 70 49  RowSet, iSet, pI
2f4a0 6e 33 2d 3e 75 2e 69 29 3b 0a 20 20 20 20 56 64  n3->u.i);.    Vd
2f4b0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 65 78  beBranchTaken(ex
2f4c0 69 73 74 73 21 3d 30 2c 32 29 3b 0a 20 20 20 20  ists!=0,2);.    
2f4d0 69 66 28 20 65 78 69 73 74 73 20 29 20 67 6f 74  if( exists ) got
2f4e0 6f 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20  o jump_to_p2;.  
2f4f0 7d 0a 20 20 69 66 28 20 69 53 65 74 3e 3d 30 20  }.  if( iSet>=0 
2f500 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 52 6f  ){.    sqlite3Ro
2f510 77 53 65 74 49 6e 73 65 72 74 28 70 49 6e 31 2d  wSetInsert(pIn1-
2f520 3e 75 2e 70 52 6f 77 53 65 74 2c 20 70 49 6e 33  >u.pRowSet, pIn3
2f530 2d 3e 75 2e 69 29 3b 0a 20 20 7d 0a 20 20 62 72  ->u.i);.  }.  br
2f540 65 61 6b 3b 0a 7d 0a 0a 0a 23 69 66 6e 64 65 66  eak;.}...#ifndef
2f550 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
2f560 47 47 45 52 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  GGER../* Opcode:
2f570 20 50 72 6f 67 72 61 6d 20 50 31 20 50 32 20 50   Program P1 P2 P
2f580 33 20 50 34 20 50 35 0a 2a 2a 0a 2a 2a 20 45 78  3 P4 P5.**.** Ex
2f590 65 63 75 74 65 20 74 68 65 20 74 72 69 67 67 65  ecute the trigge
2f5a0 72 20 70 72 6f 67 72 61 6d 20 70 61 73 73 65 64  r program passed
2f5b0 20 61 73 20 50 34 20 28 74 79 70 65 20 50 34 5f   as P4 (type P4_
2f5c0 53 55 42 50 52 4f 47 52 41 4d 29 2e 20 0a 2a 2a  SUBPROGRAM). .**
2f5d0 0a 2a 2a 20 50 31 20 63 6f 6e 74 61 69 6e 73 20  .** P1 contains 
2f5e0 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74  the address of t
2f5f0 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 74  he memory cell t
2f600 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65  hat contains the
2f610 20 66 69 72 73 74 20 6d 65 6d 6f 72 79 20 0a 2a   first memory .*
2f620 2a 20 63 65 6c 6c 20 69 6e 20 61 6e 20 61 72 72  * cell in an arr
2f630 61 79 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65  ay of values use
2f640 64 20 61 73 20 61 72 67 75 6d 65 6e 74 73 20 74  d as arguments t
2f650 6f 20 74 68 65 20 73 75 62 2d 70 72 6f 67 72 61  o the sub-progra
2f660 6d 2e 20 50 32 20 0a 2a 2a 20 63 6f 6e 74 61 69  m. P2 .** contai
2f670 6e 73 20 74 68 65 20 61 64 64 72 65 73 73 20 74  ns the address t
2f680 6f 20 6a 75 6d 70 20 74 6f 20 69 66 20 74 68 65  o jump to if the
2f690 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 72   sub-program thr
2f6a0 6f 77 73 20 61 6e 20 49 47 4e 4f 52 45 20 0a 2a  ows an IGNORE .*
2f6b0 2a 20 65 78 63 65 70 74 69 6f 6e 20 75 73 69 6e  * exception usin
2f6c0 67 20 74 68 65 20 52 41 49 53 45 28 29 20 66 75  g the RAISE() fu
2f6d0 6e 63 74 69 6f 6e 2e 20 52 65 67 69 73 74 65 72  nction. Register
2f6e0 20 50 33 20 63 6f 6e 74 61 69 6e 73 20 74 68 65   P3 contains the
2f6f0 20 61 64 64 72 65 73 73 20 0a 2a 2a 20 6f 66 20   address .** of 
2f700 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 69 6e  a memory cell in
2f710 20 74 68 69 73 20 28 74 68 65 20 70 61 72 65 6e   this (the paren
2f720 74 29 20 56 4d 20 74 68 61 74 20 69 73 20 75 73  t) VM that is us
2f730 65 64 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 74  ed to allocate t
2f740 68 65 20 0a 2a 2a 20 6d 65 6d 6f 72 79 20 72 65  he .** memory re
2f750 71 75 69 72 65 64 20 62 79 20 74 68 65 20 73 75  quired by the su
2f760 62 2d 76 64 62 65 20 61 74 20 72 75 6e 74 69 6d  b-vdbe at runtim
2f770 65 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 61  e..**.** P4 is a
2f780 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
2f790 56 4d 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  VM containing th
2f7a0 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2f7b0 6d 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 35 20 69  m..**.** If P5 i
2f7c0 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 6e  s non-zero, then
2f7d0 20 72 65 63 75 72 73 69 76 65 20 70 72 6f 67 72   recursive progr
2f7e0 61 6d 20 69 6e 76 6f 63 61 74 69 6f 6e 20 69 73  am invocation is
2f7f0 20 65 6e 61 62 6c 65 64 2e 0a 2a 2f 0a 63 61 73   enabled..*/.cas
2f800 65 20 4f 50 5f 50 72 6f 67 72 61 6d 3a 20 7b 20  e OP_Program: { 
2f810 20 20 20 20 20 20 20 2f 2a 20 6a 75 6d 70 20 2a         /* jump *
2f820 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20 20 20  /.  int nMem;   
2f830 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
2f840 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20  umber of memory 
2f850 72 65 67 69 73 74 65 72 73 20 66 6f 72 20 73 75  registers for su
2f860 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 69  b-program */.  i
2f870 6e 74 20 6e 42 79 74 65 3b 20 20 20 20 20 20 20  nt nByte;       
2f880 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
2f890 6f 66 20 72 75 6e 74 69 6d 65 20 73 70 61 63 65  of runtime space
2f8a0 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 73 75   required for su
2f8b0 62 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 4d  b-program */.  M
2f8c0 65 6d 20 2a 70 52 74 3b 20 20 20 20 20 20 20 20  em *pRt;        
2f8d0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
2f8e0 65 72 20 74 6f 20 61 6c 6c 6f 63 61 74 65 20 72  er to allocate r
2f8f0 75 6e 74 69 6d 65 20 73 70 61 63 65 20 2a 2f 0a  untime space */.
2f900 20 20 4d 65 6d 20 2a 70 4d 65 6d 3b 20 20 20 20    Mem *pMem;    
2f910 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
2f920 64 20 74 6f 20 69 74 65 72 61 74 65 20 74 68 72  d to iterate thr
2f930 6f 75 67 68 20 6d 65 6d 6f 72 79 20 63 65 6c 6c  ough memory cell
2f940 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70 45 6e 64  s */.  Mem *pEnd
2f950 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
2f960 2a 20 4c 61 73 74 20 6d 65 6d 6f 72 79 20 63 65  * Last memory ce
2f970 6c 6c 20 69 6e 20 6e 65 77 20 61 72 72 61 79 20  ll in new array 
2f980 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d 65 20 2a  */.  VdbeFrame *
2f990 70 46 72 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  pFrame;      /* 
2f9a0 4e 65 77 20 76 64 62 65 20 66 72 61 6d 65 20 74  New vdbe frame t
2f9b0 6f 20 65 78 65 63 75 74 65 20 69 6e 20 2a 2f 0a  o execute in */.
2f9c0 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70 50    SubProgram *pP
2f9d0 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 53 75 62  rogram;   /* Sub
2f9e0 2d 70 72 6f 67 72 61 6d 20 74 6f 20 65 78 65 63  -program to exec
2f9f0 75 74 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 74  ute */.  void *t
2fa00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
2fa10 20 2f 2a 20 54 6f 6b 65 6e 20 69 64 65 6e 74 69   /* Token identi
2fa20 66 79 69 6e 67 20 74 72 69 67 67 65 72 20 2a 2f  fying trigger */
2fa30 0a 0a 20 20 70 50 72 6f 67 72 61 6d 20 3d 20 70  ..  pProgram = p
2fa40 4f 70 2d 3e 70 34 2e 70 50 72 6f 67 72 61 6d 3b  Op->p4.pProgram;
2fa50 0a 20 20 70 52 74 20 3d 20 26 61 4d 65 6d 5b 70  .  pRt = &aMem[p
2fa60 4f 70 2d 3e 70 33 5d 3b 0a 20 20 61 73 73 65 72  Op->p3];.  asser
2fa70 74 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70  t( pProgram->nOp
2fa80 3e 30 20 29 3b 0a 20 20 0a 20 20 2f 2a 20 49 66  >0 );.  .  /* If
2fa90 20 74 68 65 20 70 35 20 66 6c 61 67 20 69 73 20   the p5 flag is 
2faa0 63 6c 65 61 72 2c 20 74 68 65 6e 20 72 65 63 75  clear, then recu
2fab0 72 73 69 76 65 20 69 6e 76 6f 63 61 74 69 6f 6e  rsive invocation
2fac0 20 6f 66 20 74 72 69 67 67 65 72 73 20 69 73 20   of triggers is 
2fad0 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 64 20 66  .  ** disabled f
2fae0 6f 72 20 62 61 63 6b 77 61 72 64 73 20 63 6f 6d  or backwards com
2faf0 70 61 74 69 62 69 6c 69 74 79 20 28 70 35 20 69  patibility (p5 i
2fb00 73 20 73 65 74 20 69 66 20 74 68 69 73 20 73 75  s set if this su
2fb10 62 2d 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 69  b-program.  ** i
2fb20 73 20 72 65 61 6c 6c 79 20 61 20 74 72 69 67 67  s really a trigg
2fb30 65 72 2c 20 6e 6f 74 20 61 20 66 6f 72 65 69 67  er, not a foreig
2fb40 6e 20 6b 65 79 20 61 63 74 69 6f 6e 2c 20 61 6e  n key action, an
2fb50 64 20 74 68 65 20 66 6c 61 67 20 73 65 74 0a 20  d the flag set. 
2fb60 20 2a 2a 20 61 6e 64 20 63 6c 65 61 72 65 64 20   ** and cleared 
2fb70 62 79 20 74 68 65 20 22 50 52 41 47 4d 41 20 72  by the "PRAGMA r
2fb80 65 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72  ecursive_trigger
2fb90 73 22 20 63 6f 6d 6d 61 6e 64 20 69 73 20 63 6c  s" command is cl
2fba0 65 61 72 29 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a  ear)..  ** .  **
2fbb0 20 49 74 20 69 73 20 72 65 63 75 72 73 69 76 65   It is recursive
2fbc0 20 69 6e 76 6f 63 61 74 69 6f 6e 20 6f 66 20 74   invocation of t
2fbd0 72 69 67 67 65 72 73 2c 20 61 74 20 74 68 65 20  riggers, at the 
2fbe0 53 51 4c 20 6c 65 76 65 6c 2c 20 74 68 61 74 20  SQL level, that 
2fbf0 69 73 20 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65  is .  ** disable
2fc00 64 2e 20 49 6e 20 73 6f 6d 65 20 63 61 73 65 73  d. In some cases
2fc10 20 61 20 73 69 6e 67 6c 65 20 74 72 69 67 67 65   a single trigge
2fc20 72 20 6d 61 79 20 67 65 6e 65 72 61 74 65 20 6d  r may generate m
2fc30 6f 72 65 20 74 68 61 6e 20 6f 6e 65 20 0a 20 20  ore than one .  
2fc40 2a 2a 20 53 75 62 50 72 6f 67 72 61 6d 20 28 69  ** SubProgram (i
2fc50 66 20 74 68 65 20 74 72 69 67 67 65 72 20 6d 61  f the trigger ma
2fc60 79 20 62 65 20 65 78 65 63 75 74 65 64 20 77 69  y be executed wi
2fc70 74 68 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e 65  th more than one
2fc80 20 64 69 66 66 65 72 65 6e 74 20 0a 20 20 2a 2a   different .  **
2fc90 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c 67   ON CONFLICT alg
2fca0 6f 72 69 74 68 6d 29 2e 20 53 75 62 50 72 6f 67  orithm). SubProg
2fcb0 72 61 6d 20 73 74 72 75 63 74 75 72 65 73 20 61  ram structures a
2fcc0 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2fcd0 0a 20 20 2a 2a 20 73 69 6e 67 6c 65 20 74 72 69  .  ** single tri
2fce0 67 67 65 72 20 61 6c 6c 20 68 61 76 65 20 74 68  gger all have th
2fcf0 65 20 73 61 6d 65 20 76 61 6c 75 65 20 66 6f 72  e same value for
2fd00 20 74 68 65 20 53 75 62 50 72 6f 67 72 61 6d 2e   the SubProgram.
2fd10 74 6f 6b 65 6e 20 0a 20 20 2a 2a 20 76 61 72 69  token .  ** vari
2fd20 61 62 6c 65 2e 20 20 2a 2f 0a 20 20 69 66 28 20  able.  */.  if( 
2fd30 70 4f 70 2d 3e 70 35 20 29 7b 0a 20 20 20 20 74  pOp->p5 ){.    t
2fd40 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b   = pProgram->tok
2fd50 65 6e 3b 0a 20 20 20 20 66 6f 72 28 70 46 72 61  en;.    for(pFra
2fd60 6d 65 3d 70 2d 3e 70 46 72 61 6d 65 3b 20 70 46  me=p->pFrame; pF
2fd70 72 61 6d 65 20 26 26 20 70 46 72 61 6d 65 2d 3e  rame && pFrame->
2fd80 74 6f 6b 65 6e 21 3d 74 3b 20 70 46 72 61 6d 65  token!=t; pFrame
2fd90 3d 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74  =pFrame->pParent
2fda0 29 3b 0a 20 20 20 20 69 66 28 20 70 46 72 61 6d  );.    if( pFram
2fdb0 65 20 29 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a  e ) break;.  }..
2fdc0 20 20 69 66 28 20 70 2d 3e 6e 46 72 61 6d 65 3e    if( p->nFrame>
2fdd0 3d 64 62 2d 3e 61 4c 69 6d 69 74 5b 53 51 4c 49  =db->aLimit[SQLI
2fde0 54 45 5f 4c 49 4d 49 54 5f 54 52 49 47 47 45 52  TE_LIMIT_TRIGGER
2fdf0 5f 44 45 50 54 48 5d 20 29 7b 0a 20 20 20 20 72  _DEPTH] ){.    r
2fe00 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
2fe10 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
2fe20 65 45 72 72 6f 72 28 70 2c 20 22 74 6f 6f 20 6d  eError(p, "too m
2fe30 61 6e 79 20 6c 65 76 65 6c 73 20 6f 66 20 74 72  any levels of tr
2fe40 69 67 67 65 72 20 72 65 63 75 72 73 69 6f 6e 22  igger recursion"
2fe50 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62 6f 72  );.    goto abor
2fe60 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a  t_due_to_error;.
2fe70 20 20 7d 0a 0a 20 20 2f 2a 20 52 65 67 69 73 74    }..  /* Regist
2fe80 65 72 20 70 52 74 20 69 73 20 75 73 65 64 20 74  er pRt is used t
2fe90 6f 20 73 74 6f 72 65 20 74 68 65 20 6d 65 6d 6f  o store the memo
2fea0 72 79 20 72 65 71 75 69 72 65 64 20 74 6f 20 73  ry required to s
2feb0 61 76 65 20 74 68 65 20 73 74 61 74 65 0a 20 20  ave the state.  
2fec0 2a 2a 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  ** of the curren
2fed0 74 20 70 72 6f 67 72 61 6d 2c 20 61 6e 64 20 74  t program, and t
2fee0 68 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72  he memory requir
2fef0 65 64 20 61 74 20 72 75 6e 74 69 6d 65 20 74 6f  ed at runtime to
2ff00 20 65 78 65 63 75 74 65 0a 20 20 2a 2a 20 74 68   execute.  ** th
2ff10 65 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  e trigger progra
2ff20 6d 2e 20 49 66 20 74 68 69 73 20 74 72 69 67 67  m. If this trigg
2ff30 65 72 20 68 61 73 20 62 65 65 6e 20 66 69 72 65  er has been fire
2ff40 64 20 62 65 66 6f 72 65 2c 20 74 68 65 6e 20 70  d before, then p
2ff50 52 74 20 0a 20 20 2a 2a 20 69 73 20 61 6c 72 65  Rt .  ** is alre
2ff60 61 64 79 20 61 6c 6c 6f 63 61 74 65 64 2e 20 4f  ady allocated. O
2ff70 74 68 65 72 77 69 73 65 2c 20 69 74 20 6d 75 73  therwise, it mus
2ff80 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
2ff90 2e 20 20 2a 2f 0a 20 20 69 66 28 20 28 70 52 74  .  */.  if( (pRt
2ffa0 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 46 72 61 6d  ->flags&MEM_Fram
2ffb0 65 29 3d 3d 30 20 29 7b 0a 20 20 20 20 2f 2a 20  e)==0 ){.    /* 
2ffc0 53 75 62 50 72 6f 67 72 61 6d 2e 6e 4d 65 6d 20  SubProgram.nMem 
2ffd0 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 6e 75  is set to the nu
2ffe0 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
2fff0 65 6c 6c 73 20 75 73 65 64 20 62 79 20 74 68 65  ells used by the
30000 20 0a 20 20 20 20 2a 2a 20 70 72 6f 67 72 61 6d   .    ** program
30010 20 73 74 6f 72 65 64 20 69 6e 20 53 75 62 50 72   stored in SubPr
30020 6f 67 72 61 6d 2e 61 4f 70 2e 20 41 73 20 77 65  ogram.aOp. As we
30030 6c 6c 20 61 73 20 74 68 65 73 65 2c 20 6f 6e 65  ll as these, one
30040 20 6d 65 6d 6f 72 79 0a 20 20 20 20 2a 2a 20 63   memory.    ** c
30050 65 6c 6c 20 69 73 20 72 65 71 75 69 72 65 64 20  ell is required 
30060 66 6f 72 20 65 61 63 68 20 63 75 72 73 6f 72 20  for each cursor 
30070 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
30080 72 61 6d 2e 20 53 65 74 20 6c 6f 63 61 6c 0a 20  ram. Set local. 
30090 20 20 20 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e     ** variable n
300a0 4d 65 6d 20 28 61 6e 64 20 6c 61 74 65 72 2c 20  Mem (and later, 
300b0 56 64 62 65 46 72 61 6d 65 2e 6e 43 68 69 6c 64  VdbeFrame.nChild
300c0 4d 65 6d 29 20 74 6f 20 74 68 69 73 20 76 61 6c  Mem) to this val
300d0 75 65 2e 0a 20 20 20 20 2a 2f 0a 20 20 20 20 6e  ue..    */.    n
300e0 4d 65 6d 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e  Mem = pProgram->
300f0 6e 4d 65 6d 20 2b 20 70 50 72 6f 67 72 61 6d 2d  nMem + pProgram-
30100 3e 6e 43 73 72 3b 0a 20 20 20 20 61 73 73 65 72  >nCsr;.    asser
30110 74 28 20 6e 4d 65 6d 3e 30 20 29 3b 0a 20 20 20  t( nMem>0 );.   
30120 20 69 66 28 20 70 50 72 6f 67 72 61 6d 2d 3e 6e   if( pProgram->n
30130 43 73 72 3d 3d 30 20 29 20 6e 4d 65 6d 2b 2b 3b  Csr==0 ) nMem++;
30140 0a 20 20 20 20 6e 42 79 74 65 20 3d 20 52 4f 55  .    nByte = ROU
30150 4e 44 38 28 73 69 7a 65 6f 66 28 56 64 62 65 46  ND8(sizeof(VdbeF
30160 72 61 6d 65 29 29 0a 20 20 20 20 20 20 20 20 20  rame)).         
30170 20 20 20 20 20 2b 20 6e 4d 65 6d 20 2a 20 73 69       + nMem * si
30180 7a 65 6f 66 28 4d 65 6d 29 0a 20 20 20 20 20 20  zeof(Mem).      
30190 20 20 20 20 20 20 20 20 2b 20 70 50 72 6f 67 72          + pProgr
301a0 61 6d 2d 3e 6e 43 73 72 20 2a 20 73 69 7a 65 6f  am->nCsr * sizeo
301b0 66 28 56 64 62 65 43 75 72 73 6f 72 20 2a 29 3b  f(VdbeCursor *);
301c0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 73 71  .    pFrame = sq
301d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
301e0 6f 28 64 62 2c 20 6e 42 79 74 65 29 3b 0a 20 20  o(db, nByte);.  
301f0 20 20 69 66 28 20 21 70 46 72 61 6d 65 20 29 7b    if( !pFrame ){
30200 0a 20 20 20 20 20 20 67 6f 74 6f 20 6e 6f 5f 6d  .      goto no_m
30210 65 6d 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71  em;.    }.    sq
30220 6c 69 74 65 33 56 64 62 65 4d 65 6d 52 65 6c 65  lite3VdbeMemRele
30230 61 73 65 28 70 52 74 29 3b 0a 20 20 20 20 70 52  ase(pRt);.    pR
30240 74 2d 3e 66 6c 61 67 73 20 3d 20 4d 45 4d 5f 46  t->flags = MEM_F
30250 72 61 6d 65 3b 0a 20 20 20 20 70 52 74 2d 3e 75  rame;.    pRt->u
30260 2e 70 46 72 61 6d 65 20 3d 20 70 46 72 61 6d 65  .pFrame = pFrame
30270 3b 0a 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 76  ;..    pFrame->v
30280 20 3d 20 70 3b 0a 20 20 20 20 70 46 72 61 6d 65   = p;.    pFrame
30290 2d 3e 6e 43 68 69 6c 64 4d 65 6d 20 3d 20 6e 4d  ->nChildMem = nM
302a0 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e  em;.    pFrame->
302b0 6e 43 68 69 6c 64 43 73 72 20 3d 20 70 50 72 6f  nChildCsr = pPro
302c0 67 72 61 6d 2d 3e 6e 43 73 72 3b 0a 20 20 20 20  gram->nCsr;.    
302d0 70 46 72 61 6d 65 2d 3e 70 63 20 3d 20 28 69 6e  pFrame->pc = (in
302e0 74 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20  t)(pOp - aOp);. 
302f0 20 20 20 70 46 72 61 6d 65 2d 3e 61 4d 65 6d 20     pFrame->aMem 
30300 3d 20 70 2d 3e 61 4d 65 6d 3b 0a 20 20 20 20 70  = p->aMem;.    p
30310 46 72 61 6d 65 2d 3e 6e 4d 65 6d 20 3d 20 70 2d  Frame->nMem = p-
30320 3e 6e 4d 65 6d 3b 0a 20 20 20 20 70 46 72 61 6d  >nMem;.    pFram
30330 65 2d 3e 61 70 43 73 72 20 3d 20 70 2d 3e 61 70  e->apCsr = p->ap
30340 43 73 72 3b 0a 20 20 20 20 70 46 72 61 6d 65 2d  Csr;.    pFrame-
30350 3e 6e 43 75 72 73 6f 72 20 3d 20 70 2d 3e 6e 43  >nCursor = p->nC
30360 75 72 73 6f 72 3b 0a 20 20 20 20 70 46 72 61 6d  ursor;.    pFram
30370 65 2d 3e 61 4f 70 20 3d 20 70 2d 3e 61 4f 70 3b  e->aOp = p->aOp;
30380 0a 20 20 20 20 70 46 72 61 6d 65 2d 3e 6e 4f 70  .    pFrame->nOp
30390 20 3d 20 70 2d 3e 6e 4f 70 3b 0a 20 20 20 20 70   = p->nOp;.    p
303a0 46 72 61 6d 65 2d 3e 74 6f 6b 65 6e 20 3d 20 70  Frame->token = p
303b0 50 72 6f 67 72 61 6d 2d 3e 74 6f 6b 65 6e 3b 0a  Program->token;.
303c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
303d0 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
303e0 41 54 55 53 0a 20 20 20 20 70 46 72 61 6d 65 2d  ATUS.    pFrame-
303f0 3e 61 6e 45 78 65 63 20 3d 20 70 2d 3e 61 6e 45  >anExec = p->anE
30400 78 65 63 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 20  xec;.#endif..   
30410 20 70 45 6e 64 20 3d 20 26 56 64 62 65 46 72 61   pEnd = &VdbeFra
30420 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29 5b 70 46  meMem(pFrame)[pF
30430 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 5d  rame->nChildMem]
30440 3b 0a 20 20 20 20 66 6f 72 28 70 4d 65 6d 3d 56  ;.    for(pMem=V
30450 64 62 65 46 72 61 6d 65 4d 65 6d 28 70 46 72 61  dbeFrameMem(pFra
30460 6d 65 29 3b 20 70 4d 65 6d 21 3d 70 45 6e 64 3b  me); pMem!=pEnd;
30470 20 70 4d 65 6d 2b 2b 29 7b 0a 20 20 20 20 20 20   pMem++){.      
30480 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 3d 20 4d 45  pMem->flags = ME
30490 4d 5f 55 6e 64 65 66 69 6e 65 64 3b 0a 20 20 20  M_Undefined;.   
304a0 20 20 20 70 4d 65 6d 2d 3e 64 62 20 3d 20 64 62     pMem->db = db
304b0 3b 0a 20 20 20 20 7d 0a 20 20 7d 65 6c 73 65 7b  ;.    }.  }else{
304c0 0a 20 20 20 20 70 46 72 61 6d 65 20 3d 20 70 52  .    pFrame = pR
304d0 74 2d 3e 75 2e 70 46 72 61 6d 65 3b 0a 20 20 20  t->u.pFrame;.   
304e0 20 61 73 73 65 72 74 28 20 70 50 72 6f 67 72 61   assert( pProgra
304f0 6d 2d 3e 6e 4d 65 6d 2b 70 50 72 6f 67 72 61 6d  m->nMem+pProgram
30500 2d 3e 6e 43 73 72 3d 3d 70 46 72 61 6d 65 2d 3e  ->nCsr==pFrame->
30510 6e 43 68 69 6c 64 4d 65 6d 20 0a 20 20 20 20 20  nChildMem .     
30520 20 20 20 7c 7c 20 28 70 50 72 6f 67 72 61 6d 2d     || (pProgram-
30530 3e 6e 43 73 72 3d 3d 30 20 26 26 20 70 50 72 6f  >nCsr==0 && pPro
30540 67 72 61 6d 2d 3e 6e 4d 65 6d 2b 31 3d 3d 70 46  gram->nMem+1==pF
30550 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 29  rame->nChildMem)
30560 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
30570 70 50 72 6f 67 72 61 6d 2d 3e 6e 43 73 72 3d 3d  pProgram->nCsr==
30580 70 46 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 43 73  pFrame->nChildCs
30590 72 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  r );.    assert(
305a0 20 28 69 6e 74 29 28 70 4f 70 20 2d 20 61 4f 70   (int)(pOp - aOp
305b0 29 3d 3d 70 46 72 61 6d 65 2d 3e 70 63 20 29 3b  )==pFrame->pc );
305c0 0a 20 20 7d 0a 0a 20 20 70 2d 3e 6e 46 72 61 6d  .  }..  p->nFram
305d0 65 2b 2b 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 70  e++;.  pFrame->p
305e0 50 61 72 65 6e 74 20 3d 20 70 2d 3e 70 46 72 61  Parent = p->pFra
305f0 6d 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6c 61  me;.  pFrame->la
30600 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52 6f  stRowid = lastRo
30610 77 69 64 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  wid;.  pFrame->n
30620 43 68 61 6e 67 65 20 3d 20 70 2d 3e 6e 43 68 61  Change = p->nCha
30630 6e 67 65 3b 0a 20 20 70 46 72 61 6d 65 2d 3e 6e  nge;.  pFrame->n
30640 44 62 43 68 61 6e 67 65 20 3d 20 70 2d 3e 64 62  DbChange = p->db
30650 2d 3e 6e 43 68 61 6e 67 65 3b 0a 20 20 61 73 73  ->nChange;.  ass
30660 65 72 74 28 20 70 46 72 61 6d 65 2d 3e 70 41 75  ert( pFrame->pAu
30670 78 44 61 74 61 3d 3d 30 20 29 3b 0a 20 20 70 46  xData==0 );.  pF
30680 72 61 6d 65 2d 3e 70 41 75 78 44 61 74 61 20 3d  rame->pAuxData =
30690 20 70 2d 3e 70 41 75 78 44 61 74 61 3b 0a 20 20   p->pAuxData;.  
306a0 70 2d 3e 70 41 75 78 44 61 74 61 20 3d 20 30 3b  p->pAuxData = 0;
306b0 0a 20 20 70 2d 3e 6e 43 68 61 6e 67 65 20 3d 20  .  p->nChange = 
306c0 30 3b 0a 20 20 70 2d 3e 70 46 72 61 6d 65 20 3d  0;.  p->pFrame =
306d0 20 70 46 72 61 6d 65 3b 0a 20 20 70 2d 3e 61 4d   pFrame;.  p->aM
306e0 65 6d 20 3d 20 61 4d 65 6d 20 3d 20 56 64 62 65  em = aMem = Vdbe
306f0 46 72 61 6d 65 4d 65 6d 28 70 46 72 61 6d 65 29  FrameMem(pFrame)
30700 3b 0a 20 20 70 2d 3e 6e 4d 65 6d 20 3d 20 70 46  ;.  p->nMem = pF
30710 72 61 6d 65 2d 3e 6e 43 68 69 6c 64 4d 65 6d 3b  rame->nChildMem;
30720 0a 20 20 70 2d 3e 6e 43 75 72 73 6f 72 20 3d 20  .  p->nCursor = 
30730 28 75 31 36 29 70 46 72 61 6d 65 2d 3e 6e 43 68  (u16)pFrame->nCh
30740 69 6c 64 43 73 72 3b 0a 20 20 70 2d 3e 61 70 43  ildCsr;.  p->apC
30750 73 72 20 3d 20 28 56 64 62 65 43 75 72 73 6f 72  sr = (VdbeCursor
30760 20 2a 2a 29 26 61 4d 65 6d 5b 70 2d 3e 6e 4d 65   **)&aMem[p->nMe
30770 6d 5d 3b 0a 20 20 70 2d 3e 61 4f 70 20 3d 20 61  m];.  p->aOp = a
30780 4f 70 20 3d 20 70 50 72 6f 67 72 61 6d 2d 3e 61  Op = pProgram->a
30790 4f 70 3b 0a 20 20 70 2d 3e 6e 4f 70 20 3d 20 70  Op;.  p->nOp = p
307a0 50 72 6f 67 72 61 6d 2d 3e 6e 4f 70 3b 0a 23 69  Program->nOp;.#i
307b0 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
307c0 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
307d0 55 53 0a 20 20 70 2d 3e 61 6e 45 78 65 63 20 3d  US.  p->anExec =
307e0 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20 70 4f 70   0;.#endif.  pOp
307f0 20 3d 20 26 61 4f 70 5b 2d 31 5d 3b 0a 0a 20 20   = &aOp[-1];..  
30800 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
30810 6f 64 65 3a 20 50 61 72 61 6d 20 50 31 20 50 32  ode: Param P1 P2
30820 20 2a 20 2a 20 2a 0a 2a 2a 0a 2a 2a 20 54 68 69   * * *.**.** Thi
30830 73 20 6f 70 63 6f 64 65 20 69 73 20 6f 6e 6c 79  s opcode is only
30840 20 65 76 65 72 20 70 72 65 73 65 6e 74 20 69 6e   ever present in
30850 20 73 75 62 2d 70 72 6f 67 72 61 6d 73 20 63 61   sub-programs ca
30860 6c 6c 65 64 20 76 69 61 20 74 68 65 20 0a 2a 2a  lled via the .**
30870 20 4f 50 5f 50 72 6f 67 72 61 6d 20 69 6e 73 74   OP_Program inst
30880 72 75 63 74 69 6f 6e 2e 20 43 6f 70 79 20 61 20  ruction. Copy a 
30890 76 61 6c 75 65 20 63 75 72 72 65 6e 74 6c 79 20  value currently 
308a0 73 74 6f 72 65 64 20 69 6e 20 61 20 6d 65 6d 6f  stored in a memo
308b0 72 79 20 0a 2a 2a 20 63 65 6c 6c 20 6f 66 20 74  ry .** cell of t
308c0 68 65 20 63 61 6c 6c 69 6e 67 20 28 70 61 72 65  he calling (pare
308d0 6e 74 29 20 66 72 61 6d 65 20 74 6f 20 63 65 6c  nt) frame to cel
308e0 6c 20 50 32 20 69 6e 20 74 68 65 20 63 75 72 72  l P2 in the curr
308f0 65 6e 74 20 66 72 61 6d 65 73 20 0a 2a 2a 20 61  ent frames .** a
30900 64 64 72 65 73 73 20 73 70 61 63 65 2e 20 54 68  ddress space. Th
30910 69 73 20 69 73 20 75 73 65 64 20 62 79 20 74 72  is is used by tr
30920 69 67 67 65 72 20 70 72 6f 67 72 61 6d 73 20 74  igger programs t
30930 6f 20 61 63 63 65 73 73 20 74 68 65 20 6e 65 77  o access the new
30940 2e 2a 20 0a 2a 2a 20 61 6e 64 20 6f 6c 64 2e 2a  .* .** and old.*
30950 20 76 61 6c 75 65 73 2e 0a 2a 2a 0a 2a 2a 20 54   values..**.** T
30960 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 74 68  he address of th
30970 65 20 63 65 6c 6c 20 69 6e 20 74 68 65 20 70 61  e cell in the pa
30980 72 65 6e 74 20 66 72 61 6d 65 20 69 73 20 64 65  rent frame is de
30990 74 65 72 6d 69 6e 65 64 20 62 79 20 61 64 64 69  termined by addi
309a0 6e 67 0a 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  ng.** the value 
309b0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
309c0 6e 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  nt to the value 
309d0 6f 66 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  of the P1 argume
309e0 6e 74 20 74 6f 20 74 68 65 0a 2a 2a 20 63 61 6c  nt to the.** cal
309f0 6c 69 6e 67 20 4f 50 5f 50 72 6f 67 72 61 6d 20  ling OP_Program 
30a00 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
30a10 63 61 73 65 20 4f 50 5f 50 61 72 61 6d 3a 20 7b  case OP_Param: {
30a20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6f 75             /* ou
30a30 74 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  t2 */.  VdbeFram
30a40 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 4d 65 6d  e *pFrame;.  Mem
30a50 20 2a 70 49 6e 3b 0a 20 20 70 4f 75 74 20 3d 20   *pIn;.  pOut = 
30a60 6f 75 74 32 50 72 65 72 65 6c 65 61 73 65 28 70  out2Prerelease(p
30a70 2c 20 70 4f 70 29 3b 0a 20 20 70 46 72 61 6d 65  , pOp);.  pFrame
30a80 20 3d 20 70 2d 3e 70 46 72 61 6d 65 3b 0a 20 20   = p->pFrame;.  
30a90 70 49 6e 20 3d 20 26 70 46 72 61 6d 65 2d 3e 61  pIn = &pFrame->a
30aa0 4d 65 6d 5b 70 4f 70 2d 3e 70 31 20 2b 20 70 46  Mem[pOp->p1 + pF
30ab0 72 61 6d 65 2d 3e 61 4f 70 5b 70 46 72 61 6d 65  rame->aOp[pFrame
30ac0 2d 3e 70 63 5d 2e 70 31 5d 3b 20 20 20 0a 20 20  ->pc].p1];   .  
30ad0 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 53 68  sqlite3VdbeMemSh
30ae0 61 6c 6c 6f 77 43 6f 70 79 28 70 4f 75 74 2c 20  allowCopy(pOut, 
30af0 70 49 6e 2c 20 4d 45 4d 5f 45 70 68 65 6d 29 3b  pIn, MEM_Ephem);
30b00 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 23 65 6e  .  break;.}..#en
30b10 64 69 66 20 2f 2a 20 23 69 66 6e 64 65 66 20 53  dif /* #ifndef S
30b20 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
30b30 45 52 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  ER */..#ifndef S
30b40 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
30b50 47 4e 5f 4b 45 59 0a 2f 2a 20 4f 70 63 6f 64 65  GN_KEY./* Opcode
30b60 3a 20 46 6b 43 6f 75 6e 74 65 72 20 50 31 20 50  : FkCounter P1 P
30b70 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
30b80 73 69 73 3a 20 66 6b 63 74 72 5b 50 31 5d 2b 3d  sis: fkctr[P1]+=
30b90 50 32 0a 2a 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65  P2.**.** Increme
30ba0 6e 74 20 61 20 22 63 6f 6e 73 74 72 61 69 6e 74  nt a "constraint
30bb0 20 63 6f 75 6e 74 65 72 22 20 62 79 20 50 32 20   counter" by P2 
30bc0 28 50 32 20 6d 61 79 20 62 65 20 6e 65 67 61 74  (P2 may be negat
30bd0 69 76 65 20 6f 72 20 70 6f 73 69 74 69 76 65 29  ive or positive)
30be0 2e 0a 2a 2a 20 49 66 20 50 31 20 69 73 20 6e 6f  ..** If P1 is no
30bf0 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 64 61 74 61  n-zero, the data
30c00 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e 74 20  base constraint 
30c10 63 6f 75 6e 74 65 72 20 69 73 20 69 6e 63 72 65  counter is incre
30c20 6d 65 6e 74 65 64 20 0a 2a 2a 20 28 64 65 66 65  mented .** (defe
30c30 72 72 65 64 20 66 6f 72 65 69 67 6e 20 6b 65 79  rred foreign key
30c40 20 63 6f 6e 73 74 72 61 69 6e 74 73 29 2e 20 4f   constraints). O
30c50 74 68 65 72 77 69 73 65 2c 20 69 66 20 50 31 20  therwise, if P1 
30c60 69 73 20 7a 65 72 6f 2c 20 74 68 65 20 0a 2a 2a  is zero, the .**
30c70 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 75 6e 74   statement count
30c80 65 72 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65  er is incremente
30c90 64 20 28 69 6d 6d 65 64 69 61 74 65 20 66 6f 72  d (immediate for
30ca0 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61  eign key constra
30cb0 69 6e 74 73 29 2e 0a 2a 2f 0a 63 61 73 65 20 4f  ints)..*/.case O
30cc0 50 5f 46 6b 43 6f 75 6e 74 65 72 3a 20 7b 0a 20  P_FkCounter: {. 
30cd0 20 69 66 28 20 64 62 2d 3e 66 6c 61 67 73 20 26   if( db->flags &
30ce0 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
30cf0 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6e 44 65 66   ){.    db->nDef
30d00 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 2b 3d 20  erredImmCons += 
30d10 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 65 6c 73 65  pOp->p2;.  }else
30d20 20 69 66 28 20 70 4f 70 2d 3e 70 31 20 29 7b 0a   if( pOp->p1 ){.
30d30 20 20 20 20 64 62 2d 3e 6e 44 65 66 65 72 72 65      db->nDeferre
30d40 64 43 6f 6e 73 20 2b 3d 20 70 4f 70 2d 3e 70 32  dCons += pOp->p2
30d50 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 70  ;.  }else{.    p
30d60 2d 3e 6e 46 6b 43 6f 6e 73 74 72 61 69 6e 74 20  ->nFkConstraint 
30d70 2b 3d 20 70 4f 70 2d 3e 70 32 3b 0a 20 20 7d 0a  += pOp->p2;.  }.
30d80 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f    break;.}../* O
30d90 70 63 6f 64 65 3a 20 46 6b 49 66 5a 65 72 6f 20  pcode: FkIfZero 
30da0 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53  P1 P2 * * *.** S
30db0 79 6e 6f 70 73 69 73 3a 20 69 66 20 66 6b 63 74  ynopsis: if fkct
30dc0 72 5b 50 31 5d 3d 3d 30 20 67 6f 74 6f 20 50 32  r[P1]==0 goto P2
30dd0 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
30de0 64 65 20 74 65 73 74 73 20 69 66 20 61 20 66 6f  de tests if a fo
30df0 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72  reign key constr
30e00 61 69 6e 74 2d 63 6f 75 6e 74 65 72 20 69 73 20  aint-counter is 
30e10 63 75 72 72 65 6e 74 6c 79 20 7a 65 72 6f 2e 0a  currently zero..
30e20 2a 2a 20 49 66 20 73 6f 2c 20 6a 75 6d 70 20 74  ** If so, jump t
30e30 6f 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32  o instruction P2
30e40 2e 20 4f 74 68 65 72 77 69 73 65 2c 20 66 61 6c  . Otherwise, fal
30e50 6c 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  l through to the
30e60 20 6e 65 78 74 20 0a 2a 2a 20 69 6e 73 74 72 75   next .** instru
30e70 63 74 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  ction..**.** If 
30e80 50 31 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  P1 is non-zero, 
30e90 74 68 65 6e 20 74 68 65 20 6a 75 6d 70 20 69 73  then the jump is
30ea0 20 74 61 6b 65 6e 20 69 66 20 74 68 65 20 64 61   taken if the da
30eb0 74 61 62 61 73 65 20 63 6f 6e 73 74 72 61 69 6e  tabase constrain
30ec0 74 2d 63 6f 75 6e 74 65 72 0a 2a 2a 20 69 73 20  t-counter.** is 
30ed0 7a 65 72 6f 20 28 74 68 65 20 6f 6e 65 20 74 68  zero (the one th
30ee0 61 74 20 63 6f 75 6e 74 73 20 64 65 66 65 72 72  at counts deferr
30ef0 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 20 76 69  ed constraint vi
30f00 6f 6c 61 74 69 6f 6e 73 29 2e 20 49 66 20 50 31  olations). If P1
30f10 20 69 73 0a 2a 2a 20 7a 65 72 6f 2c 20 74 68 65   is.** zero, the
30f20 20 6a 75 6d 70 20 69 73 20 74 61 6b 65 6e 20 69   jump is taken i
30f30 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20  f the statement 
30f40 63 6f 6e 73 74 72 61 69 6e 74 2d 63 6f 75 6e 74  constraint-count
30f50 65 72 20 69 73 20 7a 65 72 6f 0a 2a 2a 20 28 69  er is zero.** (i
30f60 6d 6d 65 64 69 61 74 65 20 66 6f 72 65 69 67 6e  mmediate foreign
30f70 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
30f80 76 69 6f 6c 61 74 69 6f 6e 73 29 2e 0a 2a 2f 0a  violations)..*/.
30f90 63 61 73 65 20 4f 50 5f 46 6b 49 66 5a 65 72 6f  case OP_FkIfZero
30fa0 3a 20 7b 20 20 20 20 20 20 20 20 20 2f 2a 20 6a  : {         /* j
30fb0 75 6d 70 20 2a 2f 0a 20 20 69 66 28 20 70 4f 70  ump */.  if( pOp
30fc0 2d 3e 70 31 20 29 7b 0a 20 20 20 20 56 64 62 65  ->p1 ){.    Vdbe
30fd0 42 72 61 6e 63 68 54 61 6b 65 6e 28 64 62 2d 3e  BranchTaken(db->
30fe0 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30  nDeferredCons==0
30ff0 20 26 26 20 64 62 2d 3e 6e 44 65 66 65 72 72 65   && db->nDeferre
31000 64 49 6d 6d 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b  dImmCons==0, 2);
31010 0a 20 20 20 20 69 66 28 20 64 62 2d 3e 6e 44 65  .    if( db->nDe
31020 66 65 72 72 65 64 43 6f 6e 73 3d 3d 30 20 26 26  ferredCons==0 &&
31030 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
31040 6d 43 6f 6e 73 3d 3d 30 20 29 20 67 6f 74 6f 20  mCons==0 ) goto 
31050 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d 65  jump_to_p2;.  }e
31060 6c 73 65 7b 0a 20 20 20 20 56 64 62 65 42 72 61  lse{.    VdbeBra
31070 6e 63 68 54 61 6b 65 6e 28 70 2d 3e 6e 46 6b 43  nchTaken(p->nFkC
31080 6f 6e 73 74 72 61 69 6e 74 3d 3d 30 20 26 26 20  onstraint==0 && 
31090 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
310a0 43 6f 6e 73 3d 3d 30 2c 20 32 29 3b 0a 20 20 20  Cons==0, 2);.   
310b0 20 69 66 28 20 70 2d 3e 6e 46 6b 43 6f 6e 73 74   if( p->nFkConst
310c0 72 61 69 6e 74 3d 3d 30 20 26 26 20 64 62 2d 3e  raint==0 && db->
310d0 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73  nDeferredImmCons
310e0 3d 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f  ==0 ) goto jump_
310f0 74 6f 5f 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65  to_p2;.  }.  bre
31100 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
31110 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
31120 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
31130 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
31140 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
31150 45 4d 45 4e 54 0a 2f 2a 20 4f 70 63 6f 64 65 3a  EMENT./* Opcode:
31160 20 4d 65 6d 4d 61 78 20 50 31 20 50 32 20 2a 20   MemMax P1 P2 * 
31170 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
31180 20 72 5b 50 31 5d 3d 6d 61 78 28 72 5b 50 31 5d   r[P1]=max(r[P1]
31190 2c 72 5b 50 32 5d 29 0a 2a 2a 0a 2a 2a 20 50 31  ,r[P2]).**.** P1
311a0 20 69 73 20 61 20 72 65 67 69 73 74 65 72 20 69   is a register i
311b0 6e 20 74 68 65 20 72 6f 6f 74 20 66 72 61 6d 65  n the root frame
311c0 20 6f 66 20 74 68 69 73 20 56 4d 20 28 74 68 65   of this VM (the
311d0 20 72 6f 6f 74 20 66 72 61 6d 65 20 69 73 0a 2a   root frame is.*
311e0 2a 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  * different from
311f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 72 61   the current fra
31200 6d 65 20 69 66 20 74 68 69 73 20 69 6e 73 74 72  me if this instr
31210 75 63 74 69 6f 6e 20 69 73 20 62 65 69 6e 67 20  uction is being 
31220 65 78 65 63 75 74 65 64 0a 2a 2a 20 77 69 74 68  executed.** with
31230 69 6e 20 61 20 73 75 62 2d 70 72 6f 67 72 61 6d  in a sub-program
31240 29 2e 20 53 65 74 20 74 68 65 20 76 61 6c 75 65  ). Set the value
31250 20 6f 66 20 72 65 67 69 73 74 65 72 20 50 31 20   of register P1 
31260 74 6f 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6f  to the maximum o
31270 66 20 0a 2a 2a 20 69 74 73 20 63 75 72 72 65 6e  f .** its curren
31280 74 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65 20  t value and the 
31290 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74 65  value in registe
312a0 72 20 50 32 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  r P2..**.** This
312b0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 74 68 72   instruction thr
312c0 6f 77 73 20 61 6e 20 65 72 72 6f 72 20 69 66 20  ows an error if 
312d0 74 68 65 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  the memory cell 
312e0 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 6c 79  is not initially
312f0 0a 2a 2a 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a  .** an integer..
31300 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 65 6d 4d 61  */.case OP_MemMa
31310 78 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 69  x: {        /* i
31320 6e 32 20 2a 2f 0a 20 20 56 64 62 65 46 72 61 6d  n2 */.  VdbeFram
31330 65 20 2a 70 46 72 61 6d 65 3b 0a 20 20 69 66 28  e *pFrame;.  if(
31340 20 70 2d 3e 70 46 72 61 6d 65 20 29 7b 0a 20 20   p->pFrame ){.  
31350 20 20 66 6f 72 28 70 46 72 61 6d 65 3d 70 2d 3e    for(pFrame=p->
31360 70 46 72 61 6d 65 3b 20 70 46 72 61 6d 65 2d 3e  pFrame; pFrame->
31370 70 50 61 72 65 6e 74 3b 20 70 46 72 61 6d 65 3d  pParent; pFrame=
31380 70 46 72 61 6d 65 2d 3e 70 50 61 72 65 6e 74 29  pFrame->pParent)
31390 3b 0a 20 20 20 20 70 49 6e 31 20 3d 20 26 70 46  ;.    pIn1 = &pF
313a0 72 61 6d 65 2d 3e 61 4d 65 6d 5b 70 4f 70 2d 3e  rame->aMem[pOp->
313b0 70 31 5d 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  p1];.  }else{.  
313c0 20 20 70 49 6e 31 20 3d 20 26 61 4d 65 6d 5b 70    pIn1 = &aMem[p
313d0 4f 70 2d 3e 70 31 5d 3b 0a 20 20 7d 0a 20 20 61  Op->p1];.  }.  a
313e0 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
313f0 64 28 70 49 6e 31 29 20 29 3b 0a 20 20 73 71 6c  d(pIn1) );.  sql
31400 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 74 65 67  ite3VdbeMemInteg
31410 65 72 69 66 79 28 70 49 6e 31 29 3b 0a 20 20 70  erify(pIn1);.  p
31420 49 6e 32 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d  In2 = &aMem[pOp-
31430 3e 70 32 5d 3b 0a 20 20 73 71 6c 69 74 65 33 56  >p2];.  sqlite3V
31440 64 62 65 4d 65 6d 49 6e 74 65 67 65 72 69 66 79  dbeMemIntegerify
31450 28 70 49 6e 32 29 3b 0a 20 20 69 66 28 20 70 49  (pIn2);.  if( pI
31460 6e 31 2d 3e 75 2e 69 3c 70 49 6e 32 2d 3e 75 2e  n1->u.i<pIn2->u.
31470 69 29 7b 0a 20 20 20 20 70 49 6e 31 2d 3e 75 2e  i){.    pIn1->u.
31480 69 20 3d 20 70 49 6e 32 2d 3e 75 2e 69 3b 0a 20  i = pIn2->u.i;. 
31490 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
314a0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
314b0 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45 4e  MIT_AUTOINCREMEN
314c0 54 20 2a 2f 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a  T */../* Opcode:
314d0 20 49 66 50 6f 73 20 50 31 20 50 32 20 50 33 20   IfPos P1 P2 P3 
314e0 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a  * *.** Synopsis:
314f0 20 69 66 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e   if r[P1]>0 then
31500 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
31510 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31520 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
31530 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 0a 2a  in an integer..*
31540 2a 20 49 66 20 74 68 65 20 76 61 6c 75 65 20 6f  * If the value o
31550 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31560 20 31 20 6f 72 20 67 72 65 61 74 65 72 2c 20 73   1 or greater, s
31570 75 62 74 72 61 63 74 20 50 33 20 66 72 6f 6d 20  ubtract P3 from 
31580 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69 6e 20  the.** value in 
31590 50 31 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  P1 and jump to P
315a0 32 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  2..**.** If the 
315b0 69 6e 69 74 69 61 6c 20 76 61 6c 75 65 20 6f 66  initial value of
315c0 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73 20   register P1 is 
315d0 6c 65 73 73 20 74 68 61 6e 20 31 2c 20 74 68 65  less than 1, the
315e0 6e 20 74 68 65 0a 2a 2a 20 76 61 6c 75 65 20 69  n the.** value i
315f0 73 20 75 6e 63 68 61 6e 67 65 64 20 61 6e 64 20  s unchanged and 
31600 63 6f 6e 74 72 6f 6c 20 70 61 73 73 65 73 20 74  control passes t
31610 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
31620 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
31630 2a 2f 0a 63 61 73 65 20 4f 50 5f 49 66 50 6f 73  */.case OP_IfPos
31640 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20 6a 75  : {        /* ju
31650 6d 70 2c 20 69 6e 31 20 2a 2f 0a 20 20 70 49 6e  mp, in1 */.  pIn
31660 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
31670 31 5d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 49  1];.  assert( pI
31680 6e 31 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e  n1->flags&MEM_In
31690 74 20 29 3b 0a 20 20 56 64 62 65 42 72 61 6e 63  t );.  VdbeBranc
316a0 68 54 61 6b 65 6e 28 20 70 49 6e 31 2d 3e 75 2e  hTaken( pIn1->u.
316b0 69 3e 30 2c 20 32 29 3b 0a 20 20 69 66 28 20 70  i>0, 2);.  if( p
316c0 49 6e 31 2d 3e 75 2e 69 3e 30 20 29 7b 0a 20 20  In1->u.i>0 ){.  
316d0 20 20 70 49 6e 31 2d 3e 75 2e 69 20 2d 3d 20 70    pIn1->u.i -= p
316e0 4f 70 2d 3e 70 33 3b 0a 20 20 20 20 67 6f 74 6f  Op->p3;.    goto
316f0 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
31700 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20  .  break;.}../* 
31710 4f 70 63 6f 64 65 3a 20 4f 66 66 73 65 74 4c 69  Opcode: OffsetLi
31720 6d 69 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  mit P1 P2 P3 * *
31730 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 66  .** Synopsis: if
31740 20 72 5b 50 31 5d 3e 30 20 74 68 65 6e 20 72 5b   r[P1]>0 then r[
31750 50 32 5d 3d 72 5b 50 31 5d 2b 6d 61 78 28 30 2c  P2]=r[P1]+max(0,
31760 72 5b 50 33 5d 29 20 65 6c 73 65 20 72 5b 50 32  r[P3]) else r[P2
31770 5d 3d 28 2d 31 29 0a 2a 2a 0a 2a 2a 20 54 68 69  ]=(-1).**.** Thi
31780 73 20 6f 70 63 6f 64 65 20 70 65 72 66 6f 72 6d  s opcode perform
31790 73 20 61 20 63 6f 6d 6d 6f 6e 6c 79 20 75 73 65  s a commonly use
317a0 64 20 63 6f 6d 70 75 74 61 74 69 6f 6e 20 61 73  d computation as
317b0 73 6f 63 69 61 74 65 64 20 77 69 74 68 0a 2a 2a  sociated with.**
317c0 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
317d0 54 20 70 72 6f 63 65 73 73 2e 20 20 72 5b 50 31  T process.  r[P1
317e0 5d 20 68 6f 6c 64 73 20 74 68 65 20 6c 69 6d 69  ] holds the limi
317f0 74 20 63 6f 75 6e 74 65 72 2e 20 20 72 5b 50 33  t counter.  r[P3
31800 5d 0a 2a 2a 20 68 6f 6c 64 73 20 74 68 65 20 6f  ].** holds the o
31810 66 66 73 65 74 20 63 6f 75 6e 74 65 72 2e 20 20  ffset counter.  
31820 54 68 65 20 6f 70 63 6f 64 65 20 63 6f 6d 70 75  The opcode compu
31830 74 65 73 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  tes the combined
31840 20 76 61 6c 75 65 0a 2a 2a 20 6f 66 20 74 68 65   value.** of the
31850 20 4c 49 4d 49 54 20 61 6e 64 20 4f 46 46 53 45   LIMIT and OFFSE
31860 54 20 61 6e 64 20 73 74 6f 72 65 73 20 74 68 61  T and stores tha
31870 74 20 76 61 6c 75 65 20 69 6e 20 72 5b 50 32 5d  t value in r[P2]
31880 2e 20 20 54 68 65 20 72 5b 50 32 5d 0a 2a 2a 20  .  The r[P2].** 
31890 76 61 6c 75 65 20 63 6f 6d 70 75 74 65 64 20 69  value computed i
318a0 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62  s the total numb
318b0 65 72 20 6f 66 20 72 6f 77 73 20 74 68 61 74 20  er of rows that 
318c0 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 0a  will need to be.
318d0 2a 2a 20 76 69 73 69 74 65 64 20 69 6e 20 6f 72  ** visited in or
318e0 64 65 72 20 74 6f 20 63 6f 6d 70 6c 65 74 65 20  der to complete 
318f0 74 68 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a  the query..**.**
31900 20 49 66 20 72 5b 50 33 5d 20 69 73 20 7a 65 72   If r[P3] is zer
31910 6f 20 6f 72 20 6e 65 67 61 74 69 76 65 2c 20 74  o or negative, t
31920 68 61 74 20 6d 65 61 6e 73 20 74 68 65 72 65 20  hat means there 
31930 69 73 20 6e 6f 20 4f 46 46 53 45 54 0a 2a 2a 20  is no OFFSET.** 
31940 61 6e 64 20 72 5b 50 32 5d 20 69 73 20 73 65 74  and r[P2] is set
31950 20 74 6f 20 62 65 20 74 68 65 20 76 61 6c 75 65   to be the value
31960 20 6f 66 20 74 68 65 20 4c 49 4d 49 54 2c 20 72   of the LIMIT, r
31970 5b 50 31 5d 2e 0a 2a 2a 0a 2a 2a 20 69 66 20 72  [P1]..**.** if r
31980 5b 50 31 5d 20 69 73 20 7a 65 72 6f 20 6f 72 20  [P1] is zero or 
31990 6e 65 67 61 74 69 76 65 2c 20 74 68 61 74 20 6d  negative, that m
319a0 65 61 6e 73 20 74 68 65 72 65 20 69 73 20 6e 6f  eans there is no
319b0 20 4c 49 4d 49 54 0a 2a 2a 20 61 6e 64 20 72 5b   LIMIT.** and r[
319c0 50 32 5d 20 69 73 20 73 65 74 20 74 6f 20 2d 31  P2] is set to -1
319d0 2e 20 0a 2a 2a 0a 2a 2a 20 4f 74 68 65 72 77 69  . .**.** Otherwi
319e0 73 65 2c 20 72 5b 50 32 5d 20 69 73 20 73 65 74  se, r[P2] is set
319f0 20 74 6f 20 74 68 65 20 73 75 6d 20 6f 66 20 72   to the sum of r
31a00 5b 50 31 5d 20 61 6e 64 20 72 5b 50 33 5d 2e 0a  [P1] and r[P3]..
31a10 2a 2f 0a 63 61 73 65 20 4f 50 5f 4f 66 66 73 65  */.case OP_Offse
31a20 74 4c 69 6d 69 74 3a 20 7b 20 20 20 20 2f 2a 20  tLimit: {    /* 
31a30 69 6e 31 2c 20 6f 75 74 32 2c 20 69 6e 33 20 2a  in1, out2, in3 *
31a40 2f 0a 20 20 69 36 34 20 78 3b 0a 20 20 70 49 6e  /.  i64 x;.  pIn
31a50 31 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  1 = &aMem[pOp->p
31a60 31 5d 3b 0a 20 20 70 49 6e 33 20 3d 20 26 61 4d  1];.  pIn3 = &aM
31a70 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20 70  em[pOp->p3];.  p
31a80 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c  Out = out2Prerel
31a90 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20  ease(p, pOp);.  
31aa0 61 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c  assert( pIn1->fl
31ab0 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74 20 29 3b  ags & MEM_Int );
31ac0 0a 20 20 61 73 73 65 72 74 28 20 70 49 6e 33 2d  .  assert( pIn3-
31ad0 3e 66 6c 61 67 73 20 26 20 4d 45 4d 5f 49 6e 74  >flags & MEM_Int
31ae0 20 29 3b 0a 20 20 78 20 3d 20 70 49 6e 31 2d 3e   );.  x = pIn1->
31af0 75 2e 69 3b 0a 20 20 69 66 28 20 78 3c 3d 30 20  u.i;.  if( x<=0 
31b00 7c 7c 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74  || sqlite3AddInt
31b10 36 34 28 26 78 2c 20 70 49 6e 33 2d 3e 75 2e 69  64(&x, pIn3->u.i
31b20 3e 30 3f 70 49 6e 33 2d 3e 75 2e 69 3a 30 29 20  >0?pIn3->u.i:0) 
31b30 29 7b 0a 20 20 20 20 2f 2a 20 49 66 20 74 68 65  ){.    /* If the
31b40 20 4c 49 4d 49 54 20 69 73 20 6c 65 73 73 20 74   LIMIT is less t
31b50 68 61 6e 20 6f 72 20 65 71 75 61 6c 20 74 6f 20  han or equal to 
31b60 7a 65 72 6f 2c 20 6c 6f 6f 70 20 66 6f 72 65 76  zero, loop forev
31b70 65 72 2e 20 20 54 68 69 73 0a 20 20 20 20 2a 2a  er.  This.    **
31b80 20 69 73 20 64 6f 63 75 6d 65 6e 74 65 64 2e 20   is documented. 
31b90 20 42 75 74 20 61 6c 73 6f 2c 20 69 66 20 74 68   But also, if th
31ba0 65 20 4c 49 4d 49 54 2b 4f 46 46 53 45 54 20 65  e LIMIT+OFFSET e
31bb0 78 63 65 65 64 73 20 32 5e 36 33 20 74 68 65 6e  xceeds 2^63 then
31bc0 0a 20 20 20 20 2a 2a 20 61 6c 73 6f 20 6c 6f 6f  .    ** also loo
31bd0 70 20 66 6f 72 65 76 65 72 2e 20 20 54 68 69 73  p forever.  This
31be0 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
31bf0 2e 20 20 49 6e 20 66 61 63 74 2c 20 6f 6e 65 20  .  In fact, one 
31c00 63 6f 75 6c 64 20 61 72 67 75 65 0a 20 20 20 20  could argue.    
31c10 2a 2a 20 74 68 61 74 20 74 68 65 20 6c 6f 6f 70  ** that the loop
31c20 20 73 68 6f 75 6c 64 20 74 65 72 6d 69 6e 61 74   should terminat
31c30 65 2e 20 20 42 75 74 20 61 73 73 75 6d 69 6e 67  e.  But assuming
31c40 20 31 20 62 69 6c 6c 69 6f 6e 20 69 74 65 72 61   1 billion itera
31c50 74 69 6f 6e 73 0a 20 20 20 20 2a 2a 20 70 65 72  tions.    ** per
31c60 20 73 65 63 6f 6e 64 20 28 66 61 72 20 65 78 63   second (far exc
31c70 65 65 64 69 6e 67 20 74 68 65 20 63 61 70 61 62  eeding the capab
31c80 69 6c 69 74 69 65 73 20 6f 66 20 61 6e 79 20 63  ilities of any c
31c90 75 72 72 65 6e 74 20 68 61 72 64 77 61 72 65 29  urrent hardware)
31ca0 0a 20 20 20 20 2a 2a 20 69 74 20 77 6f 75 6c 64  .    ** it would
31cb0 20 74 61 6b 65 20 6e 65 61 72 6c 79 20 33 30 30   take nearly 300
31cc0 20 79 65 61 72 73 20 74 6f 20 61 63 74 75 61 6c   years to actual
31cd0 6c 79 20 72 65 61 63 68 20 74 68 65 20 6c 69 6d  ly reach the lim
31ce0 69 74 2e 20 20 53 6f 0a 20 20 20 20 2a 2a 20 6c  it.  So.    ** l
31cf0 6f 6f 70 69 6e 67 20 66 6f 72 65 76 65 72 20 69  ooping forever i
31d00 73 20 61 20 72 65 61 73 6f 6e 61 62 6c 65 20 61  s a reasonable a
31d10 70 70 72 6f 78 69 6d 61 74 69 6f 6e 2e 20 2a 2f  pproximation. */
31d20 0a 20 20 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d  .    pOut->u.i =
31d30 20 2d 31 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20   -1;.  }else{.  
31d40 20 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 78 3b    pOut->u.i = x;
31d50 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a  .  }.  break;.}.
31d60 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 49 66 4e 6f  ./* Opcode: IfNo
31d70 74 5a 65 72 6f 20 50 31 20 50 32 20 50 33 20 2a  tZero P1 P2 P3 *
31d80 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73 3a 20   *.** Synopsis: 
31d90 69 66 20 72 5b 50 31 5d 21 3d 30 20 74 68 65 6e  if r[P1]!=0 then
31da0 20 72 5b 50 31 5d 2d 3d 50 33 2c 20 67 6f 74 6f   r[P1]-=P3, goto
31db0 20 50 32 0a 2a 2a 0a 2a 2a 20 52 65 67 69 73 74   P2.**.** Regist
31dc0 65 72 20 50 31 20 6d 75 73 74 20 63 6f 6e 74 61  er P1 must conta
31dd0 69 6e 20 61 6e 20 69 6e 74 65 67 65 72 2e 20 20  in an integer.  
31de0 49 66 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  If the content o
31df0 66 20 72 65 67 69 73 74 65 72 20 50 31 20 69 73  f register P1 is
31e00 0a 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 6e 6f  .** initially no
31e10 6e 7a 65 72 6f 2c 20 74 68 65 6e 20 73 75 62 74  nzero, then subt
31e20 72 61 63 74 20 50 33 20 66 72 6f 6d 20 74 68 65  ract P3 from the
31e30 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73 74   value in regist
31e40 65 72 20 50 31 20 61 6e 64 0a 2a 2a 20 6a 75 6d  er P1 and.** jum
31e50 70 20 74 6f 20 50 32 2e 20 20 49 66 20 72 65 67  p to P2.  If reg
31e60 69 73 74 65 72 20 50 31 20 69 73 20 69 6e 69 74  ister P1 is init
31e70 69 61 6c 6c 79 20 7a 65 72 6f 2c 20 6c 65 61 76  ially zero, leav
31e80 65 20 69 74 20 75 6e 63 68 61 6e 67 65 64 0a 2a  e it unchanged.*
31e90 2a 20 61 6e 64 20 66 61 6c 6c 20 74 68 72 6f 75  * and fall throu
31ea0 67 68 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  gh..*/.case OP_I
31eb0 66 4e 6f 74 5a 65 72 6f 3a 20 7b 20 20 20 20 20  fNotZero: {     
31ec0 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31 20     /* jump, in1 
31ed0 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d 65  */.  pIn1 = &aMe
31ee0 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61 73  m[pOp->p1];.  as
31ef0 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61 67  sert( pIn1->flag
31f00 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20 56  s&MEM_Int );.  V
31f10 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70  dbeBranchTaken(p
31f20 49 6e 31 2d 3e 75 2e 69 3c 30 2c 20 32 29 3b 0a  In1->u.i<0, 2);.
31f30 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 20    if( pIn1->u.i 
31f40 29 7b 0a 20 20 20 20 20 70 49 6e 31 2d 3e 75 2e  ){.     pIn1->u.
31f50 69 20 2d 3d 20 70 4f 70 2d 3e 70 33 3b 0a 20 20  i -= pOp->p3;.  
31f60 20 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f     goto jump_to_
31f70 70 32 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  p2;.  }.  break;
31f80 0a 7d 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 44  .}../* Opcode: D
31f90 65 63 72 4a 75 6d 70 5a 65 72 6f 20 50 31 20 50  ecrJumpZero P1 P
31fa0 32 20 2a 20 2a 20 2a 0a 2a 2a 20 53 79 6e 6f 70  2 * * *.** Synop
31fb0 73 69 73 3a 20 69 66 20 28 2d 2d 72 5b 50 31 5d  sis: if (--r[P1]
31fc0 29 3d 3d 30 20 67 6f 74 6f 20 50 32 0a 2a 2a 0a  )==0 goto P2.**.
31fd0 2a 2a 20 52 65 67 69 73 74 65 72 20 50 31 20 6d  ** Register P1 m
31fe0 75 73 74 20 68 6f 6c 64 20 61 6e 20 69 6e 74 65  ust hold an inte
31ff0 67 65 72 2e 20 20 44 65 63 72 65 6d 65 6e 74 20  ger.  Decrement 
32000 74 68 65 20 76 61 6c 75 65 20 69 6e 20 50 31 0a  the value in P1.
32010 2a 2a 20 61 6e 64 20 6a 75 6d 70 20 74 6f 20 50  ** and jump to P
32020 32 20 69 66 20 74 68 65 20 6e 65 77 20 76 61 6c  2 if the new val
32030 75 65 20 69 73 20 65 78 61 63 74 6c 79 20 7a 65  ue is exactly ze
32040 72 6f 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 44  ro..*/.case OP_D
32050 65 63 72 4a 75 6d 70 5a 65 72 6f 3a 20 7b 20 20  ecrJumpZero: {  
32060 20 20 20 20 2f 2a 20 6a 75 6d 70 2c 20 69 6e 31      /* jump, in1
32070 20 2a 2f 0a 20 20 70 49 6e 31 20 3d 20 26 61 4d   */.  pIn1 = &aM
32080 65 6d 5b 70 4f 70 2d 3e 70 31 5d 3b 0a 20 20 61  em[pOp->p1];.  a
32090 73 73 65 72 74 28 20 70 49 6e 31 2d 3e 66 6c 61  ssert( pIn1->fla
320a0 67 73 26 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20 20  gs&MEM_Int );.  
320b0 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3e 53 4d  if( pIn1->u.i>SM
320c0 41 4c 4c 45 53 54 5f 49 4e 54 36 34 20 29 20 70  ALLEST_INT64 ) p
320d0 49 6e 31 2d 3e 75 2e 69 2d 2d 3b 0a 20 20 56 64  In1->u.i--;.  Vd
320e0 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28 70 49  beBranchTaken(pI
320f0 6e 31 2d 3e 75 2e 69 3d 3d 30 2c 20 32 29 3b 0a  n1->u.i==0, 2);.
32100 20 20 69 66 28 20 70 49 6e 31 2d 3e 75 2e 69 3d    if( pIn1->u.i=
32110 3d 30 20 29 20 67 6f 74 6f 20 6a 75 6d 70 5f 74  =0 ) goto jump_t
32120 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  o_p2;.  break;.}
32130 0a 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 41 67  .../* Opcode: Ag
32140 67 53 74 65 70 30 20 2a 20 50 32 20 50 33 20 50  gStep0 * P2 P3 P
32150 34 20 50 35 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  4 P5.** Synopsis
32160 3a 20 61 63 63 75 6d 3d 72 5b 50 33 5d 20 73 74  : accum=r[P3] st
32170 65 70 28 72 5b 50 32 40 50 35 5d 29 0a 2a 2a 0a  ep(r[P2@P5]).**.
32180 2a 2a 20 45 78 65 63 75 74 65 20 74 68 65 20 73  ** Execute the s
32190 74 65 70 20 66 75 6e 63 74 69 6f 6e 20 66 6f 72  tep function for
321a0 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20 20   an aggregate.  
321b0 54 68 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 20  The.** function 
321c0 68 61 73 20 50 35 20 61 72 67 75 6d 65 6e 74 73  has P5 arguments
321d0 2e 20 20 20 50 34 20 69 73 20 61 20 70 6f 69 6e  .   P4 is a poin
321e0 74 65 72 20 74 6f 20 74 68 65 20 46 75 6e 63 44  ter to the FuncD
321f0 65 66 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  ef.** structure 
32200 74 68 61 74 20 73 70 65 63 69 66 69 65 73 20 74  that specifies t
32210 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20 52 65  he function.  Re
32220 67 69 73 74 65 72 20 50 33 20 69 73 20 74 68 65  gister P3 is the
32230 0a 2a 2a 20 61 63 63 75 6d 75 6c 61 74 6f 72 2e  .** accumulator.
32240 0a 2a 2a 0a 2a 2a 20 54 68 65 20 50 35 20 61 72  .**.** The P5 ar
32250 67 75 6d 65 6e 74 73 20 61 72 65 20 74 61 6b 65  guments are take
32260 6e 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 20  n from register 
32270 50 32 20 61 6e 64 20 69 74 73 0a 2a 2a 20 73 75  P2 and its.** su
32280 63 63 65 73 73 6f 72 73 2e 0a 2a 2f 0a 2f 2a 20  ccessors..*/./* 
32290 4f 70 63 6f 64 65 3a 20 41 67 67 53 74 65 70 20  Opcode: AggStep 
322a0 2a 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a 2a  * P2 P3 P4 P5.**
322b0 20 53 79 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d   Synopsis: accum
322c0 3d 72 5b 50 33 5d 20 73 74 65 70 28 72 5b 50 32  =r[P3] step(r[P2
322d0 40 50 35 5d 29 0a 2a 2a 0a 2a 2a 20 45 78 65 63  @P5]).**.** Exec
322e0 75 74 65 20 74 68 65 20 73 74 65 70 20 66 75 6e  ute the step fun
322f0 63 74 69 6f 6e 20 66 6f 72 20 61 6e 20 61 67 67  ction for an agg
32300 72 65 67 61 74 65 2e 20 20 54 68 65 0a 2a 2a 20  regate.  The.** 
32310 66 75 6e 63 74 69 6f 6e 20 68 61 73 20 50 35 20  function has P5 
32320 61 72 67 75 6d 65 6e 74 73 2e 20 20 20 50 34 20  arguments.   P4 
32330 69 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  is a pointer to 
32340 61 6e 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  an sqlite3_conte
32350 78 74 0a 2a 2a 20 6f 62 6a 65 63 74 20 74 68 61  xt.** object tha
32360 74 20 69 73 20 75 73 65 64 20 74 6f 20 72 75 6e  t is used to run
32370 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 20   the function.  
32380 52 65 67 69 73 74 65 72 20 50 33 20 69 73 0a 2a  Register P3 is.*
32390 2a 20 61 73 20 74 68 65 20 61 63 63 75 6d 75 6c  * as the accumul
323a0 61 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  ator..**.** The 
323b0 50 35 20 61 72 67 75 6d 65 6e 74 73 20 61 72 65  P5 arguments are
323c0 20 74 61 6b 65 6e 20 66 72 6f 6d 20 72 65 67 69   taken from regi
323d0 73 74 65 72 20 50 32 20 61 6e 64 20 69 74 73 0a  ster P2 and its.
323e0 2a 2a 20 73 75 63 63 65 73 73 6f 72 73 2e 0a 2a  ** successors..*
323f0 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65  *.** This opcode
32400 20 69 73 20 69 6e 69 74 69 61 6c 6c 79 20 63 6f   is initially co
32410 64 65 64 20 61 73 20 4f 50 5f 41 67 67 53 74 65  ded as OP_AggSte
32420 70 30 2e 20 20 4f 6e 20 66 69 72 73 74 20 65 76  p0.  On first ev
32430 61 6c 75 61 74 69 6f 6e 2c 0a 2a 2a 20 74 68 65  aluation,.** the
32440 20 46 75 6e 63 44 65 66 20 73 74 6f 72 65 64 20   FuncDef stored 
32450 69 6e 20 50 34 20 69 73 20 63 6f 6e 76 65 72 74  in P4 is convert
32460 65 64 20 69 6e 74 6f 20 61 6e 20 73 71 6c 69 74  ed into an sqlit
32470 65 33 5f 63 6f 6e 74 65 78 74 20 61 6e 64 0a 2a  e3_context and.*
32480 2a 20 74 68 65 20 6f 70 63 6f 64 65 20 69 73 20  * the opcode is 
32490 63 68 61 6e 67 65 64 2e 20 20 49 6e 20 74 68 69  changed.  In thi
324a0 73 20 77 61 79 2c 20 74 68 65 20 69 6e 69 74 69  s way, the initi
324b0 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20 74 68 65  alization of the
324c0 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74  .** sqlite3_cont
324d0 65 78 74 20 6f 6e 6c 79 20 68 61 70 70 65 6e 73  ext only happens
324e0 20 6f 6e 63 65 2c 20 69 6e 73 74 65 61 64 20 6f   once, instead o
324f0 66 20 6f 6e 20 65 61 63 68 20 63 61 6c 6c 20 74  f on each call t
32500 6f 20 74 68 65 0a 2a 2a 20 73 74 65 70 20 66 75  o the.** step fu
32510 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 63 61 73 65 20  nction..*/.case 
32520 4f 50 5f 41 67 67 53 74 65 70 30 3a 20 7b 0a 20  OP_AggStep0: {. 
32530 20 69 6e 74 20 6e 3b 0a 20 20 73 71 6c 69 74 65   int n;.  sqlite
32540 33 5f 63 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b  3_context *pCtx;
32550 0a 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70 2d  ..  assert( pOp-
32560 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46 55 4e 43  >p4type==P4_FUNC
32570 44 45 46 20 29 3b 0a 20 20 6e 20 3d 20 70 4f 70  DEF );.  n = pOp
32580 2d 3e 70 35 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p5;.  assert( 
32590 70 4f 70 2d 3e 70 33 3e 30 20 26 26 20 70 4f 70  pOp->p3>0 && pOp
325a0 2d 3e 70 33 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31  ->p3<=(p->nMem+1
325b0 20 2d 20 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29   - p->nCursor) )
325c0 3b 0a 20 20 61 73 73 65 72 74 28 20 6e 3d 3d 30  ;.  assert( n==0
325d0 20 7c 7c 20 28 70 4f 70 2d 3e 70 32 3e 30 20 26   || (pOp->p2>0 &
325e0 26 20 70 4f 70 2d 3e 70 32 2b 6e 3c 3d 28 70 2d  & pOp->p2+n<=(p-
325f0 3e 6e 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75  >nMem+1 - p->nCu
32600 72 73 6f 72 29 2b 31 29 20 29 3b 0a 20 20 61 73  rsor)+1) );.  as
32610 73 65 72 74 28 20 70 4f 70 2d 3e 70 33 3c 70 4f  sert( pOp->p3<pO
32620 70 2d 3e 70 32 20 7c 7c 20 70 4f 70 2d 3e 70 33  p->p2 || pOp->p3
32630 3e 3d 70 4f 70 2d 3e 70 32 2b 6e 20 29 3b 0a 20  >=pOp->p2+n );. 
32640 20 70 43 74 78 20 3d 20 73 71 6c 69 74 65 33 44   pCtx = sqlite3D
32650 62 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 64 62 2c  bMallocRawNN(db,
32660 20 73 69 7a 65 6f 66 28 2a 70 43 74 78 29 20 2b   sizeof(*pCtx) +
32670 20 28 6e 2d 31 29 2a 73 69 7a 65 6f 66 28 73 71   (n-1)*sizeof(sq
32680 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 29 3b 0a  lite3_value*));.
32690 20 20 69 66 28 20 70 43 74 78 3d 3d 30 20 29 20    if( pCtx==0 ) 
326a0 67 6f 74 6f 20 6e 6f 5f 6d 65 6d 3b 0a 20 20 70  goto no_mem;.  p
326b0 43 74 78 2d 3e 70 4d 65 6d 20 3d 20 30 3b 0a 20  Ctx->pMem = 0;. 
326c0 20 70 43 74 78 2d 3e 70 46 75 6e 63 20 3d 20 70   pCtx->pFunc = p
326d0 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 3b 0a 20 20  Op->p4.pFunc;.  
326e0 70 43 74 78 2d 3e 69 4f 70 20 3d 20 28 69 6e 74  pCtx->iOp = (int
326f0 29 28 70 4f 70 20 2d 20 61 4f 70 29 3b 0a 20 20  )(pOp - aOp);.  
32700 70 43 74 78 2d 3e 70 56 64 62 65 20 3d 20 70 3b  pCtx->pVdbe = p;
32710 0a 20 20 70 43 74 78 2d 3e 61 72 67 63 20 3d 20  .  pCtx->argc = 
32720 6e 3b 0a 20 20 70 4f 70 2d 3e 70 34 74 79 70 65  n;.  pOp->p4type
32730 20 3d 20 50 34 5f 46 55 4e 43 43 54 58 3b 0a 20   = P4_FUNCCTX;. 
32740 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 20 3d 20   pOp->p4.pCtx = 
32750 70 43 74 78 3b 0a 20 20 70 4f 70 2d 3e 6f 70 63  pCtx;.  pOp->opc
32760 6f 64 65 20 3d 20 4f 50 5f 41 67 67 53 74 65 70  ode = OP_AggStep
32770 3b 0a 20 20 2f 2a 20 46 61 6c 6c 20 74 68 72 6f  ;.  /* Fall thro
32780 75 67 68 20 69 6e 74 6f 20 4f 50 5f 41 67 67 53  ugh into OP_AggS
32790 74 65 70 20 2a 2f 0a 7d 0a 63 61 73 65 20 4f 50  tep */.}.case OP
327a0 5f 41 67 67 53 74 65 70 3a 20 7b 0a 20 20 69 6e  _AggStep: {.  in
327b0 74 20 69 3b 0a 20 20 73 71 6c 69 74 65 33 5f 63  t i;.  sqlite3_c
327c0 6f 6e 74 65 78 74 20 2a 70 43 74 78 3b 0a 20 20  ontext *pCtx;.  
327d0 4d 65 6d 20 2a 70 4d 65 6d 3b 0a 20 20 4d 65 6d  Mem *pMem;.  Mem
327e0 20 74 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70   t;..  assert( p
327f0 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f 46  Op->p4type==P4_F
32800 55 4e 43 43 54 58 20 29 3b 0a 20 20 70 43 74 78  UNCCTX );.  pCtx
32810 20 3d 20 70 4f 70 2d 3e 70 34 2e 70 43 74 78 3b   = pOp->p4.pCtx;
32820 0a 20 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b  .  pMem = &aMem[
32830 70 4f 70 2d 3e 70 33 5d 3b 0a 0a 20 20 2f 2a 20  pOp->p3];..  /* 
32840 49 66 20 74 68 69 73 20 66 75 6e 63 74 69 6f 6e  If this function
32850 20 69 73 20 69 6e 73 69 64 65 20 6f 66 20 61 20   is inside of a 
32860 74 72 69 67 67 65 72 2c 20 74 68 65 20 72 65 67  trigger, the reg
32870 69 73 74 65 72 20 61 72 72 61 79 20 69 6e 20 61  ister array in a
32880 4d 65 6d 5b 5d 0a 20 20 2a 2a 20 6d 69 67 68 74  Mem[].  ** might
32890 20 63 68 61 6e 67 65 20 66 72 6f 6d 20 6f 6e 65   change from one
328a0 20 65 76 61 6c 75 61 74 69 6f 6e 20 74 6f 20 74   evaluation to t
328b0 68 65 20 6e 65 78 74 2e 20 20 54 68 65 20 6e 65  he next.  The ne
328c0 78 74 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65  xt block of code
328d0 0a 20 20 2a 2a 20 63 68 65 63 6b 73 20 74 6f 20  .  ** checks to 
328e0 73 65 65 20 69 66 20 74 68 65 20 72 65 67 69 73  see if the regis
328f0 74 65 72 20 61 72 72 61 79 20 68 61 73 20 63 68  ter array has ch
32900 61 6e 67 65 64 2c 20 61 6e 64 20 69 66 20 73 6f  anged, and if so
32910 20 69 74 0a 20 20 2a 2a 20 72 65 69 6e 69 74 69   it.  ** reiniti
32920 61 6c 69 7a 65 73 20 74 68 65 20 72 65 6c 61 76  alizes the relav
32930 61 6e 74 20 70 61 72 74 73 20 6f 66 20 74 68 65  ant parts of the
32940 20 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74   sqlite3_context
32950 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 69 66 28   object */.  if(
32960 20 70 43 74 78 2d 3e 70 4d 65 6d 20 21 3d 20 70   pCtx->pMem != p
32970 4d 65 6d 20 29 7b 0a 20 20 20 20 70 43 74 78 2d  Mem ){.    pCtx-
32980 3e 70 4d 65 6d 20 3d 20 70 4d 65 6d 3b 0a 20 20  >pMem = pMem;.  
32990 20 20 66 6f 72 28 69 3d 70 43 74 78 2d 3e 61 72    for(i=pCtx->ar
329a0 67 63 2d 31 3b 20 69 3e 3d 30 3b 20 69 2d 2d 29  gc-1; i>=0; i--)
329b0 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 20 3d   pCtx->argv[i] =
329c0 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 32 2b 69   &aMem[pOp->p2+i
329d0 5d 3b 0a 20 20 7d 0a 0a 23 69 66 64 65 66 20 53  ];.  }..#ifdef S
329e0 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 66 6f  QLITE_DEBUG.  fo
329f0 72 28 69 3d 30 3b 20 69 3c 70 43 74 78 2d 3e 61  r(i=0; i<pCtx->a
32a00 72 67 63 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 61  rgc; i++){.    a
32a10 73 73 65 72 74 28 20 6d 65 6d 49 73 56 61 6c 69  ssert( memIsVali
32a20 64 28 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  d(pCtx->argv[i])
32a30 20 29 3b 0a 20 20 20 20 52 45 47 49 53 54 45 52   );.    REGISTER
32a40 5f 54 52 41 43 45 28 70 4f 70 2d 3e 70 32 2b 69  _TRACE(pOp->p2+i
32a50 2c 20 70 43 74 78 2d 3e 61 72 67 76 5b 69 5d 29  , pCtx->argv[i])
32a60 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20  ;.  }.#endif..  
32a70 70 4d 65 6d 2d 3e 6e 2b 2b 3b 0a 20 20 73 71 6c  pMem->n++;.  sql
32a80 69 74 65 33 56 64 62 65 4d 65 6d 49 6e 69 74 28  ite3VdbeMemInit(
32a90 26 74 2c 20 64 62 2c 20 4d 45 4d 5f 4e 75 6c 6c  &t, db, MEM_Null
32aa0 29 3b 0a 20 20 70 43 74 78 2d 3e 70 4f 75 74 20  );.  pCtx->pOut 
32ab0 3d 20 26 74 3b 0a 20 20 70 43 74 78 2d 3e 66 45  = &t;.  pCtx->fE
32ac0 72 72 6f 72 4f 72 41 75 78 20 3d 20 30 3b 0a 20  rrorOrAux = 0;. 
32ad0 20 70 43 74 78 2d 3e 73 6b 69 70 46 6c 61 67 20   pCtx->skipFlag 
32ae0 3d 20 30 3b 0a 20 20 28 70 43 74 78 2d 3e 70 46  = 0;.  (pCtx->pF
32af0 75 6e 63 2d 3e 78 53 46 75 6e 63 29 28 70 43 74  unc->xSFunc)(pCt
32b00 78 2c 70 43 74 78 2d 3e 61 72 67 63 2c 70 43 74  x,pCtx->argc,pCt
32b10 78 2d 3e 61 72 67 76 29 3b 20 2f 2a 20 49 4d 50  x->argv); /* IMP
32b20 3a 20 52 2d 32 34 35 30 35 2d 32 33 32 33 30 20  : R-24505-23230 
32b30 2a 2f 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 66  */.  if( pCtx->f
32b40 45 72 72 6f 72 4f 72 41 75 78 20 29 7b 0a 20 20  ErrorOrAux ){.  
32b50 20 20 69 66 28 20 70 43 74 78 2d 3e 69 73 45 72    if( pCtx->isEr
32b60 72 6f 72 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ror ){.      sql
32b70 69 74 65 33 56 64 62 65 45 72 72 6f 72 28 70 2c  ite3VdbeError(p,
32b80 20 22 25 73 22 2c 20 73 71 6c 69 74 65 33 5f 76   "%s", sqlite3_v
32b90 61 6c 75 65 5f 74 65 78 74 28 26 74 29 29 3b 0a  alue_text(&t));.
32ba0 20 20 20 20 20 20 72 63 20 3d 20 70 43 74 78 2d        rc = pCtx-
32bb0 3e 69 73 45 72 72 6f 72 3b 0a 20 20 20 20 7d 0a  >isError;.    }.
32bc0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4d      sqlite3VdbeM
32bd0 65 6d 52 65 6c 65 61 73 65 28 26 74 29 3b 0a 20  emRelease(&t);. 
32be0 20 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f     if( rc ) goto
32bf0 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72   abort_due_to_er
32c00 72 6f 72 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ror;.  }else{.  
32c10 20 20 61 73 73 65 72 74 28 20 74 2e 66 6c 61 67    assert( t.flag
32c20 73 3d 3d 4d 45 4d 5f 4e 75 6c 6c 20 29 3b 0a 20  s==MEM_Null );. 
32c30 20 7d 0a 20 20 69 66 28 20 70 43 74 78 2d 3e 73   }.  if( pCtx->s
32c40 6b 69 70 46 6c 61 67 20 29 7b 0a 20 20 20 20 61  kipFlag ){.    a
32c50 73 73 65 72 74 28 20 70 4f 70 5b 2d 31 5d 2e 6f  ssert( pOp[-1].o
32c60 70 63 6f 64 65 3d 3d 4f 50 5f 43 6f 6c 6c 53 65  pcode==OP_CollSe
32c70 71 20 29 3b 0a 20 20 20 20 69 20 3d 20 70 4f 70  q );.    i = pOp
32c80 5b 2d 31 5d 2e 70 31 3b 0a 20 20 20 20 69 66 28  [-1].p1;.    if(
32c90 20 69 20 29 20 73 71 6c 69 74 65 33 56 64 62 65   i ) sqlite3Vdbe
32ca0 4d 65 6d 53 65 74 49 6e 74 36 34 28 26 61 4d 65  MemSetInt64(&aMe
32cb0 6d 5b 69 5d 2c 20 31 29 3b 0a 20 20 7d 0a 20 20  m[i], 1);.  }.  
32cc0 62 72 65 61 6b 3b 0a 7d 0a 0a 2f 2a 20 4f 70 63  break;.}../* Opc
32cd0 6f 64 65 3a 20 41 67 67 46 69 6e 61 6c 20 50 31  ode: AggFinal P1
32ce0 20 50 32 20 2a 20 50 34 20 2a 0a 2a 2a 20 53 79   P2 * P4 *.** Sy
32cf0 6e 6f 70 73 69 73 3a 20 61 63 63 75 6d 3d 72 5b  nopsis: accum=r[
32d00 50 31 5d 20 4e 3d 50 32 0a 2a 2a 0a 2a 2a 20 45  P1] N=P2.**.** E
32d10 78 65 63 75 74 65 20 74 68 65 20 66 69 6e 61 6c  xecute the final
32d20 69 7a 65 72 20 66 75 6e 63 74 69 6f 6e 20 66 6f  izer function fo
32d30 72 20 61 6e 20 61 67 67 72 65 67 61 74 65 2e 20  r an aggregate. 
32d40 20 50 31 20 69 73 0a 2a 2a 20 74 68 65 20 6d 65   P1 is.** the me
32d50 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 20 74 68  mory location th
32d60 61 74 20 69 73 20 74 68 65 20 61 63 63 75 6d 75  at is the accumu
32d70 6c 61 74 6f 72 20 66 6f 72 20 74 68 65 20 61 67  lator for the ag
32d80 67 72 65 67 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 50  gregate..**.** P
32d90 32 20 69 73 20 74 68 65 20 6e 75 6d 62 65 72 20  2 is the number 
32da0 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61  of arguments tha
32db0 74 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  t the step funct
32dc0 69 6f 6e 20 74 61 6b 65 73 20 61 6e 64 0a 2a 2a  ion takes and.**
32dd0 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72   P4 is a pointer
32de0 20 74 6f 20 74 68 65 20 46 75 6e 63 44 65 66 20   to the FuncDef 
32df0 66 6f 72 20 74 68 69 73 20 66 75 6e 63 74 69 6f  for this functio
32e00 6e 2e 20 20 54 68 65 20 50 32 0a 2a 2a 20 61 72  n.  The P2.** ar
32e10 67 75 6d 65 6e 74 20 69 73 20 6e 6f 74 20 75 73  gument is not us
32e20 65 64 20 62 79 20 74 68 69 73 20 6f 70 63 6f 64  ed by this opcod
32e30 65 2e 20 20 49 74 20 69 73 20 6f 6e 6c 79 20 74  e.  It is only t
32e40 68 65 72 65 20 74 6f 20 64 69 73 61 6d 62 69 67  here to disambig
32e50 75 61 74 65 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e  uate.** function
32e60 73 20 74 68 61 74 20 63 61 6e 20 74 61 6b 65 20  s that can take 
32e70 76 61 72 79 69 6e 67 20 6e 75 6d 62 65 72 73 20  varying numbers 
32e80 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 54  of arguments.  T
32e90 68 65 0a 2a 2a 20 50 34 20 61 72 67 75 6d 65 6e  he.** P4 argumen
32ea0 74 20 69 73 20 6f 6e 6c 79 20 6e 65 65 64 65 64  t is only needed
32eb0 20 66 6f 72 20 74 68 65 20 64 65 67 65 6e 65 72   for the degener
32ec0 61 74 65 20 63 61 73 65 20 77 68 65 72 65 0a 2a  ate case where.*
32ed0 2a 20 74 68 65 20 73 74 65 70 20 66 75 6e 63 74  * the step funct
32ee0 69 6f 6e 20 77 61 73 20 6e 6f 74 20 70 72 65 76  ion was not prev
32ef0 69 6f 75 73 6c 79 20 63 61 6c 6c 65 64 2e 0a 2a  iously called..*
32f00 2f 0a 63 61 73 65 20 4f 50 5f 41 67 67 46 69 6e  /.case OP_AggFin
32f10 61 6c 3a 20 7b 0a 20 20 4d 65 6d 20 2a 70 4d 65  al: {.  Mem *pMe
32f20 6d 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4f 70  m;.  assert( pOp
32f30 2d 3e 70 31 3e 30 20 26 26 20 70 4f 70 2d 3e 70  ->p1>0 && pOp->p
32f40 31 3c 3d 28 70 2d 3e 6e 4d 65 6d 2b 31 20 2d 20  1<=(p->nMem+1 - 
32f50 70 2d 3e 6e 43 75 72 73 6f 72 29 20 29 3b 0a 20  p->nCursor) );. 
32f60 20 70 4d 65 6d 20 3d 20 26 61 4d 65 6d 5b 70 4f   pMem = &aMem[pO
32f70 70 2d 3e 70 31 5d 3b 0a 20 20 61 73 73 65 72 74  p->p1];.  assert
32f80 28 20 28 70 4d 65 6d 2d 3e 66 6c 61 67 73 20 26  ( (pMem->flags &
32f90 20 7e 28 4d 45 4d 5f 4e 75 6c 6c 7c 4d 45 4d 5f   ~(MEM_Null|MEM_
32fa0 41 67 67 29 29 3d 3d 30 20 29 3b 0a 20 20 72 63  Agg))==0 );.  rc
32fb0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 65   = sqlite3VdbeMe
32fc0 6d 46 69 6e 61 6c 69 7a 65 28 70 4d 65 6d 2c 20  mFinalize(pMem, 
32fd0 70 4f 70 2d 3e 70 34 2e 70 46 75 6e 63 29 3b 0a  pOp->p4.pFunc);.
32fe0 20 20 69 66 28 20 72 63 20 29 7b 0a 20 20 20 20    if( rc ){.    
32ff0 73 71 6c 69 74 65 33 56 64 62 65 45 72 72 6f 72  sqlite3VdbeError
33000 28 70 2c 20 22 25 73 22 2c 20 73 71 6c 69 74 65  (p, "%s", sqlite
33010 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 4d 65  3_value_text(pMe
33020 6d 29 29 3b 0a 20 20 20 20 67 6f 74 6f 20 61 62  m));.    goto ab
33030 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
33040 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 56  ;.  }.  sqlite3V
33050 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e  dbeChangeEncodin
33060 67 28 70 4d 65 6d 2c 20 65 6e 63 6f 64 69 6e 67  g(pMem, encoding
33070 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
33080 42 4c 4f 42 53 49 5a 45 28 70 4d 65 6d 29 3b 0a  BLOBSIZE(pMem);.
33090 20 20 69 66 28 20 73 71 6c 69 74 65 33 56 64 62    if( sqlite3Vdb
330a0 65 4d 65 6d 54 6f 6f 42 69 67 28 70 4d 65 6d 29  eMemTooBig(pMem)
330b0 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 74 6f 6f   ){.    goto too
330c0 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 62 72 65 61  _big;.  }.  brea
330d0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
330e0 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 2f 2a  LITE_OMIT_WAL./*
330f0 20 4f 70 63 6f 64 65 3a 20 43 68 65 63 6b 70 6f   Opcode: Checkpo
33100 69 6e 74 20 50 31 20 50 32 20 50 33 20 2a 20 2a  int P1 P2 P3 * *
33110 0a 2a 2a 0a 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  .**.** Checkpoin
33120 74 20 64 61 74 61 62 61 73 65 20 50 31 2e 20 54  t database P1. T
33130 68 69 73 20 69 73 20 61 20 6e 6f 2d 6f 70 20 69  his is a no-op i
33140 66 20 50 31 20 69 73 20 6e 6f 74 20 63 75 72 72  f P1 is not curr
33150 65 6e 74 6c 79 20 69 6e 0a 2a 2a 20 57 41 4c 20  ently in.** WAL 
33160 6d 6f 64 65 2e 20 50 61 72 61 6d 65 74 65 72 20  mode. Parameter 
33170 50 32 20 69 73 20 6f 6e 65 20 6f 66 20 53 51 4c  P2 is one of SQL
33180 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50  ITE_CHECKPOINT_P
33190 41 53 53 49 56 45 2c 20 46 55 4c 4c 2c 0a 2a 2a  ASSIVE, FULL,.**
331a0 20 52 45 53 54 41 52 54 2c 20 6f 72 20 54 52 55   RESTART, or TRU
331b0 4e 43 41 54 45 2e 20 20 57 72 69 74 65 20 31 20  NCATE.  Write 1 
331c0 6f 72 20 30 20 69 6e 74 6f 20 6d 65 6d 5b 50 33  or 0 into mem[P3
331d0 5d 20 69 66 20 74 68 65 20 63 68 65 63 6b 70 6f  ] if the checkpo
331e0 69 6e 74 20 72 65 74 75 72 6e 73 0a 2a 2a 20 53  int returns.** S
331f0 51 4c 49 54 45 5f 42 55 53 59 20 6f 72 20 6e 6f  QLITE_BUSY or no
33200 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  t, respectively.
33210 20 20 57 72 69 74 65 20 74 68 65 20 6e 75 6d 62    Write the numb
33220 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
33230 68 65 0a 2a 2a 20 57 41 4c 20 61 66 74 65 72 20  he.** WAL after 
33240 74 68 65 20 63 68 65 63 6b 70 6f 69 6e 74 20 69  the checkpoint i
33250 6e 74 6f 20 6d 65 6d 5b 50 33 2b 31 5d 20 61 6e  nto mem[P3+1] an
33260 64 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  d the number of 
33270 70 61 67 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20  pages.** in the 
33280 57 41 4c 20 74 68 61 74 20 68 61 76 65 20 62 65  WAL that have be
33290 65 6e 20 63 68 65 63 6b 70 6f 69 6e 74 65 64 20  en checkpointed 
332a0 61 66 74 65 72 20 74 68 65 20 63 68 65 63 6b 70  after the checkp
332b0 6f 69 6e 74 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65  oint.** complete
332c0 73 20 69 6e 74 6f 20 6d 65 6d 5b 50 33 2b 32 5d  s into mem[P3+2]
332d0 2e 20 20 48 6f 77 65 76 65 72 20 6f 6e 20 61 6e  .  However on an
332e0 20 65 72 72 6f 72 2c 20 6d 65 6d 5b 50 33 2b 31   error, mem[P3+1
332f0 5d 20 61 6e 64 0a 2a 2a 20 6d 65 6d 5b 50 33 2b  ] and.** mem[P3+
33300 32 5d 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  2] are initializ
33310 65 64 20 74 6f 20 2d 31 2e 0a 2a 2f 0a 63 61 73  ed to -1..*/.cas
33320 65 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 3a  e OP_Checkpoint:
33330 20 7b 0a 20 20 69 6e 74 20 69 3b 20 20 20 20 20   {.  int i;     
33340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33350 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
33360 6e 74 65 72 20 2a 2f 0a 20 20 69 6e 74 20 61 52  nter */.  int aR
33370 65 73 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  es[3];          
33380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 73            /* Res
33390 75 6c 74 73 20 2a 2f 0a 20 20 4d 65 6d 20 2a 70  ults */.  Mem *p
333a0 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mem;            
333b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 72 69            /* Wri
333c0 74 65 20 72 65 73 75 6c 74 73 20 68 65 72 65 20  te results here 
333d0 2a 2f 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d  */..  assert( p-
333e0 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a  >readOnly==0 );.
333f0 20 20 61 52 65 73 5b 30 5d 20 3d 20 30 3b 0a 20    aRes[0] = 0;. 
33400 20 61 52 65 73 5b 31 5d 20 3d 20 61 52 65 73 5b   aRes[1] = aRes[
33410 32 5d 20 3d 20 2d 31 3b 0a 20 20 61 73 73 65 72  2] = -1;.  asser
33420 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49  t( pOp->p2==SQLI
33430 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
33440 53 53 49 56 45 0a 20 20 20 20 20 20 20 7c 7c 20  SSIVE.       || 
33450 70 4f 70 2d 3e 70 32 3d 3d 53 51 4c 49 54 45 5f  pOp->p2==SQLITE_
33460 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 0a  CHECKPOINT_FULL.
33470 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70         || pOp->p
33480 32 3d 3d 53 51 4c 49 54 45 5f 43 48 45 43 4b 50  2==SQLITE_CHECKP
33490 4f 49 4e 54 5f 52 45 53 54 41 52 54 0a 20 20 20  OINT_RESTART.   
334a0 20 20 20 20 7c 7c 20 70 4f 70 2d 3e 70 32 3d 3d      || pOp->p2==
334b0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
334c0 54 5f 54 52 55 4e 43 41 54 45 0a 20 20 29 3b 0a  T_TRUNCATE.  );.
334d0 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 43 68    rc = sqlite3Ch
334e0 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 70 4f 70  eckpoint(db, pOp
334f0 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 32 2c 20 26  ->p1, pOp->p2, &
33500 61 52 65 73 5b 31 5d 2c 20 26 61 52 65 73 5b 32  aRes[1], &aRes[2
33510 5d 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b 0a  ]);.  if( rc ){.
33520 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
33530 54 45 5f 42 55 53 59 20 29 20 67 6f 74 6f 20 61  TE_BUSY ) goto a
33540 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f  bort_due_to_erro
33550 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49  r;.    rc = SQLI
33560 54 45 5f 4f 4b 3b 0a 20 20 20 20 61 52 65 73 5b  TE_OK;.    aRes[
33570 30 5d 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 66 6f  0] = 1;.  }.  fo
33580 72 28 69 3d 30 2c 20 70 4d 65 6d 20 3d 20 26 61  r(i=0, pMem = &a
33590 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 20 69 3c  Mem[pOp->p3]; i<
335a0 33 3b 20 69 2b 2b 2c 20 70 4d 65 6d 2b 2b 29 7b  3; i++, pMem++){
335b0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
335c0 4d 65 6d 53 65 74 49 6e 74 36 34 28 70 4d 65 6d  MemSetInt64(pMem
335d0 2c 20 28 69 36 34 29 61 52 65 73 5b 69 5d 29 3b  , (i64)aRes[i]);
335e0 0a 20 20 7d 20 20 20 20 0a 20 20 62 72 65 61 6b  .  }    .  break
335f0 3b 0a 7d 3b 20 20 0a 23 65 6e 64 69 66 0a 0a 23  ;.};  .#endif..#
33600 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33610 49 54 5f 50 52 41 47 4d 41 0a 2f 2a 20 4f 70 63  IT_PRAGMA./* Opc
33620 6f 64 65 3a 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65  ode: JournalMode
33630 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
33640 0a 2a 2a 20 43 68 61 6e 67 65 20 74 68 65 20 6a  .** Change the j
33650 6f 75 72 6e 61 6c 20 6d 6f 64 65 20 6f 66 20 64  ournal mode of d
33660 61 74 61 62 61 73 65 20 50 31 20 74 6f 20 50 33  atabase P1 to P3
33670 2e 20 50 33 20 6d 75 73 74 20 62 65 20 6f 6e 65  . P3 must be one
33680 20 6f 66 20 74 68 65 0a 2a 2a 20 50 41 47 45 52   of the.** PAGER
33690 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58  _JOURNALMODE_XXX
336a0 20 76 61 6c 75 65 73 2e 20 49 66 20 63 68 61 6e   values. If chan
336b0 67 69 6e 67 20 62 65 74 77 65 65 6e 20 74 68 65  ging between the
336c0 20 76 61 72 69 6f 75 73 20 72 6f 6c 6c 62 61 63   various rollbac
336d0 6b 0a 2a 2a 20 6d 6f 64 65 73 20 28 64 65 6c 65  k.** modes (dele
336e0 74 65 2c 20 74 72 75 6e 63 61 74 65 2c 20 70 65  te, truncate, pe
336f0 72 73 69 73 74 2c 20 6f 66 66 20 61 6e 64 20 6d  rsist, off and m
33700 65 6d 6f 72 79 29 2c 20 74 68 69 73 20 69 73 20  emory), this is 
33710 61 20 73 69 6d 70 6c 65 0a 2a 2a 20 6f 70 65 72  a simple.** oper
33720 61 74 69 6f 6e 2e 20 4e 6f 20 49 4f 20 69 73 20  ation. No IO is 
33730 72 65 71 75 69 72 65 64 2e 0a 2a 2a 0a 2a 2a 20  required..**.** 
33740 49 66 20 63 68 61 6e 67 69 6e 67 20 69 6e 74 6f  If changing into
33750 20 6f 72 20 6f 75 74 20 6f 66 20 57 41 4c 20 6d   or out of WAL m
33760 6f 64 65 20 74 68 65 20 70 72 6f 63 65 64 75 72  ode the procedur
33770 65 20 69 73 20 6d 6f 72 65 20 63 6f 6d 70 6c 69  e is more compli
33780 63 61 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 57 72 69  cated..**.** Wri
33790 74 65 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74  te a string cont
337a0 61 69 6e 69 6e 67 20 74 68 65 20 66 69 6e 61 6c  aining the final
337b0 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 74 6f   journal-mode to
337c0 20 72 65 67 69 73 74 65 72 20 50 32 2e 0a 2a 2f   register P2..*/
337d0 0a 63 61 73 65 20 4f 50 5f 4a 6f 75 72 6e 61 6c  .case OP_Journal
337e0 4d 6f 64 65 3a 20 7b 20 20 20 20 2f 2a 20 6f 75  Mode: {    /* ou
337f0 74 32 20 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70  t2 */.  Btree *p
33800 42 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Bt;             
33810 20 20 20 20 20 20 20 20 2f 2a 20 42 74 72 65 65          /* Btree
33820 20 74 6f 20 63 68 61 6e 67 65 20 6a 6f 75 72 6e   to change journ
33830 61 6c 20 6d 6f 64 65 20 6f 66 20 2a 2f 0a 20 20  al mode of */.  
33840 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 20 20  Pager *pPager;  
33850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
33860 2f 2a 20 50 61 67 65 72 20 61 73 73 6f 63 69 61  /* Pager associa
33870 74 65 64 20 77 69 74 68 20 70 42 74 20 2a 2f 0a  ted with pBt */.
33880 20 20 69 6e 74 20 65 4e 65 77 3b 20 20 20 20 20    int eNew;     
33890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
338a0 20 20 2f 2a 20 4e 65 77 20 6a 6f 75 72 6e 61 6c    /* New journal
338b0 20 6d 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 65   mode */.  int e
338c0 4f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Old;            
338d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
338e0 65 20 6f 6c 64 20 6a 6f 75 72 6e 61 6c 20 6d 6f  e old journal mo
338f0 64 65 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  de */.#ifndef SQ
33900 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
33910 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 46 69 6c  const char *zFil
33920 65 6e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  ename;          
33930 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61 74 61 62  /* Name of datab
33940 61 73 65 20 66 69 6c 65 20 66 6f 72 20 70 50 61  ase file for pPa
33950 67 65 72 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 20  ger */.#endif.. 
33960 20 70 4f 75 74 20 3d 20 6f 75 74 32 50 72 65 72   pOut = out2Prer
33970 65 6c 65 61 73 65 28 70 2c 20 70 4f 70 29 3b 0a  elease(p, pOp);.
33980 20 20 65 4e 65 77 20 3d 20 70 4f 70 2d 3e 70 33    eNew = pOp->p3
33990 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4e 65 77  ;.  assert( eNew
339a0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
339b0 4f 44 45 5f 44 45 4c 45 54 45 20 0a 20 20 20 20  ODE_DELETE .    
339c0 20 20 20 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45     || eNew==PAGE
339d0 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
339e0 55 4e 43 41 54 45 20 0a 20 20 20 20 20 20 20 7c  UNCATE .       |
339f0 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33a00 55 52 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53  URNALMODE_PERSIS
33a10 54 20 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65  T .       || eNe
33a20 77 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  w==PAGER_JOURNAL
33a30 4d 4f 44 45 5f 4f 46 46 0a 20 20 20 20 20 20 20  MODE_OFF.       
33a40 7c 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a  || eNew==PAGER_J
33a50 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52  OURNALMODE_MEMOR
33a60 59 0a 20 20 20 20 20 20 20 7c 7c 20 65 4e 65 77  Y.       || eNew
33a70 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33a80 4f 44 45 5f 57 41 4c 0a 20 20 20 20 20 20 20 7c  ODE_WAL.       |
33a90 7c 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f  | eNew==PAGER_JO
33aa0 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 0a  URNALMODE_QUERY.
33ab0 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
33ac0 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70 4f 70  Op->p1>=0 && pOp
33ad0 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29 3b 0a  ->p1<db->nDb );.
33ae0 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65 61    assert( p->rea
33af0 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 0a 20 20 70  dOnly==0 );..  p
33b00 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
33b10 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 70 50 61  ->p1].pBt;.  pPa
33b20 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
33b30 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
33b40 65 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 50 61  eOld = sqlite3Pa
33b50 67 65 72 47 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64  gerGetJournalMod
33b60 65 28 70 50 61 67 65 72 29 3b 0a 20 20 69 66 28  e(pPager);.  if(
33b70 20 65 4e 65 77 3d 3d 50 41 47 45 52 5f 4a 4f 55   eNew==PAGER_JOU
33b80 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 20 29  RNALMODE_QUERY )
33b90 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20   eNew = eOld;.  
33ba0 69 66 28 20 21 73 71 6c 69 74 65 33 50 61 67 65  if( !sqlite3Page
33bb0 72 4f 6b 54 6f 43 68 61 6e 67 65 4a 6f 75 72 6e  rOkToChangeJourn
33bc0 61 6c 4d 6f 64 65 28 70 50 61 67 65 72 29 20 29  alMode(pPager) )
33bd0 20 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 0a 23   eNew = eOld;..#
33be0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
33bf0 49 54 5f 57 41 4c 0a 20 20 7a 46 69 6c 65 6e 61  IT_WAL.  zFilena
33c00 6d 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  me = sqlite3Page
33c10 72 46 69 6c 65 6e 61 6d 65 28 70 50 61 67 65 72  rFilename(pPager
33c20 2c 20 31 29 3b 0a 0a 20 20 2f 2a 20 44 6f 20 6e  , 1);..  /* Do n
33c30 6f 74 20 61 6c 6c 6f 77 20 61 20 74 72 61 6e 73  ot allow a trans
33c40 69 74 69 6f 6e 20 74 6f 20 6a 6f 75 72 6e 61 6c  ition to journal
33c50 5f 6d 6f 64 65 3d 57 41 4c 20 66 6f 72 20 61 20  _mode=WAL for a 
33c60 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20 69 6e  database.  ** in
33c70 20 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61   temporary stora
33c80 67 65 20 6f 72 20 69 66 20 74 68 65 20 56 46 53  ge or if the VFS
33c90 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
33ca0 74 20 73 68 61 72 65 64 20 6d 65 6d 6f 72 79 20  t shared memory 
33cb0 0a 20 20 2a 2f 0a 20 20 69 66 28 20 65 4e 65 77  .  */.  if( eNew
33cc0 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ==PAGER_JOURNALM
33cd0 4f 44 45 5f 57 41 4c 0a 20 20 20 26 26 20 28 73  ODE_WAL.   && (s
33ce0 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
33cf0 46 69 6c 65 6e 61 6d 65 29 3d 3d 30 20 20 20 20  Filename)==0    
33d00 20 20 20 20 20 20 20 2f 2a 20 54 65 6d 70 20 66         /* Temp f
33d10 69 6c 65 20 2a 2f 0a 20 20 20 20 20 20 20 7c 7c  ile */.       ||
33d20 20 21 73 71 6c 69 74 65 33 50 61 67 65 72 57 61   !sqlite3PagerWa
33d30 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
33d40 72 29 29 20 20 20 2f 2a 20 4e 6f 20 73 68 61 72  r))   /* No shar
33d50 65 64 2d 6d 65 6d 6f 72 79 20 73 75 70 70 6f 72  ed-memory suppor
33d60 74 20 2a 2f 0a 20 20 29 7b 0a 20 20 20 20 65 4e  t */.  ){.    eN
33d70 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 7d 0a 0a  ew = eOld;.  }..
33d80 20 20 69 66 28 20 28 65 4e 65 77 21 3d 65 4f 6c    if( (eNew!=eOl
33d90 64 29 0a 20 20 20 26 26 20 28 65 4f 6c 64 3d 3d  d).   && (eOld==
33da0 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
33db0 45 5f 57 41 4c 20 7c 7c 20 65 4e 65 77 3d 3d 50  E_WAL || eNew==P
33dc0 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
33dd0 5f 57 41 4c 29 0a 20 20 29 7b 0a 20 20 20 20 69  _WAL).  ){.    i
33de0 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d  f( !db->autoComm
33df0 69 74 20 7c 7c 20 64 62 2d 3e 6e 56 64 62 65 52  it || db->nVdbeR
33e00 65 61 64 3e 31 20 29 7b 0a 20 20 20 20 20 20 72  ead>1 ){.      r
33e10 63 20 3d 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  c = SQLITE_ERROR
33e20 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
33e30 64 62 65 45 72 72 6f 72 28 70 2c 0a 20 20 20 20  dbeError(p,.    
33e40 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 63 68        "cannot ch
33e50 61 6e 67 65 20 25 73 20 77 61 6c 20 6d 6f 64 65  ange %s wal mode
33e60 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74   from within a t
33e70 72 61 6e 73 61 63 74 69 6f 6e 22 2c 0a 20 20 20  ransaction",.   
33e80 20 20 20 20 20 20 20 28 65 4e 65 77 3d 3d 50 41         (eNew==PA
33e90 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
33ea0 57 41 4c 20 3f 20 22 69 6e 74 6f 22 20 3a 20 22  WAL ? "into" : "
33eb0 6f 75 74 20 6f 66 22 29 0a 20 20 20 20 20 20 29  out of").      )
33ec0 3b 0a 20 20 20 20 20 20 67 6f 74 6f 20 61 62 6f  ;.      goto abo
33ed0 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
33ee0 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 0a 20 20  .    }else{. .  
33ef0 20 20 20 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41      if( eOld==PA
33f00 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
33f10 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
33f20 2a 20 49 66 20 6c 65 61 76 69 6e 67 20 57 41 4c  * If leaving WAL
33f30 20 6d 6f 64 65 2c 20 63 6c 6f 73 65 20 74 68 65   mode, close the
33f40 20 6c 6f 67 20 66 69 6c 65 2e 20 49 66 20 73 75   log file. If su
33f50 63 63 65 73 73 66 75 6c 2c 20 74 68 65 20 63 61  ccessful, the ca
33f60 6c 6c 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 6f  ll.        ** to
33f70 20 50 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 29   PagerCloseWal()
33f80 20 63 68 65 63 6b 70 6f 69 6e 74 73 20 61 6e 64   checkpoints and
33f90 20 64 65 6c 65 74 65 73 20 74 68 65 20 77 72 69   deletes the wri
33fa0 74 65 2d 61 68 65 61 64 2d 6c 6f 67 20 0a 20 20  te-ahead-log .  
33fb0 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e 20 41        ** file. A
33fc0 6e 20 45 58 43 4c 55 53 49 56 45 20 6c 6f 63 6b  n EXCLUSIVE lock
33fd0 20 6d 61 79 20 73 74 69 6c 6c 20 62 65 20 68 65   may still be he
33fe0 6c 64 20 6f 6e 20 74 68 65 20 64 61 74 61 62 61  ld on the databa
33ff0 73 65 20 66 69 6c 65 20 0a 20 20 20 20 20 20 20  se file .       
34000 20 2a 2a 20 61 66 74 65 72 20 61 20 73 75 63 63   ** after a succ
34010 65 73 73 66 75 6c 20 72 65 74 75 72 6e 2e 20 0a  essful return. .
34020 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
34030 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 50     rc = sqlite3P
34040 61 67 65 72 43 6c 6f 73 65 57 61 6c 28 70 50 61  agerCloseWal(pPa
34050 67 65 72 2c 20 64 62 29 3b 0a 20 20 20 20 20 20  ger, db);.      
34060 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
34070 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
34080 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74   sqlite3PagerSet
34090 4a 6f 75 72 6e 61 6c 4d 6f 64 65 28 70 50 61 67  JournalMode(pPag
340a0 65 72 2c 20 65 4e 65 77 29 3b 0a 20 20 20 20 20  er, eNew);.     
340b0 20 20 20 7d 0a 20 20 20 20 20 20 7d 65 6c 73 65     }.      }else
340c0 20 69 66 28 20 65 4f 6c 64 3d 3d 50 41 47 45 52   if( eOld==PAGER
340d0 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d  _JOURNALMODE_MEM
340e0 4f 52 59 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ORY ){.        /
340f0 2a 20 43 61 6e 6e 6f 74 20 74 72 61 6e 73 69 74  * Cannot transit
34100 69 6f 6e 20 64 69 72 65 63 74 6c 79 20 66 72 6f  ion directly fro
34110 6d 20 4d 45 4d 4f 52 59 20 74 6f 20 57 41 4c 2e  m MEMORY to WAL.
34120 20 20 55 73 65 20 6d 6f 64 65 20 4f 46 46 0a 20    Use mode OFF. 
34130 20 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e 20         ** as an 
34140 69 6e 74 65 72 6d 65 64 69 61 74 65 20 2a 2f 0a  intermediate */.
34150 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
34160 61 67 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f  agerSetJournalMo
34170 64 65 28 70 50 61 67 65 72 2c 20 50 41 47 45 52  de(pPager, PAGER
34180 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46  _JOURNALMODE_OFF
34190 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 0a 20 20  );.      }.  .  
341a0 20 20 20 20 2f 2a 20 4f 70 65 6e 20 61 20 74 72      /* Open a tr
341b0 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65  ansaction on the
341c0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
341d0 52 65 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68  Regardless of th
341e0 65 20 6a 6f 75 72 6e 61 6c 0a 20 20 20 20 20 20  e journal.      
341f0 2a 2a 20 6d 6f 64 65 2c 20 74 68 69 73 20 74 72  ** mode, this tr
34200 61 6e 73 61 63 74 69 6f 6e 20 61 6c 77 61 79 73  ansaction always
34210 20 75 73 65 73 20 61 20 72 6f 6c 6c 62 61 63 6b   uses a rollback
34220 20 6a 6f 75 72 6e 61 6c 2e 0a 20 20 20 20 20 20   journal..      
34230 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  */.      assert(
34240 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49   sqlite3BtreeIsI
34250 6e 54 72 61 6e 73 28 70 42 74 29 3d 3d 30 20 29  nTrans(pBt)==0 )
34260 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63 3d 3d  ;.      if( rc==
34270 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
34280 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
34290 33 42 74 72 65 65 53 65 74 56 65 72 73 69 6f 6e  3BtreeSetVersion
342a0 28 70 42 74 2c 20 28 65 4e 65 77 3d 3d 50 41 47  (pBt, (eNew==PAG
342b0 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57  ER_JOURNALMODE_W
342c0 41 4c 20 3f 20 32 20 3a 20 31 29 29 3b 0a 20 20  AL ? 2 : 1));.  
342d0 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
342e0 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65 66  #endif /* ifndef
342f0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
34300 20 2a 2f 0a 0a 20 20 69 66 28 20 72 63 20 29 20   */..  if( rc ) 
34310 65 4e 65 77 20 3d 20 65 4f 6c 64 3b 0a 20 20 65  eNew = eOld;.  e
34320 4e 65 77 20 3d 20 73 71 6c 69 74 65 33 50 61 67  New = sqlite3Pag
34330 65 72 53 65 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  erSetJournalMode
34340 28 70 50 61 67 65 72 2c 20 65 4e 65 77 29 3b 0a  (pPager, eNew);.
34350 0a 20 20 70 4f 75 74 2d 3e 66 6c 61 67 73 20 3d  .  pOut->flags =
34360 20 4d 45 4d 5f 53 74 72 7c 4d 45 4d 5f 53 74 61   MEM_Str|MEM_Sta
34370 74 69 63 7c 4d 45 4d 5f 54 65 72 6d 3b 0a 20 20  tic|MEM_Term;.  
34380 70 4f 75 74 2d 3e 7a 20 3d 20 28 63 68 61 72 20  pOut->z = (char 
34390 2a 29 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  *)sqlite3Journal
343a0 4d 6f 64 65 6e 61 6d 65 28 65 4e 65 77 29 3b 0a  Modename(eNew);.
343b0 20 20 70 4f 75 74 2d 3e 6e 20 3d 20 73 71 6c 69    pOut->n = sqli
343c0 74 65 33 53 74 72 6c 65 6e 33 30 28 70 4f 75 74  te3Strlen30(pOut
343d0 2d 3e 7a 29 3b 0a 20 20 70 4f 75 74 2d 3e 65 6e  ->z);.  pOut->en
343e0 63 20 3d 20 53 51 4c 49 54 45 5f 55 54 46 38 3b  c = SQLITE_UTF8;
343f0 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68  .  sqlite3VdbeCh
34400 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70 4f 75  angeEncoding(pOu
34410 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b 0a 20 20  t, encoding);.  
34420 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62  if( rc ) goto ab
34430 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72  ort_due_to_error
34440 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 3b 0a 23 65  ;.  break;.};.#e
34450 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34460 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f 0a 0a 23  MIT_PRAGMA */..#
34470 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
34480 54 45 5f 4f 4d 49 54 5f 56 41 43 55 55 4d 29 20  TE_OMIT_VACUUM) 
34490 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
344a0 54 45 5f 4f 4d 49 54 5f 41 54 54 41 43 48 29 0a  TE_OMIT_ATTACH).
344b0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 61 63 75 75  /* Opcode: Vacuu
344c0 6d 20 50 31 20 2a 20 2a 20 2a 20 2a 0a 2a 2a 0a  m P1 * * * *.**.
344d0 2a 2a 20 56 61 63 75 75 6d 20 74 68 65 20 65 6e  ** Vacuum the en
344e0 74 69 72 65 20 64 61 74 61 62 61 73 65 20 50 31  tire database P1
344f0 2e 20 20 50 31 20 69 73 20 30 20 66 6f 72 20 22  .  P1 is 0 for "
34500 6d 61 69 6e 22 2c 20 61 6e 64 20 32 20 6f 72 20  main", and 2 or 
34510 6d 6f 72 65 0a 2a 2a 20 66 6f 72 20 61 6e 20 61  more.** for an a
34520 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
34530 2e 20 20 54 68 65 20 22 74 65 6d 70 22 20 64 61  .  The "temp" da
34540 74 61 62 61 73 65 20 6d 61 79 20 6e 6f 74 20 62  tabase may not b
34550 65 20 76 61 63 75 75 6d 65 64 2e 0a 2a 2f 0a 63  e vacuumed..*/.c
34560 61 73 65 20 4f 50 5f 56 61 63 75 75 6d 3a 20 7b  ase OP_Vacuum: {
34570 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
34580 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 72  adOnly==0 );.  r
34590 63 20 3d 20 73 71 6c 69 74 65 33 52 75 6e 56 61  c = sqlite3RunVa
345a0 63 75 75 6d 28 26 70 2d 3e 7a 45 72 72 4d 73 67  cuum(&p->zErrMsg
345b0 2c 20 64 62 2c 20 70 4f 70 2d 3e 70 31 29 3b 0a  , db, pOp->p1);.
345c0 20 20 69 66 28 20 72 63 20 29 20 67 6f 74 6f 20    if( rc ) goto 
345d0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
345e0 6f 72 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  or;.  break;.}.#
345f0 65 6e 64 69 66 0a 0a 23 69 66 20 21 64 65 66 69  endif..#if !defi
34600 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
34610 41 55 54 4f 56 41 43 55 55 4d 29 0a 2f 2a 20 4f  AUTOVACUUM)./* O
34620 70 63 6f 64 65 3a 20 49 6e 63 72 56 61 63 75 75  pcode: IncrVacuu
34630 6d 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a 2a  m P1 P2 * * *.**
34640 0a 2a 2a 20 50 65 72 66 6f 72 6d 20 61 20 73 69  .** Perform a si
34650 6e 67 6c 65 20 73 74 65 70 20 6f 66 20 74 68 65  ngle step of the
34660 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
34670 75 75 6d 20 70 72 6f 63 65 64 75 72 65 20 6f 6e  uum procedure on
34680 0a 2a 2a 20 74 68 65 20 50 31 20 64 61 74 61 62  .** the P1 datab
34690 61 73 65 2e 20 49 66 20 74 68 65 20 76 61 63 75  ase. If the vacu
346a0 75 6d 20 68 61 73 20 66 69 6e 69 73 68 65 64 2c  um has finished,
346b0 20 6a 75 6d 70 20 74 6f 20 69 6e 73 74 72 75 63   jump to instruc
346c0 74 69 6f 6e 0a 2a 2a 20 50 32 2e 20 4f 74 68 65  tion.** P2. Othe
346d0 72 77 69 73 65 2c 20 66 61 6c 6c 20 74 68 72 6f  rwise, fall thro
346e0 75 67 68 20 74 6f 20 74 68 65 20 6e 65 78 74 20  ugh to the next 
346f0 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
34700 63 61 73 65 20 4f 50 5f 49 6e 63 72 56 61 63 75  case OP_IncrVacu
34710 75 6d 3a 20 7b 20 20 20 20 20 20 20 20 2f 2a 20  um: {        /* 
34720 6a 75 6d 70 20 2a 2f 0a 20 20 42 74 72 65 65 20  jump */.  Btree 
34730 2a 70 42 74 3b 0a 0a 20 20 61 73 73 65 72 74 28  *pBt;..  assert(
34740 20 70 4f 70 2d 3e 70 31 3e 3d 30 20 26 26 20 70   pOp->p1>=0 && p
34750 4f 70 2d 3e 70 31 3c 64 62 2d 3e 6e 44 62 20 29  Op->p1<db->nDb )
34760 3b 0a 20 20 61 73 73 65 72 74 28 20 44 62 4d 61  ;.  assert( DbMa
34770 73 6b 54 65 73 74 28 70 2d 3e 62 74 72 65 65 4d  skTest(p->btreeM
34780 61 73 6b 2c 20 70 4f 70 2d 3e 70 31 29 20 29 3b  ask, pOp->p1) );
34790 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e 72 65  .  assert( p->re
347a0 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b 0a 20 20 70  adOnly==0 );.  p
347b0 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 70 4f 70  Bt = db->aDb[pOp
347c0 2d 3e 70 31 5d 2e 70 42 74 3b 0a 20 20 72 63 20  ->p1].pBt;.  rc 
347d0 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 49 6e  = sqlite3BtreeIn
347e0 63 72 56 61 63 75 75 6d 28 70 42 74 29 3b 0a 20  crVacuum(pBt);. 
347f0 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
34800 28 72 63 3d 3d 53 51 4c 49 54 45 5f 44 4f 4e 45  (rc==SQLITE_DONE
34810 2c 32 29 3b 0a 20 20 69 66 28 20 72 63 20 29 7b  ,2);.  if( rc ){
34820 0a 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c  .    if( rc!=SQL
34830 49 54 45 5f 44 4f 4e 45 20 29 20 67 6f 74 6f 20  ITE_DONE ) goto 
34840 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
34850 6f 72 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c  or;.    rc = SQL
34860 49 54 45 5f 4f 4b 3b 0a 20 20 20 20 67 6f 74 6f  ITE_OK;.    goto
34870 20 6a 75 6d 70 5f 74 6f 5f 70 32 3b 0a 20 20 7d   jump_to_p2;.  }
34880 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
34890 69 66 0a 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 45  if../* Opcode: E
348a0 78 70 69 72 65 20 50 31 20 2a 20 2a 20 2a 20 2a  xpire P1 * * * *
348b0 0a 2a 2a 0a 2a 2a 20 43 61 75 73 65 20 70 72 65  .**.** Cause pre
348c0 63 6f 6d 70 69 6c 65 64 20 73 74 61 74 65 6d 65  compiled stateme
348d0 6e 74 73 20 74 6f 20 65 78 70 69 72 65 2e 20 20  nts to expire.  
348e0 57 68 65 6e 20 61 6e 20 65 78 70 69 72 65 64 20  When an expired 
348f0 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 20 69 73 20  statement.** is 
34900 65 78 65 63 75 74 65 64 20 75 73 69 6e 67 20 73  executed using s
34910 71 6c 69 74 65 33 5f 73 74 65 70 28 29 20 69 74  qlite3_step() it
34920 20 77 69 6c 6c 20 65 69 74 68 65 72 20 61 75 74   will either aut
34930 6f 6d 61 74 69 63 61 6c 6c 79 0a 2a 2a 20 72 65  omatically.** re
34940 70 72 65 70 61 72 65 20 69 74 73 65 6c 66 20 28  prepare itself (
34950 69 66 20 69 74 20 77 61 73 20 6f 72 69 67 69 6e  if it was origin
34960 61 6c 6c 79 20 63 72 65 61 74 65 64 20 75 73 69  ally created usi
34970 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61  ng sqlite3_prepa
34980 72 65 5f 76 32 28 29 29 0a 2a 2a 20 6f 72 20 69  re_v2()).** or i
34990 74 20 77 69 6c 6c 20 66 61 69 6c 20 77 69 74 68  t will fail with
349a0 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2e 0a   SQLITE_SCHEMA..
349b0 2a 2a 20 0a 2a 2a 20 49 66 20 50 31 20 69 73 20  ** .** If P1 is 
349c0 30 2c 20 74 68 65 6e 20 61 6c 6c 20 53 51 4c 20  0, then all SQL 
349d0 73 74 61 74 65 6d 65 6e 74 73 20 62 65 63 6f 6d  statements becom
349e0 65 20 65 78 70 69 72 65 64 2e 20 49 66 20 50 31  e expired. If P1
349f0 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 0a 2a 2a   is non-zero,.**
34a00 20 74 68 65 6e 20 6f 6e 6c 79 20 74 68 65 20 63   then only the c
34a10 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
34a20 6e 67 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20  ng statement is 
34a30 65 78 70 69 72 65 64 2e 0a 2a 2f 0a 63 61 73 65  expired..*/.case
34a40 20 4f 50 5f 45 78 70 69 72 65 3a 20 7b 0a 20 20   OP_Expire: {.  
34a50 69 66 28 20 21 70 4f 70 2d 3e 70 31 20 29 7b 0a  if( !pOp->p1 ){.
34a60 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 69 72      sqlite3Expir
34a70 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
34a80 6e 74 73 28 64 62 29 3b 0a 20 20 7d 65 6c 73 65  nts(db);.  }else
34a90 7b 0a 20 20 20 20 70 2d 3e 65 78 70 69 72 65 64  {.    p->expired
34aa0 20 3d 20 31 3b 0a 20 20 7d 0a 20 20 62 72 65 61   = 1;.  }.  brea
34ab0 6b 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20 53 51  k;.}..#ifndef SQ
34ac0 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
34ad0 5f 43 41 43 48 45 0a 2f 2a 20 4f 70 63 6f 64 65  _CACHE./* Opcode
34ae0 3a 20 54 61 62 6c 65 4c 6f 63 6b 20 50 31 20 50  : TableLock P1 P
34af0 32 20 50 33 20 50 34 20 2a 0a 2a 2a 20 53 79 6e  2 P3 P4 *.** Syn
34b00 6f 70 73 69 73 3a 20 69 44 62 3d 50 31 20 72 6f  opsis: iDb=P1 ro
34b10 6f 74 3d 50 32 20 77 72 69 74 65 3d 50 33 0a 2a  ot=P2 write=P3.*
34b20 2a 0a 2a 2a 20 4f 62 74 61 69 6e 20 61 20 6c 6f  *.** Obtain a lo
34b30 63 6b 20 6f 6e 20 61 20 70 61 72 74 69 63 75 6c  ck on a particul
34b40 61 72 20 74 61 62 6c 65 2e 20 54 68 69 73 20 69  ar table. This i
34b50 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 6f 6e  nstruction is on
34b60 6c 79 20 75 73 65 64 20 77 68 65 6e 0a 2a 2a 20  ly used when.** 
34b70 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
34b80 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61 62   feature is enab
34b90 6c 65 64 2e 20 0a 2a 2a 0a 2a 2a 20 50 31 20 69  led. .**.** P1 i
34ba0 73 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  s the index of t
34bb0 68 65 20 64 61 74 61 62 61 73 65 20 69 6e 20 73  he database in s
34bc0 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66 20  qlite3.aDb[] of 
34bd0 74 68 65 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  the database.** 
34be0 6f 6e 20 77 68 69 63 68 20 74 68 65 20 6c 6f 63  on which the loc
34bf0 6b 20 69 73 20 61 63 71 75 69 72 65 64 2e 20 20  k is acquired.  
34c00 41 20 72 65 61 64 6c 6f 63 6b 20 69 73 20 6f 62  A readlock is ob
34c10 74 61 69 6e 65 64 20 69 66 20 50 33 3d 3d 30 20  tained if P3==0 
34c20 6f 72 0a 2a 2a 20 61 20 77 72 69 74 65 20 6c 6f  or.** a write lo
34c30 63 6b 20 69 66 20 50 33 3d 3d 31 2e 0a 2a 2a 0a  ck if P3==1..**.
34c40 2a 2a 20 50 32 20 63 6f 6e 74 61 69 6e 73 20 74  ** P2 contains t
34c50 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
34c60 74 68 65 20 74 61 62 6c 65 20 74 6f 20 6c 6f 63  the table to loc
34c70 6b 2e 0a 2a 2a 0a 2a 2a 20 50 34 20 63 6f 6e 74  k..**.** P4 cont
34c80 61 69 6e 73 20 61 20 70 6f 69 6e 74 65 72 20 74  ains a pointer t
34c90 6f 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  o the name of th
34ca0 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6c 6f  e table being lo
34cb0 63 6b 65 64 2e 20 54 68 69 73 20 69 73 20 6f 6e  cked. This is on
34cc0 6c 79 0a 2a 2a 20 75 73 65 64 20 74 6f 20 67 65  ly.** used to ge
34cd0 6e 65 72 61 74 65 20 61 6e 20 65 72 72 6f 72 20  nerate an error 
34ce0 6d 65 73 73 61 67 65 20 69 66 20 74 68 65 20 6c  message if the l
34cf0 6f 63 6b 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62  ock cannot be ob
34d00 74 61 69 6e 65 64 2e 0a 2a 2f 0a 63 61 73 65 20  tained..*/.case 
34d10 4f 50 5f 54 61 62 6c 65 4c 6f 63 6b 3a 20 7b 0a  OP_TableLock: {.
34d20 20 20 75 38 20 69 73 57 72 69 74 65 4c 6f 63 6b    u8 isWriteLock
34d30 20 3d 20 28 75 38 29 70 4f 70 2d 3e 70 33 3b 0a   = (u8)pOp->p3;.
34d40 20 20 69 66 28 20 69 73 57 72 69 74 65 4c 6f 63    if( isWriteLoc
34d50 6b 20 7c 7c 20 30 3d 3d 28 64 62 2d 3e 66 6c 61  k || 0==(db->fla
34d60 67 73 26 53 51 4c 49 54 45 5f 52 65 61 64 55 6e  gs&SQLITE_ReadUn
34d70 63 6f 6d 6d 69 74 74 65 64 29 20 29 7b 0a 20 20  committed) ){.  
34d80 20 20 69 6e 74 20 70 31 20 3d 20 70 4f 70 2d 3e    int p1 = pOp->
34d90 70 31 3b 20 0a 20 20 20 20 61 73 73 65 72 74 28  p1; .    assert(
34da0 20 70 31 3e 3d 30 20 26 26 20 70 31 3c 64 62 2d   p1>=0 && p1<db-
34db0 3e 6e 44 62 20 29 3b 0a 20 20 20 20 61 73 73 65  >nDb );.    asse
34dc0 72 74 28 20 44 62 4d 61 73 6b 54 65 73 74 28 70  rt( DbMaskTest(p
34dd0 2d 3e 62 74 72 65 65 4d 61 73 6b 2c 20 70 31 29  ->btreeMask, p1)
34de0 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
34df0 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 30 20 7c  isWriteLock==0 |
34e00 7c 20 69 73 57 72 69 74 65 4c 6f 63 6b 3d 3d 31  | isWriteLock==1
34e10 20 29 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c   );.    rc = sql
34e20 69 74 65 33 42 74 72 65 65 4c 6f 63 6b 54 61 62  ite3BtreeLockTab
34e30 6c 65 28 64 62 2d 3e 61 44 62 5b 70 31 5d 2e 70  le(db->aDb[p1].p
34e40 42 74 2c 20 70 4f 70 2d 3e 70 32 2c 20 69 73 57  Bt, pOp->p2, isW
34e50 72 69 74 65 4c 6f 63 6b 29 3b 0a 20 20 20 20 69  riteLock);.    i
34e60 66 28 20 72 63 20 29 7b 0a 20 20 20 20 20 20 69  f( rc ){.      i
34e70 66 28 20 28 72 63 26 30 78 46 46 29 3d 3d 53 51  f( (rc&0xFF)==SQ
34e80 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 29 7b 0a 20  LITE_LOCKED ){. 
34e90 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61         const cha
34ea0 72 20 2a 7a 20 3d 20 70 4f 70 2d 3e 70 34 2e 7a  r *z = pOp->p4.z
34eb0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
34ec0 33 56 64 62 65 45 72 72 6f 72 28 70 2c 20 22 64  3VdbeError(p, "d
34ed0 61 74 61 62 61 73 65 20 74 61 62 6c 65 20 69 73  atabase table is
34ee0 20 6c 6f 63 6b 65 64 3a 20 25 73 22 2c 20 7a 29   locked: %s", z)
34ef0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
34f00 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
34f10 6f 5f 65 72 72 6f 72 3b 0a 20 20 20 20 7d 0a 20  o_error;.    }. 
34f20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65   }.  break;.}.#e
34f30 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
34f40 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43 48 45  MIT_SHARED_CACHE
34f50 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
34f60 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
34f70 54 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a  TABLE./* Opcode:
34f80 20 56 42 65 67 69 6e 20 2a 20 2a 20 2a 20 50 34   VBegin * * * P4
34f90 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 6d 61 79 20   *.**.** P4 may 
34fa0 62 65 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  be a pointer to 
34fb0 61 6e 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  an sqlite3_vtab 
34fc0 73 74 72 75 63 74 75 72 65 2e 20 49 66 20 73 6f  structure. If so
34fd0 2c 20 63 61 6c 6c 20 74 68 65 20 0a 2a 2a 20 78  , call the .** x
34fe0 42 65 67 69 6e 20 6d 65 74 68 6f 64 20 66 6f 72  Begin method for
34ff0 20 74 68 61 74 20 74 61 62 6c 65 2e 0a 2a 2a 0a   that table..**.
35000 2a 2a 20 41 6c 73 6f 2c 20 77 68 65 74 68 65 72  ** Also, whether
35010 20 6f 72 20 6e 6f 74 20 50 34 20 69 73 20 73 65   or not P4 is se
35020 74 2c 20 63 68 65 63 6b 20 74 68 61 74 20 74 68  t, check that th
35030 69 73 20 69 73 20 6e 6f 74 20 62 65 69 6e 67 20  is is not being 
35040 63 61 6c 6c 65 64 20 66 72 6f 6d 0a 2a 2a 20 77  called from.** w
35050 69 74 68 69 6e 20 61 20 63 61 6c 6c 62 61 63 6b  ithin a callback
35060 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61   to a virtual ta
35070 62 6c 65 20 78 53 79 6e 63 28 29 20 6d 65 74 68  ble xSync() meth
35080 6f 64 2e 20 49 66 20 69 74 20 69 73 2c 20 74 68  od. If it is, th
35090 65 20 65 72 72 6f 72 0a 2a 2a 20 63 6f 64 65 20  e error.** code 
350a0 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 53  will be set to S
350b0 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 2e 0a 2a 2f  QLITE_LOCKED..*/
350c0 0a 63 61 73 65 20 4f 50 5f 56 42 65 67 69 6e 3a  .case OP_VBegin:
350d0 20 7b 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54   {.  VTable *pVT
350e0 61 62 3b 0a 20 20 70 56 54 61 62 20 3d 20 70 4f  ab;.  pVTab = pO
350f0 70 2d 3e 70 34 2e 70 56 74 61 62 3b 0a 20 20 72  p->p4.pVtab;.  r
35100 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62 42  c = sqlite3VtabB
35110 65 67 69 6e 28 64 62 2c 20 70 56 54 61 62 29 3b  egin(db, pVTab);
35120 0a 20 20 69 66 28 20 70 56 54 61 62 20 29 20 73  .  if( pVTab ) s
35130 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72 74  qlite3VtabImport
35140 45 72 72 6d 73 67 28 70 2c 20 70 56 54 61 62 2d  Errmsg(p, pVTab-
35150 3e 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72  >pVtab);.  if( r
35160 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35170 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35180 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
35190 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
351a0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
351b0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
351c0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
351d0 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 43 72 65 61  /* Opcode: VCrea
351e0 74 65 20 50 31 20 50 32 20 2a 20 2a 20 2a 0a 2a  te P1 P2 * * *.*
351f0 2a 0a 2a 2a 20 50 32 20 69 73 20 61 20 72 65 67  *.** P2 is a reg
35200 69 73 74 65 72 20 74 68 61 74 20 68 6f 6c 64 73  ister that holds
35210 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 61 20 76   the name of a v
35220 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6e 20  irtual table in 
35230 64 61 74 61 62 61 73 65 20 0a 2a 2a 20 50 31 2e  database .** P1.
35240 20 43 61 6c 6c 20 74 68 65 20 78 43 72 65 61 74   Call the xCreat
35250 65 20 6d 65 74 68 6f 64 20 66 6f 72 20 74 68 61  e method for tha
35260 74 20 74 61 62 6c 65 2e 0a 2a 2f 0a 63 61 73 65  t table..*/.case
35270 20 4f 50 5f 56 43 72 65 61 74 65 3a 20 7b 0a 20   OP_VCreate: {. 
35280 20 4d 65 6d 20 73 4d 65 6d 3b 20 20 20 20 20 20   Mem sMem;      
35290 20 20 20 20 2f 2a 20 46 6f 72 20 73 74 6f 72 69      /* For stori
352a0 6e 67 20 74 68 65 20 72 65 63 6f 72 64 20 62 65  ng the record be
352b0 69 6e 67 20 64 65 63 6f 64 65 64 20 2a 2f 0a 20  ing decoded */. 
352c0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61   const char *zTa
352d0 62 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74  b;  /* Name of t
352e0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
352f0 20 2a 2f 0a 0a 20 20 6d 65 6d 73 65 74 28 26 73   */..  memset(&s
35300 4d 65 6d 2c 20 30 2c 20 73 69 7a 65 6f 66 28 73  Mem, 0, sizeof(s
35310 4d 65 6d 29 29 3b 0a 20 20 73 4d 65 6d 2e 64 62  Mem));.  sMem.db
35320 20 3d 20 64 62 3b 0a 20 20 2f 2a 20 42 65 63 61   = db;.  /* Beca
35330 75 73 65 20 50 32 20 69 73 20 61 6c 77 61 79 73  use P2 is always
35340 20 61 20 73 74 61 74 69 63 20 73 74 72 69 6e 67   a static string
35350 2c 20 69 74 20 69 73 20 69 6d 70 6f 73 73 69 62  , it is impossib
35360 6c 65 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  le for the.  ** 
35370 73 71 6c 69 74 65 33 56 64 62 65 4d 65 6d 43 6f  sqlite3VdbeMemCo
35380 70 79 28 29 20 74 6f 20 66 61 69 6c 20 2a 2f 0a  py() to fail */.
35390 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
353a0 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
353b0 20 4d 45 4d 5f 53 74 72 29 21 3d 30 20 29 3b 0a   MEM_Str)!=0 );.
353c0 20 20 61 73 73 65 72 74 28 20 28 61 4d 65 6d 5b    assert( (aMem[
353d0 70 4f 70 2d 3e 70 32 5d 2e 66 6c 61 67 73 20 26  pOp->p2].flags &
353e0 20 4d 45 4d 5f 53 74 61 74 69 63 29 21 3d 30 20   MEM_Static)!=0 
353f0 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
35400 33 56 64 62 65 4d 65 6d 43 6f 70 79 28 26 73 4d  3VdbeMemCopy(&sM
35410 65 6d 2c 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70  em, &aMem[pOp->p
35420 32 5d 29 3b 0a 20 20 61 73 73 65 72 74 28 20 72  2]);.  assert( r
35430 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 3b 0a  c==SQLITE_OK );.
35440 20 20 7a 54 61 62 20 3d 20 28 63 6f 6e 73 74 20    zTab = (const 
35450 63 68 61 72 2a 29 73 71 6c 69 74 65 33 5f 76 61  char*)sqlite3_va
35460 6c 75 65 5f 74 65 78 74 28 26 73 4d 65 6d 29 3b  lue_text(&sMem);
35470 0a 20 20 61 73 73 65 72 74 28 20 7a 54 61 62 20  .  assert( zTab 
35480 7c 7c 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69  || db->mallocFai
35490 6c 65 64 20 29 3b 0a 20 20 69 66 28 20 7a 54 61  led );.  if( zTa
354a0 62 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 71  b ){.    rc = sq
354b0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65  lite3VtabCallCre
354c0 61 74 65 28 64 62 2c 20 70 4f 70 2d 3e 70 31 2c  ate(db, pOp->p1,
354d0 20 7a 54 61 62 2c 20 26 70 2d 3e 7a 45 72 72 4d   zTab, &p->zErrM
354e0 73 67 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  sg);.  }.  sqlit
354f0 65 33 56 64 62 65 4d 65 6d 52 65 6c 65 61 73 65  e3VdbeMemRelease
35500 28 26 73 4d 65 6d 29 3b 0a 20 20 69 66 28 20 72  (&sMem);.  if( r
35510 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
35520 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62  ue_to_error;.  b
35530 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
35540 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
35550 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
35560 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
35570 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
35580 2f 2a 20 4f 70 63 6f 64 65 3a 20 56 44 65 73 74  /* Opcode: VDest
35590 72 6f 79 20 50 31 20 2a 20 2a 20 50 34 20 2a 0a  roy P1 * * P4 *.
355a0 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 74 68 65 20  **.** P4 is the 
355b0 6e 61 6d 65 20 6f 66 20 61 20 76 69 72 74 75 61  name of a virtua
355c0 6c 20 74 61 62 6c 65 20 69 6e 20 64 61 74 61 62  l table in datab
355d0 61 73 65 20 50 31 2e 20 20 43 61 6c 6c 20 74 68  ase P1.  Call th
355e0 65 20 78 44 65 73 74 72 6f 79 20 6d 65 74 68 6f  e xDestroy metho
355f0 64 0a 2a 2a 20 6f 66 20 74 68 61 74 20 74 61 62  d.** of that tab
35600 6c 65 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  le..*/.case OP_V
35610 44 65 73 74 72 6f 79 3a 20 7b 0a 20 20 64 62 2d  Destroy: {.  db-
35620 3e 6e 56 44 65 73 74 72 6f 79 2b 2b 3b 0a 20 20  >nVDestroy++;.  
35630 72 63 20 3d 20 73 71 6c 69 74 65 33 56 74 61 62  rc = sqlite3Vtab
35640 43 61 6c 6c 44 65 73 74 72 6f 79 28 64 62 2c 20  CallDestroy(db, 
35650 70 4f 70 2d 3e 70 31 2c 20 70 4f 70 2d 3e 70 34  pOp->p1, pOp->p4
35660 2e 7a 29 3b 0a 20 20 64 62 2d 3e 6e 56 44 65 73  .z);.  db->nVDes
35670 74 72 6f 79 2d 2d 3b 0a 20 20 69 66 28 20 72 63  troy--;.  if( rc
35680 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
35690 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72  e_to_error;.  br
356a0 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  eak;.}.#endif /*
356b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
356c0 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69  TUALTABLE */..#i
356d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
356e0 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f  T_VIRTUALTABLE./
356f0 2a 20 4f 70 63 6f 64 65 3a 20 56 4f 70 65 6e 20  * Opcode: VOpen 
35700 50 31 20 2a 20 2a 20 50 34 20 2a 0a 2a 2a 0a 2a  P1 * * P4 *.**.*
35710 2a 20 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65  * P4 is a pointe
35720 72 20 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74  r to a virtual t
35730 61 62 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20  able object, an 
35740 73 71 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72  sqlite3_vtab str
35750 75 63 74 75 72 65 2e 0a 2a 2a 20 50 31 20 69 73  ucture..** P1 is
35760 20 61 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72   a cursor number
35770 2e 20 20 54 68 69 73 20 6f 70 63 6f 64 65 20 6f  .  This opcode o
35780 70 65 6e 73 20 61 20 63 75 72 73 6f 72 20 74 6f  pens a cursor to
35790 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a 20   the virtual.** 
357a0 74 61 62 6c 65 20 61 6e 64 20 73 74 6f 72 65 73  table and stores
357b0 20 74 68 61 74 20 63 75 72 73 6f 72 20 69 6e 20   that cursor in 
357c0 50 31 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 56  P1..*/.case OP_V
357d0 4f 70 65 6e 3a 20 7b 0a 20 20 56 64 62 65 43 75  Open: {.  VdbeCu
357e0 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20 20 73 71  rsor *pCur;.  sq
357f0 6c 69 74 65 33 5f 76 74 61 62 5f 63 75 72 73 6f  lite3_vtab_curso
35800 72 20 2a 70 56 43 75 72 3b 0a 20 20 73 71 6c 69  r *pVCur;.  sqli
35810 74 65 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b  te3_vtab *pVtab;
35820 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33  .  const sqlite3
35830 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75 6c 65  _module *pModule
35840 3b 0a 0a 20 20 61 73 73 65 72 74 28 20 70 2d 3e  ;..  assert( p->
35850 62 49 73 52 65 61 64 65 72 20 29 3b 0a 20 20 70  bIsReader );.  p
35860 43 75 72 20 3d 20 30 3b 0a 20 20 70 56 43 75 72  Cur = 0;.  pVCur
35870 20 3d 20 30 3b 0a 20 20 70 56 74 61 62 20 3d 20   = 0;.  pVtab = 
35880 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d 3e 70  pOp->p4.pVtab->p
35890 56 74 61 62 3b 0a 20 20 69 66 28 20 70 56 74 61  Vtab;.  if( pVta
358a0 62 3d 3d 30 20 7c 7c 20 4e 45 56 45 52 28 70 56  b==0 || NEVER(pV
358b0 74 61 62 2d 3e 70 4d 6f 64 75 6c 65 3d 3d 30 29  tab->pModule==0)
358c0 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   ){.    rc = SQL
358d0 49 54 45 5f 4c 4f 43 4b 45 44 3b 0a 20 20 20 20  ITE_LOCKED;.    
358e0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
358f0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 70  o_error;.  }.  p
35900 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62 2d 3e  Module = pVtab->
35910 70 4d 6f 64 75 6c 65 3b 0a 20 20 72 63 20 3d 20  pModule;.  rc = 
35920 70 4d 6f 64 75 6c 65 2d 3e 78 4f 70 65 6e 28 70  pModule->xOpen(p
35930 56 74 61 62 2c 20 26 70 56 43 75 72 29 3b 0a 20  Vtab, &pVCur);. 
35940 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
35950 72 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61  rtErrmsg(p, pVta
35960 62 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67  b);.  if( rc ) g
35970 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f  oto abort_due_to
35980 5f 65 72 72 6f 72 3b 0a 0a 20 20 2f 2a 20 49 6e  _error;..  /* In
35990 69 74 69 61 6c 69 7a 65 20 73 71 6c 69 74 65 33  itialize sqlite3
359a0 5f 76 74 61 62 5f 63 75 72 73 6f 72 20 62 61 73  _vtab_cursor bas
359b0 65 20 63 6c 61 73 73 20 2a 2f 0a 20 20 70 56 43  e class */.  pVC
359c0 75 72 2d 3e 70 56 74 61 62 20 3d 20 70 56 74 61  ur->pVtab = pVta
359d0 62 3b 0a 0a 20 20 2f 2a 20 49 6e 69 74 69 61 6c  b;..  /* Initial
359e0 69 7a 65 20 76 64 62 65 20 63 75 72 73 6f 72 20  ize vdbe cursor 
359f0 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 70 43 75 72  object */.  pCur
35a00 20 3d 20 61 6c 6c 6f 63 61 74 65 43 75 72 73 6f   = allocateCurso
35a10 72 28 70 2c 20 70 4f 70 2d 3e 70 31 2c 20 30 2c  r(p, pOp->p1, 0,
35a20 20 2d 31 2c 20 43 55 52 54 59 50 45 5f 56 54 41   -1, CURTYPE_VTA
35a30 42 29 3b 0a 20 20 69 66 28 20 70 43 75 72 20 29  B);.  if( pCur )
35a40 7b 0a 20 20 20 20 70 43 75 72 2d 3e 75 63 2e 70  {.    pCur->uc.p
35a50 56 43 75 72 20 3d 20 70 56 43 75 72 3b 0a 20 20  VCur = pVCur;.  
35a60 20 20 70 56 74 61 62 2d 3e 6e 52 65 66 2b 2b 3b    pVtab->nRef++;
35a70 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 61 73  .  }else{.    as
35a80 73 65 72 74 28 20 64 62 2d 3e 6d 61 6c 6c 6f 63  sert( db->malloc
35a90 46 61 69 6c 65 64 20 29 3b 0a 20 20 20 20 70 4d  Failed );.    pM
35aa0 6f 64 75 6c 65 2d 3e 78 43 6c 6f 73 65 28 70 56  odule->xClose(pV
35ab0 43 75 72 29 3b 0a 20 20 20 20 67 6f 74 6f 20 6e  Cur);.    goto n
35ac0 6f 5f 6d 65 6d 3b 0a 20 20 7d 0a 20 20 62 72 65  o_mem;.  }.  bre
35ad0 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ak;.}.#endif /* 
35ae0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
35af0 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66  UALTABLE */..#if
35b00 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
35b10 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a  _VIRTUALTABLE./*
35b20 20 4f 70 63 6f 64 65 3a 20 56 46 69 6c 74 65 72   Opcode: VFilter
35b30 20 50 31 20 50 32 20 50 33 20 50 34 20 2a 0a 2a   P1 P2 P3 P4 *.*
35b40 2a 20 53 79 6e 6f 70 73 69 73 3a 20 69 70 6c 61  * Synopsis: ipla
35b50 6e 3d 72 5b 50 33 5d 20 7a 70 6c 61 6e 3d 27 50  n=r[P3] zplan='P
35b60 34 27 0a 2a 2a 0a 2a 2a 20 50 31 20 69 73 20 61  4'.**.** P1 is a
35b70 20 63 75 72 73 6f 72 20 6f 70 65 6e 65 64 20 75   cursor opened u
35b80 73 69 6e 67 20 56 4f 70 65 6e 2e 20 20 50 32 20  sing VOpen.  P2 
35b90 69 73 20 61 6e 20 61 64 64 72 65 73 73 20 74 6f  is an address to
35ba0 20 6a 75 6d 70 20 74 6f 20 69 66 0a 2a 2a 20 74   jump to if.** t
35bb0 68 65 20 66 69 6c 74 65 72 65 64 20 72 65 73 75  he filtered resu
35bc0 6c 74 20 73 65 74 20 69 73 20 65 6d 70 74 79 2e  lt set is empty.
35bd0 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20 65 69 74  .**.** P4 is eit
35be0 68 65 72 20 4e 55 4c 4c 20 6f 72 20 61 20 73 74  her NULL or a st
35bf0 72 69 6e 67 20 74 68 61 74 20 77 61 73 20 67 65  ring that was ge
35c00 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 78  nerated by the x
35c10 42 65 73 74 49 6e 64 65 78 0a 2a 2a 20 6d 65 74  BestIndex.** met
35c20 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
35c30 65 2e 20 20 54 68 65 20 69 6e 74 65 72 70 72 65  e.  The interpre
35c40 74 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 50 34  tation of the P4
35c50 20 73 74 72 69 6e 67 20 69 73 20 6c 65 66 74 0a   string is left.
35c60 2a 2a 20 74 6f 20 74 68 65 20 6d 6f 64 75 6c 65  ** to the module
35c70 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 2e   implementation.
35c80 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 6f 70 63 6f  .**.** This opco
35c90 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65 20 78  de invokes the x
35ca0 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 20 6f 6e  Filter method on
35cb0 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
35cc0 6c 65 20 73 70 65 63 69 66 69 65 64 0a 2a 2a 20  le specified.** 
35cd0 62 79 20 50 31 2e 20 20 54 68 65 20 69 6e 74 65  by P1.  The inte
35ce0 67 65 72 20 71 75 65 72 79 20 70 6c 61 6e 20 70  ger query plan p
35cf0 61 72 61 6d 65 74 65 72 20 74 6f 20 78 46 69 6c  arameter to xFil
35d00 74 65 72 20 69 73 20 73 74 6f 72 65 64 20 69 6e  ter is stored in
35d10 20 72 65 67 69 73 74 65 72 0a 2a 2a 20 50 33 2e   register.** P3.
35d20 20 52 65 67 69 73 74 65 72 20 50 33 2b 31 20 73   Register P3+1 s
35d30 74 6f 72 65 73 20 74 68 65 20 61 72 67 63 20 70  tores the argc p
35d40 61 72 61 6d 65 74 65 72 20 74 6f 20 62 65 20 70  arameter to be p
35d50 61 73 73 65 64 20 74 6f 20 74 68 65 0a 2a 2a 20  assed to the.** 
35d60 78 46 69 6c 74 65 72 20 6d 65 74 68 6f 64 2e 20  xFilter method. 
35d70 52 65 67 69 73 74 65 72 73 20 50 33 2b 32 2e 2e  Registers P3+2..
35d80 50 33 2b 31 2b 61 72 67 63 20 61 72 65 20 74 68  P3+1+argc are th
35d90 65 20 61 72 67 63 0a 2a 2a 20 61 64 64 69 74 69  e argc.** additi
35da0 6f 6e 61 6c 20 70 61 72 61 6d 65 74 65 72 73 20  onal parameters 
35db0 77 68 69 63 68 20 61 72 65 20 70 61 73 73 65 64  which are passed
35dc0 20 74 6f 0a 2a 2a 20 78 46 69 6c 74 65 72 20 61   to.** xFilter a
35dd0 73 20 61 72 67 76 2e 20 52 65 67 69 73 74 65 72  s argv. Register
35de0 20 50 33 2b 32 20 62 65 63 6f 6d 65 73 20 61 72   P3+2 becomes ar
35df0 67 76 5b 30 5d 20 77 68 65 6e 20 70 61 73 73 65  gv[0] when passe
35e00 64 20 74 6f 20 78 46 69 6c 74 65 72 2e 0a 2a 2a  d to xFilter..**
35e10 0a 2a 2a 20 41 20 6a 75 6d 70 20 69 73 20 6d 61  .** A jump is ma
35e20 64 65 20 74 6f 20 50 32 20 69 66 20 74 68 65 20  de to P2 if the 
35e30 72 65 73 75 6c 74 20 73 65 74 20 61 66 74 65 72  result set after
35e40 20 66 69 6c 74 65 72 69 6e 67 20 77 6f 75 6c 64   filtering would
35e50 20 62 65 20 65 6d 70 74 79 2e 0a 2a 2f 0a 63 61   be empty..*/.ca
35e60 73 65 20 4f 50 5f 56 46 69 6c 74 65 72 3a 20 7b  se OP_VFilter: {
35e70 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20     /* jump */.  
35e80 69 6e 74 20 6e 41 72 67 3b 0a 20 20 69 6e 74 20  int nArg;.  int 
35e90 69 51 75 65 72 79 3b 0a 20 20 63 6f 6e 73 74 20  iQuery;.  const 
35ea0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
35eb0 70 4d 6f 64 75 6c 65 3b 0a 20 20 4d 65 6d 20 2a  pModule;.  Mem *
35ec0 70 51 75 65 72 79 3b 0a 20 20 4d 65 6d 20 2a 70  pQuery;.  Mem *p
35ed0 41 72 67 63 3b 0a 20 20 73 71 6c 69 74 65 33 5f  Argc;.  sqlite3_
35ee0 76 74 61 62 5f 63 75 72 73 6f 72 20 2a 70 56 43  vtab_cursor *pVC
35ef0 75 72 3b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74  ur;.  sqlite3_vt
35f00 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 56 64 62  ab *pVtab;.  Vdb
35f10 65 43 75 72 73 6f 72 20 2a 70 43 75 72 3b 0a 20  eCursor *pCur;. 
35f20 20 69 6e 74 20 72 65 73 3b 0a 20 20 69 6e 74 20   int res;.  int 
35f30 69 3b 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67  i;.  Mem **apArg
35f40 3b 0a 0a 20 20 70 51 75 65 72 79 20 3d 20 26 61  ;..  pQuery = &a
35f50 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b 0a 20 20  Mem[pOp->p3];.  
35f60 70 41 72 67 63 20 3d 20 26 70 51 75 65 72 79 5b  pArgc = &pQuery[
35f70 31 5d 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e  1];.  pCur = p->
35f80 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
35f90 20 20 61 73 73 65 72 74 28 20 6d 65 6d 49 73 56    assert( memIsV
35fa0 61 6c 69 64 28 70 51 75 65 72 79 29 20 29 3b 0a  alid(pQuery) );.
35fb0 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43 45    REGISTER_TRACE
35fc0 28 70 4f 70 2d 3e 70 33 2c 20 70 51 75 65 72 79  (pOp->p3, pQuery
35fd0 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 43 75  );.  assert( pCu
35fe0 72 2d 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52  r->eCurType==CUR
35ff0 54 59 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 70  TYPE_VTAB );.  p
36000 56 43 75 72 20 3d 20 70 43 75 72 2d 3e 75 63 2e  VCur = pCur->uc.
36010 70 56 43 75 72 3b 0a 20 20 70 56 74 61 62 20 3d  pVCur;.  pVtab =
36020 20 70 56 43 75 72 2d 3e 70 56 74 61 62 3b 0a 20   pVCur->pVtab;. 
36030 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74 61 62   pModule = pVtab
36040 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 0a 20 20 2f 2a  ->pModule;..  /*
36050 20 47 72 61 62 20 74 68 65 20 69 6e 64 65 78 20   Grab the index 
36060 6e 75 6d 62 65 72 20 61 6e 64 20 61 72 67 63 20  number and argc 
36070 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20 20  parameters */.  
36080 61 73 73 65 72 74 28 20 28 70 51 75 65 72 79 2d  assert( (pQuery-
36090 3e 66 6c 61 67 73 26 4d 45 4d 5f 49 6e 74 29 21  >flags&MEM_Int)!
360a0 3d 30 20 26 26 20 70 41 72 67 63 2d 3e 66 6c 61  =0 && pArgc->fla
360b0 67 73 3d 3d 4d 45 4d 5f 49 6e 74 20 29 3b 0a 20  gs==MEM_Int );. 
360c0 20 6e 41 72 67 20 3d 20 28 69 6e 74 29 70 41 72   nArg = (int)pAr
360d0 67 63 2d 3e 75 2e 69 3b 0a 20 20 69 51 75 65 72  gc->u.i;.  iQuer
360e0 79 20 3d 20 28 69 6e 74 29 70 51 75 65 72 79 2d  y = (int)pQuery-
360f0 3e 75 2e 69 3b 0a 0a 20 20 2f 2a 20 49 6e 76 6f  >u.i;..  /* Invo
36100 6b 65 20 74 68 65 20 78 46 69 6c 74 65 72 20 6d  ke the xFilter m
36110 65 74 68 6f 64 20 2a 2f 0a 20 20 72 65 73 20 3d  ethod */.  res =
36120 20 30 3b 0a 20 20 61 70 41 72 67 20 3d 20 70 2d   0;.  apArg = p-
36130 3e 61 70 41 72 67 3b 0a 20 20 66 6f 72 28 69 20  >apArg;.  for(i 
36140 3d 20 30 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b  = 0; i<nArg; i++
36150 29 7b 0a 20 20 20 20 61 70 41 72 67 5b 69 5d 20  ){.    apArg[i] 
36160 3d 20 26 70 41 72 67 63 5b 69 2b 31 5d 3b 0a 20  = &pArgc[i+1];. 
36170 20 7d 0a 20 20 72 63 20 3d 20 70 4d 6f 64 75 6c   }.  rc = pModul
36180 65 2d 3e 78 46 69 6c 74 65 72 28 70 56 43 75 72  e->xFilter(pVCur
36190 2c 20 69 51 75 65 72 79 2c 20 70 4f 70 2d 3e 70  , iQuery, pOp->p
361a0 34 2e 7a 2c 20 6e 41 72 67 2c 20 61 70 41 72 67  4.z, nArg, apArg
361b0 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74 61 62  );.  sqlite3Vtab
361c0 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70 2c 20  ImportErrmsg(p, 
361d0 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20 72 63  pVtab);.  if( rc
361e0 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75   ) goto abort_du
361f0 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72 65  e_to_error;.  re
36200 73 20 3d 20 70 4d 6f 64 75 6c 65 2d 3e 78 45 6f  s = pModule->xEo
36210 66 28 70 56 43 75 72 29 3b 0a 20 20 70 43 75 72  f(pVCur);.  pCur
36220 2d 3e 6e 75 6c 6c 52 6f 77 20 3d 20 30 3b 0a 20  ->nullRow = 0;. 
36230 20 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e   VdbeBranchTaken
36240 28 72 65 73 21 3d 30 2c 32 29 3b 0a 20 20 69 66  (res!=0,2);.  if
36250 28 20 72 65 73 20 29 20 67 6f 74 6f 20 6a 75 6d  ( res ) goto jum
36260 70 5f 74 6f 5f 70 32 3b 0a 20 20 62 72 65 61 6b  p_to_p2;.  break
36270 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ;.}.#endif /* SQ
36280 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
36290 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23 69 66 6e 64  LTABLE */..#ifnd
362a0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
362b0 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20 4f  IRTUALTABLE./* O
362c0 70 63 6f 64 65 3a 20 56 43 6f 6c 75 6d 6e 20 50  pcode: VColumn P
362d0 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a 20 53  1 P2 P3 * *.** S
362e0 79 6e 6f 70 73 69 73 3a 20 72 5b 50 33 5d 3d 76  ynopsis: r[P3]=v
362f0 63 6f 6c 75 6d 6e 28 50 32 29 0a 2a 2a 0a 2a 2a  column(P2).**.**
36300 20 53 74 6f 72 65 20 74 68 65 20 76 61 6c 75 65   Store the value
36310 20 6f 66 20 74 68 65 20 50 32 2d 74 68 20 63 6f   of the P2-th co
36320 6c 75 6d 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 72  lumn of.** the r
36330 6f 77 20 6f 66 20 74 68 65 20 76 69 72 74 75 61  ow of the virtua
36340 6c 2d 74 61 62 6c 65 20 74 68 61 74 20 74 68 65  l-table that the
36350 20 0a 2a 2a 20 50 31 20 63 75 72 73 6f 72 20 69   .** P1 cursor i
36360 73 20 70 6f 69 6e 74 69 6e 67 20 74 6f 20 69 6e  s pointing to in
36370 74 6f 20 72 65 67 69 73 74 65 72 20 50 33 2e 0a  to register P3..
36380 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 43 6f 6c 75  */.case OP_VColu
36390 6d 6e 3a 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  mn: {.  sqlite3_
363a0 76 74 61 62 20 2a 70 56 74 61 62 3b 0a 20 20 63  vtab *pVtab;.  c
363b0 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64  onst sqlite3_mod
363c0 75 6c 65 20 2a 70 4d 6f 64 75 6c 65 3b 0a 20 20  ule *pModule;.  
363d0 4d 65 6d 20 2a 70 44 65 73 74 3b 0a 20 20 73 71  Mem *pDest;.  sq
363e0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 20 73 43  lite3_context sC
363f0 6f 6e 74 65 78 74 3b 0a 0a 20 20 56 64 62 65 43  ontext;..  VdbeC
36400 75 72 73 6f 72 20 2a 70 43 75 72 20 3d 20 70 2d  ursor *pCur = p-
36410 3e 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b  >apCsr[pOp->p1];
36420 0a 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d  .  assert( pCur-
36430 3e 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59  >eCurType==CURTY
36440 50 45 5f 56 54 41 42 20 29 3b 0a 20 20 61 73 73  PE_VTAB );.  ass
36450 65 72 74 28 20 70 4f 70 2d 3e 70 33 3e 30 20 26  ert( pOp->p3>0 &
36460 26 20 70 4f 70 2d 3e 70 33 3c 3d 28 70 2d 3e 6e  & pOp->p3<=(p->n
36470 4d 65 6d 2b 31 20 2d 20 70 2d 3e 6e 43 75 72 73  Mem+1 - p->nCurs
36480 6f 72 29 20 29 3b 0a 20 20 70 44 65 73 74 20 3d  or) );.  pDest =
36490 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 33 5d 3b   &aMem[pOp->p3];
364a0 0a 20 20 6d 65 6d 41 62 6f 75 74 54 6f 43 68 61  .  memAboutToCha
364b0 6e 67 65 28 70 2c 20 70 44 65 73 74 29 3b 0a 20  nge(p, pDest);. 
364c0 20 69 66 28 20 70 43 75 72 2d 3e 6e 75 6c 6c 52   if( pCur->nullR
364d0 6f 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65  ow ){.    sqlite
364e0 33 56 64 62 65 4d 65 6d 53 65 74 4e 75 6c 6c 28  3VdbeMemSetNull(
364f0 70 44 65 73 74 29 3b 0a 20 20 20 20 62 72 65 61  pDest);.    brea
36500 6b 3b 0a 20 20 7d 0a 20 20 70 56 74 61 62 20 3d  k;.  }.  pVtab =
36510 20 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2d   pCur->uc.pVCur-
36520 3e 70 56 74 61 62 3b 0a 20 20 70 4d 6f 64 75 6c  >pVtab;.  pModul
36530 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
36540 6c 65 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4d  le;.  assert( pM
36550 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 20 29  odule->xColumn )
36560 3b 0a 20 20 6d 65 6d 73 65 74 28 26 73 43 6f 6e  ;.  memset(&sCon
36570 74 65 78 74 2c 20 30 2c 20 73 69 7a 65 6f 66 28  text, 0, sizeof(
36580 73 43 6f 6e 74 65 78 74 29 29 3b 0a 20 20 73 43  sContext));.  sC
36590 6f 6e 74 65 78 74 2e 70 4f 75 74 20 3d 20 70 44  ontext.pOut = pD
365a0 65 73 74 3b 0a 20 20 4d 65 6d 53 65 74 54 79 70  est;.  MemSetTyp
365b0 65 46 6c 61 67 28 70 44 65 73 74 2c 20 4d 45 4d  eFlag(pDest, MEM
365c0 5f 4e 75 6c 6c 29 3b 0a 20 20 72 63 20 3d 20 70  _Null);.  rc = p
365d0 4d 6f 64 75 6c 65 2d 3e 78 43 6f 6c 75 6d 6e 28  Module->xColumn(
365e0 70 43 75 72 2d 3e 75 63 2e 70 56 43 75 72 2c 20  pCur->uc.pVCur, 
365f0 26 73 43 6f 6e 74 65 78 74 2c 20 70 4f 70 2d 3e  &sContext, pOp->
36600 70 32 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 74  p2);.  sqlite3Vt
36610 61 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 70  abImportErrmsg(p
36620 2c 20 70 56 74 61 62 29 3b 0a 20 20 69 66 28 20  , pVtab);.  if( 
36630 73 43 6f 6e 74 65 78 74 2e 69 73 45 72 72 6f 72  sContext.isError
36640 20 29 7b 0a 20 20 20 20 72 63 20 3d 20 73 43 6f   ){.    rc = sCo
36650 6e 74 65 78 74 2e 69 73 45 72 72 6f 72 3b 0a 20  ntext.isError;. 
36660 20 7d 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65   }.  sqlite3Vdbe
36670 43 68 61 6e 67 65 45 6e 63 6f 64 69 6e 67 28 70  ChangeEncoding(p
36680 44 65 73 74 2c 20 65 6e 63 6f 64 69 6e 67 29 3b  Dest, encoding);
36690 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41 43  .  REGISTER_TRAC
366a0 45 28 70 4f 70 2d 3e 70 33 2c 20 70 44 65 73 74  E(pOp->p3, pDest
366b0 29 3b 0a 20 20 55 50 44 41 54 45 5f 4d 41 58 5f  );.  UPDATE_MAX_
366c0 42 4c 4f 42 53 49 5a 45 28 70 44 65 73 74 29 3b  BLOBSIZE(pDest);
366d0 0a 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 56  ..  if( sqlite3V
366e0 64 62 65 4d 65 6d 54 6f 6f 42 69 67 28 70 44 65  dbeMemTooBig(pDe
366f0 73 74 29 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20  st) ){.    goto 
36700 74 6f 6f 5f 62 69 67 3b 0a 20 20 7d 0a 20 20 69  too_big;.  }.  i
36710 66 28 20 72 63 20 29 20 67 6f 74 6f 20 61 62 6f  f( rc ) goto abo
36720 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72 6f 72 3b  rt_due_to_error;
36730 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64  .  break;.}.#end
36740 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
36750 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20 2a  T_VIRTUALTABLE *
36760 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
36770 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
36780 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 56  BLE./* Opcode: V
36790 4e 65 78 74 20 50 31 20 50 32 20 2a 20 2a 20 2a  Next P1 P2 * * *
367a0 0a 2a 2a 0a 2a 2a 20 41 64 76 61 6e 63 65 20 76  .**.** Advance v
367b0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 50 31 20  irtual table P1 
367c0 74 6f 20 74 68 65 20 6e 65 78 74 20 72 6f 77 20  to the next row 
367d0 69 6e 20 69 74 73 20 72 65 73 75 6c 74 20 73 65  in its result se
367e0 74 20 61 6e 64 0a 2a 2a 20 6a 75 6d 70 20 74 6f  t and.** jump to
367f0 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e   instruction P2.
36800 20 20 4f 72 2c 20 69 66 20 74 68 65 20 76 69 72    Or, if the vir
36810 74 75 61 6c 20 74 61 62 6c 65 20 68 61 73 20 72  tual table has r
36820 65 61 63 68 65 64 0a 2a 2a 20 74 68 65 20 65 6e  eached.** the en
36830 64 20 6f 66 20 69 74 73 20 72 65 73 75 6c 74 20  d of its result 
36840 73 65 74 2c 20 74 68 65 6e 20 66 61 6c 6c 20 74  set, then fall t
36850 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6e 65  hrough to the ne
36860 78 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a  xt instruction..
36870 2a 2f 0a 63 61 73 65 20 4f 50 5f 56 4e 65 78 74  */.case OP_VNext
36880 3a 20 7b 20 20 20 2f 2a 20 6a 75 6d 70 20 2a 2f  : {   /* jump */
36890 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62 20  .  sqlite3_vtab 
368a0 2a 70 56 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20  *pVtab;.  const 
368b0 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a  sqlite3_module *
368c0 70 4d 6f 64 75 6c 65 3b 0a 20 20 69 6e 74 20 72  pModule;.  int r
368d0 65 73 3b 0a 20 20 56 64 62 65 43 75 72 73 6f 72  es;.  VdbeCursor
368e0 20 2a 70 43 75 72 3b 0a 0a 20 20 72 65 73 20 3d   *pCur;..  res =
368f0 20 30 3b 0a 20 20 70 43 75 72 20 3d 20 70 2d 3e   0;.  pCur = p->
36900 61 70 43 73 72 5b 70 4f 70 2d 3e 70 31 5d 3b 0a  apCsr[pOp->p1];.
36910 20 20 61 73 73 65 72 74 28 20 70 43 75 72 2d 3e    assert( pCur->
36920 65 43 75 72 54 79 70 65 3d 3d 43 55 52 54 59 50  eCurType==CURTYP
36930 45 5f 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20  E_VTAB );.  if( 
36940 70 43 75 72 2d 3e 6e 75 6c 6c 52 6f 77 20 29 7b  pCur->nullRow ){
36950 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
36960 20 20 70 56 74 61 62 20 3d 20 70 43 75 72 2d 3e    pVtab = pCur->
36970 75 63 2e 70 56 43 75 72 2d 3e 70 56 74 61 62 3b  uc.pVCur->pVtab;
36980 0a 20 20 70 4d 6f 64 75 6c 65 20 3d 20 70 56 74  .  pModule = pVt
36990 61 62 2d 3e 70 4d 6f 64 75 6c 65 3b 0a 20 20 61  ab->pModule;.  a
369a0 73 73 65 72 74 28 20 70 4d 6f 64 75 6c 65 2d 3e  ssert( pModule->
369b0 78 4e 65 78 74 20 29 3b 0a 0a 20 20 2f 2a 20 49  xNext );..  /* I
369c0 6e 76 6f 6b 65 20 74 68 65 20 78 4e 65 78 74 28  nvoke the xNext(
369d0 29 20 6d 65 74 68 6f 64 20 6f 66 20 74 68 65 20  ) method of the 
369e0 6d 6f 64 75 6c 65 2e 20 54 68 65 72 65 20 69 73  module. There is
369f0 20 6e 6f 20 77 61 79 20 66 6f 72 20 74 68 65 0a   no way for the.
36a00 20 20 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20    ** underlying 
36a10 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74  implementation t
36a20 6f 20 72 65 74 75 72 6e 20 61 6e 20 65 72 72 6f  o return an erro
36a30 72 20 69 66 20 6f 6e 65 20 6f 63 63 75 72 73 20  r if one occurs 
36a40 64 75 72 69 6e 67 0a 20 20 2a 2a 20 78 4e 65 78  during.  ** xNex
36a50 74 28 29 2e 20 49 6e 73 74 65 61 64 2c 20 69 66  t(). Instead, if
36a60 20 61 6e 20 65 72 72 6f 72 20 6f 63 63 75 72 73   an error occurs
36a70 2c 20 74 72 75 65 20 69 73 20 72 65 74 75 72 6e  , true is return
36a80 65 64 20 28 69 6e 64 69 63 61 74 69 6e 67 20 74  ed (indicating t
36a90 68 61 74 20 0a 20 20 2a 2a 20 64 61 74 61 20 69  hat .  ** data i
36aa0 73 20 61 76 61 69 6c 61 62 6c 65 29 20 61 6e 64  s available) and
36ab0 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20   the error code 
36ac0 72 65 74 75 72 6e 65 64 20 77 68 65 6e 20 78 43  returned when xC
36ad0 6f 6c 75 6d 6e 20 6f 72 0a 20 20 2a 2a 20 73 6f  olumn or.  ** so
36ae0 6d 65 20 6f 74 68 65 72 20 6d 65 74 68 6f 64 20  me other method 
36af0 69 73 20 6e 65 78 74 20 69 6e 76 6f 6b 65 64 20  is next invoked 
36b00 6f 6e 20 74 68 65 20 73 61 76 65 20 76 69 72 74  on the save virt
36b10 75 61 6c 20 74 61 62 6c 65 20 63 75 72 73 6f 72  ual table cursor
36b20 2e 0a 20 20 2a 2f 0a 20 20 72 63 20 3d 20 70 4d  ..  */.  rc = pM
36b30 6f 64 75 6c 65 2d 3e 78 4e 65 78 74 28 70 43 75  odule->xNext(pCu
36b40 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
36b50 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36b60 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
36b70 29 3b 0a 20 20 69 66 28 20 72 63 20 29 20 67 6f  );.  if( rc ) go
36b80 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f  to abort_due_to_
36b90 65 72 72 6f 72 3b 0a 20 20 72 65 73 20 3d 20 70  error;.  res = p
36ba0 4d 6f 64 75 6c 65 2d 3e 78 45 6f 66 28 70 43 75  Module->xEof(pCu
36bb0 72 2d 3e 75 63 2e 70 56 43 75 72 29 3b 0a 20 20  r->uc.pVCur);.  
36bc0 56 64 62 65 42 72 61 6e 63 68 54 61 6b 65 6e 28  VdbeBranchTaken(
36bd0 21 72 65 73 2c 32 29 3b 0a 20 20 69 66 28 20 21  !res,2);.  if( !
36be0 72 65 73 20 29 7b 0a 20 20 20 20 2f 2a 20 49 66  res ){.    /* If
36bf0 20 74 68 65 72 65 20 69 73 20 64 61 74 61 2c 20   there is data, 
36c00 6a 75 6d 70 20 74 6f 20 50 32 20 2a 2f 0a 20 20  jump to P2 */.  
36c10 20 20 67 6f 74 6f 20 6a 75 6d 70 5f 74 6f 5f 70    goto jump_to_p
36c20 32 5f 61 6e 64 5f 63 68 65 63 6b 5f 66 6f 72 5f  2_and_check_for_
36c30 69 6e 74 65 72 72 75 70 74 3b 0a 20 20 7d 0a 20  interrupt;.  }. 
36c40 20 67 6f 74 6f 20 63 68 65 63 6b 5f 66 6f 72 5f   goto check_for_
36c50 69 6e 74 65 72 72 75 70 74 3b 0a 7d 0a 23 65 6e  interrupt;.}.#en
36c60 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
36c70 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 20  IT_VIRTUALTABLE 
36c80 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
36c90 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
36ca0 41 42 4c 45 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20  ABLE./* Opcode: 
36cb0 56 52 65 6e 61 6d 65 20 50 31 20 2a 20 2a 20 50  VRename P1 * * P
36cc0 34 20 2a 0a 2a 2a 0a 2a 2a 20 50 34 20 69 73 20  4 *.**.** P4 is 
36cd0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 76  a pointer to a v
36ce0 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6f 62 6a  irtual table obj
36cf0 65 63 74 2c 20 61 6e 20 73 71 6c 69 74 65 33 5f  ect, an sqlite3_
36d00 76 74 61 62 20 73 74 72 75 63 74 75 72 65 2e 0a  vtab structure..
36d10 2a 2a 20 54 68 69 73 20 6f 70 63 6f 64 65 20 69  ** This opcode i
36d20 6e 76 6f 6b 65 73 20 74 68 65 20 63 6f 72 72 65  nvokes the corre
36d30 73 70 6f 6e 64 69 6e 67 20 78 52 65 6e 61 6d 65  sponding xRename
36d40 20 6d 65 74 68 6f 64 2e 20 54 68 65 20 76 61 6c   method. The val
36d50 75 65 0a 2a 2a 20 69 6e 20 72 65 67 69 73 74 65  ue.** in registe
36d60 72 20 50 31 20 69 73 20 70 61 73 73 65 64 20 61  r P1 is passed a
36d70 73 20 74 68 65 20 7a 4e 61 6d 65 20 61 72 67 75  s the zName argu
36d80 6d 65 6e 74 20 74 6f 20 74 68 65 20 78 52 65 6e  ment to the xRen
36d90 61 6d 65 20 6d 65 74 68 6f 64 2e 0a 2a 2f 0a 63  ame method..*/.c
36da0 61 73 65 20 4f 50 5f 56 52 65 6e 61 6d 65 3a 20  ase OP_VRename: 
36db0 7b 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  {.  sqlite3_vtab
36dc0 20 2a 70 56 74 61 62 3b 0a 20 20 4d 65 6d 20 2a   *pVtab;.  Mem *
36dd0 70 4e 61 6d 65 3b 0a 0a 20 20 70 56 74 61 62 20  pName;..  pVtab 
36de0 3d 20 70 4f 70 2d 3e 70 34 2e 70 56 74 61 62 2d  = pOp->p4.pVtab-
36df0 3e 70 56 74 61 62 3b 0a 20 20 70 4e 61 6d 65 20  >pVtab;.  pName 
36e00 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e 70 31 5d  = &aMem[pOp->p1]
36e10 3b 0a 20 20 61 73 73 65 72 74 28 20 70 56 74 61  ;.  assert( pVta
36e20 62 2d 3e 70 4d 6f 64 75 6c 65 2d 3e 78 52 65 6e  b->pModule->xRen
36e30 61 6d 65 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ame );.  assert(
36e40 20 6d 65 6d 49 73 56 61 6c 69 64 28 70 4e 61 6d   memIsValid(pNam
36e50 65 29 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  e) );.  assert( 
36e60 70 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29  p->readOnly==0 )
36e70 3b 0a 20 20 52 45 47 49 53 54 45 52 5f 54 52 41  ;.  REGISTER_TRA
36e80 43 45 28 70 4f 70 2d 3e 70 31 2c 20 70 4e 61 6d  CE(pOp->p1, pNam
36e90 65 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70 4e  e);.  assert( pN
36ea0 61 6d 65 2d 3e 66 6c 61 67 73 20 26 20 4d 45 4d  ame->flags & MEM
36eb0 5f 53 74 72 20 29 3b 0a 20 20 74 65 73 74 63 61  _Str );.  testca
36ec0 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d 3d  se( pName->enc==
36ed0 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
36ee0 20 74 65 73 74 63 61 73 65 28 20 70 4e 61 6d 65   testcase( pName
36ef0 2d 3e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ->enc==SQLITE_UT
36f00 46 31 36 42 45 20 29 3b 0a 20 20 74 65 73 74 63  F16BE );.  testc
36f10 61 73 65 28 20 70 4e 61 6d 65 2d 3e 65 6e 63 3d  ase( pName->enc=
36f20 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
36f30 29 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  );.  rc = sqlite
36f40 33 56 64 62 65 43 68 61 6e 67 65 45 6e 63 6f 64  3VdbeChangeEncod
36f50 69 6e 67 28 70 4e 61 6d 65 2c 20 53 51 4c 49 54  ing(pName, SQLIT
36f60 45 5f 55 54 46 38 29 3b 0a 20 20 69 66 28 20 72  E_UTF8);.  if( r
36f70 63 20 29 20 67 6f 74 6f 20 61 62 6f 72 74 5f 64  c ) goto abort_d
36f80 75 65 5f 74 6f 5f 65 72 72 6f 72 3b 0a 20 20 72  ue_to_error;.  r
36f90 63 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  c = pVtab->pModu
36fa0 6c 65 2d 3e 78 52 65 6e 61 6d 65 28 70 56 74 61  le->xRename(pVta
36fb0 62 2c 20 70 4e 61 6d 65 2d 3e 7a 29 3b 0a 20 20  b, pName->z);.  
36fc0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
36fd0 74 45 72 72 6d 73 67 28 70 2c 20 70 56 74 61 62  tErrmsg(p, pVtab
36fe0 29 3b 0a 20 20 70 2d 3e 65 78 70 69 72 65 64 20  );.  p->expired 
36ff0 3d 20 30 3b 0a 20 20 69 66 28 20 72 63 20 29 20  = 0;.  if( rc ) 
37000 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37010 6f 5f 65 72 72 6f 72 3b 0a 20 20 62 72 65 61 6b  o_error;.  break
37020 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  ;.}.#endif..#ifn
37030 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
37040 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 2f 2a 20  VIRTUALTABLE./* 
37050 4f 70 63 6f 64 65 3a 20 56 55 70 64 61 74 65 20  Opcode: VUpdate 
37060 50 31 20 50 32 20 50 33 20 50 34 20 50 35 0a 2a  P1 P2 P3 P4 P5.*
37070 2a 20 53 79 6e 6f 70 73 69 73 3a 20 64 61 74 61  * Synopsis: data
37080 3d 72 5b 50 33 40 50 32 5d 0a 2a 2a 0a 2a 2a 20  =r[P3@P2].**.** 
37090 50 34 20 69 73 20 61 20 70 6f 69 6e 74 65 72 20  P4 is a pointer 
370a0 74 6f 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  to a virtual tab
370b0 6c 65 20 6f 62 6a 65 63 74 2c 20 61 6e 20 73 71  le object, an sq
370c0 6c 69 74 65 33 5f 76 74 61 62 20 73 74 72 75 63  lite3_vtab struc
370d0 74 75 72 65 2e 0a 2a 2a 20 54 68 69 73 20 6f 70  ture..** This op
370e0 63 6f 64 65 20 69 6e 76 6f 6b 65 73 20 74 68 65  code invokes the
370f0 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 78   corresponding x
37100 55 70 64 61 74 65 20 6d 65 74 68 6f 64 2e 20 50  Update method. P
37110 32 20 76 61 6c 75 65 73 0a 2a 2a 20 61 72 65 20  2 values.** are 
37120 63 6f 6e 74 69 67 75 6f 75 73 20 6d 65 6d 6f 72  contiguous memor
37130 79 20 63 65 6c 6c 73 20 73 74 61 72 74 69 6e 67  y cells starting
37140 20 61 74 20 50 33 20 74 6f 20 70 61 73 73 20 74   at P3 to pass t
37150 6f 20 74 68 65 20 78 55 70 64 61 74 65 20 0a 2a  o the xUpdate .*
37160 2a 20 69 6e 76 6f 63 61 74 69 6f 6e 2e 20 54 68  * invocation. Th
37170 65 20 76 61 6c 75 65 20 69 6e 20 72 65 67 69 73  e value in regis
37180 74 65 72 20 28 50 33 2b 50 32 2d 31 29 20 63 6f  ter (P3+P2-1) co
37190 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
371a0 20 0a 2a 2a 20 70 32 74 68 20 65 6c 65 6d 65 6e   .** p2th elemen
371b0 74 20 6f 66 20 74 68 65 20 61 72 67 76 20 61 72  t of the argv ar
371c0 72 61 79 20 70 61 73 73 65 64 20 74 6f 20 78 55  ray passed to xU
371d0 70 64 61 74 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  pdate..**.** The
371e0 20 78 55 70 64 61 74 65 20 6d 65 74 68 6f 64 20   xUpdate method 
371f0 77 69 6c 6c 20 64 6f 20 61 20 44 45 4c 45 54 45  will do a DELETE
37200 20 6f 72 20 61 6e 20 49 4e 53 45 52 54 20 6f 72   or an INSERT or
37210 20 62 6f 74 68 2e 0a 2a 2a 20 54 68 65 20 61 72   both..** The ar
37220 67 76 5b 30 5d 20 65 6c 65 6d 65 6e 74 20 28 77  gv[0] element (w
37230 68 69 63 68 20 63 6f 72 72 65 73 70 6f 6e 64 73  hich corresponds
37240 20 74 6f 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20   to memory cell 
37250 50 33 29 0a 2a 2a 20 69 73 20 74 68 65 20 72 6f  P3).** is the ro
37260 77 69 64 20 6f 66 20 61 20 72 6f 77 20 74 6f 20  wid of a row to 
37270 64 65 6c 65 74 65 2e 20 20 49 66 20 61 72 67 76  delete.  If argv
37280 5b 30 5d 20 69 73 20 4e 55 4c 4c 20 74 68 65 6e  [0] is NULL then
37290 20 6e 6f 20 0a 2a 2a 20 64 65 6c 65 74 69 6f 6e   no .** deletion
372a0 20 6f 63 63 75 72 73 2e 20 20 54 68 65 20 61 72   occurs.  The ar
372b0 67 76 5b 31 5d 20 65 6c 65 6d 65 6e 74 20 69 73  gv[1] element is
372c0 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68   the rowid of th
372d0 65 20 6e 65 77 20 0a 2a 2a 20 72 6f 77 2e 20 20  e new .** row.  
372e0 54 68 69 73 20 63 61 6e 20 62 65 20 4e 55 4c 4c  This can be NULL
372f0 20 74 6f 20 68 61 76 65 20 74 68 65 20 76 69 72   to have the vir
37300 74 75 61 6c 20 74 61 62 6c 65 20 73 65 6c 65 63  tual table selec
37310 74 20 74 68 65 20 6e 65 77 20 0a 2a 2a 20 72 6f  t the new .** ro
37320 77 69 64 20 66 6f 72 20 69 74 73 65 6c 66 2e 20  wid for itself. 
37330 20 54 68 65 20 73 75 62 73 65 71 75 65 6e 74 20   The subsequent 
37340 65 6c 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  elements in the 
37350 61 72 72 61 79 20 61 72 65 20 0a 2a 2a 20 74 68  array are .** th
37360 65 20 76 61 6c 75 65 73 20 6f 66 20 63 6f 6c 75  e values of colu
37370 6d 6e 73 20 69 6e 20 74 68 65 20 6e 65 77 20 72  mns in the new r
37380 6f 77 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 50 32 3d  ow..**.** If P2=
37390 3d 31 20 74 68 65 6e 20 6e 6f 20 69 6e 73 65 72  =1 then no inser
373a0 74 20 69 73 20 70 65 72 66 6f 72 6d 65 64 2e 20  t is performed. 
373b0 20 61 72 67 76 5b 30 5d 20 69 73 20 74 68 65 20   argv[0] is the 
373c0 72 6f 77 69 64 20 6f 66 0a 2a 2a 20 61 20 72 6f  rowid of.** a ro
373d0 77 20 74 6f 20 64 65 6c 65 74 65 2e 0a 2a 2a 0a  w to delete..**.
373e0 2a 2a 20 50 31 20 69 73 20 61 20 62 6f 6f 6c 65  ** P1 is a boole
373f0 61 6e 20 66 6c 61 67 2e 20 49 66 20 69 74 20 69  an flag. If it i
37400 73 20 73 65 74 20 74 6f 20 74 72 75 65 20 61 6e  s set to true an
37410 64 20 74 68 65 20 78 55 70 64 61 74 65 20 63 61  d the xUpdate ca
37420 6c 6c 0a 2a 2a 20 69 73 20 73 75 63 63 65 73 73  ll.** is success
37430 66 75 6c 2c 20 74 68 65 6e 20 74 68 65 20 76 61  ful, then the va
37440 6c 75 65 20 72 65 74 75 72 6e 65 64 20 62 79 20  lue returned by 
37450 73 71 6c 69 74 65 33 5f 6c 61 73 74 5f 69 6e 73  sqlite3_last_ins
37460 65 72 74 5f 72 6f 77 69 64 28 29 20 0a 2a 2a 20  ert_rowid() .** 
37470 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 76 61  is set to the va
37480 6c 75 65 20 6f 66 20 74 68 65 20 72 6f 77 69 64  lue of the rowid
37490 20 66 6f 72 20 74 68 65 20 72 6f 77 20 6a 75 73   for the row jus
374a0 74 20 69 6e 73 65 72 74 65 64 2e 0a 2a 2a 0a 2a  t inserted..**.*
374b0 2a 20 50 35 20 69 73 20 74 68 65 20 65 72 72 6f  * P5 is the erro
374c0 72 20 61 63 74 69 6f 6e 73 20 28 4f 45 5f 52 65  r actions (OE_Re
374d0 70 6c 61 63 65 2c 20 4f 45 5f 46 61 69 6c 2c 20  place, OE_Fail, 
374e0 4f 45 5f 49 67 6e 6f 72 65 2c 20 65 74 63 29 20  OE_Ignore, etc) 
374f0 74 6f 0a 2a 2a 20 61 70 70 6c 79 20 69 6e 20 74  to.** apply in t
37500 68 65 20 63 61 73 65 20 6f 66 20 61 20 63 6f 6e  he case of a con
37510 73 74 72 61 69 6e 74 20 66 61 69 6c 75 72 65 20  straint failure 
37520 6f 6e 20 61 6e 20 69 6e 73 65 72 74 20 6f 72 20  on an insert or 
37530 75 70 64 61 74 65 2e 0a 2a 2f 0a 63 61 73 65 20  update..*/.case 
37540 4f 50 5f 56 55 70 64 61 74 65 3a 20 7b 0a 20 20  OP_VUpdate: {.  
37550 73 71 6c 69 74 65 33 5f 76 74 61 62 20 2a 70 56  sqlite3_vtab *pV
37560 74 61 62 3b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  tab;.  const sql
37570 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
37580 64 75 6c 65 3b 0a 20 20 69 6e 74 20 6e 41 72 67  dule;.  int nArg
37590 3b 0a 20 20 69 6e 74 20 69 3b 0a 20 20 73 71 6c  ;.  int i;.  sql
375a0 69 74 65 5f 69 6e 74 36 34 20 72 6f 77 69 64 3b  ite_int64 rowid;
375b0 0a 20 20 4d 65 6d 20 2a 2a 61 70 41 72 67 3b 0a  .  Mem **apArg;.
375c0 20 20 4d 65 6d 20 2a 70 58 3b 0a 0a 20 20 61 73    Mem *pX;..  as
375d0 73 65 72 74 28 20 70 4f 70 2d 3e 70 32 3d 3d 31  sert( pOp->p2==1
375e0 20 20 20 20 20 20 20 20 7c 7c 20 70 4f 70 2d 3e          || pOp->
375f0 70 35 3d 3d 4f 45 5f 46 61 69 6c 20 20 20 7c 7c  p5==OE_Fail   ||
37600 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 52 6f 6c   pOp->p5==OE_Rol
37610 6c 62 61 63 6b 20 0a 20 20 20 20 20 20 20 7c 7c  lback .       ||
37620 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f 41 62 6f   pOp->p5==OE_Abo
37630 72 74 20 7c 7c 20 70 4f 70 2d 3e 70 35 3d 3d 4f  rt || pOp->p5==O
37640 45 5f 49 67 6e 6f 72 65 20 7c 7c 20 70 4f 70 2d  E_Ignore || pOp-
37650 3e 70 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 0a  >p5==OE_Replace.
37660 20 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 70    );.  assert( p
37670 2d 3e 72 65 61 64 4f 6e 6c 79 3d 3d 30 20 29 3b  ->readOnly==0 );
37680 0a 20 20 70 56 74 61 62 20 3d 20 70 4f 70 2d 3e  .  pVtab = pOp->
37690 70 34 2e 70 56 74 61 62 2d 3e 70 56 74 61 62 3b  p4.pVtab->pVtab;
376a0 0a 20 20 69 66 28 20 70 56 74 61 62 3d 3d 30 20  .  if( pVtab==0 
376b0 7c 7c 20 4e 45 56 45 52 28 70 56 74 61 62 2d 3e  || NEVER(pVtab->
376c0 70 4d 6f 64 75 6c 65 3d 3d 30 29 20 29 7b 0a 20  pModule==0) ){. 
376d0 20 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4c     rc = SQLITE_L
376e0 4f 43 4b 45 44 3b 0a 20 20 20 20 67 6f 74 6f 20  OCKED;.    goto 
376f0 61 62 6f 72 74 5f 64 75 65 5f 74 6f 5f 65 72 72  abort_due_to_err
37700 6f 72 3b 0a 20 20 7d 0a 20 20 70 4d 6f 64 75 6c  or;.  }.  pModul
37710 65 20 3d 20 70 56 74 61 62 2d 3e 70 4d 6f 64 75  e = pVtab->pModu
37720 6c 65 3b 0a 20 20 6e 41 72 67 20 3d 20 70 4f 70  le;.  nArg = pOp
37730 2d 3e 70 32 3b 0a 20 20 61 73 73 65 72 74 28 20  ->p2;.  assert( 
37740 70 4f 70 2d 3e 70 34 74 79 70 65 3d 3d 50 34 5f  pOp->p4type==P4_
37750 56 54 41 42 20 29 3b 0a 20 20 69 66 28 20 41 4c  VTAB );.  if( AL
37760 57 41 59 53 28 70 4d 6f 64 75 6c 65 2d 3e 78 55  WAYS(pModule->xU
37770 70 64 61 74 65 29 20 29 7b 0a 20 20 20 20 75 38  pdate) ){.    u8
37780 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20   vtabOnConflict 
37790 3d 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e 66  = db->vtabOnConf
377a0 6c 69 63 74 3b 0a 20 20 20 20 61 70 41 72 67 20  lict;.    apArg 
377b0 3d 20 70 2d 3e 61 70 41 72 67 3b 0a 20 20 20 20  = p->apArg;.    
377c0 70 58 20 3d 20 26 61 4d 65 6d 5b 70 4f 70 2d 3e  pX = &aMem[pOp->
377d0 70 33 5d 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  p3];.    for(i=0
377e0 3b 20 69 3c 6e 41 72 67 3b 20 69 2b 2b 29 7b 0a  ; i<nArg; i++){.
377f0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 6d 65        assert( me
37800 6d 49 73 56 61 6c 69 64 28 70 58 29 20 29 3b 0a  mIsValid(pX) );.
37810 20 20 20 20 20 20 6d 65 6d 41 62 6f 75 74 54 6f        memAboutTo
37820 43 68 61 6e 67 65 28 70 2c 20 70 58 29 3b 0a 20  Change(p, pX);. 
37830 20 20 20 20 20 61 70 41 72 67 5b 69 5d 20 3d 20       apArg[i] = 
37840 70 58 3b 0a 20 20 20 20 20 20 70 58 2b 2b 3b 0a  pX;.      pX++;.
37850 20 20 20 20 7d 0a 20 20 20 20 64 62 2d 3e 76 74      }.    db->vt
37860 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 20 3d 20 70  abOnConflict = p
37870 4f 70 2d 3e 70 35 3b 0a 20 20 20 20 72 63 20 3d  Op->p5;.    rc =
37880 20 70 4d 6f 64 75 6c 65 2d 3e 78 55 70 64 61 74   pModule->xUpdat
37890 65 28 70 56 74 61 62 2c 20 6e 41 72 67 2c 20 61  e(pVtab, nArg, a
378a0 70 41 72 67 2c 20 26 72 6f 77 69 64 29 3b 0a 20  pArg, &rowid);. 
378b0 20 20 20 64 62 2d 3e 76 74 61 62 4f 6e 43 6f 6e     db->vtabOnCon
378c0 66 6c 69 63 74 20 3d 20 76 74 61 62 4f 6e 43 6f  flict = vtabOnCo
378d0 6e 66 6c 69 63 74 3b 0a 20 20 20 20 73 71 6c 69  nflict;.    sqli
378e0 74 65 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72  te3VtabImportErr
378f0 6d 73 67 28 70 2c 20 70 56 74 61 62 29 3b 0a 20  msg(p, pVtab);. 
37900 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
37910 45 5f 4f 4b 20 26 26 20 70 4f 70 2d 3e 70 31 20  E_OK && pOp->p1 
37920 29 7b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  ){.      assert(
37930 20 6e 41 72 67 3e 31 20 26 26 20 61 70 41 72 67   nArg>1 && apArg
37940 5b 30 5d 20 26 26 20 28 61 70 41 72 67 5b 30 5d  [0] && (apArg[0]
37950 2d 3e 66 6c 61 67 73 26 4d 45 4d 5f 4e 75 6c 6c  ->flags&MEM_Null
37960 29 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6c  ) );.      db->l
37970 61 73 74 52 6f 77 69 64 20 3d 20 6c 61 73 74 52  astRowid = lastR
37980 6f 77 69 64 20 3d 20 72 6f 77 69 64 3b 0a 20 20  owid = rowid;.  
37990 20 20 7d 0a 20 20 20 20 69 66 28 20 28 72 63 26    }.    if( (rc&
379a0 30 78 66 66 29 3d 3d 53 51 4c 49 54 45 5f 43 4f  0xff)==SQLITE_CO
379b0 4e 53 54 52 41 49 4e 54 20 26 26 20 70 4f 70 2d  NSTRAINT && pOp-
379c0 3e 70 34 2e 70 56 74 61 62 2d 3e 62 43 6f 6e 73  >p4.pVtab->bCons
379d0 74 72 61 69 6e 74 20 29 7b 0a 20 20 20 20 20 20  traint ){.      
379e0 69 66 28 20 70 4f 70 2d 3e 70 35 3d 3d 4f 45 5f  if( pOp->p5==OE_
379f0 49 67 6e 6f 72 65 20 29 7b 0a 20 20 20 20 20 20  Ignore ){.      
37a00 20 20 72 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b    rc = SQLITE_OK
37a10 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
37a20 20 20 20 20 20 20 20 70 2d 3e 65 72 72 6f 72 41         p->errorA
37a30 63 74 69 6f 6e 20 3d 20 28 28 70 4f 70 2d 3e 70  ction = ((pOp->p
37a40 35 3d 3d 4f 45 5f 52 65 70 6c 61 63 65 29 20 3f  5==OE_Replace) ?
37a50 20 4f 45 5f 41 62 6f 72 74 20 3a 20 70 4f 70 2d   OE_Abort : pOp-
37a60 3e 70 35 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  >p5);.      }.  
37a70 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 70    }else{.      p
37a80 2d 3e 6e 43 68 61 6e 67 65 2b 2b 3b 0a 20 20 20  ->nChange++;.   
37a90 20 7d 0a 20 20 20 20 69 66 28 20 72 63 20 29 20   }.    if( rc ) 
37aa0 67 6f 74 6f 20 61 62 6f 72 74 5f 64 75 65 5f 74  goto abort_due_t
37ab0 6f 5f 65 72 72 6f 72 3b 0a 20 20 7d 0a 20 20 62  o_error;.  }.  b
37ac0 72 65 61 6b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  reak;.}.#endif /
37ad0 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  * SQLITE_OMIT_VI
37ae0 52 54 55 41 4c 54 41 42 4c 45 20 2a 2f 0a 0a 23  RTUALTABLE */..#
37af0 69 66 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4f  ifndef  SQLITE_O
37b00 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
37b10 53 0a 2f 2a 20 4f 70 63 6f 64 65 3a 20 50 61 67  S./* Opcode: Pag
37b20 65 63 6f 75 6e 74 20 50 31 20 50 32 20 2a 20 2a  ecount P1 P2 * *
37b30 20 2a 0a 2a 2a 0a 2a 2a 20 57 72 69 74 65 20 74   *.**.** Write t
37b40 68 65 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65  he current numbe
37b50 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 64 61  r of pages in da
37b60 74 61 62 61 73 65 20 50 31 20 74 6f 20 6d 65 6d  tabase P1 to mem
37b70 6f 72 79 20 63 65 6c 6c 20 50 32 2e 0a 2a 2f 0a  ory cell P2..*/.
37b80 63 61 73 65 20 4f 50 5f 50 61 67 65 63 6f 75 6e  case OP_Pagecoun
37b90 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  t: {            
37ba0 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20 70 4f 75  /* out2 */.  pOu
37bb0 74 20 3d 20 6f 75 74 32 50 72 65 72 65 6c 65 61  t = out2Prerelea
37bc0 73 65 28 70 2c 20 70 4f 70 29 3b 0a 20 20 70 4f  se(p, pOp);.  pO
37bd0 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c 69 74 65  ut->u.i = sqlite
37be0 33 42 74 72 65 65 4c 61 73 74 50 61 67 65 28 64  3BtreeLastPage(d
37bf0 62 2d 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e  b->aDb[pOp->p1].
37c00 70 42 74 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d  pBt);.  break;.}
37c10 0a 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65  .#endif...#ifnde
37c20 66 20 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  f  SQLITE_OMIT_P
37c30 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 20  AGER_PRAGMAS./* 
37c40 4f 70 63 6f 64 65 3a 20 4d 61 78 50 67 63 6e 74  Opcode: MaxPgcnt
37c50 20 50 31 20 50 32 20 50 33 20 2a 20 2a 0a 2a 2a   P1 P2 P3 * *.**
37c60 0a 2a 2a 20 54 72 79 20 74 6f 20 73 65 74 20 74  .** Try to set t
37c70 68 65 20 6d 61 78 69 6d 75 6d 20 70 61 67 65 20  he maximum page 
37c80 63 6f 75 6e 74 20 66 6f 72 20 64 61 74 61 62 61  count for databa
37c90 73 65 20 50 31 20 74 6f 20 74 68 65 20 76 61 6c  se P1 to the val
37ca0 75 65 20 69 6e 20 50 33 2e 0a 2a 2a 20 44 6f 20  ue in P3..** Do 
37cb0 6e 6f 74 20 6c 65 74 20 74 68 65 20 6d 61 78 69  not let the maxi
37cc0 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 66  mum page count f
37cd0 61 6c 6c 20 62 65 6c 6f 77 20 74 68 65 20 63 75  all below the cu
37ce0 72 72 65 6e 74 20 70 61 67 65 20 63 6f 75 6e 74  rrent page count
37cf0 20 61 6e 64 0a 2a 2a 20 64 6f 20 6e 6f 74 20 63   and.** do not c
37d00 68 61 6e 67 65 20 74 68 65 20 6d 61 78 69 6d 75  hange the maximu
37d10 6d 20 70 61 67 65 20 63 6f 75 6e 74 20 76 61 6c  m page count val
37d20 75 65 20 69 66 20 50 33 3d 3d 30 2e 0a 2a 2a 0a  ue if P3==0..**.
37d30 2a 2a 20 53 74 6f 72 65 20 74 68 65 20 6d 61 78  ** Store the max
37d40 69 6d 75 6d 20 70 61 67 65 20 63 6f 75 6e 74 20  imum page count 
37d50 61 66 74 65 72 20 74 68 65 20 63 68 61 6e 67 65  after the change
37d60 20 69 6e 20 72 65 67 69 73 74 65 72 20 50 32 2e   in register P2.
37d70 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 4d 61 78 50  .*/.case OP_MaxP
37d80 67 63 6e 74 3a 20 7b 20 20 20 20 20 20 20 20 20  gcnt: {         
37d90 20 20 20 2f 2a 20 6f 75 74 32 20 2a 2f 0a 20 20     /* out2 */.  
37da0 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6e 65 77  unsigned int new
37db0 4d 61 78 3b 0a 20 20 42 74 72 65 65 20 2a 70 42  Max;.  Btree *pB
37dc0 74 3b 0a 0a 20 20 70 4f 75 74 20 3d 20 6f 75 74  t;..  pOut = out
37dd0 32 50 72 65 72 65 6c 65 61 73 65 28 70 2c 20 70  2Prerelease(p, p
37de0 4f 70 29 3b 0a 20 20 70 42 74 20 3d 20 64 62 2d  Op);.  pBt = db-
37df0 3e 61 44 62 5b 70 4f 70 2d 3e 70 31 5d 2e 70 42  >aDb[pOp->p1].pB
37e00 74 3b 0a 20 20 6e 65 77 4d 61 78 20 3d 20 30 3b  t;.  newMax = 0;
37e10 0a 20 20 69 66 28 20 70 4f 70 2d 3e 70 33 20 29  .  if( pOp->p3 )
37e20 7b 0a 20 20 20 20 6e 65 77 4d 61 78 20 3d 20 73  {.    newMax = s
37e30 71 6c 69 74 65 33 42 74 72 65 65 4c 61 73 74 50  qlite3BtreeLastP
37e40 61 67 65 28 70 42 74 29 3b 0a 20 20 20 20 69 66  age(pBt);.    if
37e50 28 20 6e 65 77 4d 61 78 20 3c 20 28 75 6e 73 69  ( newMax < (unsi
37e60 67 6e 65 64 29 70 4f 70 2d 3e 70 33 20 29 20 6e  gned)pOp->p3 ) n
37e70 65 77 4d 61 78 20 3d 20 28 75 6e 73 69 67 6e 65  ewMax = (unsigne
37e80 64 29 70 4f 70 2d 3e 70 33 3b 0a 20 20 7d 0a 20  d)pOp->p3;.  }. 
37e90 20 70 4f 75 74 2d 3e 75 2e 69 20 3d 20 73 71 6c   pOut->u.i = sql
37ea0 69 74 65 33 42 74 72 65 65 4d 61 78 50 61 67 65  ite3BtreeMaxPage
37eb0 43 6f 75 6e 74 28 70 42 74 2c 20 6e 65 77 4d 61  Count(pBt, newMa
37ec0 78 29 3b 0a 20 20 62 72 65 61 6b 3b 0a 7d 0a 23  x);.  break;.}.#
37ed0 65 6e 64 69 66 0a 0a 0a 2f 2a 20 4f 70 63 6f 64  endif.../* Opcod
37ee0 65 3a 20 49 6e 69 74 20 50 31 20 50 32 20 2a 20  e: Init P1 P2 * 
37ef0 50 34 20 2a 0a 2a 2a 20 53 79 6e 6f 70 73 69 73  P4 *.** Synopsis
37f00 3a 20 53 74 61 72 74 20 61 74 20 50 32 0a 2a 2a  : Start at P2.**
37f10 0a 2a 2a 20 50 72 6f 67 72 61 6d 73 20 63 6f 6e  .** Programs con
37f20 74 61 69 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e  tain a single in
37f30 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
37f40 70 63 6f 64 65 20 61 73 20 74 68 65 20 76 65 72  pcode as the ver
37f50 79 20 66 69 72 73 74 0a 2a 2a 20 6f 70 63 6f 64  y first.** opcod
37f60 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 72 61 63  e..**.** If trac
37f70 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 20 28  ing is enabled (
37f80 62 79 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74  by the sqlite3_t
37f90 72 61 63 65 28 29 29 20 69 6e 74 65 72 66 61 63  race()) interfac
37fa0 65 2c 20 74 68 65 6e 0a 2a 2a 20 74 68 65 20 55  e, then.** the U
37fb0 54 46 2d 38 20 73 74 72 69 6e 67 20 63 6f 6e 74  TF-8 string cont
37fc0 61 69 6e 65 64 20 69 6e 20 50 34 20 69 73 20 65  ained in P4 is e
37fd0 6d 69 74 74 65 64 20 6f 6e 20 74 68 65 20 74 72  mitted on the tr
37fe0 61 63 65 20 63 61 6c 6c 62 61 63 6b 2e 0a 2a 2a  ace callback..**
37ff0 20 4f 72 20 69 66 20 50 34 20 69 73 20 62 6c 61   Or if P4 is bla
38000 6e 6b 2c 20 75 73 65 20 74 68 65 20 73 74 72 69  nk, use the stri
38010 6e 67 20 72 65 74 75 72 6e 65 64 20 62 79 20 73  ng returned by s
38020 71 6c 69 74 65 33 5f 73 71 6c 28 29 2e 0a 2a 2a  qlite3_sql()..**
38030 0a 2a 2a 20 49 66 20 50 32 20 69 73 20 6e 6f 74  .** If P2 is not
38040 20 7a 65 72 6f 2c 20 6a 75 6d 70 20 74 6f 20 69   zero, jump to i
38050 6e 73 74 72 75 63 74 69 6f 6e 20 50 32 2e 0a 2a  nstruction P2..*
38060 2a 0a 2a 2a 20 49 6e 63 72 65 6d 65 6e 74 20 74  *.** Increment t
38070 68 65 20 76 61 6c 75 65 20 6f 66 20 50 31 20 73  he value of P1 s
38080 6f 20 74 68 61 74 20 4f 50 5f 4f 6e 63 65 20 6f  o that OP_Once o
38090 70 63 6f 64 65 73 20 77 69 6c 6c 20 6a 75 6d 70  pcodes will jump
380a0 20 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 74 69   the.** first ti
380b0 6d 65 20 74 68 65 79 20 61 72 65 20 65 76 61 6c  me they are eval
380c0 75 61 74 65 64 20 66 6f 72 20 74 68 69 73 20 72  uated for this r
380d0 75 6e 2e 0a 2a 2f 0a 63 61 73 65 20 4f 50 5f 49  un..*/.case OP_I
380e0 6e 69 74 3a 20 7b 20 20 20 20 20 20 20 20 20 20  nit: {          
380f0 2f 2a 20 6a 75 6d 70 20 2a 2f 0a 20 20 63 68 61  /* jump */.  cha
38100 72 20 2a 7a 54 72 61 63 65 3b 0a 20 20 69 6e 74  r *zTrace;.  int
38110 20 69 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65   i;..  /* If the
38120 20 50 34 20 61 72 67 75 6d 65 6e 74 20 69 73 20   P4 argument is 
38130 6e 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 69  not NULL, then i
38140 74 20 6d 75 73 74 20 62 65 20 61 6e 20 53 51 4c  t must be an SQL
38150 20 63 6f 6d 6d 65 6e 74 20 73 74 72 69 6e 67 2e   comment string.
38160 0a 20 20 2a 2a 20 54 68 65 20 22 2d 2d 22 20 73  .  ** The "--" s
38170 74 72 69 6e 67 20 69 73 20 62 72 6f 6b 65 6e 20  tring is broken 
38180 75 70 20 74 6f 20 70 72 65 76 65 6e 74 20 66 61  up to prevent fa
38190 6c 73 65 2d 70 6f 73 69 74 69 76 65 73 20 77 69  lse-positives wi
381a0 74 68 20 73 72 63 63 6b 31 2e 63 2e 0a 20 20 2a  th srcck1.c..  *
381b0 2a 0a 20 20 2a 2a 20 54 68 69 73 20 61 73 73 65  *.  ** This asse
381c0 72 74 28 29 20 70 72 6f 76 69 64 65 73 20 65 76  rt() provides ev
381d0 69 64 65 6e 63 65 20 66 6f 72 3a 0a 20 20 2a 2a  idence for:.  **
381e0 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
381f0 35 30 36 37 36 2d 30 39 38 36 30 20 54 68 65 20  50676-09860 The 
38200 63 61 6c 6c 62 61 63 6b 20 63 61 6e 20 63 6f 6d  callback can com
38210 70 75 74 65 20 74 68 65 20 73 61 6d 65 20 74 65  pute the same te
38220 78 74 20 74 68 61 74 0a 20 20 2a 2a 20 77 6f 75  xt that.  ** wou
38230 6c 64 20 68 61 76 65 20 62 65 65 6e 20 72 65 74  ld have been ret
38240 75 72 6e 65 64 20 62 79 20 74 68 65 20 6c 65 67  urned by the leg
38250 61 63 79 20 73 71 6c 69 74 65 33 5f 74 72 61 63  acy sqlite3_trac
38260 65 28 29 20 69 6e 74 65 72 66 61 63 65 20 62 79  e() interface by
38270 0a 20 20 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  .  ** using the 
38280 58 20 61 72 67 75 6d 65 6e 74 20 77 68 65 6e 20  X argument when 
38290 58 20 62 65 67 69 6e 73 20 77 69 74 68 20 22 2d  X begins with "-
382a0 2d 22 20 61 6e 64 20 69 6e 76 6f 6b 69 6e 67 0a  -" and invoking.
382b0 20 20 2a 2a 20 73 71 6c 69 74 65 33 5f 65 78 70    ** sqlite3_exp
382c0 61 6e 64 65 64 5f 73 71 6c 28 50 29 20 6f 74